Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://anggtwu.net/LUA/Maxima.lua.html -- http://anggtwu.net/LUA/Maxima.lua -- (find-angg "LUA/Maxima.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- (defun e () (interactive) (find-angg "LUA/Maxima.lua")) -- Supersedes: (find-angg "LUA/emaxima.lua") -- Superseded by: (find-angg "LUA/Maxima2.lua") -- «.MaximaIO» (to "MaximaIO") -- «.MaximaIO-tests» (to "MaximaIO-tests") -- «.MaximaIOs» (to "MaximaIOs") -- «.MaximaIOs-tests» (to "MaximaIOs-tests") -- «.Lpeg» (to "Lpeg") -- «.Lpeg-tests» (to "Lpeg-tests") -- «.maxima-head» (to "maxima-head") -- «.Maxima» (to "Maxima") -- «.Maxima-tests» (to "Maxima-tests") require "ELpeg1" -- (find-angg "LUA/ELpeg1.lua") require "Show2" -- (find-angg "LUA/Show2.lua") require "Co1" -- (find-angg "LUA/Co1.lua") require "DeleteComments2" -- (find-angg "LUA/DeleteComments2.lua") -- __ __ _ ___ ___ -- | \/ | __ ___ _(_)_ __ ___ __ _|_ _/ _ \ -- | |\/| |/ _` \ \/ / | '_ ` _ \ / _` || | | | | -- | | | | (_| |> <| | | | | | | (_| || | |_| | -- |_| |_|\__,_/_/\_\_|_| |_| |_|\__,_|___\___/ -- -- «MaximaIO» (to ".MaximaIO") MaximaIO = Class { type = "MaximaIO", from0 = function (tbl) return MaximaIO(tbl) end, from = function (tbl) return MaximaIO(tbl):split() end, __tostring = function (mio) return mio[1].."\n"..(mio[2] or "(no mio[2])") end, __index = { pat = "^(%(%%[io]([%d+])%)) ?(.*)$", isplit = function (mio) local i,linenum,rest = mio[1]:match(mio.pat) local is = VTable {i=i, linenum=linenum, unpack(splitlines(rest))} mio.is = is return mio end, osplit = function (mio) local i,linenum,rest = mio[2]:match(mio.pat) local os = VTable {i=i, linenum=linenum, unpack(splitlines(rest))} mio.os = os return mio end, split = function (mio) return mio:isplit():osplit() end, -- co = Co.new(" \\%", "^"), cot = function (mio, str) return mio.co:translate(str) end, iprefix = function (mio) return mio.is.i end, ispace = function (mio) return (" "):rep(#mio:iprefix()) end, iprefixi = function (mio, i) return (i==1) and mio:iprefix() or mio:ispace() end, ii = function (mio, i) return mio.is[i] end, iii = function (mio, i) return mio:iprefixi(i).." "..mio:ii(i) end, iboxes = function (mio) local f = function (i) return format("\\maximablue{%s}", mio:cot(mio:iii(i))) end return mapconcat(f, seq(1, #mio.is), "%\n") end, oboxes = function (mio) local box = function (a,b) return format("\\maximared{%s}{%s}", a, b) end local i,linenum,rest = mio[2]:match(mio.pat) return box(mio:cot(i), "").."%\n"..box("", rest) end, tex = function (mio) return mio:iboxes().."%\n"..mio:oboxes() end, }, } -- «MaximaIO-tests» (to ".MaximaIO-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Maxima1.lua" mio = MaximaIO.from {"(%i1) foo +\nbar;", "(%o1) a+b"} = mio = mio:cot("x^2") = mio[1] = mio[2] = mio:split() = mio:iboxes() = mio:oboxes() = mio:tex() --]==] -- __ __ _ ___ ___ -- | \/ | __ ___ _(_)_ __ ___ __ _|_ _/ _ \ ___ -- | |\/| |/ _` \ \/ / | '_ ` _ \ / _` || | | | / __| -- | | | | (_| |> <| | | | | | | (_| || | |_| \__ \ -- |_| |_|\__,_/_/\_\_|_| |_| |_|\__,_|___\___/|___/ -- -- «MaximaIOs» (to ".MaximaIOs") MaximaIOs = Class { type = "MaximaIOs", lpat = nil, -- redefined below from = function (bigstr) local tbl = MaximaIOs.lpat:match(bigstr) tbl.bigstr = bigstr return MaximaIOs(tbl) end, __tostring = function (mios) return mapconcat(tostring, mios, "\n") end, __index = { tex = function (mios) local f = function (mio) return mio:tex() end return mapconcat(f, mios, "%\n") end, }, } -- «MaximaIOs-tests» (to ".MaximaIOs-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Maxima1.lua" bigstr = ee_readfile "/tmp/o" = bigstr mios = MaximaIOs.from(bigstr) = mios = mios.bigstr = mios:tex() = mios[1]:tex() o = MaximaIOs.lpat:match(bigstr) = o PP(o) = o[1] = o[2] = o[3] = o[4] = mapconcat(tostring, o, "\n") = mapconcat(tostring, mios, "\n") = o PPPV(o) = otype(o) --]==] -- _ -- | | _ __ ___ __ _ -- | | | '_ \ / _ \/ _` | -- | |___| |_) | __/ (_| | -- |_____| .__/ \___|\__, | -- |_| |___/ -- -- «Lpeg» (to ".Lpeg") lpeg.C1 = function (pat) return pat:C() / function (s) return s end end gr,V,VAST,VEXPECT,PEXPECT = Gram.new() V.line0 = ((1 - S"\n")^0):Cs() V.i = V.line0:Cmt(function (subj,pos,li) if li:match"^%(%%i" then return true,li end end) V.o = V.line0:Cmt(function (subj,pos,li) if li:match"^%(%%o" then return true,li end end) V.ni = V.line0:Cmt(function (subj,pos,li) if not li:match"^%(%%i" then return true,li end end) V.no = V.line0:Cmt(function (subj,pos,li) if not li:match"^%(%%o" then return true,li end end) V.bigi = (V.i * ("\n" * V.no )^0):C1() V.bigo = (V.o * ("\n" * V.ni )^0):C1() V.bigio = (V.bigi * "\n" * V.bigo ):Ct() / MaximaIO.from V.bigio = (V.bigi * "\n" * V.bigo^-1 ):Ct() / MaximaIO.from V.bigios = (V.bigio * ("\n" * V.bigio)^0):Ct() MaximaIOs.lpat = gr:compile("bigios") -- «Lpeg-tests» (to ".Lpeg-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Maxima1.lua" --]] -- «maxima-head» (to ".maxima-head") -- (find-angg "LUA/Verbatim1.lua" "vbt-head") registerhead = registerhead or function () return nop end registerhead "%M" { name = "maxima", action = function () local i,j,origlines = tf:getblock() local f = function (li) return li:sub(2) end maxima_lines00 = origlines maxima_lines0 = map(f, origlines) maxima_lines = mapconcat(f, origlines, "\n") end, } -- __ __ _ -- | \/ | __ ___ _(_)_ __ ___ __ _ -- | |\/| |/ _` \ \/ / | '_ ` _ \ / _` | -- | | | | (_| |> <| | | | | | | (_| | -- |_| |_|\__,_/_/\_\_|_| |_| |_|\__,_| -- -- «Maxima» (to ".Maxima") Maxima = Class { type = "Maxima", body0 = function () return maxima_lines end, body = function () return MaximaIOs.from(maxima_lines):tex() end, sa = function (name) output(Maxima.sa0(name, Maxima.body())) end, sa0 = function (name, body) return format("\\sa{%s}{%%\n%s%%\n}", name, body) end, __index = { }, } -- «Maxima-tests» (to ".Maxima-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Maxima1.lua" output = print maxima_lines = "(%i1) foo\n(%o1) bar" = Maxima.body() = Maxima.sa("foo") = Maxima.sa0("foo", "BAR") --]==] bigstr1 = [=[ (%i1) a : 2$ (%i2) a^3; (%o2) 8 (%i3) a : 2$ (%i4) a^3; (%o4) 8 (%i5) ]=] bigstr1 = [=[ (%i1) RP : 'diff(x^n,x) = n*x^(n-1); (%o1) {{d}\over{d\,x}}\,x^{n}=n\,x^{n-1} (%i2) subst([n=4], RP); (%o2) {{d}\over{d\,x}}\,x^4=4\,x^3 (%i3) RE : 'diff(x^n,x) = x^(n-1)+10*n; (%o3) {{d}\over{d\,x}}\,x^{n}=x^{n-1}+10\,n (%i4) subst([n=42], RE); (%o4) {{d}\over{d\,x}}\,x^{42}=x^{41}+420 (%i5) RC : 'diff(f(g(x)),x) = fp(g(x))*gp(x); (%o5) {{d}\over{d\,x}}\,f\left(g\left(x\right)\right)=\mathrm{gp}\left(x\right)\,\mathrm{fp}\left(g\left(x\right)\right) ]=] bigstr1 = [=[ (%i6) texput(fp, "f'")$ (%i7) texput(gp, "g'")$ (%i8) RC; (%o8) {{d}\over{d\,x}}\,f\left(g\left(x\right)\right)=g'\left(x\right)\,f'\left(g\left(x\right)\right) (%i9) sg : lambda([x],42*x); (%o9) \lambda\left(\left[ x \right] , 42\,x\right) (%i10) sgp : lambda([x],42); (%o10) \lambda\left(\left[ x \right] , 42\right) (%i11) sf : lambda([x],sin(x)); (%o11) \lambda\left(\left[ x \right] , \sin x\right) (%i12) sfp : lambda([x],cos(x)); (%o12) \lambda\left(\left[ x \right] , \cos x\right) (%i13) subst([g=sg,gp=sgp], RC); (%o13) {{d}\over{d\,x}}\,f\left(42\,x\right)=42\,f'\left(42\,x\right) (%i14) subst([f=sf,fp=sfp], RC); (%o14) {{d}\over{d\,x}}\,\sin g\left(x\right)=g'\left(x\right)\,\cos g\left(x\right) (%i15) subst([f=sf], RC); (%o15) {{d}\over{d\,x}}\,\sin g\left(x\right)=g'\left(x\right)\,f'\left(g\left(x\right)\right) (%i16) ]=] --[[ * (eepitch-maxima) * (eepitch-kill) * (eepitch-maxima) load("/usr/share/emacs/site-lisp/maxima/emaxima.lisp")$ display2d:'emaxima$ linenum:0; f(x) := sin(x)^3; define(F1(x), 'integrate(f(x), x)); define(F2(x), ev(f(x), 'integrate)); --]] --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Maxima1.lua" -- bigstr = ee_readfile "/tmp/o" bigstr = bigstr1 = bigstr o = gr:cm0("bigio", bigstr) o = gr:cm0("bigios", bigstr) o = gr:cm0("bigi", bigstr) o = gr:cm0("i", bigstr) PP(o) = o[1][1] = o[1][2] = o[2][1] = o[2][2] = o[3][1] = o[3][2] = o[4] --]] -- Local Variables: -- coding: utf-8-unix -- End: