|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- treetex.lua: derivation trees and functions to convert them to TeX.
-- This file:
-- http://angg.twu.net/dednat5/treetex.lua.html
-- http://angg.twu.net/dednat5/treetex.lua
-- (find-dn5 "treetex.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
-- Version: 2011apr04
-- License: GPL3
--
-- intersecting (find-dn4 "dednat4.lua" "tree-lib")
-- tatsuta (find-dn4 "dednat4.lua" "tree-out")
-- paultaylor
require "eoo" -- (find-dn5 "eoo.lua")
TreeNode = Class {
type = "TreeNode",
__index = {
hasbar = function (tn) return tn.bar ~= nil end,
barchar = function (tn) return tn.bar end,
TeX_root = function (tn) return tn[0] end,
TeX_label = function (tn) return tn.label end,
nhyps = function (tn) return #tn end,
hypslist = function (tn) return tn end,
},
}
TeX_subtree_tatsuta = function (tn, i_)
if not tn:hasbar() then
return i_.."\\mathstrut "..tn:TeX_root()
else
local r_ = tn:TeX_root()
local b_ = tn:barchar()
local l_ = tn:TeX_label()
local h_ = tn:hypslist()
local r = "\\mathstrut "..r_
local b = ({["-"]="", ["="]="=", [":"]="*"})[b_]
local l = (l_ and "[{"..l_.."}]") or ""
local i = i_.." "
local f = function (tn) return TeX_subtree_tatsuta(tn, i) end
local h = mapconcat(f, h_, " &\n")
return i_.."\\infer"..b..l.."{ "..r.." }{\n"..h.." }"
end
end
TeX_deftree_tatsuta = function (tn, name, link)
return "\\defded{"..name.."}{"..(link or "").."\n"..
TeX_subtree_tatsuta(tn, " ").." }"
end
TreeNode.__index.TeX_subtree = TeX_subtree_tatsuta
TreeNode.__index.TeX_deftree = TeX_deftree_tatsuta
-- dump-to: tests
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
require "treetex"
TN = function (root, b, l, ...)
return TreeNode {[0]=root, bar=b, label=l, ...}
end
T = TN("f(1+2+3)", "-", "app",
TN("f"),
TN("1+2+3", "=", nil,
TN"1",
TN"2",
TN"3"))
print(T:TeX_subtree(" "))
print(T:TeX_deftree("f(1+2+3)"))
-- Here's a typical TreeNode structure:
PP(T)
-- {0="f(1+2+3)",
-- 1={0="f"},
-- 2={0="1+2+3",
-- 1={0="1"},
-- 2={0="2"},
-- 3={0="3"},
-- "bar"="="},
-- "bar"="-",
-- "label"="app"}
--]==]
-- Local Variables:
-- coding: raw-text-unix
-- ee-anchor-format: "«%s»"
-- End: