|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file:
-- http://anggtwu.net/LUA/Loeliger1.lua.html
-- http://anggtwu.net/LUA/Loeliger1.lua
-- (find-angg "LUA/Loeliger1.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- This file draws a flipbook animation of how this git tree
--
-- G H I J
-- \ / \ / G H I J
-- D E F | / | /
-- \ | / \ D E F
-- \ | / | \ | / |
-- \|/ | B C
-- B C | /
-- \ / A
-- \ /
-- A
--
-- is built step by step, in this sense:
--
-- (find-git-intro "0. Introduction")
-- (find-git-intro "0. Introduction" "how do we")
-- (find-angg "bin/eevgitlib1.sh" "Time-tests")
--
-- The version of the tree at the left is from:
--
-- (find-gitdocfile "revisions.txt" "illustration, by Jon Loeliger")
--
-- and the version at the right is my simplification.
-- The resulting flipbook animation is here:
--
-- http://anggtwu.net/IMAGES/2023loeliger.gif
-- http://anggtwu.net/LATEX/2023loeliger.pdf
-- (find-LATEX "2023loeliger.tex")
-- (find-LATEX "2023loeliger.tex" "bigtts-and-bigtimes")
--
-- See:
-- (find-es "tikz" "tut-petri-nets")
-- Based on:
-- (find-angg "LUA/Tikz2.lua" "test-loeliger")
--
-- (defun e () (interactive) (find-angg "LUA/Loeliger1.lua"))
-- Index:
-- «.defs.loeliger» (to "defs.loeliger")
-- «.defs.loeliger-tests» (to "defs.loeliger-tests")
-- «.TikzTime» (to "TikzTime")
-- «.TikzTime-tests» (to "TikzTime-tests")
-- «.TikzTimes» (to "TikzTimes")
-- «.TikzTimes-tests» (to "TikzTimes-tests")
-- «.big» (to "big")
-- «.big-tests» (to "big-tests")
require "Tikz2" -- (find-angg "LUA/Tikz2.lua")
usepackages.edrx21 = true
usetikzlibraries.my = [=[
arrows, decorations.pathmorphing,
backgrounds, calc, positioning, fit, petri
]=]
-- «defs.loeliger» (to ".defs.loeliger")
-- Similar to: (find-LATEX "2023loeliger.tex" "defs.loeliger")
defs.loeliger = [=[
\def\loeligerbox#1#2{
\scalebox{0.7}{
\begin{tikzpicture}[ scale=2,
commit/.style={circle, draw=black,fill=yellow,thin},
branch/.style={rectangle,draw=black,fill=orange,thin},
mybackground/.style={fill=GrayPale!25,draw=none}
]
\draw [mybackground] ($(1,0)-(.4,.4)$) rectangle ($(4,3)+(.4,.4)$);
#1
\end{tikzpicture}
#2
}
}
\def\loeliger#1{
\loeligerbox{\ga{loeliger #1}}{#1}
}
\def\drawcommi #1#2{
\node (#1) at (#2) [commit] {\phantom{A}}
}
\def\drawcommit#1#2{
\node (#1) at (#2) [commit] {#1}
}
\def\drawwire#1#2{
\draw [-] (#1)--(#2)
}
\def\drawbranch#1#2{
\node (#1 r) at ($(#1)+(0.5,0)$) [branch,align=left] {#2}
}
\def\Red#1{{\color{red}#1}}
\def\HEAD{\ensuremath{\color{red}\bullet}}
]=]
-- «defs.loeliger-tests» (to ".defs.loeliger-tests")
--[==[
** (find-angg "bin/eevgitlib1.sh" "MakeTree1")
* (show2-use "~/LATEX/Show2.lua")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Loeliger1.lua"
bigstr = [=[
\loeligerbox{
\drawcommit A {2,0};
\drawcommi B {3,1};
\drawwire A B;
\drawbranch A {brA\\Fooo};
\drawbranch B {brAB\HEAD};
}{(Name)}
]=]
= bigstr:show00()
= bigstr:show0 ()
= bigstr:show ()
* (etv)
= Show.log
--]==]
-- _____ _ _ _____ _
-- |_ _(_) | __ ___|_ _(_)_ __ ___ ___
-- | | | | |/ /|_ / | | | | '_ ` _ \ / _ \
-- | | | | < / / | | | | | | | | | __/
-- |_| |_|_|\_\/___| |_| |_|_| |_| |_|\___|
--
-- «TikzTime» (to ".TikzTime")
TikzTime = Class {
type = "TikzTime",
from = function (li)
local a,b = li:match"^(.-)::(.*)$"
return TikzTime { li=li, a=(a and bitrim(a)), b=(b and bitrim(b)) }
end,
__tostring = function (tt) return mytostringv(tt) end,
__index = {
code = function (tt) return Code.ve(" t => "..tt.a) end,
trueline = function (tt,time)
if not tt.a then return nil end
-- if not tt.a then return tt.b end
if tt:code()(time) then return tt.b end
end,
},
}
-- «TikzTime-tests» (to ".TikzTime-tests")
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Loeliger1.lua"
tt = TikzTime.from [[ t<="C" :: \draw [-] (A)--(C); ]]
= tt
c = tt:code()
= c
= c"A"
= c"D"
= tt:trueline "A"
= tt:trueline "Z"
--]==]
-- _____ _ _ _____ _
-- |_ _(_) | __ ___|_ _(_)_ __ ___ ___ ___
-- | | | | |/ /|_ / | | | | '_ ` _ \ / _ \/ __|
-- | | | | < / / | | | | | | | | | __/\__ \
-- |_| |_|_|\_\/___| |_| |_|_| |_| |_|\___||___/
--
-- «TikzTimes» (to ".TikzTimes")
TikzTimes = Class {
type = "TikzTimes",
from = function (bigstr) return TikzTimes {bigstr=bigstr} end,
__tostring = function (tts) return tts.bigstr end,
__index = {
at = function (tts,time)
local A = VTable {}
for _,li in ipairs(splitlines(tts.bigstr)) do
local tli = TikzTime.from(li):trueline(time)
if tli then table.insert(A, tli) end
end
return table.concat(A, "\n")
end,
loeligerbox = function (tts,time)
return format("\\loeligerbox{%%\n%s%%\n}{%s}", tts:at(time), time)
end,
sa = function (tts,time)
return format("\\sa{loeliger %s}{%s}", time, tts:loeligerbox(time))
end,
sas = function (tts,times)
local f = function (time) return tts:sa(time) end
return mapconcat(f, split(times), "\n")
end,
ga = function (tts,time)
return format("\\ga{loeliger %s}", time)
end,
gas = function (tts,times)
local f = function (time) return tts:ga(time) end
return mapconcat(f, split(times), " \\newpage\n")
end,
sasgas = function (tts,times)
return tts:sas(times).."\n\n"..tts:gas(times)
end,
},
}
-- «TikzTimes-tests» (to ".TikzTimes-tests")
--[==[
* (show2-use "~/LATEX/Show2.lua")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Loeliger1.lua"
tts = TikzTimes.from [=[
t<="A" ::
t<="B" :: bar
t<="B" and t<"C" :: blep
t<="C" :: plic
]=]
= tts
= tts:at "B"
tts = TikzTimes.from [=[
"A0"<=t and t<"A1" :: \drawcommi A {2,0};
"A1"<=t :: \drawcommit A {2,0};
"B0"<=t and t<"B1" :: \drawcommi B {3,1};
"B1"<=t :: \drawcommit B {3,1};
"B0"<=t :: \drawwire A B;
]=]
= tts
= tts:at "A0"
= tts:at "A1"
= tts:at "B0"
= tts:at "B1"
= tts:sa "B1"
= tts:sas "A0 A1 B0 B1"
= tts:gas "A0 A1 B0 B1"
= tts:sasgas "A0 A1 B0 B1"
= tts:sasgas("A0 A1 B0 B1"):show()
* (etv)
= Show.log
--]==]
-- _ _
-- | |__ (_) __ _
-- | '_ \| |/ _` |
-- | |_) | | (_| |
-- |_.__/|_|\__, |
-- |___/
--
-- bigtts is a big TikzTimes structure.
-- bigtimes is used in bigtts:sasgas(bigtimes).
-- They are used here:
--
-- (find-LATEX "2023loeliger.tex" "bigtts-and-bigtimes")
--
-- The "\drawcommi"s, "\drawcommit"s and "\drawwire"s in bigtts were
-- generated by hand. The "\drawbranch"es and the bigtimes were
-- generated by these test blocks,
--
-- (find-angg "bin/eevgitlib1.sh" "Time-tests")
-- (find-angg "LUA/ParseTimeline1.lua" "test2")
--
-- and copied to this file with cut and paste.
--
-- «big» (to ".big")
-- (to "big-tests")
bigtts = TikzTimes.from [=[
"A0"<=t and t<"A1" :: \drawcommi A {2,0};
"B0"<=t and t<"B1" :: \drawcommi B {2,1};
"C0"<=t and t<"C1" :: \drawcommi C {3,1};
"D0"<=t and t<"D1" :: \drawcommi D {1,2};
"E0"<=t and t<"E1" :: \drawcommi E {2,2};
"F0"<=t and t<"F1" :: \drawcommi F {3,2};
"G0"<=t and t<"G1" :: \drawcommi G {1,3};
"H0"<=t and t<"H1" :: \drawcommi H {2,3};
"I0"<=t and t<"I1" :: \drawcommi I {3,3};
"J0"<=t and t<"J1" :: \drawcommi J {4,3};
"A1"<=t :: \drawcommit A {2,0};
"B1"<=t :: \drawcommit B {2,1};
"C1"<=t :: \drawcommit C {3,1};
"D1"<=t :: \drawcommit D {1,2};
"E1"<=t :: \drawcommit E {2,2};
"F1"<=t :: \drawcommit F {3,2};
"G1"<=t :: \drawcommit G {1,3};
"H1"<=t :: \drawcommit H {2,3};
"I1"<=t :: \drawcommit I {3,3};
"J1"<=t :: \drawcommit J {4,3};
"B0"<=t :: \drawwire A B;
"C0"<=t :: \drawwire A C;
"D0"<=t :: \drawwire B D;
"E0"<=t :: \drawwire B E;
"F0"<=t :: \drawwire B F;
"F0.5"<=t :: \drawwire C F;
"G0"<=t :: \drawwire D G;
"H0"<=t :: \drawwire D H;
"I0"<=t :: \drawwire F I;
"J0"<=t :: \drawwire F J;
"A1"<=t and t<"A2" :: \drawbranch A {master\HEAD};
"A2"<=t and t<"B0" :: \drawbranch A {brAC\\master\HEAD};
"B0"<=t and t<"B1" :: \drawbranch A {brAC\\master\HEAD};
"B1"<=t and t<"B2" :: \drawbranch B {master\HEAD};
"B1"<=t and t<"B2" :: \drawbranch A {brAC};
"B2"<=t and t<"B3" :: \drawbranch B {brBDG\\master\HEAD};
"B2"<=t and t<"B3" :: \drawbranch A {brAC};
"B3"<=t and t<"C0" :: \drawbranch B {brBDG\\master};
"B3"<=t and t<"C0" :: \drawbranch A {brAC\HEAD};
"C0"<=t and t<"C1" :: \drawbranch B {brBDG\\master};
"C0"<=t and t<"C1" :: \drawbranch A {brAC\HEAD};
"C1"<=t and t<"C3" :: \drawbranch C {brAC\HEAD};
"C1"<=t and t<"C3" :: \drawbranch B {brBDG\\master};
"C3"<=t and t<"D0" :: \drawbranch C {brAC};
"C3"<=t and t<"D0" :: \drawbranch B {brBDG\HEAD\\master};
"D0"<=t and t<"D1" :: \drawbranch C {brAC};
"D0"<=t and t<"D1" :: \drawbranch B {brBDG\HEAD\\master};
"D1"<=t and t<"D4" :: \drawbranch C {brAC};
"D1"<=t and t<"D4" :: \drawbranch D {brBDG\HEAD};
"D1"<=t and t<"D4" :: \drawbranch B {master};
"D4"<=t and t<"E0" :: \drawbranch C {brAC};
"D4"<=t and t<"E0" :: \drawbranch D {brBDG};
"D4"<=t and t<"E0" :: \drawbranch B {brE\HEAD\\master};
"E0"<=t and t<"E1" :: \drawbranch C {brAC};
"E0"<=t and t<"E1" :: \drawbranch D {brBDG};
"E0"<=t and t<"E1" :: \drawbranch B {brE\HEAD\\master};
"E1"<=t and t<"E3" :: \drawbranch E {brE\HEAD};
"E1"<=t and t<"E3" :: \drawbranch C {brAC};
"E1"<=t and t<"E3" :: \drawbranch D {brBDG};
"E1"<=t and t<"E3" :: \drawbranch B {master};
"E3"<=t and t<"F1" :: \drawbranch E {brE};
"E3"<=t and t<"F1" :: \drawbranch C {brAC};
"E3"<=t and t<"F1" :: \drawbranch D {brBDG};
"E3"<=t and t<"F1" :: \drawbranch B {\HEAD\\master};
"F1"<=t and t<"F2" :: \drawbranch E {brE};
"F1"<=t and t<"F2" :: \drawbranch F {\HEAD};
"F1"<=t and t<"F2" :: \drawbranch D {brBDG};
"F1"<=t and t<"F2" :: \drawbranch C {brAC};
"F1"<=t and t<"F2" :: \drawbranch B {master};
"F2"<=t and t<"F3" :: \drawbranch E {brE};
"F2"<=t and t<"F3" :: \drawbranch F {\HEAD\\brFI};
"F2"<=t and t<"F3" :: \drawbranch D {brBDG};
"F2"<=t and t<"F3" :: \drawbranch C {brAC};
"F2"<=t and t<"F3" :: \drawbranch B {master};
"F3"<=t and t<"G0" :: \drawbranch E {brE};
"F3"<=t and t<"G0" :: \drawbranch F {brFI};
"F3"<=t and t<"G0" :: \drawbranch D {brBDG\HEAD};
"F3"<=t and t<"G0" :: \drawbranch C {brAC};
"F3"<=t and t<"G0" :: \drawbranch B {master};
"G0"<=t and t<"G1" :: \drawbranch E {brE};
"G0"<=t and t<"G1" :: \drawbranch F {brFI};
"G0"<=t and t<"G1" :: \drawbranch D {brBDG\HEAD};
"G0"<=t and t<"G1" :: \drawbranch C {brAC};
"G0"<=t and t<"G1" :: \drawbranch B {master};
"G1"<=t and t<"G4" :: \drawbranch G {brBDG\HEAD};
"G1"<=t and t<"G4" :: \drawbranch E {brE};
"G1"<=t and t<"G4" :: \drawbranch F {brFI};
"G1"<=t and t<"G4" :: \drawbranch C {brAC};
"G1"<=t and t<"G4" :: \drawbranch B {master};
"G4"<=t and t<"H0" :: \drawbranch G {brBDG};
"G4"<=t and t<"H0" :: \drawbranch E {brE};
"G4"<=t and t<"H0" :: \drawbranch F {brFI};
"G4"<=t and t<"H0" :: \drawbranch D {brH\HEAD};
"G4"<=t and t<"H0" :: \drawbranch C {brAC};
"G4"<=t and t<"H0" :: \drawbranch B {master};
"H0"<=t and t<"H1" :: \drawbranch G {brBDG};
"H0"<=t and t<"H1" :: \drawbranch E {brE};
"H0"<=t and t<"H1" :: \drawbranch F {brFI};
"H0"<=t and t<"H1" :: \drawbranch D {brH\HEAD};
"H0"<=t and t<"H1" :: \drawbranch C {brAC};
"H0"<=t and t<"H1" :: \drawbranch B {master};
"H1"<=t and t<"H3" :: \drawbranch H {brH\HEAD};
"H1"<=t and t<"H3" :: \drawbranch G {brBDG};
"H1"<=t and t<"H3" :: \drawbranch E {brE};
"H1"<=t and t<"H3" :: \drawbranch F {brFI};
"H1"<=t and t<"H3" :: \drawbranch C {brAC};
"H1"<=t and t<"H3" :: \drawbranch B {master};
"H3"<=t and t<"I0" :: \drawbranch H {brH};
"H3"<=t and t<"I0" :: \drawbranch G {brBDG};
"H3"<=t and t<"I0" :: \drawbranch E {brE};
"H3"<=t and t<"I0" :: \drawbranch F {brFI\HEAD};
"H3"<=t and t<"I0" :: \drawbranch C {brAC};
"H3"<=t and t<"I0" :: \drawbranch B {master};
"I0"<=t and t<"I1" :: \drawbranch H {brH};
"I0"<=t and t<"I1" :: \drawbranch G {brBDG};
"I0"<=t and t<"I1" :: \drawbranch E {brE};
"I0"<=t and t<"I1" :: \drawbranch F {brFI\HEAD};
"I0"<=t and t<"I1" :: \drawbranch C {brAC};
"I0"<=t and t<"I1" :: \drawbranch B {master};
"I1"<=t and t<"I4" :: \drawbranch I {brFI\HEAD};
"I1"<=t and t<"I4" :: \drawbranch H {brH};
"I1"<=t and t<"I4" :: \drawbranch G {brBDG};
"I1"<=t and t<"I4" :: \drawbranch E {brE};
"I1"<=t and t<"I4" :: \drawbranch C {brAC};
"I1"<=t and t<"I4" :: \drawbranch B {master};
"I4"<=t and t<"J0" :: \drawbranch I {brFI};
"I4"<=t and t<"J0" :: \drawbranch H {brH};
"I4"<=t and t<"J0" :: \drawbranch G {brBDG};
"I4"<=t and t<"J0" :: \drawbranch E {brE};
"I4"<=t and t<"J0" :: \drawbranch F {brJ\HEAD};
"I4"<=t and t<"J0" :: \drawbranch C {brAC};
"I4"<=t and t<"J0" :: \drawbranch B {master};
"J0"<=t and t<"J1" :: \drawbranch I {brFI};
"J0"<=t and t<"J1" :: \drawbranch H {brH};
"J0"<=t and t<"J1" :: \drawbranch G {brBDG};
"J0"<=t and t<"J1" :: \drawbranch E {brE};
"J0"<=t and t<"J1" :: \drawbranch F {brJ\HEAD};
"J0"<=t and t<"J1" :: \drawbranch C {brAC};
"J0"<=t and t<"J1" :: \drawbranch B {master};
"J1"<=t and t<"zz" :: \drawbranch I {brFI};
"J1"<=t and t<"zz" :: \drawbranch H {brH};
"J1"<=t and t<"zz" :: \drawbranch J {brJ\HEAD};
"J1"<=t and t<"zz" :: \drawbranch G {brBDG};
"J1"<=t and t<"zz" :: \drawbranch E {brE};
"J1"<=t and t<"zz" :: \drawbranch C {brAC};
"J1"<=t and t<"zz" :: \drawbranch B {master};
]=]
bigtimes = [=[ A0 A1 A2 B0 B1 B2 B3 C0 C1 C3 D0 D1 D4 E0 E1 E3
F1 F2 F3 G0 G1 G4 H0 H1 H3 I0 I1 I4 J0 J1 ]=]
-- «big-tests» (to ".big-tests")
-- (to "big")
--[==[
* (show2-use "~/LATEX/Show2.tex")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Loeliger1.lua"
times = "A0 A1 B0 B1"
times = bigtimes
= bigtts:sasgas(times)
= bigtts:sasgas(times):show00()
= bigtts:sasgas(times):show0 ()
= bigtts:sasgas(times):show ()
* (etv)
= Show.bigstr
= Show.log
--]==]
-- Local Variables:
-- coding: utf-8-unix
-- End: