From ae55f6f3fd50539c90fbc8237ae025edc9b17ba4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Mon, 28 Aug 2023 11:51:26 +0200 Subject: [PATCH] introducing definition lists! --- markdown.awk | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/markdown.awk b/markdown.awk index ffa225b..be7d723 100755 --- a/markdown.awk +++ b/markdown.awk @@ -54,7 +54,7 @@ # - [x] Pipe table (php md, pandoc) # - [x] Line blocks (pandoc) # - [x] Task lists (pandoc, custom) -# - [ ] Definition lists (php md, pandoc) +# - [x] Definition lists (php md, pandoc) # - [-] Numbered example lists (pandoc) # - [-] Metadata blocks (pandoc) # - [x] Metadata blocks (custom) @@ -590,6 +590,17 @@ function _block( block, LOCAL, st, len, hlvl, htxt, sec, guard, code, indent, at gsub("(^|\n) {0," indent "}", "\n", list); return "\n
    \n" _list( substr(list, 2) ) "
\n" _block( block ); + # Definition list + } else if (match( block, "^(([ \t]*\n)*[^:\n \t][^\n]+\n" \ + "([ \t]*\n)* ? ? ?:[ \t][^\n]+(\n|$)" \ + "(([ \t]*\n)* ? ? ?:[ \t][^\n]+(\n|$)" \ + "|[^:\n \t][^\n]+(\n|$)" \ + "|( ? ? ?\t| +)[^\n]+(\n|$)" \ + "|([ \t]*\n)+( ? ? ?\t| +)[^\n]+(\n|$))*)+" \ + )) { + list = substr( block, 1, RLENGTH); block = substr( block, RLENGTH + 1); + return "\n
\n" _dlist( list ) "
\n" _block( block ); + # First Order Heading H1 + Attrib } else if ( match( block, /^([^\n]+)([ \t]*\{([^\}\n]+)\})\n===+(\n|$)/ ) ) { len = RLENGTH; @@ -721,6 +732,31 @@ function _block( block, LOCAL, st, len, hlvl, htxt, sec, guard, code, indent, at } } +function _dlist (block, LOCAL, len, st, text, indent, p) { + if (match( block, "^([ \t]*\n)*[^:\n \t][^\n]+\n" )) { + len = RLENGTH; text = substr(block, 1, len); + gsub( "(^\n*|\n*$)", "", text ); + return "
" inline( text ) "
\n" _dlist( substr(block, len + 1) ); + } else if (match( block, "^([ \t]*\n)* ? ? ?:[ \t][^\n]+(\n|$)" \ + "([^:\n \t][^\n]+(\n|$)" \ + "|( ? ? ?\t| +)[^\n]+(\n|$)" \ + "|([ \t]*\n)+( ? ? ?\t| +)[^\n]+(\n|$))*" \ + )) { + len = RLENGTH; text = substr(block, 1, len); + if (match( text, "^ ? ? ?:[ \t][^\n]+(\n|$)" \ + "([^:\n \t][^\n]+(\n|$)" \ + "|( ? ? ?\t| +)[^\t\n ][^\n]*(\n|$))*$" \ + )) p = 1; else p = 0; + sub( "^([ \t]*\n)*", "", text); + match(text, "^ ? ? ?:(\t| +)"); indent = RLENGTH; + sub( "^ ? ? ?:(\t| +)", "", text); + gsub( "(^|\n) {0," indent "}", "\n", text ); + text = _block(text); + if (p) gsub("(^\n*

|

\n*$)", "", text); + return "
" text "
\n" _dlist( substr(block, len + 1) ); + } +} + function _list( block, last, LOCAL, p) { if ( ! length(block) ) return ""; gsub(/^([-+*]|[0-9]+\.|#\.)( ? ? ?|\t)/, "", block) -- 2.39.2