From a5e7cd15a460e5d65ddc349be36983c3ca88c45a Mon Sep 17 00:00:00 2001 From: dvs1 Date: Tue, 17 Dec 2024 03:32:20 +1000 Subject: Major code reorg, to get the menus working better. --- TODO.HTML | 4 +-- about/index.HTML | 4 +-- index.HTML | 4 +-- notYetAnotherWiki.lua | 81 ++++++++++++++++++++++++++++----------------------- testing/index.HTML | 4 +-- 5 files changed, 53 insertions(+), 44 deletions(-) diff --git a/TODO.HTML b/TODO.HTML index cd3c57c..35d83c2 100644 --- a/TODO.HTML +++ b/TODO.HTML @@ -38,8 +38,8 @@ menu for the current directory -

index

-

TODO

+

TODO

+

index

diff --git a/about/index.HTML b/about/index.HTML index bb6a53c..e0cbee3 100644 --- a/about/index.HTML +++ b/about/index.HTML @@ -38,8 +38,8 @@ menu for the current directory -

index

-

TODO

+

TODO

+

index

diff --git a/index.HTML b/index.HTML index 637748a..fc6344c 100644 --- a/index.HTML +++ b/index.HTML @@ -38,8 +38,8 @@ menu for the current directory -

index

-

TODO

+

TODO

+

index

diff --git a/notYetAnotherWiki.lua b/notYetAnotherWiki.lua index cfe7459..1746b0a 100755 --- a/notYetAnotherWiki.lua +++ b/notYetAnotherWiki.lua @@ -2,8 +2,12 @@ local lcmark = require("lcmark") -local createHTML = function(cm, file, header, menu) --- cm = string.gsub(cm, '._ ', '.  ') +local globalData = {header = '', footer = '', menu = '', ['_'] = ' '} +local site = {} + + +local createHTML = function(cm, file) +-- 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}) @@ -12,14 +16,14 @@ local createHTML = function(cm, file, header, menu) 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 + if nil == file then templateFile = nil else - metadata.menu = menu - metadata.header = header + if nil == templateFile then templateFile = 'default' end + templateFile = templateFile .. '.template' + for k, v in pairs(globalData) do + if nill == metadata[k] then metadata[k] = v else print('metadata already has ' .. k) end + end end metadata.body = lcmark.apply_template(bod, metadata) @@ -56,9 +60,6 @@ local createHTML = function(cm, file, header, menu) 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 = '' @@ -67,53 +68,61 @@ for l in io.popen('find . -name "*.md" -type f -printf "%P\n"'):lines() do table.insert(s, p) c = c + #p + 1 end - local full = string.sub(l, c, -1) - local base = string.gsub(full, '%.md$', '') + local base = string.gsub(string.sub(l, c, -1), '%.md$', '') table.insert(s, base) - if 'menu' == s[#s] then +-- TODO - should do the same for header.md and footer.md + if 'menu' == base then local h = io.open(l, 'r') if nil ~= h then + globalData.menuFound = true print('Found ' .. l) - menu = createHTML(h:read('*a')) + globalData.menu = string.gsub(createHTML(h:read('*a')), 'ul>', 'menu>') h:close() - menu = string.gsub(menu, 'ul>', 'menu>') end else - if 1 ~= #s then - site[l] = s - else - site[l] = base + if 1 ~= #s then site[l] = s else site[l] = base end + end +end + +for k, v in pairs(site) do + if 'string' == type(v) then + if not globalData.menuFound then + local m = '[' .. v .. '](' .. v .. '.HTML)\n' + globalData.menu = globalData.menu .. string.gsub(createHTML(m), 'ul>', 'menu>') end + elseif not globalData.headerFound then + local path = '' + for i, w in ipairs(v) do + path = path .. w .. '/' + end + globalData.header = globalData.header .. '' .. v[1] .. '   ' end end --- TODO - Only do these first things if menu.md doesn't exist, the second for headers.md ---if '' == menu then + +local cm, filename = '', '' + +if 0 == #arg then for k, v in pairs(site) do + local path = '' if 'string' == type(v) then - local m = '[' .. v .. '](' .. v .. '.HTML)\n' - menu = menu .. string.gsub(createHTML(m), 'ul>', 'menu>') - else - local path = '' + path = v + elseif not globalData.headerFound then for i, w in ipairs(v) do path = path .. w .. '/' end - header = header .. '' .. v[1] .. '   ' + path = string.sub(path, 1, -2) end - end ---end - + path = path .. '.md' -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') + local h = io.open(path, 'r') if nil ~= h then - createHTML(h:read('*a'), l, header, menu) + createHTML(h:read('*a'), path) h:close() else - print('oops! No such file ' .. l) + print('oops! No such file ' .. path) end end else @@ -128,5 +137,5 @@ else end end if filename == '' then filename = 'test.md' end - createHTML(cm, filename, header, menu) + createHTML(cm, filename) end diff --git a/testing/index.HTML b/testing/index.HTML index 05a496e..1dde2bd 100644 --- a/testing/index.HTML +++ b/testing/index.HTML @@ -38,8 +38,8 @@ menu for the current directory -

index

-

TODO

+

TODO

+

index

-- cgit v1.1