Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://angg.twu.net/LUA/tikz1.lua.html -- http://angg.twu.net/LUA/tikz1.lua -- (find-angg "LUA/tikz1.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- Version: 2022nov05 -- Public domain. -- -- (defun t () (interactive) (find-angg "LUA/tikz1.lua")) -- (find-angg "LUA/Pict2e1.lua" "Show") -- -- See: http://angg.twu.net/eev-tikz.html -- http://angg.twu.net/eev-tikz.html#trying-it -- -- Usage: -- * (setq eepitch-preprocess-regexp "^-- ? ? ?") -- * (eepitch-lua51) -- * (eepitch-kill) -- * (eepitch-lua51) -- ee_dofile "~/LUA/tikz1.lua" -- (find-angg "LUA/tikz1.lua") -- tikzbody = tikz [=[ -- \draw[color=orange] (0,0)--(0,2)--(1,2); -- ]=] -- show() -- * (find-pdftoolsr-page "/tmp/tikz1.pdf") -- -- See: (find-es "tikz" "axes") -- (find-angg ".emacs.templates" "tikz1") -- -- «.Show-class» (to "Show-class") -- «.Show-tests» (to "Show-tests") -- «.show» (to "show") -- «.savetex» (to "savetex") -- «.savetex-tests» (to "savetex-tests") -- «.Dang» (to "Dang") -- «.Dang-tests» (to "Dang-tests") -- «.texbody» (to "texbody") -- «.texbody-tests» (to "texbody-tests") -- «.tikzbody-tests» (to "tikzbody-tests") -- «.repl» (to "repl") -- «.repl2» (to "repl2") -- «.repl-tests» (to "repl-tests") -- «Show-class» (to ".Show-class") Show = Class { type = "Show", new = function (bigstr) return Show {bigstr = bigstr} end, try = function (bigstr) return Show.new(bigstr):try() end, __tostring = function (show) return format("Show: %s => %s", show:fnametex(), show.success or "?") end, __index = { fnametex = function () return "/tmp/tikz1.tex" end, fnamepdf = function () return "/tmp/tikz1.pdf" end, cmd = function () return "cd /tmp/ && lualatex tikz1.tex < /dev/null" end, write = function (show) ee_writefile(show:fnametex(), show.bigstr) return show end, compile = function (show) local log = getoutput(show:cmd()) local success = log:match "Success!!!" Show.log = log show.success = success return show end, try = function (show) return show:write():compile() end, }, } -- «Show-tests» (to ".Show-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "tikz1.lua" sh = Show.new [=[ \documentclass{book} \begin{document} Hello \GenericWarning{Success:}{Success!!!} \end{document} ]=] = sh.bigstr = sh:try() * (find-pdftools-page "/tmp/tikz1.pdf") --]==] -- ____ -- | _ \ __ _ _ __ __ _ -- | | | |/ _` | '_ \ / _` | -- | |_| | (_| | | | | (_| | -- |____/ \__,_|_| |_|\__, | -- |___/ -- -- «Dang» (to ".Dang") -- When an object of the classe Dang is "expanded" by tostring all its -- parts between double angle brackets are "expanded" by evaluation, -- or, more precisely, by running dangeval on them... -- Some examples: -- dangeval("'foo'") --> "foo" -- dangeval("'foo'..'bar'") --> "foobar" -- dangeval("'foo','bar'") --> "foo" -- dangeval("2+3") --> "5" -- dangeval("nil") --> "" -- dangeval("") --> "" -- dangeval(":a='foo'; return a..'.'") --> "foo." -- dangreplace("(<<:a=2>>,<<a*a>>)") --> "(,4)" -- tostring(Dang.from("(<<:a=2>>,<<a*a>>)")) --> "(,4)" -- (find-angg "LUA/lua50init.lua" "eval-and-L") dangeval = function (s) local r if s:match("^:") then r = eval(s:sub(2)) else r = expr(s) end if r == nil then return "" end return tostring(r) end dangreplace = function (bigstr) return (bigstr:gsub("<<(.-)>>", dangeval)) end Dang = Class { from = function (bigstr) return Dang {bigstr=bigstr} end, type = "Dang", __tostring = function (da) return dangreplace(da.bigstr) end, __index = { show = function (da) return Show.new(tostring(da)) end, try = function (da) return da:show():try() end, }, } dang = function (bigstr) return Dang.from(bigstr) end tikz = function (bigstr) return Dang.from(bigstr) end -- «Dang-tests» (to ".Dang-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "tikz1.lua" a = "foo" b = tikz "(<<a>>,<<aa>>)" c = tikz ".<<b>>,<<2+3>>,<<:return 4+5>>." = a --> "foo" = b --> "(foo,)" aa = "AAA" = b --> "(foo,AAA)" = c --> ".(foo,AAA),5,9." = c.bigstr --> ".<<b>>,<<2+3>>,<<:return 4+5>>." --]==] -- _ -- ___| |__ _____ __ -- / __| '_ \ / _ \ \ /\ / / -- \__ \ | | | (_) \ V V / -- |___/_| |_|\___/ \_/\_/ -- -- «show» (to ".show") show = function () print('* (find-anchor "~/LUA/tikz1.lua")') print('* (find-fline "/tmp/tikz1.tex")') print('* (find-pdftools-page "/tmp/tikz1.pdf")') print('* (find-fline "/tmp/tikz1.log" :end)') print("** Run this on error: = Show.log") print(texbody:try()) end -- «savetex» (to ".savetex") savetex = function () texbody:show():write() print('** Saved the .tex in:') print('* (find-fline "/tmp/tikz1.tex")') end -- «savetex-tests» (to ".savetex-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "tikz1.lua" = texbody.bigstr savetex() * (tikz-showtex) hello = "HELLO" savetex() * (tikz-showtex) x0,y0,x1,y1 = 0,0,3,2 tikzbody = tikz [=[ \draw (<<x0>>,<<y0>>) -- (<<x1>>,<<y1>>) ]=] savetex() * (tikz-showtex) x1 = 4 savetex() * (tikz-showtex) usepackages = [=[\usetikzlibrary{positioning,arrows,calc}]=] savetex() * (tikz-showtex) --]==] -- _ _ _ -- | |_ _____ _| |__ ___ __| |_ _ -- | __/ _ \ \/ / '_ \ / _ \ / _` | | | | -- | || __/> <| |_) | (_) | (_| | |_| | -- \__\___/_/\_\_.__/ \___/ \__,_|\__, | -- |___/ -- «texbody» (to ".texbody") scale = "1.0" geometry = "paperwidth=148mm, paperheight=88mm,\n ".. "top=1.5cm, bottom=.25cm, left=1cm, right=1cm, includefoot" saysuccess = "\\GenericWarning{Success:}{Success!!!}" texbody = Dang.from [=[ \documentclass{book} \usepackage{xcolor} \usepackage{colorweb} \usepackage{tikz} \usepackage[<<geometry>>]{geometry} <<usepackages>> \begin{document} \pagestyle{empty} <<defs>> <<hello>> \scalebox{<<scale>>}{% \begin{tikzpicture}<<options>> <<tikzbody>>% \end{tikzpicture}% } % <<repl>> <<saysuccess>> \end{document} ]=] -- «texbody-tests» (to ".texbody-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "tikz1.lua" hello = "FOO" show() * (find-pdftoolsr-page "/tmp/tikz1.pdf") hello = "\\FOO" show() = Show.log --]==] -- «tikzbody-tests» (to ".tikzbody-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "tikz1.lua" tikzbody = tikz [=[ \draw[thick, color=orange] (0,0)--(1,2)--(2,0)--cycle; ]=] show() * (find-pdftoolsr-page "/tmp/tikz1.pdf") --]==] -- _ -- _ __ ___ _ __ | | -- | '__/ _ \ '_ \| | -- | | | __/ |_) | | -- |_| \___| .__/|_| -- |_| -- -- «repl» (to ".repl") -- «repl2» (to ".repl2") -- Here's how this works. The default value for texbody includes a -- "<<repl>>", and by default that expands to "". When we run -- -- repl = repl2 -- -- this makes texbody include the code below. The function -- run_repl2_now() is defined in my init file; see: -- (find-angg "LUA/lua50init.lua" "Repl2.lua" "run_repl2_now") -- repl2 = [=[ \directlua{ dofile(os.getenv("LUA_INIT"):sub(2)) } \def\repl{\directlua{ print(); run_repl2_now() }} \def\luaprintmeaning#1{\directlua{ print() print("#1: "..(token.get_meaning("#1") or "")) }} \nonstopmode \repl ]=] -- «repl-tests» (to ".repl-tests") -- The test below is very basic. -- For more advanced tests, see: -- (find-angg "LUA/Repl2.lua" "getmeaning-tests") -- (find-angg "LUA/Repl2.lua" "texrun-tests") -- To insert a block similar to the one below in your notes, -- run `M-x tir'. See: -- (find-angg "LUA/tikz1.el" "tir") -- (find-anchor "~/LUA/tikz1.el" "tir") -- --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) ee_dofile "~/LUA/tikz1.lua" repl = repl2 savetex() ** * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) cd /tmp/ && lualatex tikz1.tex print(token.get_meaning("newpage")) --]==] -- Local Variables: -- coding: utf-8-unix -- End: