Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://anggtwu.net/LUA/Verbatim3.lua.html -- http://anggtwu.net/LUA/Verbatim3.lua -- (find-angg "LUA/Verbatim3.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- (defun e () (interactive) (find-angg "LUA/Verbatim3.lua")) -- Supersedes: -- (find-angg "LUA/Verbatim2.lua") -- Todo: write a new version using this: -- (find-angg "LUA/Actions1.lua") -- Used by: -- (find-LATEXgrep "grep --color=auto -nH --null -e Verbatim3.lua *.tex") -- «.Verbatim» (to "Verbatim") -- «.Verbatim-tests» (to "Verbatim-tests") -- «.usepackages» (to "usepackages") -- «.dednat6» (to "dednat6") -- «.dednat6-tests» (to "dednat6-tests") require "Show2" -- (find-angg "LUA/Show2.lua") require "Co1" -- (find-angg "LUA/Co1.lua" "Co-tests") -- __ __ _ _ _ -- \ \ / /__ _ __| |__ __ _| |_(_)_ __ ___ -- \ \ / / _ \ '__| '_ \ / _` | __| | '_ ` _ \ -- \ V / __/ | | |_) | (_| | |_| | | | | | | -- \_/ \___|_| |_.__/ \__,_|\__|_|_| |_| |_| -- -- «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 = { copy = function (vb) return deepcopy(vb) end, -- -- (find-angg "LUA/Co1.lua" "poor-mans-code") -- vb:e(str) expands some (non-utf8) characters in str. co = Co.new("#$", " %&\\^_{}~"):add("\n", "\\\\\n"), e = function (vb, s) return vb.co:translate(s) end, -- -- Some functions that are not methods, used by map -- (find-LATEX "edrx21.sty" "defvbt" "vbtbgbox") 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 = " ", _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, _fmt = function (vb,fmt,...) vb.o = format(fmt,...) end, _def = function (vb,name) vb:_fmt("\\def\\%s{%s}", name, vb.o) end, _defvbt = function (vb,name) vb:_fmt("\\defvbt{%s}{%s}", name, vb.o) end, _sa = function (vb,name) vb:_fmt("\\sa{%s}{%s}", name, vb.o) end, -- act1 = function (vb, action, ...) local _action = "_"..action if not vb[_action] then error("Unrecognized action: "..action) end vb[_action](vb,...) return vb end, act = function (vb, str) for _,actionarg in ipairs(split(str)) do local action,arg = actionarg:match("^([^:]+):?(.*)$") vb:act1(action, arg) end return vb end, sa = function (vb, name) vb.o = format("\\sa{%s}{%s}", name, vb.o) return vb end, sa = function (vb, name) return vb:act1("sa", name) end, defvbt0 = function (vb, name) return vb:act1("defvbt", name) end, defvbt = function (vb, name) return vb:act("e h c p v bg"):defvbt0(name) end, }, } -- «Verbatim-tests» (to ".Verbatim-tests") -- See: (find-LATEX "edrx21.sty" "defvbt") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Verbatim3.lua" output = print = Verbatim.__index.co = 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"}):act("e h c p v bg defvbt:foo") = Verbatim.from({"a", "bb", "ccc"}):act("e h c p v bg"):defvbt0("foo") = Verbatim.from({"a", "bb", "ccc"}):act("e h c p v bg"):defvbt0("foo bar") = Verbatim.from({"a", "bb", "ccc"}):defvbt("foo bar") Verbatim.from({"a", "bb", "ccc"}):defvbt("foo bar"):act("o") --]==] -- _ -- _ _ ___ ___ _ __ __ _ ___| | ____ _ __ _ ___ ___ -- | | | / __|/ _ \ '_ \ / _` |/ __| |/ / _` |/ _` |/ _ \/ __| -- | |_| \__ \ __/ |_) | (_| | (__| < (_| | (_| | __/\__ \ -- \__,_|___/\___| .__/ \__,_|\___|_|\_\__,_|\__, |\___||___/ -- |_| |___/ -- -- «usepackages» (to ".usepackages") -- Note that only :show() uses these settings. -- See: (find-angg "LUA/Show2.lua" "dednat6") -- (find-angg "LUA/Show2.lua" "dednat6" "dednat6_Verbatim3") usepackages.edrx21 = true dednat6["0"] = true dednat6.Verbatim3 = true --[==[ * (show2-use "$SHOW2LATEXDIR/") * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Verbatim3.lua" vb = Verbatim.from({"a", "bb", "ccc", "dddd"}) = vb = vb:copy():act("e h c p v bg") = vb:copy():act("e h c p v bg").o = vb:copy():act("e h c p v bg").o:show00() = vb:copy():act("e h c p v bg").o:show0 () = vb:copy():act("e h c p v bg").o:show () * (etv) defs.greekcolors = [=[ \defα{\color{black}} \defβ{\color{red}} \defγ{\color{orange}} ]=] vb = Verbatim.from({"a", "bβb", "cβcγc", "dβdγdαd"}) = vb:copy():act("e h c p v bg") = vb:copy():act("e h c p v bg").o = vb:copy():act("e h c p v bg").o:show00() = vb:copy():act("e h c p v bg").o:show0 () = vb:copy():act("e h c p v bg").o:show () * (etv) --]==] -- ____ _ _ __ -- | _ \ ___ __| |_ __ __ _| |_ / /_ -- | | | |/ _ \/ _` | '_ \ / _` | __| '_ \ -- | |_| | __/ (_| | | | | (_| | |_| (_) | -- |____/ \___|\__,_|_| |_|\__,_|\__|\___/ -- -- «dednat6» (to ".dednat6") -- See: (find-LATEX "edrx21.sty" "defvbt") -- The typical use in dednat6 is like this: -- -- 1. a %V-block sets the global variable vbt_lines, -- 2. a line like `%L defvbt "foo boxed"' outputs a \defvbt{name}{...}, -- 3. a `\vbt{name}' accesses the vbt with that name. -- -- For tests: defs_Verbatim3_fooboxed0 = [=[ %V _____ %V | | %V | foo | %V |_____| ]=] defs_Verbatim3_fooboxed1 = [=[ %L defvbt "foo boxed" \pu ]=] -- See: (find-dn6 "heads6.lua" "lua-head") -- (find-dn6 "block.lua" "Block" "getblock =") -- registerhead = registerhead or function () return nop end registerhead "%V" { name = "vbt", action = function () local i,j,origlines = tf:getblock(3) vbt_lines = origlines end, } defvbt = function (name) Verbatim.from(vbt_lines):defvbt(name):act("o") end -- «dednat6-tests» (to ".dednat6-tests") --[==[ * (show2-use "$SHOW2LATEXDIR/") * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Verbatim3.lua" defs.Verbatim3_fooboxed0 = true defs.Verbatim3_fooboxed1 = true = outertexbody = ([[ a:\vbt{foo boxed}:b ]]):show0() = ([[ a:\vbt{foo boxed}:b ]]):show () * (etv) --]==] -- Local Variables: -- coding: utf-8-unix -- End: