|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- eevintros.lua - htmlize things like (find-eev-quick-intro)
-- This is part of blogme3.
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
-- Version: 2021jan13
-- License: GPL.
-- (defun e () (interactive) (find-fline "~/blogme3/eevintros.lua"))
-- «.add-new-intro» (to "add-new-intro")
-- «.listofintros» (to "listofintros")
-- «.whats» (to "whats")
-- «.htmlizeeevintro» (to "htmlizeeevintro")
-- «listofintros» (to ".listofintros")
-- «add-new-intro» (to ".add-new-intro")
--
-- This is a list of places that need to be
-- changed when a new intro is added:
--
-- (find-blogme3 "anggmake.lua" "eev_intros")
-- (find-blogme3 "angglisp.lua" "find_xxx_intros")
-- (find-blogme3 "sexp.lua" "find-xxx-intros" "ee_intro_stems =")
-- (find-blogme3 "sandwiches-defs.lua" "code_intros")
-- (find-fline "~/eev-intros/README")
-- (find-fline "~/eev-intros/README" "list of intros")
-- (find-fline "~/eev-intros/README" "list of intros" "end of the progn")
-- (find-eev "eev-intro.el" "find-eev-intro")
-- (find-eev-intro)
--
-- Then run this:
-- (find-eev2-links)
-- (find-anggfile "eev-intros/README" ";; end of the progn\n")
-- makeL
-- makeL-anew
-- (find-fline "~/TH/L/eev-intros/")
-- (find-fline "~/TH/L/eev-intros/" "find-eev-intro.html")
-- (brg "~/TH/L/eev-intros/find-eev-intro.html")
--
listofintros = function ()
-- (find-fline "~/eev-intros/README")
local list = {}
local lines = splitlines(ee_readfile("~/eev-intros/README"))
for _,li in ipairs(lines) do
local intro = li:match("^ %((find-.*-intro)%)$")
if intro then table.insert(list, intro) end
end
return list
end
readintro0 = function (name)
return ee_readfile("~/eev-intros/"..name)
end
readintro = function (name)
return splitlines(readintro0(name))
end
-- «whats» (to ".whats")
-- We start with an array "lines" containing the lines of the intro
-- file and we create an array "whats" from it. If the array "lines"
-- has a title in its lines 42 and 43 like this,
--
-- [42]="1.2. About Foo"
-- [43]="=============="
--
-- then "whats" will have this:
--
-- [42]="title ="
-- [43]="bar"
--
-- and we will have:
--
-- introlinetohtml("title =", "1.2. About Foo") =
-- H1(NAME("1.2", "1.2")..htmlizeline(". About Foo"))
-- introlinetohtml("bar", "==============") =
-- nil
--
introlinewhat = function (lines, i)
local what
local tit = lines[i]
local bar = lines[i+1]
if bar:match"^%-%-+$" then what = "title -" end
if bar:match"^==+$" then what = "title =" end
if not what then return end
if #tit ~= #bar then print("Warning: on line "..i..","); print(tit); print(bar) end
return i, what, tit, bar
end
introlinestowhats = function (lines)
local whats = {}
for i=1,#lines-1 do
local j,what,tit,bar = introlinewhat(lines, i)
if what then whats[i] = what; whats[i+1] = "bar" end
end
return whats
end
introlinetohtml = function (what, li)
if what == nil then return htmlizeline(li).."\n" end
if what == "bar" then return "" end
--
local H = (what == "title =") and H1 or H2
local n,rest = li:match"^(%d[%.%d]*)(%. .*)$"
if n
then return H(NAME(n, n)..htmlizeline(rest))
else return H(htmlizeline(li))
end
end
introlinestohtml = function (lines)
local whats = introlinestowhats(lines)
local out = {}
for i=1,#lines do
table.insert(out, introlinetohtml(whats[i], lines[i]))
end
return table.concat(out, "")
end
introtohtml = function (bigstr)
return introlinestohtml(splitlines(bigstr))
end
-- «htmlizeeevintro» (to ".htmlizeeevintro")
-- (find-blogme3 "options.lua" "htmlization_head")
mdef [=[ eevintro_head 1 introname
<head>
<title>([$ introname])
</title>
</head>
]=]
-- (find-blogme3 "options.lua" "basic-options")
-- (find-blogme3 "options.lua" "basic-options" "dooption_a2html =")
-- (find-blogme3 "options.lua" "htmlizefile")
-- (find-blogme3 "blogme3.lua" "pathto")
-- (find-angg "LUA/lua50init.lua" "u8c_to_l1")
htmlizeeevintro = function (fname, outfname)
local introcontents = ee_readfile(fname)
local introname = fnamenondirectory(fname)
local head = eevintro_head(introname)
local body = BODY(PRE(introtohtml(u8_to_l1(introcontents))))
writefile(outfname, sgmlify(HTML(head .. body)))
end
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "eevintros.lua"
-- PPV(listofintros())
listoi = sorted(listofintros())
PPV(listoi)
for _,name in ipairs(listoi) do
print(name..": ")
local lines = readintro(name)
local whats = introlinestowhats(lines)
PPV(whats)
end
loadblogme3()
= introlinetohtml("title =", "1.2. Foo")
= introlinetohtml("title -", "1.2. Foo")
= introlinetohtml("bar", "1.2. Foo")
= introlinetohtml(nil, "1.2. Foo")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
loadblogme3()
dofile "eevintros.lua"
htmlizeeevintro("~/eev-intros/find-eev-quick-intro", "/tmp/o.html")
-- file:///tmp/o.html
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd
rm -v /tmp/o.html
# lua51 blogme3/blogme3.lua -o e/lua5.e.html -a2html e/lua5.e
lua51 blogme3/blogme3.lua -o /tmp/o.html -ei2html ~/eev-intros/find-eev-quick-intro
lua51 blogme3/blogme3.lua -o /tmp/o.html -ei2html eev-intros/find-eev-quick-intro
-- file:///tmp/o.html
--]]