Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
-- This file:
--   http://anggtwu.net/LUA/Subtitles2.lua.html
--   http://anggtwu.net/LUA/Subtitles2.lua
--          (find-angg "LUA/Subtitles2.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- (defun s1 () (interactive) (find-angg "LUA/Subtitles.lua"))
-- (defun s2 () (interactive) (find-angg "LUA/Subtitles2.lua"))

-- Complements: (find-angg "LUA/Subtitles.lua" "Subtitles")
-- Used by:  (find-THgrep "grep --color=auto -nH --null -e Subtitles2 *.blogme")
--           (find-TH "2021-1-C2-somas-1-dicas")
-- Based on: (find-TH "2021aulas-por-telegram" "legendas" "ipairs")
--
-- «.Subtitle»		(to "Subtitle")
-- «.SubtitleLines»	(to "SubtitleLines")
-- «.tests»		(to "tests")



-- «Subtitle»  (to ".Subtitle")
Subtitle = Class {
  type = "Subtitle",
  hash = "1234567890a",
  from = function (line)
      local time,text = line:match('^.-"(.-)".-"(.*)"%)$')
      if text then text = text:gsub("\\(.)", "%1") end
      return Subtitle {line=line, time=time, text=text}
    end,
  --
  blogmelines = function (bigstr, method, i, j)
      local lines = splitlines(bigstr)
      local outs  = VTable {}
      local method = method or "blogmeorline"
      local f = function (k) return Subtitle.from(lines[k]):m(method) end
      for k=(1 or 1),(j or #lines) do
        table.insert(outs, Subtitle.from(lines[k]):m(method or "blogmeorline"))
      end
      return outs
    end,
  --
  __tostring = function (st) return st:tostring() end,
  __index = {
    tostring     = function (st) return st.time and st.time.."  "..st.text or st.line end,
    url          = function (st) return youtube_make_url(Subtitle.hash, st.time) end,
    blogmetime   = function (st) return R(st:url(), st.time) end,
    blogmeatime  = function (st) return NAME(st.time, st:blogmetime()) end,
    blogme       = function (st) return st:blogmeatime().." "..st.text end,
    blogmeorline = function (st) return st.time and st:blogme() or st.line end,
    blogmeorbf   = function (st) return st.time and st:blogme() or BF(st.line) end,
  },
}

-- «SubtitleLines»  (to ".SubtitleLines")
SubtitleLines = Class {
  type = "SubtitleLines",
  from = function (bigstr)
      lines = VTable(splitlines(bigstr))
      return SubtitleLines {bigstr=bigstr, lines=lines}
    end,
  __index = {
    m = function (sls, k, method)
        method = method or "blogmeorline"
        local st = Subtitle.from(sls.lines[k])
        return st[method](st)
      end,
    ms = function (sls, method, sep, i, j)
        local range = seq(i or 1, j or #sls.lines)
        local f = function (k) return sls:m(k, method) end
        local outs = VTable(map(f, range))
        if sep then return table.concat(outs, sep) end
        return outs
      end,
    blogme   = function (sls,i,j,method) return sls:ms(method, BR(), i,j) end,
    tostring = function (sls,i,j)    return sls:ms("tostring", "\n", i,j) end,
  },
}



-- «tests»  (to ".tests")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Subtitles2.lua"
-- (find-fline "~/SUBTITLES/2021-1-C2-somas-1-dicas.lua")
ee_dofile      "~/SUBTITLES/2021-1-C2-somas-1-dicas.lua"

lines = splitlines(subs_bigstr)
st = Subtitle.from(lines[4])
= st

loadblogme3()
sls = SubtitleLines.from(subs_bigstr)
= sls.lines
= sls:tostring(1, 10)
= sls:blogme  (1, 10)

= sls:ms("tostring", "\n")
= sls:ms("tostring", "\n", 1, 10)
= sls:ms("tostring")
= sls:ms("tostring", nil, 1, 10)
= sls:ms(nil, nil, 1, 10)
= sls:ms(nil, BR(), 1, 10)
Subtitle.hash = "000000000"
= sls:ms(nil, BR(), 1, 10)

-- (find-SUBS "2021-1-C2-somas-1-dicas.lua" "legendas")
-- (to "Subtitle" "blogmeorline =")
--
Subtitle.__index.blogmeorbf = function (st)
    return st.time and st:blogme() or BF(st.line)
  end
= sls:ms("blogmeorbf", BR(), 1, 10)


--]]





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