aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/notYetAnotherWiki.lua
diff options
context:
space:
mode:
Diffstat (limited to 'notYetAnotherWiki.lua')
-rwxr-xr-xnotYetAnotherWiki.lua172
1 files changed, 143 insertions, 29 deletions
diff --git a/notYetAnotherWiki.lua b/notYetAnotherWiki.lua
index 4207905..29ed9fb 100755
--- a/notYetAnotherWiki.lua
+++ b/notYetAnotherWiki.lua
@@ -25,7 +25,7 @@ local GlobalMetaData = {
25 -- <body> has alink, link, vlink; CSS has active, link, visited, and hover. 25 -- <body> has alink, link, vlink; CSS has active, link, visited, and hover.
26 devuanDevuanalink = '#03a4ff', devuanDevuanlink = '#0076b6', devuanDevuanvlink = '#6aa4db', devuanDevuanhlink = '#03a4ff', 26 devuanDevuanalink = '#03a4ff', devuanDevuanlink = '#0076b6', devuanDevuanvlink = '#6aa4db', devuanDevuanhlink = '#03a4ff',
27 devuanSDevuanalink = '#98c3db', devuanSDevuanlink = '#ffffff', devuanSDevuanvlink = '#ffffff', devuanSDevuanhlink = '#98c3db', 27 devuanSDevuanalink = '#98c3db', devuanSDevuanlink = '#ffffff', devuanSDevuanvlink = '#ffffff', devuanSDevuanhlink = '#98c3db',
28 karenPurple = '#8800ff', onefangPurple = '#cc00ff', 28 karenPurple = '#8800ff', onefangPurple = '#cc00ff', onefangGreen = '#42ff00',
29 PinkFloyd = '#AA00AA', DeepPurple = '#220022', -- From an ancient site of mine, which went from PinkFloyd to DeepPurple as a background gradient. 29 PinkFloyd = '#AA00AA', DeepPurple = '#220022', -- From an ancient site of mine, which went from PinkFloyd to DeepPurple as a background gradient.
30 favicon = 'nYAW_icon.png', logo = 'nYAW.png', 30 favicon = 'nYAW_icon.png', logo = 'nYAW.png',
31 footer = 'Powered&nbsp;by&nbsp;<a href="https://sledjhamr.org/cgit/notYetAnotherWiki/about/">notYetAnotherWiki</a>&nbsp;version&nbsp;0.0.&nbsp;', 31 footer = 'Powered&nbsp;by&nbsp;<a href="https://sledjhamr.org/cgit/notYetAnotherWiki/about/">notYetAnotherWiki</a>&nbsp;version&nbsp;0.0.&nbsp;',
@@ -155,6 +155,49 @@ end
155 155
156 156
157 157
158local readMdMd = function(name, metadata)
159 local h1 = io.open(name .. '.md')
160 if nil == h1 then
161-- print('Could not open ' .. name .. '.md')
162 return {}
163 else
164 for l in h1:lines() do
165 for k, v in string.gmatch(l, "(%w+)%s*=%s*(.+)") do
166 if nil == v then
167 print(name .. ' ' .. k)
168 else
169 metadata[k] = v
170 end
171 end
172 end
173 end
174 return metadata
175end
176
177
178
179local commonLinky = function(l, body, u, url, beg, en, beg0, en0, bump)
180 if nil == url then
181-- print('OOPS! unknown linky - @' .. l .. '\t\t\t' .. string.sub(body, beg - 9, en) .. ' ' .. string.sub(body, en + 1, en0))
182 else
183 local md = readMdMd(url, {})
184-- if nil ~= md then
185 if nil ~= md.realURL then url = md.realURL end
186-- end
187 body = string.sub(body, 1, beg - bump) .. url .. string.sub(body, en0 + 1)
188 here = here + string.len(url)
189 end
190 if 1 == bump then
191 here = here + 1
192 beg, en = RE.find(body, [['https://fos.wiki.devuan.org/']], here)
193 else
194 beg, en = RE.find(body, [["'https://wiki.devuan.org/"]], here)
195 end
196 return beg, en, body, here
197end
198
199
200
158--------------------------------------------------------------------------------- 201---------------------------------------------------------------------------------
159-- Actually start doing things. 202-- Actually start doing things.
160 203
@@ -166,12 +209,25 @@ else
166 print("Can't open everything.md for writing.") 209 print("Can't open everything.md for writing.")
167end 210end
168 211
169
170-- Scan the subdirectories looking for our files. 212-- Scan the subdirectories looking for our files.
171local Directory = arg[1] 213local Directory = arg[1]
172toSub('') 214toSub('')
173if nil == Directory then Directory = '.' end 215if nil == Directory then Directory = '.' end
174 216
217-- Sort out realURL for symlinked .md.md files.
218for l in io.popen('find -L ' .. Directory .. ' -name "*.md.md" -xtype l -printf "%P\n"'):lines() do
219 local metadata = readMdMd(string.sub(l, 1, -4), {})
220-- FIXME - if this already exists, compare the timestamps, most recent wins.
221 metadata.realURL = string.sub(l, 1, -7)
222 local a, e = io.open(l, 'w')
223 if nil == a then print('Could not open ' .. l .. ' - ' .. e) else
224 for k, v in pairs(metadata) do
225 a:write(k .. '=' .. v .. '\n')
226 end
227 a:close()
228 end
229end
230
175for l in io.popen('find -L ' .. Directory .. ' -name "*.HTM" -type f,l -printf "%P\n"'):lines() do 231for l in io.popen('find -L ' .. Directory .. ' -name "*.HTM" -type f,l -printf "%P\n"'):lines() do
176-- print('pandoc converting ' .. l .. ' -> ' .. string.sub(l, 1, -4) .. 'md') 232-- print('pandoc converting ' .. l .. ' -> ' .. string.sub(l, 1, -4) .. 'md')
177 -- Open the HTM files and do the initial cleanups, then pandoc them. 233 -- Open the HTM files and do the initial cleanups, then pandoc them.
@@ -203,11 +259,37 @@ for l in io.popen('find -L ' .. Directory .. ' -name "*.HTM" -type f,l -printf "
203 {'rel="nofollow"'} -> blank / {"rel='nofollow'"} -> blank / 259 {'rel="nofollow"'} -> blank / {"rel='nofollow'"} -> blank /
204 {"target='_blank'"} -> blank / 260 {"target='_blank'"} -> blank /
205 {"</div>" ([%nl])* } -> blank / 261 {"</div>" ([%nl])* } -> blank /
206 {'style="' ([^"])+ '"'} -> '' / {"style='" ([^'])+ "'"} -> '' / 262-- {'style="' ([^"])+ '"'} -> blank / {"style='" ([^'])+ "'"} -> blank /
207 . 263 .
208 )* ~}]], { blank = function(a) return '' end } ):match(body) 264 )* ~}]], { blank = function(a) return '' end } ):match(body)
209 body = result 265 body = result
210-- body = RE.gsub(body, [=[{"<!-- ".*"-->"}]=], '') -- FIXME 266-- body = RE.gsub(body, [=[{"<!-- ".*"-->"}]=], '') -- FIXME
267 local here = 1
268 beg, en = RE.find(body, [['https://fos.wiki.devuan.org/']], here)
269 while nil ~= beg do
270 here = beg + 1
271 local beg0, en0
272 local url = nil
273 if '"' == string.sub(body, beg - 1, beg - 1) then
274 beg0, en0 = RE.find(body, [['"']], en)
275 url = string.sub(body, en + 1, en0 - 1)
276 end
277 if "'" == string.sub(body, beg - 1, beg - 1) then
278 beg0, en0 = RE.find(body, [["'"]], en)
279 url = string.sub(body, en + 1, en0)
280 end
281
282 if nil ~= url then
283 if ('pub/' == string.sub(url, 1, 4)) then
284-- FIXME? - evil hack?
285 url = 'Foswiki/' .. url
286 else
287 url = nil
288 end
289 end
290 beg, en, body, here = commonLinky(l, body, 'https://fos.wiki.devuan.org/', url, beg, en, beg0, en0, 1)
291 end
292
211 writeString(l .. '_NEW', body) 293 writeString(l .. '_NEW', body)
212 elseif 'PmWiki' == string.sub(l, 1, 6) then 294 elseif 'PmWiki' == string.sub(l, 1, 6) then
213 local beg, en = RE.find(body, [['<!--PageText-->']]) if nil ~= beg then body = string.sub(body, en + 2) end 295 local beg, en = RE.find(body, [['<!--PageText-->']]) if nil ~= beg then body = string.sub(body, en + 2) end
@@ -230,11 +312,30 @@ for l in io.popen('find -L ' .. Directory .. ' -name "*.HTM" -type f,l -printf "
230 {"class='wikilink'"} -> blank / 312 {"class='wikilink'"} -> blank /
231 {'rel="nofollow"'} -> blank / {"rel='nofollow'"} -> blank / 313 {'rel="nofollow"'} -> blank / {"rel='nofollow'"} -> blank /
232 {"target='_blank'"} -> blank / 314 {"target='_blank'"} -> blank /
233 {'style="' ([^"])+ '"'} -> '' / {"style='" ([^'])+ "'"} -> '' / 315-- {'style="' ([^"])+ '"'} -> blank / {"style='" ([^'])+ "'"} -> blank /
234 {"<span class='hlt " {([a-z])+} "'></span><pre" } -> "<pre class='%2'" / 316 {"<span class='hlt " {([a-z])+} "'></span><pre" } -> "<pre class='%2'" /
235 . 317 .
236 )* ~}]], { blank = function(a) return '' end } ):match(body) 318 )* ~}]], { blank = function(a) return '' end } ):match(body)
237 body = result 319 body = result
320 here = 1
321 beg, en = RE.find(body, [["'https://wiki.devuan.org/"]], here)
322 while nil ~= beg do
323 here = beg + 1
324 local beg0, en0 = RE.find(body, [["'"]], en)
325-- FIXME? - This might be working around a bug elsewhere.
326 if "'" == string.sub(body, en0, en0) then en0 = en0 - 1 end
327 local url = string.sub(body, en + 1, en0)
328 if '?n=' == string.sub(url, 1, 3) then
329 url = string.sub(url, 4):gsub('[%a]+%.([%a-]+)', '%1_pm.HTML')
330 elseif ("'" == url) or ('uploads/' == string.sub(url, 1, 8)) then
331-- FIXME - evil hack? Yep, evil hack, need to know the depth of the source, which isn't here.
332 url = 'PmWiki/' .. url
333 else
334 url = nil
335 end
336 beg, en, body, here = commonLinky(l, body, "'https://wiki.devuan.org/", url, beg, en, beg0, en0, 0)
337 end
338
238 writeString(l .. '_NEW', body) 339 writeString(l .. '_NEW', body)
239 end 340 end
240 end 341 end
@@ -278,18 +379,8 @@ for name, file in pairs(Files) do
278 379
279 if '.md' == string.sub(name, -3, -1) then 380 if '.md' == string.sub(name, -3, -1) then
280 -- This is a metadata only file, no content, stash the matadata. 381 -- This is a metadata only file, no content, stash the matadata.
281 local h1 = io.open(name .. '.md') 382
282 if nil == h1 then print('Could not open ' .. name .. '.md') else 383 metadata = readMdMd(name, metadata)
283 for l in h1:lines() do
284 for k, v in string.gmatch(l, "(%w+)%s*=%s*(.+)") do
285 if nil == v then
286 print(name .. ' ' .. k)
287 else
288 metadata[k] = v
289 end
290 end
291 end
292 end
293 if '.md' == name then toSub(path, 'metadata', metadata) 384 if '.md' == name then toSub(path, 'metadata', metadata)
294 elseif '/.md' == string.sub(name, -4, -1) then toSub(path, 'metadata', metadata) 385 elseif '/.md' == string.sub(name, -4, -1) then toSub(path, 'metadata', metadata)
295-- else toFile(string.sub(name, 1, -4), 'metadata', metadata) 386-- else toFile(string.sub(name, 1, -4), 'metadata', metadata)
@@ -367,6 +458,7 @@ local linkFrom = function(source, dest)
367 -- Evil hacks! 458 -- Evil hacks!
368 if 'Profiles' == dest then dest = 'PmWiki/Profiles' end 459 if 'Profiles' == dest then dest = 'PmWiki/Profiles' end
369 if 'Onefang' == dest then dest = 'PmWiki/Onefang' end 460 if 'Onefang' == dest then dest = 'PmWiki/Onefang' end
461 if 'Tiki' == dest then dest = 'PmWiki/Tiki' end
370 462
371 if source == dest then return '' end 463 if source == dest then return '' end
372 local depth = 0 464 local depth = 0
@@ -532,17 +624,11 @@ local LunamarkOpts = {
532 escaped_line_breaks=true, -- Pandoc-style escaped hard line breaks 624 escaped_line_breaks=true, -- Pandoc-style escaped hard line breaks
533} 625}
534local Writer = Lunamark.writer.html5.new(LunamarkOpts) 626local Writer = Lunamark.writer.html5.new(LunamarkOpts)
535
536-- Can override the various writer functions, there's something for each of the basic HTML elements. 627-- Can override the various writer functions, there's something for each of the basic HTML elements.
537local Context = {} -- Coz can't otherwise pass context through to the deeper Lunamark functions I'm overriding. 628local Context = {} -- Coz can't otherwise pass context through to the deeper Lunamark functions I'm overriding.
538-- Fix up the links. 629local lunaLinky = function(url) -- Fix up the links.
539local OgWriterLink = Writer.link -- So we can call the original from within mine, we are just changing the URL.
540function Writer.link(lab, url, tit)
541 if ('https://wiki.devuan.org/' ~= url) and ('https://fos.wiki.devuan.org/' ~= url) then 630 if ('https://wiki.devuan.org/' ~= url) and ('https://fos.wiki.devuan.org/' ~= url) then
542 local label = lab 631 for i, p in ipairs{'https://wiki.devuan.org/?n=', 'https://wiki.devuan.org?n=', 'PmWiki/uploads/', 'Foswiki/pub/', 'https://fos.wiki.devuan.org/'} do
543 local uri = url
544 if 'string' ~= type(lab) then label = type(lab) end
545 for i, p in ipairs{'https://wiki.devuan.org/?n=', 'https://wiki.devuan.org?n=', 'https://fos.wiki.devuan.org/'} do
546 if p == string.sub(url, 1, #p) then 632 if p == string.sub(url, 1, #p) then
547 local ur = string.sub(url, #p + 1) 633 local ur = string.sub(url, #p + 1)
548-- TODO - could probably replace some of this mess with RE.gsub() and friends. Meh, it works. 634-- TODO - could probably replace some of this mess with RE.gsub() and friends. Meh, it works.
@@ -551,22 +637,50 @@ function Writer.link(lab, url, tit)
551 local u = string.sub(ur, 1, f4 - 1) 637 local u = string.sub(ur, 1, f4 - 1)
552 ur = u 638 ur = u
553 end 639 end
640 local md
641 if ('fos' == string.sub(p, 9, 11)) or ('Fos' == string.sub(p, 1, 3)) then
642 md = readMdMd('Foswiki/' .. ur .. '.md', {})
643 else
644 md = readMdMd('PmWiki/' .. string.gsub(ur, '%.', '/', 1) .. '.md', {})
645 end
646 if (nil ~= md) and (nil ~= md.realURL) then url = md.realURL end
647
648 local xlnk = xLinks[string.gsub(ur, '%..*', '', 1)]
554 if nil == Context.path then 649 if nil == Context.path then
555 url = string.gsub(ur, '%.', '/', 1) 650 url = string.gsub(ur, '%.', '/', 1)
556 else 651 else
557 local xlnk = xLinks[string.gsub(ur, '%..*', '', 1)] 652 if nil == xlnk then xlnk = string.gsub(string.gsub(ur, '%..*', '', 1), '/.*', '', 1) end
558 if nil == xlnk then xlnk = string.gsub(ur, '%..*', '', 1) end
559 if '' ~= Context.path then xlnk = linkFrom(Context.path, xlnk) end 653 if '' ~= Context.path then xlnk = linkFrom(Context.path, xlnk) end
560 if '/' == string.sub(xlnk, 1, 1) then xlnk = string.sub(xlnk, 2) end 654 if '/' == string.sub(xlnk, 1, 1) then xlnk = string.sub(xlnk, 2) end
561 if ('' ~= xlnk) and ('/' ~= string.sub(xlnk, -1)) then xlnk = xlnk .. '/' end 655 if ('' ~= xlnk) and ('/' ~= string.sub(xlnk, -1)) then xlnk = xlnk .. '/' end
562 if 'DUNNO/' == xlnk then print('OOPS! Page not found - ' .. Context.path .. ' / ' .. Context.bit .. ' ' .. url .. ' -> ' .. xlnk .. ' ' .. string.gsub(ur, '.*%.', '', 1) .. '.HTML') end 656 if 'DUNNO/' == xlnk then print('OOPS! page not found - @' .. Context.path .. ' / ' .. Context.bit .. '\t' .. url .. ' -> ' .. xlnk .. ' ' .. string.gsub(ur, '.*%.', '', 1) .. '.HTML') end
563 url = xlnk .. string.gsub(ur, '.*%.', '', 1) .. '.HTML' 657 end
658-- if (nil ~= md) and (nil ~= md.realURL) then url = md.realURL
659-- else
660 url = xlnk .. string.gsub(ur, '.*%.', '', 1)
661-- end
662 if 'PmWiki/uploads/' == p then
663 url = '../' .. p .. string.gsub(ur, '%.', '.', 1)
664 elseif 'Foswiki/pub/' == p then
665 url = '../' .. p .. ur
666 else
667 url = url .. '.HTML'
564 end 668 end
565 end 669 end
566 end 670 end
567 end 671 end
568 return OgWriterLink(lab, url, tit) 672 return url
673end
674
675local OgWriterLink = Writer.link -- So we can call the original from within mine, we are just changing the URL.
676function Writer.link(lab, url, tit)
677 return OgWriterLink(lab, lunaLinky(url), tit)
569end 678end
679local OgWriterImage = Writer.image
680function Writer.image(lab, url, tit)
681 return OgWriterImage(lab, lunaLinky(url), tit)
682end
683
570local Parse = Lunamark.reader.markdown.new(Writer, LunamarkOpts) 684local Parse = Lunamark.reader.markdown.new(Writer, LunamarkOpts)
571 685
572 686