Remove monkey-patch and add custom pandoc renderer
This commit is contained in:
parent
d8d50c234a
commit
bb90a3eaa5
@ -1,97 +0,0 @@
|
|||||||
import Renderer from require "sitegen.renderer"
|
|
||||||
|
|
||||||
dollar_temp = "0000sitegen_markdown00dollar0000"
|
|
||||||
|
|
||||||
-- a constructor for quote delimited strings
|
|
||||||
simple_string = (delim) ->
|
|
||||||
import P from require "lpeg"
|
|
||||||
|
|
||||||
inner = P("\\#{delim}") + "\\\\" + (1 - P delim)
|
|
||||||
inner = inner^0
|
|
||||||
P(delim) * inner * P(delim)
|
|
||||||
|
|
||||||
lua_string = ->
|
|
||||||
import P, C, Cmt, Cb, Cg from require "lpeg"
|
|
||||||
check_lua_string = (str, pos, right, left) ->
|
|
||||||
#left == #right
|
|
||||||
|
|
||||||
string_open = P"[" * P"="^0 * "["
|
|
||||||
string_close = P"]" * P"="^0 * "]"
|
|
||||||
|
|
||||||
valid_close = Cmt C(string_close) * Cb"string_open", check_lua_string
|
|
||||||
|
|
||||||
Cg(string_open, "string_open") *
|
|
||||||
(1 - valid_close)^0 * string_close
|
|
||||||
|
|
||||||
-- returns a pattern that parses a cosmo template. Can be used to have
|
|
||||||
-- pre-processors ignore text that would be handled by cosmo
|
|
||||||
parse_cosmo = ->
|
|
||||||
import P, R, Cmt, Cs, V from require "lpeg"
|
|
||||||
curly = P {
|
|
||||||
P"{" * (
|
|
||||||
simple_string("'") +
|
|
||||||
simple_string('"') +
|
|
||||||
lua_string! +
|
|
||||||
V(1) +
|
|
||||||
(P(1) - "}")
|
|
||||||
)^0 * P"}"
|
|
||||||
}
|
|
||||||
|
|
||||||
alphanum = R "az", "AZ", "09", "__"
|
|
||||||
P"$" * alphanum^1 * (curly)^-1
|
|
||||||
|
|
||||||
escape_cosmo = (str) ->
|
|
||||||
escapes = {}
|
|
||||||
import P, R, Cmt, Cs, V from require "lpeg"
|
|
||||||
|
|
||||||
counter = 0
|
|
||||||
|
|
||||||
cosmo = parse_cosmo! / (tpl) ->
|
|
||||||
counter += 1
|
|
||||||
key = "#{dollar_temp}.#{counter}"
|
|
||||||
escapes[key] = tpl
|
|
||||||
key
|
|
||||||
|
|
||||||
patt = Cs (cosmo + P(1))^0 * P(-1)
|
|
||||||
str = patt\match(str) or str, escapes
|
|
||||||
str, escapes
|
|
||||||
|
|
||||||
unescape_cosmo = (str, escapes) ->
|
|
||||||
import P, R, Cmt, Cs from require "lpeg"
|
|
||||||
|
|
||||||
escape_patt = P(dollar_temp) * P(".") * R("09")^1 / (key) ->
|
|
||||||
escapes[key] or error "bad key for unescape_cosmo"
|
|
||||||
|
|
||||||
patt = Cs (escape_patt + P(1))^0 * P(-1)
|
|
||||||
assert patt\match(str)
|
|
||||||
|
|
||||||
-- Converts input from markdown, then passes through cosmo filter from HTML
|
|
||||||
-- renderer
|
|
||||||
class MarkdownRenderer extends require "sitegen.renderers.html"
|
|
||||||
@escape_cosmo: escape_cosmo
|
|
||||||
@unescape_cosmo: unescape_cosmo
|
|
||||||
@parse_cosmo: parse_cosmo
|
|
||||||
|
|
||||||
source_ext: "md"
|
|
||||||
ext: "html"
|
|
||||||
|
|
||||||
render: (page, md_source) =>
|
|
||||||
-- discount = require "discount"
|
|
||||||
md_source = page\pipe "renderer.markdown.pre_render", md_source
|
|
||||||
md_source, escapes = escape_cosmo md_source
|
|
||||||
|
|
||||||
markup_filename = os.tmpname!
|
|
||||||
input_handle = io.popen "pandoc > #{markup_filename}", "w"
|
|
||||||
input_handle\write md_source
|
|
||||||
input_handle\close!
|
|
||||||
|
|
||||||
output_handle = io.open markup_filename, "r"
|
|
||||||
result = output_handle\read "*a"
|
|
||||||
output_handle\close!
|
|
||||||
|
|
||||||
html_source = assert result
|
|
||||||
-- html_source = assert discount md_source
|
|
||||||
html_source = unescape_cosmo html_source, escapes
|
|
||||||
|
|
||||||
super page, html_source
|
|
||||||
|
|
23
renderers/markdown.moon
Normal file
23
renderers/markdown.moon
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
class PandocRenderer extends require "sitegen.renderers.markdown"
|
||||||
|
unescape_cosmo = @unescape_cosmo
|
||||||
|
escape_cosmo = @escape_cosmo
|
||||||
|
|
||||||
|
command: "pandoc"
|
||||||
|
|
||||||
|
render: (page, md_source) =>
|
||||||
|
md_source = page\pipe "renderer.markdown.pre_render", md_source
|
||||||
|
md_source, escapes = escape_cosmo md_source
|
||||||
|
|
||||||
|
markup_filename = os.tmpname!
|
||||||
|
input_handle = io.popen @command .. " > " .. markup_filename, "w"
|
||||||
|
input_handle\write md_source
|
||||||
|
input_handle\close!
|
||||||
|
|
||||||
|
output_handle = io.open markup_filename, "r"
|
||||||
|
result = output_handle\read "*a"
|
||||||
|
output_handle\close!
|
||||||
|
|
||||||
|
html_source = assert result
|
||||||
|
html_source = unescape_cosmo html_source, escapes
|
||||||
|
|
||||||
|
super page, html_source
|
11
site.moon
11
site.moon
@ -8,10 +8,6 @@ html = require "sitegen.html"
|
|||||||
lfs = require "lfs"
|
lfs = require "lfs"
|
||||||
date = require "date"
|
date = require "date"
|
||||||
|
|
||||||
-- Monkey-patch sitegen to use pandoc for markdown conversion
|
|
||||||
os.execute "moonc -t \\
|
|
||||||
/usr/local/openresty/luajit/share/lua/5.1/sitegen/renderers/ markdown.moon"
|
|
||||||
|
|
||||||
-- Change output dir to what Openresty prefers
|
-- Change output dir to what Openresty prefers
|
||||||
site.config.out_dir = "html/"
|
site.config.out_dir = "html/"
|
||||||
|
|
||||||
@ -19,6 +15,13 @@ site.config.out_dir = "html/"
|
|||||||
site.default_plugins = for v in *site.default_plugins
|
site.default_plugins = for v in *site.default_plugins
|
||||||
if v\find "pygments" then continue else v
|
if v\find "pygments" then continue else v
|
||||||
|
|
||||||
|
-- Remove default markdown renderer
|
||||||
|
site.default_renderers = for v in *site.default_renderers
|
||||||
|
if v\find "markdown" then continue else v
|
||||||
|
|
||||||
|
-- Add pandoc markdown renderer
|
||||||
|
table.insert site.default_renderers, "renderers.markdown"
|
||||||
|
|
||||||
rootname = (str) ->
|
rootname = (str) ->
|
||||||
result = string.gsub str, "%..+", ""
|
result = string.gsub str, "%..+", ""
|
||||||
result
|
result
|
||||||
|
Loading…
x
Reference in New Issue
Block a user