Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
#!/usr/bin/lua50 -e PP(arg);os.exit(0) -- -*- coding: raw-text-unix -*- -- #!/usr/bin/env lua50 -ePP(arg);os.exit(0) -- This is the `blogme2-extras.lua' file of blogme2. -- It contains experimental functions that I use at angg.twu.net. -- Author and version: Eduardo Ochs <edrx@mat.puc-rio.br>, 2005nov09 -- License: GPL. -- (find-blogmefile "") -- (find-blogmefile "blogme2-outer.lua") -- (find-blogmefile "blogme2.lua") -- require "blogme2-extras.lua" -- (find-blogmefile "blogme2-outer.lua" "MYL =") --[[ ;;* (defun find-bme (commands) (find-sh (format "~/blogme/blogme2.lua -e 'require \"%s\"; %s'" "blogme2-extras.lua" commands))) (defun find-bme0 (commands) (find-sh0 (format "~/blogme/blogme2.lua -e 'require \"%s\"; %s'" "blogme2-extras.lua" commands))) ;;* (defun eebme (s &optional e) "~/blogme/blogme2.lua -e 'require [[blogme2-extras.lua]]; %s'" "blogme2-extras.lua" --]] def [[ WARN_HTMLIZED 2 fname,glyphsfname format([[ <table><tr><td bgcolor="#CC0000"><font color="#FFCC00" size=-1> Warning: this is a htmlized version! <br>The original is across <a href="%s">this link</a>; <br>it may have some <a href="%s">strange characters</a>. </font></td></tr></table> ]], fname, glyphsfname) ]] maplines = function (f, bigstr) local lines = split(bigstr, "([^\n]*)\n?") for i=1,getn(lines) do lines[i] = f(lines[i]).."\n" end return table.concat(lines) end --[[ #* mkdir -p /tmp/testasc/ cd /tmp/testasc/ cp -v $ES/emacs.e . head -n 500 < $ES/emacs.e > /tmp/testasc/emacs.e time ~/blogme/blogme2.lua -e 'require "blogme2-extras.lua"; testasc("emacs.e")' #* cat > /tmp/testasc/emacs.e <<'%%%' «.foo» (to "foo") # (find-angg ".zshrc" "zcatinfo") %%% # time tclsh /home/edrx/TH/Generate emacs.e.old.html "a2html emacs.e" # cd /tmp/testasc/; tkdiff emacs.e.old.html emacs.e.html #* # (find-fline "/tmp/testasc/emacs.e.html") # (find-fline "/tmp/testasc/emacs.e.html" "setq last-kbd-macro") # (find-fline "/tmp/testasc/emacs.e.old.html") # (find-fline "/tmp/testasc/emacs.e.old.html" "setq last-kbd-macro") #* --]] testasc = function (fname) bigstr = readfile(fname) bigstr_body = PRE(maplines(url_f, bigstr)) bigstr_body = PRE(maplines(guill_f, bigstr)) bigstr_body = PRE(maplines(hyper_f, bigstr)) bigstr_warn = WARN_HTMLIZED(fname, "eev-current/glyphs.el.html") bigstr_all = html_all(fname.." (htmlized)\n", bigstr_warn.."\n\n"..bigstr_body) writefile(fname..".html", bigstr_all) hyper_test() end testasc2 = function () li = [[ «.foo» (to "foo") ]] print(hyper_f(li)) end entities_string = [[ Æ AElig Á Aacute  Acirc À Agrave Å Aring à Atilde Ä Auml Ç Ccedil É Eacute Ê Ecirc È Egrave Ë Euml Í Iacute Ï Iuml Ó Oacute Ô Ocirc Ò Ograve Õ Otilde Ö Ouml Ú Uacute Û Ucirc Ù Ugrave Ü Uuml á aacute â acirc æ aelig à agrave å aring ã atilde ä auml ç ccedil é eacute ê ecirc è egrave ë euml í iacute î icirc ì igrave ï iuml ó oacute ô ocirc ò ograve õ otilde ö ouml ß szlig ú uacute û ucirc ù ugrave ü uuml ª ordf « laquo ° deg º ordm » raquo & amp > gt < lt Ñ Ntilde ñ ntilde × times ]] reset_entities() add_entities(entities_string) entities["*"] = "<font color=\"red\"><strong>*</strong></font>" entities_chars = entities_chars.."*" entities_re = "(["..entities_chars.."])" anchorstr = function (a) if a then return "#"..a else return "" end end --% --% Htmlize text - e-scripts, programs, etc --% Recognizes urls, guillemet anchors, and some elisp hyperlinks. --% Experimental, incomplete, etc. --% Usage: run hyper_f(li) on each line. Concatenate the result with "\n"s. --% -- (find-es "lua5" "txt2html_in_blogme") -- (find-angg "TH/Generate" "txt2html") -- (find-angg "LUA/lua50init.lua" "load_rex") if not rex then load_rex() end --% Process urls url_re = rex("(.*)([fh]tt?p://[-%#$&*+,./:;=?@_~0-9A-Za-z]*)(.*)") url_f0 = function (str) return format("<a href=\"%s\">%s</a>", str, str) end url_f = function (str) local _, _, arr = url_re:match(str) -- if _ then return arr[1]..url_f0(arr[2])..arr[3] end if _ then return Q(arr[1])..url_f0(arr[2])..Q(arr[3]) end -- return str return Q(str) end --% Process guillemot anchors and urls guill_re = "^([^«»]*)«([-+,.:_~0-9A-Za-z]+)»([^«»]*)$" guill_f0 = function (str) return "««"..str.."»»" end guill_f0 = function (str) return [[<a name="]]..str..[["><font color="green"><i>«</i>]].. str..[[<i>»</i></font></a>]] end guill_f = function (str) local _, _, left, anchor, right = strfind(str, guill_re) if _ then return url_f(left)..guill_f0(anchor)..url_f(right) end return url_f(str) end --% Process elisp hyperlinks, guillemot anchors, and urls hyperstr_re0 = "[ \t]*(\"([^\"\\]|\\\\.)+\")" hyperstr_re = rex(hyperstr_re0) -- Grok the string arguments of a sexp -- (find-bme0 "PP(0, hyperstrsplit([[ \"file\" \"anchor\" \"trash\"]]))") -- hyperstrsplit_re0 = format("^%s(.*)", hyperstr_re0) hyperstrsplit_re = rex(hyperstrsplit_re0) hyperstr_unquote = function (qstr) return (loadstring("return "..qstr))() end hyperstrsplit = function (str) local _, _, arr = hyperstrsplit_re:match(str) if _ then return hyperstr_unquote(arr[1]), hyperstrsplit(arr[3]) end end hypers = {} hypers["to"] = function (fn, anchor) return anchorstr(anchor) end hypers["find-angg"] = function (fn, fname, anchor) if fname then return "../"..fname..".html"..anchorstr(anchor) end end hyper_re0 = format("^(.*)\\((find-[-+A-Za-z0-9]+|%s)((%s)+)\\)([ \t]*)$", "to", hyperstr_re0) hyper_re = rex(hyper_re0) hyper_f0 = function (funcname, rest) local f = hypers[funcname] if f then return f(funcname, hyperstrsplit(rest)) end end hyper_f1 = function (sexp, funcname, rest) if not sexp then sexp = "("..funcname..rest..")" end local target = hyper_f0(funcname, rest) if target then local _, _, left, right = strfind(sexp, "^(.*)(..)$") -- return format("%s<a href=\"%s\">%s</a>", left, target, right) return format("%s<a href=\"%s\">%s</a>", Q(left), target, right) end -- return sexp return Q(sexp) end hyper_f = function (str) local _, _, arr = hyper_re:match(str) if _ then local left, sexpfun, sexprest, spaces = arr[1], arr[2], arr[3], arr[7] return guill_f(left)..hyper_f1(nil, sexpfun, sexprest)..spaces end return guill_f(str) end -- (find-bme2 "hyper_test()") hyper_test = function () PP(0, hyperstrsplit([[ "file" "anchor" "trash"]])) PP(1, hyper_f0("to", [[ "anchor" "trash"]])) PP(2, hyper_f0("find-angg", [[ "file"]])) PP(3, hyper_f0("find-angg", [[ "file" "anchor" "trash"]])) print(4, hyper_f1(nil, "find-angg", [[ "file" "anchor" "trash"]])) print(5, hyper_f1(nil, "find-foo", [[ "file" "anchor" "trash"]])) print(6, hyper_f([[bleh (to "anchor" "trash")]])) print(7, hyper_f([[bleh (find-angg "file" "anchor" "trash")]])) end