Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://angg.twu.net/LUA/VideoIndex.lua.html -- http://angg.twu.net/LUA/VideoIndex.lua -- (find-angg "LUA/VideoIndex.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- Used by (?): -- (find-THgrep "grep --color=auto -nH --null -e VideoIndex *.blogme") -- See: -- (find-blogme3 "videoindex.lua") require "Re" -- (find-angg "LUA/Re.lua") -- (find-angg "LUA/Re.lua" "Re-tests") gram = [=[ aa <- ('aa' -> 'a') bss <- ('\\' -> '\') bsq <- ('\"' -> '"') nbs <- (" " -> " ") ]=] gram = [=[ time <- ( '"' { [0-9:]+ } '"') str <- ( '"' {~ (bss / [^"])* ~} '"') bss <- ( ('\\' -> '\') / ('\"' -> '"') ) nbsps <- {~ (" " -> " ")* ~} ]=] VideoIndexLine_gram = [=[ symbol <- { [-A-Za-z0-9]+ } nbsps <- { " " * } timestr <- ( '"' { [0-9:]+ } '"') descriptionstr <- ( '"' { ( '\\' / '\"' / [^"] ) * } '"') sexp <- ( '(' symbol " " nbsps timestr nbsps descriptionstr ')' ) ]=] VideoIndexLine = Class { type = "VideoIndexLine", new = function (T) return VideoIndexLine(T or {}) end, parse = Re({grammar = VideoIndexLine_gram}):c('top <- sexp'), from = function (str) local f, s1, time, s2, descr = VideoIndexLine.parse(str) return VideoIndexLine {f=f, s1=s1, time=time, s2=s2, descr=descr} end, __index = { hash = "fpsF_M55W4o", -- Test blocks: http://www.youtube.com/watch?v=fpsF_M55W4o nbsp = function (vli, s) return (s:gsub(" ", " ")) end, timeurl = function (vli) return youtube_make_url(vli.hash, vli.time) end, timehtml = function (vli) return format('<a href="%s">%s<a>', vli:timeurl(), vli.time) end, descrhtml = function (vli) return vli.descr end, html = function (vli) return vli:nbsp(vli.s1) .. vli:timehtml() .. vli:nbsp(vli.s2) .. vli:descrhtml() end, }, } vli = VideoIndexLine {} --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "VideoIndex.lua" strs = splitlines [=[ (find-eev2021pevideo "4:32" "1. Um pouco de contexto") (find-eev2021pevideo "5:19" "1.1.1. hackers felizes") ]=] PPV(strs) vli = VideoIndexLine.from(strs[1]) PPV(vli) = vli:html() = vli.parse0(strs[1]) PP(vli.parse0(strs[1])) rtg = Re { print = PP, grammar = gram } rth = Re { print = print, grammar = gram } rtg:c 'top <- sexp ' (strs[1]) rth:c ' top <- str ' [["foo"]] rth:c ' top <- str ' [["fo\"o"]] rth:c ' top <- str ' [["fo\"o\\"]] rth:c ' top <- str ' [["fo\"o\\"a]] rth:c ' top <- bss ' [[\\]] rth:c ' top <- [^"]* ' [[\\"]] rth:c ' top <- bss ' '\\\\' rtg:c ' top <- bss ' [[\\\\a\\b\]] rtg:c ' top <- {~ (bss / .)* ~} ' [[\\\\a\\b\]] rtg:c [[ {~ (bss / bsq / .)* ~} ]] [[abc\\d\"e]] = [[\\\\a\\b\]] rth:c ' top <- {~ (bss / .)* ~} ' [[\\\\a\\b\]] rt:c [[ {~ (('\\\\' -> 'o') / .) * ~} ]] [[\\\\a\\b\]] rt:c [[ {~ (('qqqq' -> 'o') / .) * ~} ]] [[\\\\a\\b\]] rt:c [[ {~ (('qqqq' -> 'o') ) * ~} ]] [[\\\\a\\b\]] rt:c [[ {~ (('qqqq' ) ) * ~} ]] [[\\\\a\\b\]] rt:c [[ {~ (('qqqq' ) ) * ~} ]] [[\\\\a\\b\]] rt:c [[ {~ (('BQ' -> 'Q' ) / ('BB' -> 'B') / .) * ~} ]] [[abBQcBBd]] rt:c [[ {~ (('\Q' -> 'Q' ) / ('BB' -> 'B') / .) * ~} ]] [[ab\QcBBd]] rtg:c ' top <- {~ (("a" -> "AA") / "b")* ~} ' 'abc' rtg:c ' top <- {~ (("a" -> "AA") / . )* ~} ' 'abca' rtg:c ' top <- {~ (("\\\\" -> "IO") / . )* ~} ' 'abc\\\\a' rtg:c ' top <- {~ (("\\\\" -> "IO") / ("\\\"" -> "YE" ) . )* ~} ' 'abc\\\\a' rtg:c ' top <- {~ (backslashseq / [a-z])* ~} ' 'abc09' rtg:c ' top <- {~ (backslashseq / [a-z])* ~} ' 'abc\\09' = rtp:c ' "" -> "\\" ' 'a' = rt0:c ' "" -> "\\" ' 'a' = rtp:c ' {~ (("__" -> "_" ) / .)* ~} ' 'ab__cd_ef' = rtp:c ' {~ (("\\\\" -> "\\") / .)* ~} ' 'ab\\\\cd\\ef' = rt0:c ' {~ (("\\\\" -> "\\") / .)* ~} ' 'ab\\\\cd\\ef' = 'ab\\cd' = rtp:c ' { "a" -> "AA" } ' 'aaab' = rtg:c ' top <- S ' ' a' = rtg:c ' top <- str ' '"foo"a' = rtg:c ' top <- str ' '"f\\"oo"a' = rtg:c ' top <- {~ backslashseq ~} ' '\\\\' = print("foo", rtg:c ' top <- {~ backslashseq ~} ' '\"', "bar") = '\\"' --]==]