Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
-- This file:
--   http://anggtwu.net/LUA/EmacsConf2023.lua.html
--   http://anggtwu.net/LUA/EmacsConf2023.lua
--          (find-angg "LUA/EmacsConf2023.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- (defun e () (interactive) (find-angg "LUA/EmacsConf2023.lua"))
-- (find-fline "~/LOGS/2023dec09.emacs")
-- (find-fline "~/LOGS/2023dec09.emacs" ".m3u")
-- (find-fline "~/LOGS/2023dec09.emacs" "json")

-- https://media.emacsconf.org/2023/index.m3u
-- https://media.emacsconf.org/2023/talks.json
-- https://media.emacsconf.org/2023/
-- https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.webm
-- "emms" -> "emacs-multimedia-system-emms--yoni-rabkin"
-- (find-fline "$S/https/media.emacsconf.org/2023/index.m3u")

-- «.EmacsConf2023»		(to "EmacsConf2023")
-- «.EmacsConf2023-tests»	(to "EmacsConf2023-tests")


require "GetOpt1"    -- (find-angg "LUA/GetOpt1.lua")



--  _____                           ____             __ ____   ___ ____  _____ 
-- | ____|_ __ ___   __ _  ___ ___ / ___|___  _ __  / _|___ \ / _ \___ \|___ / 
-- |  _| | '_ ` _ \ / _` |/ __/ __| |   / _ \| '_ \| |_  __) | | | |__) | |_ \ 
-- | |___| | | | | | (_| | (__\__ \ |__| (_) | | | |  _|/ __/| |_| / __/ ___) |
-- |_____|_| |_| |_|\__,_|\___|___/\____\___/|_| |_|_| |_____|\___/_____|____/ 
--                                                                             
-- «EmacsConf2023»  (to ".EmacsConf2023")

EmacsConf2023 = Class {
  type    = "EmacsConf2023",
  __index = {
    m3u  = ee_readfile "$S/https/media.emacsconf.org/2023/index.m3u",
    pat0 = "#EXTINF:%-1,([^\n]*)\n([^\n]*)",
    pat1 = "emacsconf%-2023%-(.-)%-%-(.-)%-%-main.webm",
    gmatch0 = function (ec) return ec.m3u:gmatch(ec.pat0) end,
    parse1 = function (ec,b) return b:match(ec.pat1) end,
    parse2 = function (ec)
        local A = VTable {}
        for a,b in ec:gmatch0() do
          local short,long = ec:parse1(b)
          local B = VTable {a=a, b=b, short=short, long=long}
          table.insert(A, B)
        end
        return A
      end,
    parse3 = function (ec)
        ec.A = ec:parse2()
        ec.byshort = VTable {}
        for i,B in ipairs(ec.A) do if B.short then ec.byshort[B.short] = B end end
        return ec
      end,
    subst = function (ec,short,str)
        local f = function (s)
            local B = ec.byshort[short]
            if B[s] then return B[s] end
            local mname = "_"..s
            return ec[mname](ec, B)
          end
        return (str:gsub("<(.-)>", f))
      end,
    _mainvtt = function (ec,B) return "BLA" end,
    _mainvtt = function (ec,B) return (B.b:gsub("webm$", "vtt")) end,
  },
}

ec = EmacsConf2023({}):parse3()

mygetopt = GetOpt {
  ["-short"] = function (g,short) g.short = short; g:rest(2) end,
  ["-subst"] = function (g,str) print(ec:subst(g.short, str)) end,
}

-- «EmacsConf2023-tests»  (to ".EmacsConf2023-tests")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "EmacsConf2023.lua"
-- ec = EmacsConf2023 {}
-- = ec:parse3().byshort

= ec.A
= ec.A[36]
= ec.A[37]

= ec.byshort
= VTable(sortedkeys(ec.byshort))
= ec:subst("repl", "foo")
= ec:subst("repl", "long")
= ec:subst("repl", "<long>")
= ec:subst("repl", "<b>")
= ec:subst("repl", "<mainvtt>")

mygetopt:run("-short", "repl", "-subst", "<mainvtt>")

= EmacsConf2023_m3u
-- for a,b in EmacsConf2023_m3u:gmatch("#EXTINF:%-1,([^\n]*)\n([^\n]*)") do print(a); print(b) end
ec = EmacsConf2023 {}
for a,b in ec:gmatch0() do print(a); print(b) end
for a,b in ec:gmatch0() do local c,d = b:match(ec.pat1); print(c); print(d) end

A = ec:parse2()
= A
for i,B in ipairs(A) do print(B.short) end

--]]






-- Local Variables:
-- coding:  utf-8-unix
-- End: