Path = require "sitegen.path" needs_shell_escape = (str) -> not not str\match "[^%w_-]" shell_escape = (str) -> str\gsub "'", "''" _prepare_command = (cmd, ...) -> args = for x in *{...} if needs_shell_escape x then "'#{shell_escape x}'" else x args = table.concat args, " " "#{cmd} #{args}" write_exec = (cmd, content) -> fname = os.tmpname! f = assert io.popen _prepare_command(cmd, fname), "w" with f\write content f\close! fname -- config command like this in site.moon: -- require("renderers.markdown").cmd = "pandoc --mathjax >" class PandocRenderer extends require "sitegen.renderers.markdown" unescape_cosmo = @unescape_cosmo escape_cosmo = @escape_cosmo cmd: "pandoc --mathjax --lua-filter pygments.lua >" pandoc: (content) => Path.read_file write_exec @@cmd, content render: (page, md_source) => md_source = page\pipe "renderer.markdown.pre_render", md_source md_source, escapes = escape_cosmo md_source html_source = assert @pandoc md_source html_source = unescape_cosmo html_source, escapes super page, html_source