From 4a435bf8ae0e9f009346d89ebc424d8884f33cea Mon Sep 17 00:00:00 2001 From: dvs1 Date: Wed, 22 Jan 2025 21:01:59 +1000 Subject: Replace cmark-gfm and lcmark with luamark. Plus YAR, yet another rewrite. --- .md.md | 3 + INSTALL.md | 6 +- MeTaDaTa.md | 5 -- README | 4 - README.md.md | 1 + SuckItFos | 9 --- SuckItPm | 11 +-- TODO.md | 11 +-- notYetAnotherWiki.lua | 213 ++++++++++++++++++++++++++++++++++---------------- testing/.md.md | 1 + testing/MeTaDaTa.md | 3 - testing/index.md | 71 ++++++++++------- testing/index.md.md | 1 + 13 files changed, 200 insertions(+), 139 deletions(-) create mode 100644 .md.md delete mode 100644 MeTaDaTa.md create mode 100644 README.md.md create mode 100644 testing/.md.md delete mode 100644 testing/MeTaDaTa.md create mode 100644 testing/index.md.md diff --git a/.md.md b/.md.md new file mode 100644 index 0000000..3c5cb8a --- /dev/null +++ b/.md.md @@ -0,0 +1,3 @@ +sourcecode=https://sledjhamr.org/cgit/notYetAnotherWiki/ +pagehistory=https://sledjhamr.org/cgit/notYetAnotherWiki/log +feedatom=https://sledjhamr.org/cgit/notYetAnotherWiki/atom diff --git a/INSTALL.md b/INSTALL.md index afefcea..a2b2842 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,9 +1,7 @@ # Install -notYetAnotherWiki uses [lcmark](https://github.com/jgm/lcmark) to parse [CommonMark](https://commonmark.org/) into HTML. You can probably install it using luarocks. lua-yaml is the YAML parsing library I test with. +notYetAnotherWiki uses [lunamark](https://github.com/jgm/lunamark) to parse [CommonMark](https://commonmark.org/) into HTML. You can probably install it using luarocks. lua-yaml is the YAML parsing library I test with. -You also need cmark-gfm and luajit installed. +You also need luajit installed. Copy the notYetAnotherWiki.lua script to some place where you can run it from, /usr/local/bin is good. Make sure it is executable. - -Similar with the dumpTable.lua script, only it's a Lua library, so put it some place Lua can find it. /usr/local/share/lua is good. No need to be executable. diff --git a/MeTaDaTa.md b/MeTaDaTa.md deleted file mode 100644 index 24796a8..0000000 --- a/MeTaDaTa.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -sourcecode: https://sledjhamr.org/cgit/notYetAnotherWiki/ -pagehistory: https://sledjhamr.org/cgit/notYetAnotherWiki/log -feedatom: https://sledjhamr.org/cgit/notYetAnotherWiki/atom ---- diff --git a/README b/README index 36ac878..d1aa22c 100644 --- a/README +++ b/README @@ -1,7 +1,3 @@ ---- -title: "notYetAnotherWiki" ---- - # notYetAnotherWiki notYetAnotherWiki is not another wiki, at least not yet. It'll be much diff --git a/README.md.md b/README.md.md new file mode 100644 index 0000000..bc85e8c --- /dev/null +++ b/README.md.md @@ -0,0 +1 @@ +title=notYetAnotherWiki diff --git a/SuckItFos b/SuckItFos index 11adaf9..1e6e48d 100755 --- a/SuckItFos +++ b/SuckItFos @@ -22,8 +22,6 @@ do mkdir -p combined/$base mkdir -p combined/${base}/`dirname ${file}` echo "Converting ${URL}/${base}/${file}?cover=print -> Foswiki/${base}/${file}.md" -# pandoc -f html -t markdown --self-contained ${URL}/${base}/${file} >Foswiki/${base}/${file}.md - # TODO - try curl, to see what is actually downloaded, and maybe not download unchanged pages. curl to .HTM # Doesn't help with redownloads, coz natch a dynamic site isn't cached. But I can at least comment out the curl command during testing to save time. curl --silent --no-progress-meter ${URL}/${base}/${file}?cover=print -o Foswiki/${base}/${file}.HTM cp Foswiki/${base}/${file}.HTM Foswiki/${base}/${file}.HTM_ORIGINAL @@ -40,13 +38,10 @@ do -e 's/class="foswikiTopic"/class="FoswikiTopic"/g' \ -e 's/class="foswiki[[:alpha:]]*"//g' \ -e "s/style='.*;'//g" -# -e "s/style='background-color: #.*;'//g" \ -# -e "s/style='font-size: .*;'//g" pandoc -f html -t commonmark_x --self-contained Foswiki//${base}/${file}.HTM >Foswiki/${base}/${file}.md cp Foswiki/${base}/${file}.md Foswiki/${base}/${file}.md_ORIGINAL -# csplit -ks Foswiki/${base}/${file}.md '%::: {.foswikiTopic}%' '/::: {.foswikiContentFooter}/' csplit -ks Foswiki/${base}/${file}.md '%::: {.FoswikiTopic}%' '/::: {.patternInfo}/' if [ -f xx00 ]; then rm Foswiki/${base}/${file}.md @@ -63,10 +58,6 @@ do # -e 's/\{\.pattern.*//g' \ echo -e "****\n[Original page](${URL}/${base}/${file}) where maybe you can edit it." >> Foswiki/${base}/${file}.md - -# pandoc -t html -f commonmark_x --self-contained Foswiki/${base}/${file}.md > Foswiki/${base}/${file}.htm -# cmark-gfm -t html -e footnotes -e table -e strikethrough Foswiki/${base}/${file}.md > Foswiki/${base}/${file}.body -# ln -frs Foswiki/${base}/${file}.body combined/${base}/${file}.body ln -frs Foswiki/${base}/${file}.md combined/${base}/${file}.md if [ -f xx01 ]; then diff --git a/SuckItPm b/SuckItPm index a7c1321..fe7efb3 100755 --- a/SuckItPm +++ b/SuckItPm @@ -17,12 +17,9 @@ find /opt/pmwiki/wiki.d ${filter} \ do base=`echo "${line}" | cut -d '.' -f 1` file=`echo "${line}" | cut -d '.' -f 2` -# page="?n=${line}" mkdir -p PmWiki/$base mkdir -p combined/$base echo "Converting ${URL}/?n=${base}.${file}?action=print -> PmWiki/${base}/${file}.md" -# pandoc -f html -t markdown --self-contained ${URL}/?n=${base}.${file} >PmWiki/${base}/${file}.md - # TODO - try curl, to see what is actually downloaded, and maybe not download unchanged pages. curl to .HTM # Doesn't help with redownloads, coz natch a dynamic site isn't cached. But I can at least comment out the curl command during testing to save time. # curl --no-progress-meter ${URL}/?n=${base}.${file}?action=markdown -o PmWiki/${base}/${file}.MD curl --no-progress-meter ${URL}/?n=${base}.${file}?action=print -o PmWiki/${base}/${file}.HTM @@ -45,11 +42,9 @@ do -e "s/class='vspace'//g" \ -e "s/class='wikilink'//g" \ -e "s/style='.*;'//g" -# -e "s/style='background-color: #.*;'//g" \ -# -e "s/style='font-size: .*;'//g" - pandoc -f html -t commonmark_x --self-contained PmWiki//${base}/${file}.HTM >PmWiki/${base}/${file}.md # pandoc -f markdown -t commonmark_x --self-contained PmWiki//${base}/${file}.MD >PmWiki/${base}/${file}.md + pandoc -f html -t commonmark_x --self-contained PmWiki//${base}/${file}.HTM >PmWiki/${base}/${file}.md cp PmWiki/${base}/${file}.md PmWiki/${base}/${file}.md_ORIGINAL # Attempt to clean things up, badly. @@ -68,10 +63,6 @@ do # Don't need this, the parts we are grabbing already include that link at the bottom. # echo -e "****\n[Original page](${URL}/${base}/${page}) where maybe you can edit it." >> PmWiki/${base}/${file}.md - -# pandoc -t html -f commonmark_x --self-contained PmWiki/${base}/${file}.md > PmWiki/${base}/${file}.htm -# cmark-gfm -t html -e footnotes -e table -e strikethrough PmWiki/${base}/${file}.md > PmWiki/${base}/${file}.body -# ln -frs PmWiki/${base}/${file}.body combined/${base}/${file}.body ln -frs PmWiki/${base}/${file}.md combined/${base}/${file}.md if [ -f xx01 ]; then diff --git a/TODO.md b/TODO.md index e96f7da..60a2eca 100644 --- a/TODO.md +++ b/TODO.md @@ -3,10 +3,9 @@ ## Do these Bugs - -- https://nyaw.wiki.devuan.org/users/Plentyn/WebHome.HTML   has that twisty thing which looks not simple to remove. -- https://nyaw.wiki.devuan.org/users/dunno/Devuan Cluster.HTML   A very lengthy and complex document, I'll likely miss something, but chip away at the obvious. -- https://nyaw.wiki.devuan.org/users/Debdog.HTML   pandoc can't handle the background table cell colours in the "Background colours" table, which is kinda the point of it. -- {.underline} is the result of foo getting lost in translation. +- /users/Plentyn/WebHome.HTML   has that twisty thing which looks not simple to remove. +- /users/dunno/Devuan Cluster.HTML   A very lengthy and complex document, I'll likely miss something, but chip away at the obvious. +- /users/Debdog.HTML   pandoc can't handle the background table cell colours in the "Background colours" table, which is kinda the point of it. - PmWiki in it's current config needs that ?n=foo.bar nonsense for the Original page link. Which I'm currently neatly sidestepping, the scraped page has a similar thing. Check the timestamps on the files, only update if source is newer than destination. Meh, it's already 600 times faster than the pandoc version. @@ -37,9 +36,6 @@ Extract title from Fos and Pm, maybe even pagetitle if possible. Title is point htmx -pandoc replacements -- cmark-gfm - cgit has Lua @@ -49,6 +45,7 @@ cgit has Lua Reuse the user system from SledjChisl. levels - + - banned - reader - member diff --git a/notYetAnotherWiki.lua b/notYetAnotherWiki.lua index 7268170..8c9a5c9 100755 --- a/notYetAnotherWiki.lua +++ b/notYetAnotherWiki.lua @@ -2,13 +2,63 @@ -- Read the README file for what this is all about. If there is no README or similar, then you can find the link to the source below. -local lcmark = require("lcmark") -- https://github.com/jgm/lcmark +local lunamark = require("lunamark") -- https://github.com/jgm/lunamark + +local opts = { + layout='compact', +-- This list is copied from the lunamark source code, until I discover a way to discover it. The descriptions are useful to. + containers=false, -- Put sections in containers (e.g. div or section tags) + slides=false, -- Like containers, but do not nest them + startnum=true, -- Start number of an ordered list is significant + smart=false, -- Smart typography (quotes, dashes, ellipses) + preserve_tabs=true, -- Don't expand tabs to spaces + notes=true, -- Footnotes + inline_notes=true, -- Inline footnotes + definition_lists=true, -- Definition lists + citations=true, -- Citations + citation_nbsps=true, -- Turn spacing into non-breaking spaces in citations + fenced_code_blocks=true, -- Fenced code blocks + lua_metadata=true, -- Lua metadata + pandoc_title_blocks=true, -- Pandoc style title blocks + hash_enumerators=true, -- may be used as ordered list enumerator + require_blank_before_blockquote=false, + require_blank_before_header=false, + require_blank_before_fenced_code_block=false, + fancy_lists=true, -- Pandoc style fancy lists + task_list=true, -- GitHub-Flavored Markdown task list + strikeout=true, -- Strike-through with double tildes + mark=true, -- Highlight with double equals + subscript=true, -- Subscripted text between tildes + superscript=true, -- Superscripted text between circumflexes + bracketed_spans=true, -- Spans with attributes + fenced_divs=true, -- Divs with attributes + raw_attribute=true, -- Raw pass-through on code elements + fenced_code_attributes=true, -- Fenced code block attributes + link_attributes=true, -- Link attributes + pipe_tables=true, -- PHP Markdown Extra pipe table support + table_captions=true, -- Table caption syntax extension + header_attributes=true, -- Header attributes + line_blocks=true, -- Line blocks + escaped_line_breaks=true, -- Pandoc-style escaped hard line breaks +} +local writer = lunamark.writer.html5.new(opts) +local template = '' +local h = io.open("default.template", 'r') +if nil ~= h then + template = h:read('*a') + h:close() +else + print('oops! No such file ' .. 'default.template') +end +-- Can override the various writer functions, there's something for each of the basic HTML elements. +-- Override anything that's generic. +local parse = lunamark.reader.markdown.new(writer, opts) -- Some global data. local globalData = { - ['_'] = ' ', ['dlr'] = '$', + ['s'] = ' ', ['_'] = ' ', ['dlr'] = '$', ['devuanCinnabarDark'] = '#310202', ['devuanCinnabarLight'] = '#510505', ['devuanDarkPurpyDark'] = '#33313b', ['devuanDarkPurpyLight'] = '#3c3a45', ['devuanDeepSeaDark'] = '#132f40', ['devuanDeepSeaLight'] = '#1a4562', @@ -23,7 +73,7 @@ local Sites, Files, Subs = {}, {}, {} -- Useful functions, part 0. --- A simple table.subtable = subtable wont work, you end up with a reference so that changes to the later get applaid to the former. +-- A simple table.subtable = subtable wont work, you end up with a reference so that changes to the later get applied to the former. local derefiTable = function(t, strip) local argh = {} for l, y in ipairs(t) do if (l ~= y.name) and strip then table.insert(argh, y) end end @@ -50,29 +100,47 @@ local stringBits = function(l) end +-- Put a value into the Files or Subs table, creating things if needed. +local toFile = function(name, key, value) + if nil == Files[name] then Files[name] = {} end + if nil ~= key then Files[name][key] = value end + for i, v in ipairs{'metadata', 'bits', } do + if nil == Files[name][v] then Files[name][v] = {} end + end +end +local toSub = function(name, key, value) + if nil == Subs[name] then Subs[name] = {} end + if nil ~= key then Subs[name][key] = value end + for i, v in ipairs{'metadata', 'bits', 'files', 'subs'} do + if nil == Subs[name][v] then Subs[name][v] = {} end + end +end + + -- Actually start doing things. -- Scan the subdirectories looking for .md files. local directory = arg[1] +toSub('') --Subs[''] = {files = {}, subs = {}, bits = {}} if nil == directory then directory = '.' end if '.' ~= directory then for l in io.popen('find . -name "*.md" -type f,l -printf "%P\n"'):lines() do - Files[string.gsub(l, '%.md$', '')] = {} + toFile(string.gsub(l, '%.md$', '')) end end -- Can add in a distant directory to, for putting it's results in the current directory. for l in io.popen('find ' .. directory .. ' -name "*.md" -type f,l -printf "%P\n"'):lines() do local n = string.gsub(l, '%.md$', '') - if nil == Files[n] then Files[n] = {} end + if nil == Files[n] then toFile(n) end end -- Gotta figure out all the files and subs first. File and sub metadata comes along for the ride. -Subs[''] = {files = {}, subs = {}, bits = {}} for name, file in pairs(Files) do local bitter, path = '', '' local bits, bit = stringBits(name) local ln = #bits + local body, metadata = '', {} -- Go through our bits, construct Subs with bits. Files[name].bits = bits @@ -82,41 +150,61 @@ for name, file in pairs(Files) do for i, d in ipairs(bits) do if '' ~= path then path = path .. '/' end path = path .. d - if nil == Subs[path] then Subs[path] = {files = {}, subs = {}} end + toSub(path, 'bits', derefiTable(bits, true)) if i < ln then Subs[path].subs[bits[i + 1]] = bits[i + 1] end - Subs[path].bits = derefiTable(bits, true) if i < ln then table.remove(Subs[path].bits, #bits) end end - -- Start the file parsing here, coz we need it's metadata. --- print('Parsing ' .. name .. '.md') - local h = io.open(name .. '.md', 'r') --- TODO - should bail here on error? - if nil ~= h then file.cm = h:read('*a') ; h:close() else print('oops! No such name ' .. name) end - -- Convert the CommonMark to HTML, including the metadata. - local body, metadata, err = lcmark.convert(file.cm, "html", {smart = true, yaml_metadata = true, columns = 0}) - if nil == body then print('oops! ' .. err) - elseif '' == body then - -- This is a metadata only file, no content, stash the matadata in it's directory. - Subs[path].metadata = metadata + if '.md' == string.sub(name, -3, -1) then + -- This is a metadata only file, no content, stash the matadata. + for l in io.open(name .. '.md'):lines() do + for k, v in string.gmatch(l, "(%w+)%s*=%s*(.+)") do metadata[k] = v end + end + if '.md' == name then toSub(path, 'metadata', metadata) + elseif '/.md' == string.sub(name, -4, -1) then toSub(path, 'metadata', metadata) + else toFile(string.sub(name, 1, -4), 'metadata', metadata) + end Files[name] = nil else - -- Ordinary md file, stash it's metadata and parsed body. - -- I need cmark-gfm, coz lcmark doesn't support tables and stuff, it only does basic cmark. - local out = '' - h = io.popen('if which cmark-gfm ; then echo "found" ; fi | tail -n 1') - if nil ~= h then out = h:read('*a') ; h:close() end - if 'found\n' == out then - -- Have to strip out the metadata first, coz cmark-gfm doesn't grok that. - h = io.popen('cp "' .. name .. '.md" "' .. name .. '02" ; csplit -ksz -f "' .. name .. '" "' .. name .. '.md" "/^---$/+1" "{1}" 2>/dev/null ; rm "' .. name .. '00" ; rm "' .. name .. '01" 2>/dev/null') - if nil ~= h then h:close() end - h = io.popen('cmark-gfm -t html -e footnotes -e table -e strikethrough -e autolink -e tagfilter -e tasklist "' .. name .. '02" ; rm "' .. name .. '02"') - if nil ~= h then body = h:read('*a') ; h:close() end - else - print('cmark-gfm not found') + + -- Start the file parsing here, coz we need it's metadata. +-- print('Parsing ' .. name .. '.md') + h = io.open(name .. '.md', 'r') + if nil ~= h then + body = h:read('*a') ; h:close() + local f0, f1, token + -- Deal with my typical double spaced sentence endings. + local result = '' + local start = 1 + repeat + f0, f1, token = string.find(body, '([%.%?%!] )', start) + if fail ~= f0 then + result = result .. string.sub(body, start, f0) + if ' ' == string.sub(body, f1 + 1, f1 + 1) then + result = result .. '$s$ ' -- ' ' gets turned into hex 0xA0 by parse(). So feed it another metadata token that gets translated to  . + else + result = result .. ' ' + end + start = f1 + 1 + end + until fail == f0 + result = result .. string.sub(body, start) + -- Do the same for fixing the \' \" \| etc mess pandoc left that sed can't fix. + body = result + result = '' + start = 1 + repeat + f0, f1, token = string.find(body, '(%\\[%"%\'%|%$])', start) + if fail ~= f0 then + result = result .. string.sub(body, start, f0 - 1) + start = f1 + end + until fail == f0 + result = result .. string.sub(body, start) + + body = parse(result) end - Files[name].metadata = metadata - Files[name].body = body + toFile(name, 'body', body) table.insert(Subs[path].files, bit) end end @@ -181,6 +269,10 @@ end +-- TODO - loop through Subs, doing whichPage and inheritance. + + + -- More of this actually doing things nonsense. -- Loop through the files we found and actually create their HTML files. @@ -193,14 +285,6 @@ for name, file in pairs(Files) do path = table.concat(bits, '/', 1, ln) if '' ~= body then - -- Continue the parsing and conversion. Start by turning our parsed body into something the lcmark template system can grock. - local bod, err = lcmark.compile_template(body) - if nil == bod then print('oops! ' .. err) else - local templateFile = metadata.template - if nil == templateFile then templateFile = 'default' end - file.template = templateFile .. '.template' - end - -- Copy any metadata found in parent directories. local pth = '' for i, d in ipairs(bits) do @@ -287,7 +371,6 @@ for name, file in pairs(Files) do metadata.trail = metadata.trail .. b .. '   ' end end --- if '' == metadata.trail then metadata.trail = 'home   ' end -- Figure out this pages footer links. if nil ~= metadata.pagehistory then metadata.history = '

Page history

' end @@ -296,29 +379,26 @@ for name, file in pairs(Files) do if metadata.footer ~= globalData.footer then metadata.footer = 'Web site ' .. metadata.footer end metadata.footer = '

' .. metadata.footer .. '

' - -- Apply the template to the body. - metadata.body = lcmark.apply_template(bod, metadata) - - -- Put it all in the template. - local tm = '' - if nil ~= file.template then - local h = io.open(file.template, 'r') - if nil ~= h then - tm = tm .. h:read('*a') - h:close() - else - print('oops! No such file ' .. file.template) - end - --- TODO - Um not sure why this is here AND at the top of the loop. Here makes more sense. - local template, err = lcmark.compile_template(tm) - if nil == template then print('oops! ' .. err) else - result = lcmark.apply_template(template, metadata) - end - else - print('No template for ' .. name) - result = body + -- Do our own metadata replacement, it's simple and works better. + local temp = template + local start = 1 + metadata.body = nil + local f0, f1, token + -- Toss the body in first, so the scan can deal with it to. + f0, f1, token = string.find(temp, '%$(body)%$') + if fail ~= f0 then + temp = string.sub(temp, 1, f0 - 1) .. body .. string.sub(temp, f1 + 1) end + -- The actual metadata replacement scan. + result = '' + repeat + f0, f1, token = string.find(temp, '%$([%w_]+)%$', start) + if fail ~= f0 then + if nil ~= metadata[token] then result = result .. string.sub(temp, start, f0 - 1) .. metadata[token] end + start = f1 + 1 + end + until fail == f0 + result = result .. string.sub(temp, start) -- Write the file. if '' ~= result then @@ -330,9 +410,6 @@ for name, file in pairs(Files) do a:close() end end - --- else --- print('') end end diff --git a/testing/.md.md b/testing/.md.md new file mode 100644 index 0000000..28c4410 --- /dev/null +++ b/testing/.md.md @@ -0,0 +1 @@ +logo=Connie_click-me.gif diff --git a/testing/MeTaDaTa.md b/testing/MeTaDaTa.md deleted file mode 100644 index c4b8e60..0000000 --- a/testing/MeTaDaTa.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -logo: Connie_click-me.gif ---- diff --git a/testing/index.md b/testing/index.md index b203c9e..276fcb1 100644 --- a/testing/index.md +++ b/testing/index.md @@ -1,32 +1,32 @@ ---- -title: "G'day world!" ---- - # G'day world! -I've been around since the early sixties, but no one ever noticed.  You -really should have tried to pay attention though, I'm awesome.  I try to -help the world, but that's not what everyone wants me to do.$_$ Well, the +I've been around since the early sixties, but no one ever noticed. You +really should have tried to pay attention though, I'm awesome. I try to +help the world, but that's not what everyone wants me to do. Well, the people in charge of this poor defenseless world of ours. *** +## Em'n'Strong + +Test *em* _em_ **strong** __strong__ . + # Spaces -Can it *handle* my _usual_ two **space** sentence breaks? Let's test it.$_$ Not by default. +Can it *handle* my _usual_ two **space** sentence breaks? Let's test it. Not by default. -The \\ before a space turns it into a "a literal unicode nonbreaking space character" which looks invisible in the source.\ \--ascii should output the HTML code far that.$_$ Except doesn't actually work. +The \\ before a space turns it into a "a literal unicode nonbreaking space character" which looks invisible in the source.\ \--ascii should output the HTML code far that. Except doesn't actually work. -Also a \\ at the end of a line turns into a line break, though they get wrapped in paragraph tags.$_$ lol \ +Also a \\ at the end of a line turns into a line break, though they get wrapped in paragraph tags. lol \ -Take two.$_$ And now for something completely different.  It's not consistant, need to manually put in the nbsp a few times above.  Ah, it only works for the first one per line. +Just to double check. That's a single space. \ ## Strike out -Test ~~strike~~ --out--.$_$ Needs the extension. +Test ~~strike~~ --out--. Needs the extension. ### URL @@ -37,34 +37,43 @@ https://sledjhamr.org/ # Lists -* zero -* 1 -* two +* first star +* second star + + -- zero -- 1 -- two +- first dash +- second dash +No way to say "here is the end of the list" without putting something **else** here? Ah a comment will work, or anything else. -No way to say "here is the end of the list" without putting something **else** here?$_$ Ah a comment will work, or anything else. +1. one +2. two + +0. zero 1. one -2. 2 +2. two +Autonumbering? Needs the extension. Doesn't matter, they get renumbered anyway if out of order. - +0. zero +#. first hash +#. second hash + -0. 0 -1. one -2. 2 +#. first hash +#. second hash +#. third hash -Autonumbering? Nope. B-( + 0. zero - 1 - two +2. two +1. one + # images @@ -84,6 +93,7 @@ Autonumbering? Nope. B-( Plus some extra text. + Next code block. ~~~ @@ -92,7 +102,6 @@ Next code block. ~~~ And a really long one, should turn scrollable. - ~~~lua -- Show some Lua code here, may even be highlighted right. print("G'day world!") @@ -103,10 +112,14 @@ print'The problem here is that I have to use CSS to style these things, coz cmar > # What is a blockquote? > Still don't know. lol > -> Just another useless way to eat space I guess.$_$ shrugs +> Just another useless way to eat space I guess. shrugs +> Might be why emails sometimes get that symbol dropped in HTML conversions. |This should be a table. |With two columns and a link | |-------------------------|-------------------------------| |cell 0,0 |cell 0,1 | |cell 1,0 |[linky](https://sledjhamr.org) | + + +I'm 100% sure that % will get treated correctly now. diff --git a/testing/index.md.md b/testing/index.md.md new file mode 100644 index 0000000..c85bb3f --- /dev/null +++ b/testing/index.md.md @@ -0,0 +1 @@ +title=G'day world! -- cgit v1.1