|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file:
-- http://angg.twu.net/LATEX/istanbulall.lua
-- http://angg.twu.net/LATEX/istanbulall.lua.html
-- (find-angg "LATEX/istanbulall.lua")
--
-- Extensions that should be available to all istanbul*.tex modules.
--
-- «.parseorg» (to "parseorg")
-- «.parseorg-tests» (to "parseorg-tests")
-- «.getorgblocks» (to "getorgblocks")
-- «.getorgblocks-tests» (to "getorgblocks-tests")
-- «.orgblocktotex» (to "orgblocktotex")
-- «.orgblocktotex-tests» (to "orgblocktotex-tests")
-- «.orgblocktotex-export» (to "orgblocktotex-export")
-- «.html» (to "html")
-- «.html-tests» (to "html-tests")
-- «.ttchars» (to "ttchars")
-- «.secnumbers» (to "secnumbers")
-- «.secnumbers-test» (to "secnumbers-test")
-- «.output» (to "output")
-- «.Stack» (to "Stack")
-- «.Stack-tests» (to "Stack-tests")
-- «.ubs» (to "ubs")
-- «.ubs-tests» (to "ubs-tests")
-- «.syntree-tests» (to "syntree-tests")
-- ___
-- / _ \ _ __ __ _
-- | | | | '__/ _` |
-- | |_| | | | (_| |
-- \___/|_| \__, |
-- |___/
--
-- «parseorg» (to ".parseorg")
-- (find-es "org" "parse-org-with-lua")
parseorg_utils = function (bigstr)
require "lpeg"
lpeg.test = function (pat, str, ...) PP(pat:C():match(str, ...)) end
local P = lpeg.P
local S = lpeg.S
local C = lpeg.C
local sp = P" "^1
local NL = S"\n"
local NonNL = 1 - NL
--
local Stars = (P"*"^1):Cg"stars"
local Big = sp*P(":big:"):Cg"big"
local Todo = sp*(P"DONE"+P"HALF"+P"TODO"+P"COMMENT"+P"TEXED"):Cg"todo"
local Rest = sp*(NonNL^0):Cg"rest"
StarLine0 = (Stars*(Big+Todo)^0*Rest)
StarLineT = StarLine0:Ct()
StarLine1 = StarLine0:C()
--
local Line = NonNL^0 * NL
NonStarLine = (-StarLine0) * Line
NonStarLines = NonStarLine^0
--
-- local HashLine = P"#"*Line
-- local NonHashLine = (-HashLine) * Line
-- local NonHashLines = ((HashLine * NonHashLine:C())^0):Ct():Cf(table.concat)
-- nonhashlines = function (str) return NonHashLines:match(str) end
--
Block1 = (StarLine0:C()*NL*NonStarLines)
Block2 = (StarLine0:C()*NL*NonStarLines:C()):Ct()
BlockT = (StarLine0*NL*NonStarLines:Cg("body")):Ct()
BlockTT = (StarLine0*NL*NonStarLines:Cg("body")):Ct() / orgblocktotex
-- Block = (StarLine:C() * (NonStarLine^0):C()):Ct()
-- Blocks = (Block^0):Ct()
end
--[==[
-- «parseorg-tests» (to ".parseorg-tests")
-- (find-es "org" "parse-org-with-lua")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "istanbulall.lua"
parseorg_utils()
StarLineT:test "* :big: TODO why a is b"
StarLineT:test "** DONE why b is c"
StarLineT:test "** foo"
StarLine1:test "* :big: TODO why a is b"
bigstr = ee_readfile "~/ORG/istanbul.org" -- (find-angg "ORG/istanbul.org")
bigstr = ee_readfile "~/LATEX/istanbul1.org" -- (find-ist "1.org")
NonStarLines:test(bigstr)
(NonStarLines*StarLine1):test(bigstr)
(NonStarLines*Block1) :test(bigstr)
(NonStarLines*Block2) :test(bigstr)
--]==]
-- _ _ _ _
-- __ _ ___| |_ ___ _ __ __ _| |__ | | ___ ___| | _____
-- / _` |/ _ \ __/ _ \| '__/ _` | '_ \| |/ _ \ / __| |/ / __|
-- | (_| | __/ || (_) | | | (_| | |_) | | (_) | (__| <\__ \
-- \__, |\___|\__\___/|_| \__, |_.__/|_|\___/ \___|_|\_\___/
-- |___/ |___/
--
-- «getorgblocks» (to ".getorgblocks")
getorgblocks = function (bigstr)
parseorg_utils()
local pat = NonStarLines:C()*(BlockT^0):Ct()
local pre, blocks = pat:match(bigstr)
blocks[0] = pre
blocks.m = function (pat)
for i,b in ipairs(blocks) do
if b.rest:match(pat) then return b end
end
end
return blocks
end
--[==[
-- «getorgblocks-tests» (to ".getorgblocks-tests")
-- (find-es "org" "parse-org-with-lua")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "istanbulall.lua"
bs = getorgblocks(ee_readfile "~/LATEX/istanbul1.org") -- (find-ist "1.org")
= #bs
= bs[0]
PP(bs[4])
PP(bs.m"^Eval")
for i,b in ipairs(bs) do print(b.stars.." "..b.rest) end
--]==]
-- _ _ _ _ _
-- ___ _ __ __ _| |__ | | ___ ___| | _| |_ ___ | |_ _____ __
-- / _ \| '__/ _` | '_ \| |/ _ \ / __| |/ / __/ _ \| __/ _ \ \/ /
-- | (_) | | | (_| | |_) | | (_) | (__| <| || (_) | || __/> <
-- \___/|_| \__, |_.__/|_|\___/ \___|_|\_\\__\___/ \__\___/_/\_\
-- |___/
--
-- «orgblocktotex» (to ".orgblocktotex")
-- We use nonhashlines(body) for LaTeXed sections
-- We use toverbatim(body) for non-LaTeXed sections
nonhashlines = function (bigstr)
local A = splitlines(bigstr)
local B = {}
for _,li in ipairs(A) do
if not li:match"^#" then table.insert(B, li.."\n") end
end
return table.concat(B)
end
toverbatim_fmt = "{\\myttchars\n%s\\begin{verbatim}\n%s\\end{verbatim}\n}\n\n"
toverbatim0 = function (bigstr)
return format(toverbatim_fmt, "\\footnotesize\n", bigstr)
end
toverbatim = function (bigstr)
return toverbatim0(bigstr:gsub("^\n*", ""))
end
sectionnames = {}
storesectionname = function (name)
print(name)
table.insert(sectionnames, name)
return name
end
orgblocktotext_section = function (title)
local secn = nplus()
return storesectionname(secn..". "..title)
end
orgblocktotext_subsection = function (title)
local secnn = nnplus()
return storesectionname(secnn..". "..title)
end
orgblocktotex_omit = function (b) end
orgblocktotex_omittitle = function (b)
return "%\n% "..b.rest.."\n"..nonhashlines(b.body)
end
orgblocktotex_texed = function (b)
local f = (b.stars=="*") and orgblocktotext_section
or orgblocktotext_subsection
local body = nonhashlines(untabify8(b.body))
return "\\newpage\n"..f(b.rest).."\n"..body
end
orgblocktotex_verbatim = function (b)
local f = (b.stars=="*") and orgblocktotext_section
or orgblocktotext_subsection
local body = toverbatim(nonhashlines(untabify8(b.body)))
return "\\newpage\n"..f(b.rest).."\n"..body
end
orgblocktotex = function (b)
if b.rest:match"^-" then return orgblocktotex_omittitle(b)
elseif b.todo == "COMMENT" then return orgblocktotex_omit(b)
elseif b.todo == "TEXED" then return orgblocktotex_texed(b)
else return orgblocktotex_verbatim(b)
end
end
orgblockstotex = function (bs)
local ts = {}
for _,b in ipairs(bs) do
ts[#ts+1] = orgblocktotex(b)
end
return table.concat(ts)
end
texfooter = "\f\n"..[[
% Local Variables:
% coding: utf-8-unix
% mode: latex
% End:
]]
--[==[
-- «orgblocktotex-tests» (to ".orgblocktotex-tests")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "istanbulall.lua"
bs = getorgblocks(ee_readfile "~/LATEX/istanbul1.org") -- (find-ist "1.org")
b = bs.m"^Eval"
PP(b)
= orgblocktotex(b)
bt = orgblockstotex(bs)
= bt
PP(bs.m"^Local")
b = bs.m"^Elephant"
PP(b)
= b.body
= nonhashlines(b.body)
b = bs.m"Why study CT"
PP(b)
= orgblocktotex(b)
-- «orgblocktotex-export» (to ".orgblocktotex-export")
-- (find-ist "1.tex" "update-body")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "istanbulall.lua"
bs = getorgblocks(ee_readfile "~/LATEX/istanbul1.org") -- (find-ist "1.org")
bt0 = orgblockstotex(bs)
bt = "\n\n"..bt0..texfooter
bt = "\n\n"..bt0
ee_writefile("~/LATEX/istanbul1body.tex", bt) -- (find-ist "1body.tex")
= bt
--]==]
-- _ _ _
-- | |__ | |_ _ __ ___ | |
-- | '_ \| __| '_ ` _ \| |
-- | | | | |_| | | | | | |
-- |_| |_|\__|_| |_| |_|_|
--
-- «html» (to ".html")
-- «html-tests» (to ".html-tests")
-- Moved to: (find-es "lua5" "utf8-to-html")
-- _ _ _
-- | |_| |_ ___| |__ __ _ _ __ ___
-- | __| __/ __| '_ \ / _` | '__/ __|
-- | |_| || (__| | | | (_| | | \__ \
-- \__|\__\___|_| |_|\__,_|_| |___/
--
-- «ttchars» (to ".ttchars")
-- (find-ist "defs.tex" "ttchars")
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
bigstr = ee_readfile "~/LATEX/istanbuldefs.tex"
pat = "^\\catcode`(.-)=13 \\def(.-)(%b{})(.*)"
for _,li in ipairs(splitlines(bigstr)) do
local c, cc, def, rest = li:match(pat)
if c then
local indef = def:sub(2,-2)
print(format(" \\def%s{\\ttchar{$%s$}}", c, indef))
end
end
--]==]
-- _
-- ___ ___ ___ _ __ _ _ _ __ ___ | |__ ___ _ __ ___
-- / __|/ _ \/ __| '_ \| | | | '_ ` _ \| '_ \ / _ \ '__/ __|
-- \__ \ __/ (__| | | | |_| | | | | | | |_) | __/ | \__ \
-- |___/\___|\___|_| |_|\__,_|_| |_| |_|_.__/ \___|_| |___/
--
-- «secnumbers» (to ".secnumbers")
-- (find-blogme3 "anggdefs.lua" "section-numbers")
__secn = "0"
incrsecn = function (pat)
local a, b = string.match(__secn, pat)
if not a then -- not deep enough?
repeat __secn = __secn .. ".1" -- keep adding ".1"s
until string.match(__secn, pat) -- until deep enough
return __secn -- and return this.
end
__secn = a .. (b+1) -- else increase the right digit (drop the rest)
return __secn -- and return that.
end
nplus = function () return incrsecn("^(%d-)(%d+)") end
nnplus = function () return incrsecn("^(%d+%.)(%d+)") end
nnnplus = function () return incrsecn("^(%d+%.%d+%.)(%d+)") end
nnnnplus = function () return incrsecn("^(%d+%.%d+%.%d+%.)(%d+)") end
--[==[
-- «secnumbers-test» (to ".secnumbers-test")
-- (find-es "org" "parse-org-with-lua")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "istanbulall.lua"
__secn = "0"
print(nplus(), nplus(), nnplus(), nnnnplus(), nnplus())
--> 1 2 2.1 2.1.1.1 2.2
--]==]
-- ___ _ _
-- / _ \ _ _| |_ _ __ _ _| |_
-- | | | | | | | __| '_ \| | | | __|
-- | |_| | |_| | |_| |_) | |_| | |_
-- \___/ \__,_|\__| .__/ \__,_|\__|
-- |_|
--
-- «output» (to ".output")
-- (find-es "luatex" "comments-in-tex.print")
-- (find-LATEX "2015logicandcats.lua" "output")
-- Moved to: (find-dn6 "output.lua")
--
-- Usage:
-- \catcode`\^^J=10 % (find-es "luatex" "spurious-omega")
-- \directlua{output = mytexprint}
-- \directlua{output = printboth}
-- ____ _ _
-- / ___|| |_ __ _ ___| | __
-- \___ \| __/ _` |/ __| |/ /
-- ___) | || (_| | (__| <
-- |____/ \__\__,_|\___|_|\_\
--
-- «Stack» (to ".Stack")
-- «ubs» (to ".ubs")
-- Moved to: (find-dn5 "stacks.lua" "Stack")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "istanbulall.lua"
--]]
--
-- Local Variables:
-- coding: raw-text-unix
-- End: