|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file:
-- http://anggtwu.net/LUA/MaximaMsg1.lua.html
-- http://anggtwu.net/LUA/MaximaMsg1.lua
-- (find-angg "LUA/MaximaMsg1.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- A tool to download messages from the archive of the Maxima mailing list.
-- (find-fline "~/usrc/maxima-msgs/")
--
-- (defun e () (interactive) (find-angg "LUA/MaximaMsg1.lua"))
--
-- «.MaximaDay» (to "MaximaDay")
-- «.all-cached-messages» (to "all-cached-messages")
--
-- (find-angg "LUA/lua50init.lua" "fileexists")
-- (find-maximamsg "59113685 202501 01" "Stavros: Should polish-like expressions be documented?")
lynx_cmd = function (url, width)
return format("lynx -dump -width=%d '%s'", width or 205, url)
end
lynx_run = function (url, width)
return getoutput(lynx_cmd(url, width))
end
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "MaximaMsg1.lua"
= lynx "https://sourceforge.net/p/maxima/mailman/message/59113712/"
= lynx "https://sourceforge.net/p/maxima/mailman/maxima-discuss/?viewmonth=202501&viewday=01"
--]]
LynxCache = Class {
type = "LynxCache",
from = function (url,stem) return LynxCache {url=url, stem=stem} end,
messages0 = function () return LynxCache({}):run "ls ????????" end,
messages = function () return VTable(splitlines(LynxCache.messages0())) end,
__index = {
dir = "~/usrc/maxima-msgs/",
fname = function (lc) return lc.dir..lc.stem end,
fileexists = function (lc) return fileexists(ee_expand(lc:fname())) end,
fileload = function (lc) return ee_readfile(lc:fname()) end,
lynx_cmd = function (lc) return lynx_cmd(lc.url) end,
lynx_run = function (lc) return lynx_run(lc.url) end,
lynx_save = function (lc)
local output = lc:lynx_run()
getoutput(format("mkdir -p %s", lc.dir))
ee_writefile(lc:fname(), output)
return output
end,
lynx = function (lc)
if lc:fileexists() then return lc:fileload() end
return lc:lynx_save()
end,
run0 = function (lc,cmd) return format("cd %s && %s", lc.dir, cmd) end,
run = function (lc,cmd) return getoutput(lc:run0(cmd)) end,
delete = function (lc,str) return getoutput(lc:delete0(str)) end,
delete0 = function (lc,str)
return format("rm -v %s%s", lc.dir, str or lc.stem)
end,
},
}
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "MaximaMsg1.lua"
lc = LynxCache.from("http://anggtwu.net/", "o")
= lc:fname()
= lc:fileexists()
= lc:lynx()
= lc:lynx()
= lc:delete0("o")
= lc:delete0()
= lc:delete()
= lc:delete()
* (find-sh0 "rm -v ~/usrc/maxima-msgs/o")
** (find-fline "~/usrc/maxima-msgs/")
= lc:run "ls ????????"
= LynxCache.messages()
--]]
shortfrom_table = VTable {
["Andreas E. <and...@gm...>"] = "AEder",
["Barton W. <wi...@un...>"] = "BWillis",
["Daniel V. <dan...@ya...>"] = "DVolinski",
["Eduardo O. <edu...@gm...>"] = "Edrx",
["El O. De M. <obs...@gm...>"] = "ElObservatorio",
["Gunter K. <gun...@gm...>"] = "GKoenigsmann",
["Jaime V. <vi...@fe...>"] = "JVillate",
["Leo B. <Leo...@um...>"] = "LButler",
["Majzoub, E. <eri...@um...>"] = "EMajzoub",
["Michel G. <mg...@gm...>"] = "MGosse",
["Michel T. <ta...@lp...>"] = "MTalon",
["Oscar B. <osc...@gm...>"] = "OBenjamin",
["Raymond T. <toy...@gm...>"] = "RToy",
["Richard F. <fa...@gm...>"] = "RFateman",
["Robert D. <rob...@gm...>"] = "RDodier",
["Stavros M. <mac...@gm...>"] = "Stavros",
["Viktor T. T. <vt...@vt...>"] = "VToth",
["Wolfgang D. <wol...@da...>"] = "WDautermann",
["ehm <eri...@gm...>"] = "EMajzoub",
["richard <rp...@cl...>"] = "rpx",
}
MaximaMsg = Class {
type = "MaximaMsg",
from = function (id) return MaximaMsg {id=id} end,
__index = {
stem = function (mm) return mm.id end,
url = function (mm)
local fmt = "https://sourceforge.net/p/maxima/mailman/message/%s/"
return format(fmt, mm.id)
end,
lynx = function (mm) return LynxCache.from(mm:url(), mm:stem()):lynx() end,
lines = function (mm) return splitlines(mm:lynx()) end,
subjline0 = function (mm)
for _,li in ipairs(mm:lines()) do
if li:match("%[Maxima%-discuss%]") then return li end
end
end,
subjline = function (mm)
return (mm:subjline0():gsub("%[Maxima%-discuss%] ", ""))
end,
fromline = function (mm)
return mm:lynx():match("(From:[^\n]*)")
end,
from = function (mm)
return mm:fromline():match("^From: (.-) %- ")
end,
shortfrom = function (mm)
local a = mm:from()
if shortfrom_table[a] then return shortfrom_table[a] end
return a:match("^(.-) <") or "???"
end,
date = function (mm)
return mm:fromline():match("(%d%d%d%d)%-(%d%d)%-(%d%d)")
end,
synthstr = function (mm)
local y,m,d = mm:date()
return format("%s %s%s %s", mm.id, y,m, d)
end,
synthsexp = function (mm)
local fmt = '(find-maximamsg "%s" "%s: %s")'
return format(fmt, mm:synthstr(), mm:shortfrom(), mm:subjline())
end,
},
}
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "MaximaMsg1.lua"
mm = MaximaMsg.from "59113685"
= mm:lynx()
= mm:lynx()
= mm:fromline()
= mm:from()
= mm:shortfrom()
= mm:date()
= mm:subjline0()
= mm:subjline()
= mm:synthstr()
= mm:synthsexp()
ids = LynxCache.messages()
for _,id in ipairs(ids) do
print(id, MaximaMsg.from(id):subjline())
end
for _,id in ipairs(ids) do
print(id, MaximaMsg.from(id):from())
end
-- (find-fline "/tmp/maximamsgs/")
-- (find-fline "~/usrc/maxima-msgs/")
-- (find-maximamsg "59113685 202501 01" "")
-- (find-lynx "https://sourceforge.net/p/maxima/mailman/maxima-discuss/?viewmonth=202501&viewday=01")
--]]
-- «MaximaDay» (to ".MaximaDay")
MaximaDay = Class {
type = "MaximaDay",
from = function (y,m,d) return MaximaDay {y=y, m=m, d=d} end,
__index = {
stem = function (md) return format("%04d-%02d-%02d", md.y, md.m, md.d) end,
url = function (md)
local pre = "https://sourceforge.net/p/maxima/mailman/maxima-discuss/"
local fmt = "%s?viewmonth=%04d%02d&viewday=%02d"
return format(fmt, pre, md.y, md.m, md.d)
end,
lynx0 = function (md) return LynxCache.from(md:url(), md:stem()) end,
lynx = function (md) return LynxCache.from(md:url(), md:stem()):lynx() end,
lines = function (md) return splitlines(md:lynx()) end,
pat = "^ *(%d+)%. https://sourceforge.net/p/maxima/mailman/message/(%d+)/",
nids = function (md)
local A = VTable {}
for _,li in ipairs(md:lines()) do
local n,id = li:match(md.pat)
if n then table.insert(A, {n,id}) end
end
return A
end,
ids = function (md)
local A = VTable {}
for _,nid in ipairs(md:nids()) do table.insert(A, nid[2]) end
return A
end,
reload = function (md)
print(md:lynx0():delete())
return md
end,
},
}
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "MaximaMsg1.lua"
md = MaximaDay.from("2025", "01", "01")
md = MaximaDay.from(2025, 1, 1)
= md:stem()
= md:url()
= md:lynx()
= md:nids()
= md:ids()
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "MaximaMsg1.lua"
ids = MaximaDay.from(2025, 1, 4):reload():ids()
ids = MaximaDay.from(2025, 1, 5):reload():ids()
= ids
for _,id in ipairs(ids) do
local mm = MaximaMsg.from(id)
-- print(mm:shortfrom())
print(mm:synthsexp())
end
-- (find-angg "LUA/Calendar1.lua" "Calendar")
--]]
cal_mes_ndias = VTable {31, 29, 31, 30, 31, 30, -- jan fev mar abr mai jun
31, 31, 30, 31, 30, 31} -- jul ago set out nov dez
cal_mes_ndias = VTable {31, 28, 31, 30, 31, 30, -- jan fev mar abr mai jun
31, 31, 30, 31, 30, 31} -- jul ago set out nov dez
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "MaximaMsg1.lua"
for month=1,12 do
for day=1,cal_mes_ndias[month] do
local md = MaximaDay.from(2024, month, day)
print(md:ids())
end
end
for month=1,12 do
for day=1,cal_mes_ndias[month] do
md = MaximaDay.from(2025, month, day)
ids = md:ids()
for _,id in ipairs(ids) do
thisid = id
print(id, MaximaMsg.from(id):synthsexp())
end
end
end
= md
PP(md)
= ids
= thisid
mm = MaximaMsg.from(58721097)
mm = MaximaMsg.from(58731746)
= mm:fromline()
= mm:lynx()
= mm
= mm:from()
= mm:synthsexp()
ids = LynxCache.messages()
= ids
for _,id in ipairs(ids) do
print(id, MaximaMsg.from(id):subjline())
end
for _,id in ipairs(ids) do
print(id, MaximaMsg.from(id):synthsexp())
end
for _,id in ipairs(ids) do
print(id, MaximaMsg.from(id):from())
end
--]]
-- «all-cached-messages» (to ".all-cached-messages")
-- (find-fline "~/usrc/maxima-msgs/")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "MaximaMsg1.lua"
ids = LynxCache.messages()
for _,id in ipairs(ids) do
-- thisid = id
print(MaximaMsg.from(id):synthsexp())
end
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "MaximaMsg1.lua"
mm = MaximaMsg.from(59114438)
mm = MaximaMsg.from(59114461)
mm = MaximaMsg.from(59114492)
= mm:synthsexp()
--]]
-- Local Variables:
-- coding: utf-8-unix
-- End: