Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
-- This file:
--   http://anggtwu.net/LUA/TocLines1.lua.html
--   http://anggtwu.net/LUA/TocLines1.lua
--          (find-angg "LUA/TocLines1.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- (defun e () (interactive) (find-angg "LUA/TocLines1.lua"))
-- This is a replacement for: (find-angg "LUA/Comissao1.lua")
-- (find-LATEX "2022-2-C2-C3-ajuda.tex" "Docs-class")

-- Used by:
-- (find-LATEX "2022-2-C2-C3-ajuda.tex" "defs-toclines")

-- (find-Deps1-links "TocLines1")
-- (find-Deps1-cps   "TocLines1")
-- (find-Deps1-anggs "TocLines1")

-- «.TocLines»		(to "TocLines")
-- «.TocLines-tests»	(to "TocLines-tests")
-- «.texdefs»		(to "texdefs")



--  _____          _     _                 
-- |_   _|__   ___| |   (_)_ __   ___  ___ 
--   | |/ _ \ / __| |   | | '_ \ / _ \/ __|
--   | | (_) | (__| |___| | | | |  __/\__ \
--   |_|\___/ \___|_____|_|_| |_|\___||___/
--                                         
-- «TocLines»  (to ".TocLines")

TocLines = Class {
  type = "TocLines",
  new = function (fname)
      return TocLines {n=0, entries=VTable{}, fname=fname}
    end,
  readmytoc = function (fname)
      return TocLines.new(fname):readmytoc():hashnames()
    end,
  __tostring = function (tl) return "n="..tl.n.."\n"..tostring(tl.entries) end,
  __index = {
    incrn = function (tl) tl.n = tl.n + 1; return tl.n end,
    addentry = function (tl, o) table.insert(tl. entries, o); return tl end,
    addnamepageentry = function (tl, name, page)
        return tl:addentry({n=tl:incrn(), name=name, page=page})
      end,
    --
    sethead = function (tl)
        local e = tl.entries[#tl.entries]
        return format("\\fancyhead[C]{%s %s}", e.n, e.name)
      end,
    --
    tabletotex = function (tl, T)
        return format("\\mytocline{%s}{%s}{%s}", T.n, T.name, T.page)
      end,
    totex = function (tl)
        local f = function (o)
            return type(o) == "string" and o or tl:tabletotex(o)
          end
        return mapconcat(f, tl.entries, "\n")
      end,
    --
    readmytoclines = function (tl, fname)
        local bigstr = ee_readfile(fname)
        local pat = "\n\\mytocline{(.-)}{(.-)}{(.-)}"
        for n,name,page in bigstr:gmatch(pat) do
          local entry = {n=n, name=name, page=page}
          tl:addentry(entry)
        end
        return tl
      end,
    --
    hashnames = function (tl)
        for _,o in ipairs(tl.entries) do
          if type(o) == "table" then tl.entries[o.name] = o end
        end
        return tl
      end,
    nametopage = function (tl, name) return tl.entries[name].page end,
    --
    addyear = function (tl, yyyy) return tl:addentry("\n"..yyyy..":") end,
    adddoc  = function (tl, name, page) return tl:addnamepageentry(name, page) end,
    incl    = function (tl, name, page) return tl:addnamepageentry(name, page) end,
    --
    fnamestem  = function (tl)
        return (tl.fname:gsub("%.tex$", ""):gsub("%.mytoc$", ""))
      end,
    tocfname   = function (tl) return tl:fnamestem()..".mytoc" end,
    readmytoc  = function (tl) return tl:readmytoclines(tl:tocfname()) end,
    writemytoc = function (tl)
        ee_writefile(tl:tocfname(), "\n"..tl:totex().."\n")
        print("Writing: "..tl:tocfname())
        return tl
      end,
    writetoc   = function (tl) return tl:writemytoc() end,
    --
    sortednames = function (tl)
        local names = VTable {}
        for i,entry in ipairs(tl.entries) do table.insert(names, entry.name) end
        table.sort(names)
        return names
      end,
    revnamesandpages = function (tl)
        local names = tl:sortednames()
        local f = function (i)
            return format("  %-30s -> %s", names[i], tl.entries[names[i]].page)
          end
        return mapconcat(f, seq(#names,1,-1), "\n")
      end,
  },
}

-- «TocLines-tests»  (to ".TocLines-tests")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "TocLines1.lua"

tl = TocLines.new()
tl = TocLines.new("/tmp/foo.tex")
= tl
= tl:addentry "foo"
= tl:addentry "bar"
= tl:addnamepageentry("blep", 20)
= tl:addnamepageentry("flop", 42)
= tl:sethead()
= tl:addentry "plic"
= tl:addentry "\nYear of the ploc"
= tl:totex()
= tl:hashnames()
= tl:nametopage("flop")
= tl.fname
= tl:tocfname()
* (find-sh0 "rm -fv /tmp/foo.mytoc")
= tl:writetoc()
* (find-sh0 "cat    /tmp/foo.mytoc")

* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "TocLines1.lua"
fname = "~/LATEX/2022-2-C2-C3-ajuda.tex"
tl = TocLines.new()
tl = TocLines.readmytoc(fname)
= tl:readmytoclines(tl.fname)
= tl:totex()
= tl:hashnames()
  tl:writetoc()
= tl

-- (find-sh0 "rm -fv ~/LATEX/2022-2-C2-C3-ajuda.mytoc")
-- (find-fline      "~/LATEX/2022-2-C2-C3-ajuda.mytoc")
-- (find-LATEXsh "ls *mytoc")
-- (find-LATEXsh "ls *tudo*mytoc")

* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "TocLines1.lua"
fname = "~/LATEX/2022-2-C2-tudo.mytoc"
tl = TocLines.readmytoc(fname)
= tl

* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "TocLines1.lua"
fname = "~/LATEX/2022-2-C2-C3-ajuda.tex"
tl = TocLines.readmytoc(fname)
= tl:sortednames()
= tl:revnamesandpages()

--]]


-- «texdefs»  (to ".texdefs")
TocLines.texdefs = [[
  \def\addyear#1{\directlua{toclines:addyear(#1)}}
  \def\adddoc #1{\directlua{
    toclines:adddoc("#1", \thepage)
    output(toclines:sethead())
  }}
  \def\luaincl  #1{\directlua{toclines:incl("#1", \thepage)}}
  \def\basicincl#1{\includepdf[pages=-]{#1.pdf}}
  \def\incl     #1{\luaincl{#1}\basicincl{#1}}
  \def\writetoc{\directlua{
    print()
    toclines:writetoc()
  }}
]]




--[[

%L require "TocLines1"
%L toclines = TocLines.new(status.filename)

\def\addyear#1{\directlua{toclines:addyear(#1)}}
\def\adddoc #1{\directlua{
  toclines:adddoc("#1", \thepage)
  output(toclines:sethead())
}}
\def\writetoclines{\directlua{
  print()
  print(toclines:awritetoc(#1))
}

--]]





Comissao = Class {
  type = "Comissao",
  readtex = function ()
    --local bigstr = ee_readfile "~/LATEX/2022-2-C2-C3-ajuda.tex"
      local bigstr = ee_readfile "2022-2-C2-C3-ajuda.tex"
      local pat = "\n\\mytocline{(.-) (.-)}{(.-)}"
      local entries = VTable {}
      local secpage = VTable {}
      for n,sec,page in bigstr:gmatch(pat) do
        local entry = {n=n, page=page, sec=sec}
        table.insert(entries, entry)
        entries[sec] = entry
      end
      return entries
    end,
  initialize = function ()
      Comissao.entries = Comissao.readtex()
    end,
  pat = nil,    -- defined after the class
  parse = function (str)
      local o = Comissao.pat:match(str)
      if not o then return end
      local entry = Comissao.entries[o.secname]
      if not entry then return end
      o.initpage = entry.page
      o.realpage = o.subpage and (o.initpage + o.subpage - 1) or o.initpage
      o.sexp  = format("(ajup %d)", o.realpage)
      o.sexpt = format("(ajut %d)", o.realpage)
      return o
    end,
  pagesexp = function (head, str)
      local o = Comissao.parse(str)
      local p = o and o.realpage
      return o and format("(%s %s)", head, p)
    end,
  texsection = function (str)
      local o = str and Comissao.parse(str)
      local s = (o and o.secname) or "toc"
      return format('(ajua "%s")', s)
    end,
  sexp  = function (str) return Comissao.pagesexp("-sexp", str) end,
  sexpt = function (str) return Comissao.pagesexp("-sexpt", str) end,
  sexpt = function (str)
      local o = Comissao.parse(str)
      return o and o.sexpt
    end,
  __index = {
  },
}




-- Local Variables:
-- coding:  utf-8-unix
-- End: