------------------------------------------------------------------------------- -- IMPORTANT: these lines are changed to "local fennel = mod" -- IMPORTANT: these line are for development setup -- Enables Fennel for Lisp-Lua compatibility local src_root = pandoc.path.directory(PANDOC_SCRIPT_FILE) local fennel_lua = pandoc.path.join({src_root, "../opt/fennel.lua"}) package.path = package.path .. ";" .. fennel_lua local fennel = require("fennel") ------------------------------------------------------------------------------- -- Lua LPeg shortcuts local P, S, R, Cf, Cc, Ct, V, Cs, Cg, Cb, B, C, Cmt = lpeg.P, lpeg.S, lpeg.R, lpeg.Cf, lpeg.Cc, lpeg.Ct, lpeg.V, lpeg.Cs, lpeg.Cg, lpeg.Cb, lpeg.B, lpeg.C, lpeg.Cmt -- Lexical elements local space = S(" \t\r\n") local lbracket = P"(" local rbracket = P")" local word = (1 - (space + lbracket + rbracket)) -- Grammar G = P{ "Doc"; Doc = space^0 * Ct(V"SExpr"^0) * space^0 / pandoc.Pandoc; SExpr = (V"List" + V"Atom"); List = lbracket * V"SExpr"^0 * rbracket; Atom = space + V"Word"; Word = word^1 / pandoc.Str; } -- Evals Lisp code -- @param code string: code to evaluate -- @return table: evaluation result as {bool, string, string, string} local function eval(code) local is_passed, out = pcall ( function () return fennel.eval(code) end, function (e) return e end ) local lua = "" local out = tostring(out) local preview = out:gsub("\n.*", "") if is_passed then lua = fennel.compileString(code) end return {is_passed = is_passed, preview = preview, out = out, lua = lua} end -- Calls Pandoc Reader. function Reader(input, options) --[[ local doc = lpeg.match(G, tostring(input)) if options.standalone then return exec(doc) else return doc end ]]-- return pandoc.Pandoc(tostring(input)) end