diff --git a/command.moon b/command.moon index 3e997f0..2dd064d 100644 --- a/command.moon +++ b/command.moon @@ -1,11 +1,42 @@ -- ========================================================================= -- capture output of a system command -- ========================================================================= -handle = io.popen "ls" -result = handle\read("*a") -print result +-- handle = io.popen "ls" +-- result = handle\read("*a") +-- print result +-- handle\close! + +-- os.execute "pandoc" + +-- txt = "# hello" +-- md = "< " .. n, "w" +handle\write "# hello" handle\close! +f = io.open n, "r" +result = f\read("*a") +f\close! +-- output = io.input(handle)\read("*a") +-- handle\write "# hello" +-- handle\write "EOF" + +-- result = handle\read "*a" +-- handle\close! + + + +-- handle\flush! +print result +-- result\close! + +-- require("moon").p handle + -- ========================================================================= -- how changing the config in the Site class works -- ========================================================================= diff --git a/markdown.moon b/markdown.moon new file mode 100644 index 0000000..975c531 --- /dev/null +++ b/markdown.moon @@ -0,0 +1,118 @@ +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 + + -- require("moon").p md_source + --mathjax --output=../priv/static/posts/#{output_file}.html + -- handle = io.popen "pandoc" + -- handle\write "# hello" + -- handle\flush! + -- result = handle\read("*a") + -- print result + -- handle\close! + + -- require("moon").p result + + -- txt = "# hello" + -- md = "< " .. n, "w" + -- handle\write "# hello" + -- result = handle\read("*a") + -- handle\close! + + n = os.tmpname! + handle = io.popen "pandoc > " .. n, "w" + handle\write md_source + handle\close! + + f = io.open n, "r" + result = f\read("*a") + f\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/site.moon b/site.moon index 787c1ff..91b9e49 100644 --- a/site.moon +++ b/site.moon @@ -119,12 +119,21 @@ sitegen.create => -- @what! - add "index.html", o: one + add "index.html" add path, target: out, template: "blog", is_a: "post", post: { publish_date: publish_date(path) }, id: extract_id(path) for path, out in pairs posts "docs" - add "test.html", id: "test" + -- add "docs/2023-11-15-test-mix-task-file-modify.md", + -- target: "posts/2023-11-15-test-mix-task-file-modify.html" + -- template: "blog" + -- is_a: "post" + -- post: { + -- publish_date: publish_date "docs/2023-11-15-test-mix-task-file-modify.md" + -- } + -- id: extract_id "docs/2023-11-15-test-mix-task-file-modify.md" + + -- add "test.md" -- feed "posts.moon", "feed.xml" -- require("moon").p site