Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://angg.twu.net/LUA/Verbatim1.lua.html -- http://angg.twu.net/LUA/Verbatim1.lua -- (find-angg "LUA/Verbatim1.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- (defun e () (interactive) (find-angg "LUA/Verbatim1.lua")) -- -- Supersedes: (find-LATEX "2021verbatim.lua") -- (find-dednat6 "myverbatim.lua") -- Used by: (find-LATEXgrep "grep --color=auto -nH --null -e '^%V ' *.tex") -- (c2m212isp 5 "set-compr-traducao") -- (c2m212isa "set-compr-traducao") -- See: (find-LATEX "edrx21.sty" "defvbt") -- «.Verbatim» (to "Verbatim") -- «.Verbatim-tests» (to "Verbatim-tests") -- «.vbt-head» (to "vbt-head") -- «.defvbt» (to "defvbt") -- «Verbatim» (to ".Verbatim") Verbatim = Class { type = "Verbatim", from = function (o) return Verbatim {o = o} end, __tostring = function (vb) if type(vb.o) == "string" then return vb.o end return mytostringv(vb.o) end, __index = { -- -- g is a shorthand for global. -- vb:e(str) expands some (non-utf8) characters in str. e_pat = "[\n #$%%&\\^_{}~]", e_dict = VTable {["\n"]="\\\\\n"}, index = function (vb, g) return (g and Verbatim.__index) or vb end, edict = function (vb, g) return vb:index(g).e_dict end, e_add_b = function (vb, c, g) vb:edict(g)[c] = "\\"..c end, e_add_c = function (vb, c, g) vb:edict(g)[c] = "\\char"..string.byte(c).." " end, e_add_bs = function (vb, cs, g) for c in cs:gmatch(".") do vb:e_add_b(c, g) end end, e_add_cs = function (vb, cs, g) for c in cs:gmatch(".") do vb:e_add_c(c, g) end end, e = function (vb, str) return (string.gsub(str, vb.e_pat, vb.e_dict)) end, -- -- Some functions that are not methods f = { e = function (s) return Verbatim({}):e(s) end, v = function (s) return format("\\vbox{%%\n%s%%\n}", s) end, h1 = function (s) return format("\\vbthbox{%s}", s) end, bg = function (s) return format("\\vbtbgbox{%s}", s) end, }, -- prefix = " ", actions = { h = function (vb) vb.o = map(vb.f.h1, vb.o) end, c = function (vb) vb.o = table.concat(vb.o, "%\n"..vb.prefix) end, p = function (vb) vb.o = vb.prefix..vb.o end, e = function (vb) vb.o = map(vb.f.e, vb.o) end, v = function (vb) vb.o = vb.f.v (vb.o) end, bg = function (vb) vb.o = vb.f.bg(vb.o) end, o = function (vb) output(vb.o) end, P = function (vb) print(vb) end, def = function (vb, name) vb.o = format("\\def\\%s{%s}", name, vb.o) end, defvbt = function (vb, name) vb.o = format("\\defvbt{%s}{%s}", name, vb.o) end, }, act = function (vb, str) for _,actionarg in ipairs(split(str)) do local action,arg = actionarg:match("^([^:]+):?(.*)$") if not vb.actions[action] then error("Unrecognized action: "..action) end vb.actions[action](vb, arg) end return vb end, sa = function (vb, name) vb.o = format("\\sa{%s}{%s}", name, vb.o) return vb end, defvbt = function (vb, name) return vb:act("e h c p v bg defvbt:"..name) end, }, } Verbatim({}):e_add_cs(" \\%&^_{}~", "global") Verbatim({}):e_add_bs("#$", "global") -- «Verbatim-tests» (to ".Verbatim-tests") -- See: (find-LATEX "edrx21.sty" "defvbt") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Verbatim1.lua" output = print Verbatim.__index.e_dict = VTable {["\n"]="\\\\\n"} = Verbatim.__index.e_dict Verbatim({}):e_add_cs(" \\%&^_{}~", "global") Verbatim({}):e_add_bs("#$", "global") = Verbatim.__index.e_dict = Verbatim({}):e "Hello #$\n%&\\^_{}~!!!\n Hey hey" Verbatim.from({"a", "bb", "ccc"}):act("P") Verbatim.from({"a", "bb", "ccc"}):act("c P") Verbatim.from({"a", "bb", "ccc"}):act("e h c P") Verbatim.from({"a", "bb", "ccc"}):act("e h c p P") Verbatim.from({"a", "bb", "ccc"}):act("e h c v P") Verbatim.from({"a", "bb", "ccc"}):act("e h c p v P") Verbatim.from({"a", "bb", "ccc"}):act("e h c p v bg P") Verbatim.from({"a", "bb", "ccc"}):act("e h c p v bg def:foo P") Verbatim.from({"a", "bb", "ccc"}):act("e h c p v bg defvbt:foo P") = Verbatim.from({"a", "bb", "ccc"}):act("e h c p v bg") = Verbatim.from({"a", "bb", "ccc"}):act("e h c p v bg"):sa("[a b c] box") Verbatim.from({"a", "bb", "ccc"}):defvbt("foo"):act("o") --]==] -- «vbt-head» (to ".vbt-head") -- (find-LATEX "2021fitch.lua" "fitch-head") registerhead = registerhead or function () return nop end registerhead "%V" { name = "vbt", action = function () local i,j,origlines = tf:getblock() vbt_lines = origlines end, } -- «defvbt» (to ".defvbt") defvbt = function (name) Verbatim.from(vbt_lines):defvbt(name):act("o") end -- Local Variables: -- coding: utf-8-unix -- End: