|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- diagtex.lua:
-- This file:
-- http://angg.twu.net/dednat5/diagtex.lua.html
-- http://angg.twu.net/dednat5/diagtex.lua
-- (find-dn5 "diagtex.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
-- Version: 2011apr10
-- License: GPL3
-- «.coords» (to "coords")
-- «.arrow_to_TeX» (to "arrow_to_TeX")
-- «.DxyArrow» (to "DxyArrow")
-- «.DxyPlace» (to "DxyPlace")
-- «.DxyLiteral» (to "DxyLiteral")
-- «.DxyLoop» (to "DxyLoop")
-- «.arrows_to_defdiag» (to "arrows_to_defdiag")
require "eoo" -- (find-dn5 "eoo.lua")
require "diagstacks" -- (find-dn5 "diagstacks.lua")
require "prefixes" -- (find-dn5 "prefixes.lua")
-- (find-dn5 "prefixes.lua" "unabbrev")
-- «coords» (to ".coords")
-- (find-dn4 "dednat4.lua" "diag-out" "dxyorigx =")
dxyorigx = 100
dxyorigy = 100
dxyscale = 15
realx = function (x) return dxyscale * (x - dxyorigx) end
realy = function (y) return -dxyscale * (y - dxyorigy) end
realxy = function (x, y) return realx(x), realy(y) end
-- «arrow_to_TeX» (to ".arrow_to_TeX")
-- (find-diagxypage 6 "2" " The basic syntax")
-- (find-diagxytext "2" " The basic syntax")
-- (find-diagxypage 6 "\\morphism(x,y)|p|/{sh}/<dx,dy>[N`N;L]")
-- (find-diagxytext "\\morphism(x,y)|p|/{sh}/<dx,dy>[N`N;L]")
-- (find-diagxypage 7 "@{shape}")
-- (find-diagxytext "@{shape}")
-- (find-diagxypage 23 "4.3" " Empty placement and moving labels")
-- (find-diagxytext "4.3" " Empty placement and moving labels")
-- (find-dn4 "dednat4.lua" "diag-out" "arrowtoTeX =")
-- (find-dn4 "dednat4.lua" "lplacement")
node_to_TeX = function (node)
local tex = node.tex or node.tag
local TeX = node.TeX or (tex and unabbrev(tex))
return (TeX and "{"..TeX.."}") or ""
end
arrow_to_TeX = function (arrow)
local node1 = nodes[arrow.from]
local node2 = nodes[arrow.to]
local x1, y1 = realxy(node1.x, node1.y)
local x2, y2 = realxy(node2.x, node2.y)
local dx, dy = x2 - x1, y2 - y1
local N1 = node_to_TeX(node1)
local N2 = node_to_TeX(node2)
local Label = arrow.Label or (arrow.label and unabbrev(arrow.label))
local L = Label and "{"..Label.."}" or ""
--
local p = arrow.placement and "|"..arrow.placement.."|" or ""
local shape = arrow.shape or "->"
local slide = arrow.slide and "@<"..arrow.slide..">"
local curve = arrow.curve and "@/"..arrow.curve.."/"
local lplace = arrow.lplacement and arrow.lplacement.."{"..label.."}"
local sh
if slide or curve or lplace then
sh = format("/{@{%s}%s%s%s}/", shape,
(lplace or ""), (slide or ""), (curve or ""))
else
sh = "/"..shape.."/"
end
if lplace then p = "||"; L = "" end
--
return format("\\morphism(%d,%d)%s%s<%d,%d>[%s`%s;%s]",
x1, y1, p, sh, dx, dy, N1, N2, L)
end
-- The kinds of things that we store in the array "arrows".
-- (find-dn5 "diagstacks.lua" "arrows")
-- «DxyArrow» (to ".DxyArrow")
DxyArrow = Class {
type = "DxyArrow",
__index = {
TeX = function (ar) return arrow_to_TeX(ar) end,
},
}
-- «DxyPlace» (to ".DxyPlace")
DxyPlace = Class {
type = "DxyPlace",
__index = {
TeX = function (pseudoar)
local node = pseudoar[1]
local x, y = realxy(node.x, node.y)
return format("\\place(%d,%d)[{%s}]", x, y, node_to_TeX(node))
end,
},
}
-- «DxyLiteral» (to ".DxyLiteral")
DxyLiteral = Class {
type = "DxyLiteral",
__index = {
TeX = function (pseudoar) return pseudoar[1] end,
},
}
-- «DxyLoop» (to ".DxyLoop")
-- (find-dn4 "experimental.lua" "loop")
DxyLoop = Class {
type = "DxyLoop",
__index = {
TeX = function (pseudoar)
local node, dTeX = pseudoar[1], pseudoar.dTeX
local x, y = realxy(node.x, node.y)
return format("\\Loop(%d,%d){%s}%s", x, y, node_to_TeX(node), dTeX)
end,
},
}
-- «arrows_to_defdiag» (to ".arrows_to_defdiag")
arrows_to_TeX = function (prefix)
local f = function (ar) return (prefix or " ")..ar:TeX().."\n" end
return mapconcat(f, arrows, "")
end
arrows_to_defdiag = function (name, hyperlink)
return format("\\defdiag{%s}{%s\n%s}",
name, (hyperlink or ""),
arrows_to_TeX(" "))
end
-- dump-to: tests
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
require "diagtex"
storenode {TeX="a", tag="a", x=100, y=100}
storenode {TeX="b", tag="b", x=140, y=100}
PP(nodes)
PP(nodes["a"])
PP(nodes[1])
PP(nodes["b"])
PP(nodes[2])
storearrow(DxyArrow {from="a", to="b", shape="|->",
slide="5pt", label="up", placement="a"})
storearrow(DxyArrow {from="a", to="b", shape=".>"})
storearrow(DxyPlace {nodes["a"]})
storearrow(DxyLiteral {"literal foobar"})
-- (find-dn5 "diagtex.lua")
PP(arrows)
print(arrow_to_TeX(arrows[1]))
print(arrows[2]:TeX())
print(arrows[3]:TeX())
print(arrows[4]:TeX())
print(arrows_to_TeX())
print(arrows_to_defdiag("??", " % foo"))
--]==]
-- Local Variables:
-- coding: raw-text-unix
-- ee-anchor-format: "«%s»"
-- End: