Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
-- This file:
--   http://angg.twu.net/LATEX/2021verbatim.lua.html
--   http://angg.twu.net/LATEX/2021verbatim.lua
--           (find-angg "LATEX/2021verbatim.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- (defun e () (interactive) (find-LATEX "2021verbatim.tex"))
-- (defun l () (interactive) (find-LATEX "2021verbatim.lua"))
-- (defun o () (interactive) (find-dednat6 "myverbatim.lua"))

-- «.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,
    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 "2021verbatim.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"}):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: