aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/notYetAnotherWiki.lua
blob: cfe74599b40fb560830bf7dbca1adfb5c0ad2366 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/env luajit

local lcmark = require("lcmark")

local createHTML = function(cm, file, header, 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
		metadata.header = header
	    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, filename, header, menu = '', '', '', ''
local site = {}

for l in io.popen('find . -name "*.md" -type f -printf "%P\n"'):lines() do
    local s = {}
    local f = ''
    local c = 1
    for p in string.gmatch(l, '(%w+)/') do
        table.insert(s, p)
        c = c + #p + 1
    end
    local full = string.sub(l, c, -1)
    local base = string.gsub(full, '%.md$', '')
    table.insert(s, base)

    if 'menu' == s[#s] then
	local h = io.open(l, 'r')
	if nil ~= h then
	    print('Found ' .. l)
	    menu = createHTML(h:read('*a'))
	    h:close()
	    menu = string.gsub(menu, 'ul>', 'menu>')
	end
    else
	if 1 ~= #s then
	    site[l] = s
	else
	    site[l] = base
	end
    end
end

-- TODO - Only do these first things if menu.md doesn't exist, the second for headers.md
--if '' == menu then
    for k, v in pairs(site) do
	if 'string' == type(v) then
	    local m = '[' .. v .. '](' .. v .. '.HTML)\n'
	    menu = menu .. string.gsub(createHTML(m), 'ul>', 'menu>')
	else
	    local path = ''
	    for i, w in ipairs(v) do
		path = path .. w .. '/'
	    end
	    header = header .. '<a href="' .. string.sub(path, 1, -2) .. '.HTML">' .. v[1] .. '</a> &nbsp; '
	end
    end
--end


if 0 == #arg then
    for l in io.popen('find . -name "*.md" -type f -printf "%P\n"'):lines() do
	cm = ''
	local h = io.open(l, 'r')
	if nil ~= h then
	    createHTML(h:read('*a'), l, header, menu)
	    h:close()
	else
	    print('oops! No such file ' .. l)
	end
    end
else
    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, header, menu)
end