Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://anggtwu.net/LUA/Freeze1.lua.html -- http://anggtwu.net/LUA/Freeze1.lua -- (find-angg "LUA/Freeze1.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- Version: 2023nov25 -- -- This file contains some classes that were part of ELpeg1.lua until -- nov/2023. -- -- (defun e () (interactive) (find-angg "LUA/Freeze1.lua")) -- «.totex» (to "totex") -- «.totex-tests» (to "totex-tests") -- «.Globals» (to "Globals") -- «.Globals-tests» (to "Globals-tests") -- «.Parser.freeze» (to "Parser.freeze") -- «.Parser.freeze-tests» (to "Parser.freeze-tests") -- _ _ -- | |_ ___ | |_ _____ __ -- | __/ _ \| __/ _ \ \/ / -- | || (_) | || __/> < -- \__\___/ \__\___/_/\_\ -- -- This is the basic way to convert ASTs to TeX code. -- I moved its code to Subst1.lua, that is "require"d. See: -- (find-angg "LUA/Subst1.lua" "Subst") -- (find-angg "LUA/Subst1.lua" "totex") -- «totex» (to ".totex") -- «totex-tests» (to ".totex-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "ELpeg1.lua" fmts = VTable {} fmts["+"] = "<1> + <2>" fmts["*"] = "<1> \\cdot <2>" o = mkast("+", "a", mkast("*", 2, 3.4567)) = o = totex (o) = totex0 (o) = totex00(o) = totex00(o).o = totex00(o):tag() = totex00(o):fmt() = totex00(o):getn(1) = totex00(o):getn(1).o = totex00(o):getn(2) = totex00(o):getn(2).o = totex00(o):getn(2):fmt() = totex00(o):getn(2):getn(2) = totex00(o):getn(2):getn(2).o = totex00() = totex00():gsub("a<2+3>b") * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "ELpeg1.lua" fmts = VTable {} funs = VTable {} -- totex00 = ToTeX0 {fmts=fmts, funs=funs} fmts.ap = "<1> <2>" fmts.fun = "<1>" fmts.var = "<1>" funs.sin = "\\sin " E["sin"] = mkast("fun", "sin") E[ "x"] = mkast("var", "x") E["sin x"] = mkast("ap", E"sin", E"x") = E["sin x"] = E["sin x"][1] = E["sin x"]:totex() = E["sin x"]:totex() fmts.fun = "<funs[o[1]] or o[1]>" = E["sin x"]:totex() * (code-etv2 "SHOW2DIR" "/tmp/" "Show2") ** (find-code-etv2 "SHOW2DIR" "/tmp/" "Show2") = E["sin x"]:totex():show() = E["sin x"]:totex():show(4) = E["sin x"]:show(2.5) * (etv) --]==] -- ____ _ _ _ -- / ___| | ___ | |__ __ _| |___ -- | | _| |/ _ \| '_ \ / _` | / __| -- | |_| | | (_) | |_) | (_| | \__ \ -- \____|_|\___/|_.__/ \__,_|_|___/ -- -- I moved this code to Globals1.lua, that is "require"d. -- See: (find-angg "LUA/Globals1.lua") -- -- «Globals» (to ".Globals") -- «Globals-tests» (to ".Globals-tests") -- ____ __ -- | _ \ __ _ _ __ ___ ___ _ __ / _|_ __ ___ ___ _______ -- | |_) / _` | '__/ __|/ _ \ '__| | |_| '__/ _ \/ _ \_ / _ \ -- | __/ (_| | | \__ \ __/ | _ | _| | | __/ __// / __/ -- |_| \__,_|_| |___/\___|_|(_) |_| |_| \___|\___/___\___| -- -- Work in progress! -- See: (find-angg "LUA/ELpeg-cme1.lua" "Freeze") -- «Parser.freeze» (to ".Parser.freeze") Parser = Class { type = "Parser", freeze = function (top) local p = Parser({top=top}):compile():save() return p:matcher(),p end, __index = { compile = function (p) grc = gr:compile(p.top); return p end, save = function (p) p.globals = p:save0(); return p end, save0 = function (p) return Globals.save "gr grc fmts funs" end, restore = function (p) p.globals:restore(); return p end, match = function (p, subj, pos) p:restore(); return p:match0(subj, pos) end, match0 = function (p, subj, pos) if type(pos) == "string" then pos = subj:match(pos) end return grc:match(subj, pos) end, matcher = function (p) return function (...) return p:match(...) end end, }, } -- «Parser.freeze-tests» (to ".Parser.freeze-tests") --[[ -- (find-angg "LUA/Globals1.lua" "Globals-tests") -- These tests are broken * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "ELpeg1.lua" dofile "Globals1.lua" lambda_globals = Globals.save "fmts funs gr" lambda_totex = lambda_globals:fun(function (...) totex (...) end) lambda_totex0 = lambda_globals:fun(function (...) totex0 (...) end) lambda_totex00 = lambda_globals:fun(function (...) totex00(...) end) lambda_totex = lambda_globals:fun(totex) lambda_totex0 = lambda_globals:fun(totex0) lambda_totex00 = lambda_globals:fun(totex00) --]] -- Local Variables: -- coding: utf-8-unix -- End: