#!/usr/bin/env luajit local lcmark = require("lcmark") local createHTML = function(cm, file, menu) -- cm = string.gsub(cm, '._ ', '.  ') if nil ~= file then print('About to parse file ' .. file) end local result = '' local body, metadata, err = lcmark.convert(cm, "html", {smart = true, yaml_metadata = true, columns = 0}) if nil == body then print('oops! ' .. err) else local bod, err = lcmark.compile_template(body) if nil == bod then print('oops! ' .. err) else local templateFile = metadata.template metadata['_'] = ' ' if nil == templateFile then templateFile = 'default' end templateFile = templateFile .. '.template' if nil == menu then templateFile = nil else metadata.menu = menu end metadata.body = lcmark.apply_template(bod, metadata) local tm = '' if nil ~= templateFile then local h = io.open(templateFile, 'r') if nil ~= h then tm = tm .. h:read('*a') h:close() else print('oops! No such file ' .. templateFile) end local template, err = lcmark.compile_template(tm) if nil == template then print('oops! ' .. err) else result = lcmark.apply_template(template, metadata) end else result = body end end end if ('' ~= result) and (nil ~= file) then local base = string.gsub(file, '%.md$', '') print('Creating file ' .. base .. '.HTML') local a, e = io.open(base .. '.HTML', 'w') if nil == a then print('Could not open ' .. base .. '.HTML - ' .. e) else a:write(result) a:close() end end return result end local cm = '' local filename = '' local menu = '' local h = io.open('menu.md', 'r') if nil ~= h then print('Found menu.md') menu = createHTML(h:read('*a')) h:close() menu = string.gsub(menu, 'ul>', 'menu>') end if 0 ~= #arg then for i,a in ipairs(arg) do if filename == '' then filename = a end local h = io.open(a, 'r') if nil ~= h then cm = cm .. h:read('*a') h:close() else print('oops! No such file ' .. a) end end if filename == '' then filename = 'test.md' end createHTML(cm, filename, menu) else local sticks = io.popen('find . -name "*.md" -type f -printf "%P\n"') for l in sticks:lines() do cm = '' local h = io.open(l, 'r') if nil ~= h then createHTML(h:read('*a'), l, menu) h:close() else print('oops! No such file ' .. l) end end end