Warning: this is an htmlized version! The original is across this link, and the conversion rules are here.
```-- (find-es "texinfo" "texinfo.lua")
-- «.basic-functions»	(to "basic-functions")
-- «.output»		(to "output")
-- «.prefix»		(to "prefix")
-- «.suffix»		(to "suffix")
-- «.PUSH»		(to "PUSH")
-- «.COMMANDS»		(to "COMMANDS")
-- «.preproc»		(to "preproc")

-- «basic-functions»  (to ".basic-functions")
depthcommand = {"@top", "@chapter", "@section", "@subsection", "@subsubsection"}
unnumbered = {}
COMMAND = function (i)
if unnumbered[long[i]] or unnumbered[short[i]] then return "@unnumbered" end
return depthcommand[depth[i]]
end

NEXT = function (i)
if i == 1 then return short[2] or " " end
-- if depth[i+1] and (depth[i+1] == depth[i]) then return short[i+1] end
for j=i+1,#depth do
if depth[j] == depth[i] then return short[j] end
if depth[j] < depth[i] then return " " end
end
return " "
end
PREVIOUS = function (i)
for j=i-1,1,-1 do
if depth[j] <= depth[i] then return short[j] end
end
return "(dir)"
end
UP = function (i)
for j=i-1,1,-1 do
if depth[j] == depth[i] - 1 then return short[j] end
end
return "(dir)"
end

local arr = {}
for j=i+1,#depth do
if depth[j] == depth[i] + 1 then tinsert(arr, j) end
if depth[j] <= depth[i] then return arr end
end
return arr
end
return format("%-31s %s\n", "* "..short[j].."::", long[j])
end
if #entries > 0 then
else
return ""
end
end

-- This function returns the structure of the "detailed
-- menu" that goes into the top node.
-- This is tricky, and involves some ugly recursion...
-- Actually it's little more than bredth-first search, but, duh.
-- An example: if
--   depth = {1, 2, 3, 3, 2, 3, 4, 4, 3, 3, 2}
--        --  1  2  3  4  5  6  7  8  9 10 11
-- then the result of DETMENUENTRIES will be:
--   {{1}, {2, 5, 11}, {3, 4}, {6, 9, 10}, {7, 8}}
-- note that the "descendants" of depth[5] are depth[6,7,8,9,10],
-- and that the only "brother" of depth[6] is depth[9].
-- The comments "move down", "move left" etc in the code refer
-- to moving in this 2D representation of depth[]:
--    1:  1
--    2:    2
--    3:      3
--    4:      3
--    5:    2
--    ...
--
local bfs = {{1}}
if not depth[i+1] then return end          -- end
if depth[i+1] == depth[i] then return end  -- move down
if depth[i+1] <  depth[i] then return end  -- move left
local arr = {i+1}
tinsert(bfs, arr)
end
nextbrother = function (i)
for j=i+1,#depth do
if depth[j] <  depth[i] then return nil end -- move left
if depth[j] == depth[i] then return j end   -- move down
end
end
local j = nextbrother(i)
if j then tinsert(arr, j); addbrothers(j, arr) end
end
return bfs
end
end

tremove(blocks, 1)
local chapters = tremove(blocks, 1)
"\n@detailmenu\n --- The Detailed Node Listing ---\n\n" ..
end

-- «output»  (to ".output")
nodebody = {}
nodebody_ = function (i)
local b = nodebody[i]
if b then return "\n"..b.."\n" else return "" end
end
nodestr_ = function (i)
return format("@node %s, %s, %s, %s\n" ..
"@comment  node-name,  next,  previous,  up\n" ..
"%s %s\n",
short[i], NEXT(i), PREVIOUS(i), UP(i),
COMMAND(i), long[i])
end
nodestr = function (i) return nodestr_(i) .. nodebody_(i) .. MENU(i) end
allnodestrs = function ()
return table.concat(map(nodestr, seq(1, #depth)), "\n")
end
all = function () return prefix .. allnodestrs() .. "\n" end
all = function () return prefix .. allnodestrs() .. "\n" .. SUFFIX() end
pa = function () print(all()) end
sa = function () writefile("/tmp/tmp.texi", all()) end

-- «prefix»  (to ".prefix")
prefix = [=[
\input texinfo
@setfilename tmp.info
@settitle Test

@c (find-texinode "makeinfo options")
@c (find-sh "makeinfo tmp.texi")
@c (find-fline "/tmp/tmp.info")
@c (find-node "(/tmp/tmp.info)Top")
@c (find-sh "texi2dvi tmp.texi")
@c (find-dvipage "/tmp/tmp.dvi")

@c (find-angg "LUA/texinfo.lua" "prefix")
@c (find-es "texinfo" "texinfo.lua")
@c (find-es "texinfo" "sample.info")
@c (eek "C-c C-u C-a")
@c (eek "C-c C-u C-e")

]=]

-- «suffix»  (to ".suffix")
SUFFIX = function () return [=[
@printindex cp
@contents

@c Local Variables:
@c coding: raw-text-unix
@c End:

@bye
]=]
end

-- «PUSH»  (to ".PUSH")
PUSH = function (dpth, shrt, lng, bdy)
local n = #depth + 1
depth[n] = dpth
short[n] = shrt
long[n]  = lng or shrt
nodebody[n] = bdy
end

-- «COMMANDS»  (to ".COMMANDS")
-- Basic uppercase commands.
TOP        = function (shrt, lng, bdy) PUSH(1, "Top", "Top", bdy) end
CHAPTER    = function (shrt, lng, bdy) PUSH(2, shrt, lng, bdy) end
SECTION    = function (shrt, lng, bdy) PUSH(3, shrt, lng, bdy) end
SUBSECTION = function (shrt, lng, bdy) PUSH(4, shrt, lng, bdy) end
INDEX      = function (shrt, lng, bdy)
PUSH(2, shrt, lng, bdy)
unnumbered[shrt] = true
end

-- «preproc»  (to ".preproc")
-- (find-blogme3 "anggdefs.lua" "basic-special-words" "lua:")
ee_dofile "~/LUA/preproc.lua"  -- (find-angg "LUA/preproc.lua")
eval    = function (code) return assert(loadstring(code))() end
bitrim  = function (str)  return string.match(str, "^%s*(.*%S)%s*\$") or "" end
sbitrim = function (str)  return string.match(str, "^[ \t]*\n?(.*%S)%s*\$") or "" end
LUA_1   = function (code) return eval(code) end
pb      = function (body) return preproc(bitrim(body)) end
psb     = function (body) return preproc(sbitrim(body)) end

TOP_1  = function (body) TOP("Top", "Top", pb(body)) end
CHAPTER_3  = function (short, long, body)
CHAPTER(pb(short), pb(long), pb(body))
end
SECTION_3  = function (short, long, body)
SECTION(pb(short), pb(long), pb(body))
end
SUBSECTION_3  = function (short, long, body)
SUBSECTION(pb(short), pb(long), pb(body))
end
INDEX_3  = function (short, long, body)
INDEX(pb(short), pb(long), pb(body))
end
cmddef("LUA",        Curly1, eval)
cmddef("TOP",        Curly1, TOP_1)
cmddef("CHAPTER",    Curly3, CHAPTER_3)
cmddef("SECTION",    Curly3, SECTION_3)
cmddef("SUBSECTION", Curly3, SUBSECTION_3)
cmddef("INDEX",      Curly3, INDEX_3)

function preproctexi (texifile, body)
long  = {}
short = {}
depth = {}
unnumbered = {}
preproc(body)
writefile(texifile, all())
end

-- For basic tests:
-- long = {"Top", "Chapter 1", "Section 1.1", "Section 1.2",
--                "Chapter 2", "Section 2.1", "Section 2.2",
--                "Chapter 3", "Section 3.1", "Section 3.2",
--                "Concept Index"}
-- short = {"top", "chap 1", "sec 1.1", "sec 1.2",
--                 "chap 2", "sec 2.1", "sec 2.2",
--                 "chap 3", "sec 3.1", "sec 3.2",
--                 "concept index"}
-- depth = {1, 2, 3, 3,
--             2, 3, 3,
--             2, 3, 3,
--             2}
-- unnumbered["Concept Index"] = true

-- Local Variables:
-- coding: raw-text-unix
-- modes: (fundamental-mode blogme-mode)
-- End:
```