Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- build.lua: generate a single dednat5.lua from separate files. -- This file: -- http://angg.twu.net/dednat5/build.lua.html -- http://angg.twu.net/dednat5/build.lua -- (find-dn5 "build.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- Version: 2011nov26 -- License: GPL3 -- -- Related to: (find-blogme4 "build.lua") -- See: (find-tkdiff "~/blogme4/build.lua" "~/dednat5/build.lua") -- -- This script generates "dednat5.lua". -- It needs to be run from the dednat5 directory, -- It uses functions from: (find-angg "LUA/lua50init.lua") -- Run with: (find-sh0 "cd ~/dednat5/ && lua51 build.lua && chmod 755 dednat5.lua") -- (defun m () (interactive) (find-sh0 "cd ~/dednat5/&&lua51 build.lua && chmod 755 dednat5.lua")) -- (defun m () (interactive) (find-dn5sh "lua51 build.lua && chmod 755 dednat5.lua")) -- (defun m () (interactive) (find-dn5sh "lua51 build.lua")) -- (defun dd () (interactive) (eek "C-e 5*SPC -- SPC (find-dn5 SPC \" C-y .lua\" )")) -- require "eoo" -- (find-dn5 "eoo.lua") require "common" -- (find-dn5 "common.lua") target = "dednat5.lua" -- (find-dn5 "dednat5.lua") ---------------------------------------- T0 = { prog = "dednat5", date = os.date("%Y%b%d %k:%M"):lower(), date = os.date("%Y%b%d %k:%M %Z"), c = "dn5", dir = "dednat5", } guill = function (str) return (str:gsub("<<", "\171"):gsub(">>", "\187")) end spaces = function (n) return string.rep(" ", n) end interpolate = function (T, str) return (str:gsub("{([A-Za-z0-9]+)}", T)) end interpolateg = function (T, str) return interpolate(T, guill(str)) end template = function (str) return Template {str=str} end Template = Class { type = "Template", __index = { map = function (template, tbl) return interpolateg(over(T0)(tbl), template.str) end, mapstem = function (template, stem, len, f) return template:map { stem = stem, s = spaces((len or 20)-#stem), body = (f and f(stem)), } end, mapconcat = function (template, A, sep, len, f) local g = function (stem) return template:mapstem(stem, len, f) end return mapconcat(g, A, (sep or "")) end, }, } module_body = function (stem) local name = stem..".lua" local contents = readfile(name) local contents2 = contents:gsub("\nrequire", "\n-- require") local contents3 = contents2:gsub("\n%-%- dump%-to: tests.*", "") return contents3 end ---------------------------------------- output__ = template [[ #!/usr/bin/env lua5.1 ---- This is a one-file version of {prog}, generated ---- automatically by build.lua on {date}. See: ---- http://angg.twu.net/{dir}/build.lua.html ---- {sp}(find-{c} "build.lua") ---- http://angg.twu.net/{dir}/{prog}.lua.html ---- {sp}(find-{c} "dednat5.lua") ---- Index to the modules: {index} {body} -- Local Variables: -- coding: raw-text-unix -- ee-anchor-format: "<<%s>>" -- End: ]] index_line__ = template [[ -- <<.{stem}.lua>>{s}(to "{stem}.lua") ]] module__ = template [[ ---- From: (find-{c} "{stem}") ---- <<{stem}.lua>> (to ".{stem}.lua") ---- This block is from: (find-{c} "{stem}.lua") {body} ]] bigfile = function (stems) local index = index_line__:mapconcat(stems) local body = module__:mapconcat(stems, "\n", nil, module_body) local output = output__:map{index = index, body = body} return output end ---------------------------------------- stems = { -- The four lowest-level modules (all independent): "common", -- (find-dn5 "common.lua") "eoo", -- (find-dn5 "eoo.lua") "prefixes", -- (find-dn5 "prefixes.lua") "parse", -- (find-dn5 "parse.lua") -- -- General functions to read and process ".tex" files -- and write out a ".dnt" file: "preamble", -- (find-dn5 "preamble.lua") "process", -- (find-dn5 "process.lua") -- -- Code for generating derivation trees from "%:" lines: "treetex", -- (find-dn5 "treetex.lua") "treesegs", -- (find-dn5 "treesegs.lua") "treehead", -- (find-dn5 "treehead.lua") -- -- Code for generating diagxy diagrams from "%D" lines: "diagstacks", -- (find-dn5 "diagstacks.lua") "diagtex", -- (find-dn5 "diagtex.lua") "diagforth", -- (find-dn5 "diagforth.lua") "diagmiddle", -- (find-dn5 "diagmiddle.lua") -- -- The Begriffsschrift extension (experimental): "begriff", -- (find-dn5 "begriff.lua") -- The REPL, for interaction (experimental): "repl", -- (find-dn5 "repl.lua") -- -- Interpret command-line options and run everything: "options", -- (find-dn5 "options.lua") } expansions = { BASE = "common,eoo,errors,prefixes,parse", BASETEX = "preamble,process", TREES = "treetex,treesegs,treehead", DIAGS = "diagstacks,diagtex,diagforth,diagmiddle", B = "BASE,BASETEX,TREES,DIAGS", BEGRIFF = "begriff", REPL = "repl", E = "BEGRIFF,REPL", O = "options", ALL = "B,E,O", } expand = function (T, str) local f = function (s) if T[s] then print(s.." -> "..T[s]); return T[s] end end while true do -- local newstr = str:gsub("([A-Z]+)", T) local newstr = str:gsub("([A-Z]+)", f) if newstr == str then return str end str = newstr end end module_bodies_glued = function (stems) return mapconcat(module_body, stems, "\n\n\n") end body_all = mapconcat(module_body, stems, "\n\n\n") -- writefile(target, head_all.. -- body_all.. -- footer_all) -- writefile(target, bigfile()) stems = split(expand(expansions, "ALL"), "([^,]+)") writefile(target, bigfile(stems)) print(" Created: "..target) print(" From: "..mapconcat(gformat "%1.lua", stems, " ")) -- dump-to: tests --[===[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "build.lua" = expand(expansions, "ALL") stems = split(expand(expansions, "ALL"), "([^%s,]+)") PP(stems) PP(map(gformat "%0.lua", stems)) = bigfile {} = module_body("eoo") = bigfile {"eoo"} * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) -- (find-angg ".emacs" "date") -- (find-luamanualw3m "#pdf-os.date") = os.date("%Y%b%d %k:%M") = os.date("%Y%b%d %k:%M %Z"):lower() --]===] -- Local Variables: -- coding: raw-text-unix -- ee-anchor-format: "«%s»" -- End: