diff --git a/markdown.moon b/markdown.moon deleted file mode 100644 index 531e3d5..0000000 --- a/markdown.moon +++ /dev/null @@ -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 - diff --git a/renderers/markdown.moon b/renderers/markdown.moon new file mode 100644 index 0000000..846b081 --- /dev/null +++ b/renderers/markdown.moon @@ -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 diff --git a/site.moon b/site.moon index 6b30c3e..8ab533f 100644 --- a/site.moon +++ b/site.moon @@ -8,10 +8,6 @@ html = require "sitegen.html" lfs = require "lfs" 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 site.config.out_dir = "html/" @@ -19,6 +15,13 @@ site.config.out_dir = "html/" site.default_plugins = for v in *site.default_plugins 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) -> result = string.gsub str, "%..+", "" result