|
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: