|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file:
-- http://anggtwu.net/LUA/TikzTrees1.lua.html
-- http://anggtwu.net/LUA/TikzTrees1.lua
-- (find-angg "LUA/TikzTrees1.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- (defun e () (interactive) (find-angg "LUA/TikzTrees1.lua"))
-- (find-es "tikz" "tut-child")
--loadelpeg1() -- (find-angg "LUA/ELpeg1.lua")
require "ELpeg1" -- (find-angg "LUA/ELpeg1.lua")
-- (find-angg "LUA/Show2.lua")
-- (find-angg "LUA/lua50init.lua" "loadshow2")
-- (find-angg "LUA/Show2.lua" "string.show")
string.show = function (bigstr, optscale)
texbody = bigstr
scale = optscale or 1
return Show.try(tostring(outertexbody))
end
show = show or function () return Show.try(tostring(outertexbody)) end
-- (find-angg "LUA/ELpeg1.lua" "AST")
tikzpicture = function (o) return mkast("tikzpicture", o) end
AST.__index.tp = function (o,...) return tikzpicture(o) end
AST.__index.tikzshow = function (o,...) return totex(tikzpicture(o)):show(...) end
usepackages = [=[
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
]=]
middletexbody = Dang.from [=[
\scalebox{<<scale>>}{%
<<texbody>>
}
]=]
fmts = VTable {}
fmts["*"] = "<1> \\cdot <2>"
fmts["sqrt"] = "\\sqrt{<1>}"
fmts["tnode"] = "<tnode_totex(o)>"
fmts["tikzpicture"] = "\\begin{tikzpicture}\n\\path <1>;\n\\end{tikzpicture}"
tnode_tex = VTable {}
tnode_tex["*"] = "\\cdot"
tnode_tex["sqrt"] = "\\sqrt{\\;\\;}"
tnode_totex = function (o)
local ntex = function (s) return tnode_tex[s] or s end
local ctex = function (i) return format("\n child {%s}", totex(o[i])) end
local name = ntex(o[1])
local children = mapconcat(ctex, seq(2,#o), "")
local preopts = o.preopts and (o.preopts.."\n") or ""
local opts = o.opts and (" "..o.opts) or ""
local chopts = o.chopts and ("\n"..o.chopts) or ""
return format("%snode%s {$%s$}%s%s", preopts, opts, name, chopts, children)
end
to_tnode = function (o)
if type(o) == "string" then return mkast("tnode", o) end
local children = {}
for _,c in ipairs(o) do table.insert(children, to_tnode(c)) end
return mkast("tnode", o[0], unpack(children))
end
--[==[
-- (find-es "tikz" "tut-child")
** (find-code-show2 "~/LATEX/Show2.tex")
* (code-show2 "~/LATEX/Show2.tex")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "TikzTrees1.lua"
oi = mkast("a", "b")
oi = mkast("a", "b", mkast("c", "d"))
oi = mkast("*", "b", mkast("+", "d", "e"))
oi = mkast("*", "b", mkast("+", "d", mkast("sqrt", "e")))
= oi
on = to_tnode(oi)
= on
= on:totex()
on .preopts = "[every node/.style={ellipse,draw}]"
on[3].preopts = "[every node/.style={ellipse,draw,fill=orange}]"
on[3][3].opts = "[fill=red]"
= on
= on:tp()
= on :totex()
= on:tp():totex()
= on:tp():show() -- or: on:tikzshow()
= Show.bigstr
= Show.log
* (etv)
= on:tikzshow(0.5)
= Show.bigstr
= Show.log
* (etv)
-- Broken:
medstr = [=[
[every node/.style={ellipse,fill=yellow,draw}]
node {$\cdot$}
[every node/.style={ellipse,fill=blue,draw}]
child {node {$b$}}
child {node [ellipse,fill=orange,draw] {$+$}
child {node {$d$}}
child {[every node/.style={ellipse,fill=green,draw}]
node {$\sqrt{\;\;}$}
child {node {$e$}}}
}
]=]
= medstr:tikzshow()
= Show.bigstr
= Show.log
* (etv)
--]==]
-- Local Variables:
-- coding: utf-8-unix
-- End: