Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://anggtwu.net/LUA/Caepro3.lua.html -- http://anggtwu.net/LUA/Caepro3.lua -- (find-angg "LUA/Caepro3.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- (defun c1 () (interactive) (find-angg "LUA/Caepro1.lua")) -- (defun c2 () (interactive) (find-angg "LUA/Caepro2.lua")) -- (defun c3 () (interactive) (find-angg "LUA/Caepro3.lua")) -- (defun c4 () (interactive) (find-angg "LUA/Caepro4.lua")) -- -- (defun g2 () (interactive) (find-angg "LUA/Gram2.lua")) -- (defun g3 () (interactive) (find-angg "LUA/Gram3.lua")) -- -- (defun e () (interactive) (find-angg "LUA/Caepro3.lua")) -- (find-angg "LUA/Caepro2.lua" "Jpg") -- (find-angg "LUA/Caepro2.lua" "Pdf") -- (find-angg "LUA/Caepro2.lua" "Pdfs") -- (find-angg "LUA/Caepro2.lua" "Html") -- «.MkTable» (to "MkTable") -- «.MkTable-tests» (to "MkTable-tests") -- «.AnyOf» (to "AnyOf") -- «.AnyOf-tests» (to "AnyOf-tests") -- «.anyofs» (to "anyofs") -- «.anyofs-tests» (to "anyofs-tests") -- «.abbrevpat» (to "abbrevpat") -- «.abbrevpat-tests» (to "abbrevpat-tests") -- «.Abbrevs» (to "Abbrevs") -- «.Abbrevs-tests» (to "Abbrevs-tests") -- «.run_options» (to "run_options") -- «.run_options-tests» (to "run_options-tests") require "Gram2" -- (find-angg "LUA/Gram2.lua") -- __ __ _ _____ _ _ -- | \/ | | _|_ _|_ _| |__ | | ___ -- | |\/| | |/ / | |/ _` | '_ \| |/ _ \ -- | | | | < | | (_| | |_) | | __/ -- |_| |_|_|\_\ |_|\__,_|_.__/|_|\___| -- -- «MkTable» (to ".MkTable") MkTable = Class { type = "MkTable", from = function (bigstr, tag) local mkt = MkTable {bigstr=bigstr, tag=tag, _=VTable{}} for k,v in mkt:gmatch() do mkt._[k] = v end return mkt end, __tostring = function (mkt) return mkt.bigstr end, __index = { pat = "(%S+) +%-> +(%S+)", gmatch = function (mkt) return mkt.bigstr:gmatch(mkt.pat) end, kvs = function (mkt) return mkt.bigstr:gmatch(mkt.pat) end, v = function (mkt,k) return mkt._[k] end, }, } mktable = function (bigstr) return MkTable.from(bigstr)._ end -- «MkTable-tests» (to ".MkTable-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Caepro3.lua" bigstr = [[ foobar -> OOBAR (Comment) foo -> OO foob -> OOB ]] mkt = MkTable.from(bigstr) = mkt = mkt:v("foo") = mkt._ for k,v in mkt:gmatch() do print(k,v) end for k,v in mkt:kvs() do print(k,v) end --]==] -- _ ___ __ -- / \ _ __ _ _ / _ \ / _| -- / _ \ | '_ \| | | | | | | |_ -- / ___ \| | | | |_| | |_| | _| -- /_/ \_\_| |_|\__, |\___/|_| -- |___/ -- -- «AnyOf» (to ".AnyOf") -- See: (find-angg "LUA/Gram2.lua" "anyof") AnyOf = Class { type = "AnyOf", from = function (bigstr, tag, default) local mt = MkTable.from(bigstr) return AnyOf {mt=mt, tag=tag, default=default} end, __tostring = function (mtp) return mtp.mt.bigstr end, __index = { kvs = function (mtp) return mtp.mt:kvs() end, v = function (mtp, k) return mtp.mt:v(k) end, -- -- Basic patterns: Cg1 = function (mtp, k) return Cc(mtp:v(k)):Cg(mtp.tag) end, Cg = function (mtp, k) return mtp.tag and mtp:Cg1(k) or P"" end, Cs = function (mtp, k) return Cs(k) * mtp:Cg(k) end, -- -- Patterns for the default: Csd = function (mtp) return Cc(mtp.default) end, Cgd = function (mtp) return mtp:Cg(mtp.default) end, Cd = function (mtp) return mtp:Csd() * mtp:Cgd() end, -- pat = function (mtp) local p = P(false) for k,v in mtp:kvs() do p = p + mtp:Cs(k) end return p end, opt = function (mtp) local p = mtp:pat() if mtp.default then p = p + mtp:Cd() end return p end }, } mktablepat = function (bigstr, tag, default) return AnyOf.from(bigstr, tag, default) end -- «AnyOf-tests» (to ".AnyOf-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Caepro3.lua" bigstr = [[ a -> AA b -> BB c -> CC ]] mtp = AnyOf.from(bigstr, "TAG", "b") = mtp = mtp:v("b") = mtp.default s = Cs"_" p = mtp:pat() p = mtp:opt() p = (s * p * s):Ct() PP(p:match("_a_")) PP(p:match("__")) p = AnyOf.from(bigstr, "TAG", "b"):opt() p = (s * p * s):Ct() PP(p:match("_a_")) PP(p:match("__")) --]==] -- __ -- __ _ _ __ _ _ ___ / _|___ -- / _` | '_ \| | | |/ _ \| |_/ __| -- | (_| | | | | |_| | (_) | _\__ \ -- \__,_|_| |_|\__, |\___/|_| |___/ -- |___/ -- -- «anyofs» (to ".anyofs") sems = AnyOf.from([[ x -> 2019.1 y -> 2019.2 a -> 2020.1 b -> 2020.2 c -> 2021.1 d -> 2021.2 e -> 2022.1 f -> 2022.2 g -> 2023.1 ]], "yyyyds", "f") Ms = AnyOf.from([[ 2 -> C2 3 -> C3 4 -> C4 5 -> ES 7 -> LA ]], "MM") otherHtmls = AnyOf.from([[ (find-TH "2023-caepro") Issomuda -> 2023-caepro0 SobreaVR -> 2023-caepro-VR Oquesobra -> 2023-caepro-o-que-sobra Visaud -> 2023-visual-vs-auditivo Slogans -> 2023-precisamos-de-mais-slogans Sapt -> 2021aulas-por-telegram Somas -> 2021-1-C2-somas-1-dicas Cabos -> 2021-2-c3-cabos-na-diagonal AprC2 -> 2022-apresentacao-sobre-C2 CalcEasy -> mathologer-calculus-easy ]], "htmlstem") anggPdfs = AnyOf.from([[ Bort3 -> 2019.2-C3/Bortolossi/bortolossi-cap-3 Bort4 -> 2019.2-C3/Bortolossi/bortolossi-cap-4 Bort5 -> 2019.2-C3/Bortolossi/bortolossi-cap-5 Bort6 -> 2019.2-C3/Bortolossi/bortolossi-cap-6 Bort7 -> 2019.2-C3/Bortolossi/bortolossi-cap-7 Bort8 -> 2019.2-C3/Bortolossi/bortolossi-cap-8 Bort10 -> 2019.2-C3/Bortolossi/bortolossi-cap-10 Bort11 -> 2019.2-C3/Bortolossi/bortolossi-cap-11 Bort12 -> 2019.2-C3/Bortolossi/bortolossi-cap-12 Leit1 -> tmp/leithold-pt-cap1 Leit2 -> tmp/leithold-pt-cap2 Leit3 -> tmp/leithold-pt-cap3 Leit4 -> tmp/leithold-pt-cap4 Leit5 -> tmp/leithold-pt-cap5 Leit6 -> tmp/leithold-pt-cap6 Leit7 -> tmp/leithold-pt-cap7 Leit8 -> tmp/leithold-pt-cap8 Leit9 -> tmp/leithold-pt-cap9 ]], "pdfstem") externalPdfs = AnyOf.from([[ Miranda -> http://hostel.ufabc.edu.br/~daniel.miranda/calculo/calculo.pdf ]], "pdfurl") -- «anyofs-tests» (to ".anyofs-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Caepro3.lua" p = otherHtmls:pat():Ct() PP(p:match("Slogans01:23")) --]] -- _ _ _ -- __ _| |__ | |__ _ __ _____ ___ __ __ _| |_ -- / _` | '_ \| '_ \| '__/ _ \ \ / / '_ \ / _` | __| -- | (_| | |_) | |_) | | | __/\ V /| |_) | (_| | |_ -- \__,_|_.__/|_.__/|_| \___| \_/ | .__/ \__,_|\__| -- |_| -- «abbrevpat» (to ".abbrevpat") defaultsem = "f" gr,V,VA,VE,PE = Gram.new() V.m = Cs(S"23457") -- matéria: C2, C3, C4, LA, ES V.sem = Cs(S"xyabcdefg") -- semestre V.optsem = Cs(V.sem) + Cc(defaultsem) -- semestre (opcional) V.page = Cs(R"09"^1) -- página do PDF V.optpage = Cs(V.page) + Cc("1") -- página do PDF (opcional) V.numpdf = Cs(R"09"^1) -- número do PDF (para logs pdfizados) V.turma = Cs(S"cem") -- turma (para logs pdfizados) V.anchor = (P"#"^-1 * Cs(P(1)^1)) / function (str) return "#"..str end V.optanchor = V.anchor + Cc"" VA.Tudo = V.m * V.optsem * Cs("T") * V.optpage VA.semPage = V.m * V.optsem * Cs("P") * V.optanchor VA.quadros = V.m * V.optsem * Cs("Q") * V.optpage VA.quadrosJpgs = V.m * V.optsem * Cs("J") * V.optpage VA.logPdfizado = V.m * V.optsem * Cs("L") * V.numpdf * V.turma * V.optpage -- VA.otherHtml = (Cs"Sapt" + Cs"Visaud" + Cs"Slogans" + Cs"Issomuda" + Cs"CalcEasy" + -- Cs"Cabos" + Cs"Apr") * V.optanchor VA.otherHtml = otherHtmls:pat() * V.optanchor VA.anggPdf = anggPdfs:pat() * S"pP"^-1 * V.optpage VA.externalPdf = externalPdfs:pat() * S"pP"^-1 * V.optpage V.any = V.Tudo + V.semPage + V.quadros + V.quadrosJpgs + V.logPdfizado + V.otherHtml + V.anggPdf + V.externalPdf abbrevpat = gr:compile("any") -- «abbrevpat-tests» (to ".abbrevpat-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Caepro3.lua" = gr:cm("Tudo", "2eT1") = gr:cm("Tudo", "5T") = gr:cm("semPage", "2P") = gr:cm("semPage", "2aP#foo") = gr:cm("semPage", "5aP1:23") = gr:cm("quadros", "2xQ1") = gr:cm("quadros", "3Q") = gr:cm("quadrosJpgs", "2xQ1") = gr:cm("quadrosJpgs", "3Q") = gr:cm("logPdfizado", "3dL2m") = gr:cm("logPdfizado", "3dL2m42") = gr:cm("logPdfizado", "3L2m42") = gr:cm("otherHtml", "Sapt") = gr:cm("otherHtml", "Sapt01:23") gr:cmp("otherHtml", "Sapt01:23") gr:cmp("anggPdf", "Bort7") gr:cmp("anggPdf", "Bort7p4") gr:cmp("externalPdf", "Miranda") = gr:cm("any", "2eT1") = gr:cm("any", "5T") = gr:cm("any", "2P") = gr:cm("any", "2aP#foo") = gr:cm("any", "5aP1:23") = gr:cm("any", "2xQ1") = gr:cm("any", "3Q") = gr:cm("any", "2xQ1") = gr:cm("any", "3Q") = gr:cm("any", "3dL2m") = gr:cm("any", "3dL2m42") = gr:cm("any", "3L2m42") = gr:cm("any", "Sapt") = gr:cm("any", "Sapt01:23") = abbrevpat:match "Sapt01:23" --]] -- _ _ _ -- / \ | |__ | |__ _ __ _____ _____ -- / _ \ | '_ \| '_ \| '__/ _ \ \ / / __| -- / ___ \| |_) | |_) | | | __/\ V /\__ \ -- /_/ \_\_.__/|_.__/|_| \___| \_/ |___/ -- -- «Abbrevs» (to ".Abbrevs") -- Abbrevs = Class { type = "Abbrevs", __index = { semestres = mktable [[ x -> 2019.1 y -> 2019.2 a -> 2020.1 b -> 2020.2 c -> 2021.1 d -> 2021.2 e -> 2022.1 f -> 2022.2 g -> 2023.1 ]], MMs = mktable [[ 2 -> C2 3 -> C3 4 -> C4 5 -> ES 7 -> LA ]], otherHtmls = mktable [[ Sapt -> 2021aulas-por-telegram Visaud -> 2023-visual-vs-auditivo Slogans -> 2023-precisamos-de-mais-slogans Issomuda -> 2023-caepro0 CalcEasy -> mathologer-calculus-easy Somas -> 2021-1-C2-somas-1-dicas Cabos -> 2021-2-c3-cabos-na-diagonal Apr -> 2022-apresentacao-sobre-C2 ]], quadros = mktable [[ 2x -> 2019.1-C2/2019.1-C2.pdf 3x -> 2019.1-C3/2019.1-C3.pdf 2y -> 2019.2-C2/2019.2-C2.pdf 3y -> 2019.2-C3/2019.2-C3.pdf 2e -> 2022.1-C2/C2-quadros.pdf 3e -> 2022.1-C3/C3-quadros.pdf 2f -> 2022.2-C2/C2-quadros.pdf 3f -> 2022.2-C3/C3-quadros.pdf 2g -> 2023.1-C2/C2-quadros.pdf 4g -> 2023.1-C4/C4-quadros.pdf 7g -> 2023.1-LA/LA-quadros.pdf ]], fmts = mktable [[ Tudo -> LATEX/<yyyy_s>-<MM>-tudo.pdf semPage -> <yyyyds>-<MM>.html logPdfizado -> logs-pdfizados/<M><sem>L<numpdf><turma>.pdf otherHtml -> <hstem>.html<a> anggPdf -> <pdfstem>.pdf externalPdf -> <pdfurl> quadros -> <quadro> ]], whats = mktable [[ Tudo -> pdf semPage -> html logPdfizado -> pdf otherHtml -> html anggPdf -> pdf externalPdf -> externalpdf quadros -> pdf ]], -- yyyyds = function (ab, A) return ab.semestres[A.sem] end, yyyy_s = function (ab, A) return (ab.semestres[A.sem]:gsub("%.", "-")) end, MM = function (ab, A) return ab.MMs[A.M] end, quadro = function (ab, A) return ab.quadros[A.M..A.sem] end, -- subst = function (ab, fmt, A) local f = function (s) if s == "MM" then return ab:MM (A) end if s == "yyyyds" then return ab:yyyyds(A) end if s == "yyyy_s" then return ab:yyyy_s(A) end if s == "quadro" then return ab:quadro(A) end if s == "hpage" then return A.p and "#page="..A.p or "" end if s == "hstem" then return A.htmlstem end -- if s == "hstem" then return ab.otherHtmls[A.short] end return A[s] end return (fmt:gsub("<(.-)>", f)) end, -- ast = function (ab, str) return abbrevpat:match(str) end, -- A = function (ab, str) return ab:A1(ab:ast(str)) end, A1 = function (ab, ast) return HTable(ab:As(ast)[ast[0]]) end, As = function (ab, ast) return VTable { Tudo = {M=ast[1], sem=ast[2], p=ast[4]}, semPage = {M=ast[1], sem=ast[2], a=ast[4]}, quadros = {M=ast[1], sem=ast[2], p=ast[4]}, logPdfizado = {M=ast[1], sem=ast[2], numpdf=ast[4], turma=ast[5], p=ast[6]}, otherHtml = {short=ast[1], a=ast[2], htmlstem=ast.htmlstem}, anggPdf = {short=ast[1], p=ast[2], pdfstem=ast.pdfstem}, externalPdf = {short=ast[1], p=ast[2], pdfurl=ast.pdfurl}, } end, -- fmt = function (ab, str) return ab:fmt0(ab:ast(str)) end, fmt0 = function (ab, ast) return ab:subst(ab:fmt00(ast), ab:A1(ast)) end, fmt00 = function (ab, ast) return ab.fmts[ast[0]] end, -- reduce = function (ab, str) local ast = ab:ast(str) local what = ab.whats[ast[0]] local page = ab:A(str).p return what, ab:fmt(str), page end, -- pcall = function (ab, f) local ok,result = pcall(f) if ok then return result end end, sexp0 = function (ab, str) local what,baseurl,page = ab:reduce(str) local spage = page and " "..page or "" if what == "html" then return format('(brg "file:///home/edrx/TH/L/%s")', baseurl) end if what == "pdf" then return format('(find-pdf "~/%s"%s)', baseurl, spage) end if what == "externalpdf" then return format('(find-pdf-page (ee-url-to-fname "%s")%s)', baseurl, spage) end end, anggurl0 = function (ab, str) local what,baseurl,page = ab:reduce(str) local prefix = (what == "externalpdf") and "" or "http://anggtwu.net/" local hpage = page and "#page="..page or "" return prefix..baseurl..hpage end, sexp = function (ab, str) return ab:pcall(function() return ab:sexp0(str) end) end, anggurl = function (ab, str) return ab:pcall(function() return ab:anggurl0(str) end) end, }, } -- «Abbrevs-tests» (to ".Abbrevs-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Caepro3.lua" ab = Abbrevs {} = ab.semestres = ab:yyyyds {sem="x"} = ab:yyyy_s {sem="x"} = ab:subst ("<sem>:<yyyyds>:<yyyy_s>", {sem="x"}) = ab.MMs = ab:MM {M="5"} = ab:subst ("<M>:<MM>", {M="5"}) = ab.quadros = ab:quadro {M="2", sem="x"} = ab:subst ("<M>:<sem>:<quadro>", {M="2", sem="x"}) = ab.otherHtmls = ab:subst ("<short>:<hstem>", {short="Cabos"}) = ab:ast "2yT1" = ab:As(ab:ast "2yT1") = ab:A1(ab:ast "2yT1") = ab:A "2yT1" = ab:fmt00 {[0]="Tudo"} = ab:fmt0 (ab:ast "2yT1") = ab:fmt "2yT1" = ab:fmt "2T" = ab:fmt "5T" = ab:fmt "Cabos" = ab:ast "Cabos" = ab:fmt "Cabos" = ab:fmt "Cabos01:23" = ab:fmt "Cabos#01:23" = ab:fmt "Bort7" = ab:reduce "Cabos" = ab:reduce "Cabos#01:23" = ab:reduce "2T" = ab:reduce "2T66" = ab:anggurl "Cabos#01:12" = ab:anggurl "2T66" = ab:sexp "Cabos#01:12" = ab:sexp "2T66" = ab:sexp "Bort7" = ab:sexp "Bort7p12" = ab:fmt "Miranda" = ab:reduce "Miranda" = ab:reduce "Miranda65" = ab:sexp "Miranda" = ab:sexp "Miranda65" = ab:anggurl "Miranda65" -- (brxpdfl "http://hostel.ufabc.edu.br/~daniel.miranda/calculo/calculo.pdf" 65) -- (find-pdf-page "http://hostel.ufabc.edu.br/~daniel.miranda/calculo/calculo.pdf" 65) -- (find-pdf-page "$S/http/hostel.ufabc.edu.br/~daniel.miranda/calculo/calculo.pdf" 65) = ab:sexp0 "f2wT66" -- err = ab:sexp "f2wT66" -- err --]==] -- «run_options» (to ".run_options") -- (find-angg ".emacs" "caepro3") -- (find-es "lua5" "run_options") -- run_options = function (a, b) ab = Abbrevs {} if a == nil then return elseif a == "Caepro3" then return elseif a == "-sexp" then print(ab:sexp(b)) elseif a == "-url" then print(ab:anggurl(b)) else PP("Bad options:", a, b) end end run_options(...) -- «run_options-tests» (to ".run_options-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Caepro3.lua" run_options("-sexp", "2T66") run_options("-sexp", "_2T66") run_options("-sexp", "Leit4") run_options("-sexp", "Leit4p10") run_options("-sexp", "7gQ") * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) require "Caepro3" --]] -- Local Variables: -- coding: utf-8-unix -- End: