Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://anggtwu.net/LUA/Co1.lua.html -- http://anggtwu.net/LUA/Co1.lua -- (find-angg "LUA/Co1.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- This class implements a Lua version of the "poor man's code" macro -- that I wrote for my article on Dednat6. For more on it, see: -- -- (find-es "tex" "co") -- (find-es "tex" "poor-mans-code") -- -- Here's an (artificial) example of how to use this class: -- -- Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio -- > dofile "Co1.lua" -- > co = Co.new("bc", "de") -- > = co -- { "b"="\\b", -- "c"="\\c", -- "d"="\\char100 ", -- "e"="\\char101 " -- } -- > = co:translate("abcdef") -- a\b\c\char100 \char101 f -- > -- -- The `Co.new("bc","de")' constructs a Co object that treats `b' and -- `c' as characters that have to be backslashed, and `d' and `e' as -- characters that have to be translated to \char<nnn>; the `= co' -- prints its translation table, and the `= co:translate("abcdef")' -- returns the string "abcdef" after the translations. -- -- For more realistic examples, see: -- (find-angggrep "grep --color=auto -nH --null -e Co.new LUA/*.lua") -- -- «.Co» (to "Co") -- «.Co-tests» (to "Co-tests") -- ____ -- / ___|___ -- | | / _ \ -- | |__| (_) | -- \____\___/ -- -- «Co» (to ".Co") -- Support for \co, i.e., poor man's \code -- See: (find-angg "LUA/Verbatim1.lua" "Verbatim") -- (find-es "tex" "co") Co = Class { type = "Co", new = function (bsls, chars) return Co {T=VTable{}}:addbsls(bsls or ""):addchars(chars or "") end, __tostring = function (co) return tostring(co.T) end, __index = { pat = ".", translate = function (co, str) return (str:gsub(co.pat, co.T)) end, add = function (co, c, transl) co.T[c] = transl; return co end, addbsls = function (co, bsls) for c in bsls:gmatch"." do co:add(c, "\\"..c) end return co end, addchars = function (co, bsls) for c in bsls:gmatch"." do co:add(c, "\\char"..string.byte(c).." ") end return co end, -- translator = function (co) return function (str) return co:translate(str) end end, -- translateshow = function (co, str) return ("\\texttt{"..co:translate(str).."}"):show() end, }, } -- «Co-tests» (to ".Co-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Co1.lua" co = Co.new("bc", "de") = co = co:translate("abcdef") cot = co:translator() = cot("abcdef<foo>") co:add("<", "〈"):add(">", "〉") = cot("abcdef<foo>") * (show2-use "/tmp/") * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Co1.lua" require "Show2" co = Co.new("#$", " %&<>[\\]^_{}~"):add("\n", "\\\\\n") = co:translate [[Foo#$ %&<>[\]^_{}~]] = co:translateshow [[Foo#$ %&<>[\]^_{}~]] * (etv) = Show.bigstr --]==] -- TODO: -- Support for utf-8 - change pat -- Support for ttchars: (find-dn4ex "edrx08.sty" "ttchars") -- Local Variables: -- coding: utf-8-unix -- End: