From b65a5aecf5675a87f47f0888e90ceea5dbfb219c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Fri, 9 Jul 2021 00:36:52 +0200 Subject: [PATCH] md: heading identifiers --- markdown.awk | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/markdown.awk b/markdown.awk index 9738180..512be5d 100755 --- a/markdown.awk +++ b/markdown.awk @@ -43,6 +43,7 @@ # Extensions - Block elements: # ---------------------------- # - ? Heading identifiers (php md, pandoc) +# - [x] Automatic heading identifiers (custom) # - [x] Fenced code blocks (php md, pandoc) # - [-] Fenced code attributes # - [ ] Tables @@ -347,21 +348,25 @@ function _block( block, LOCAL, st, len, hlvl, htxt, guard, code, indent ) { # First Order Heading } else if ( match( block, /^[^\n]+\n===+(\n|$)/ ) ) { len = RLENGTH; - return "

" inline( gensub( /\n.*$/, "", "g", block ) ) "

\n\n" \ + HL[1]++; HL[2] = 0; HL[3] = 0; HL[4] = 0; HL[5] = 0; HL[6] = 0; + return "

" inline( gensub( /\n.*$/, "", "g", block ) ) "

\n\n" \ _block( substr( block, len + 1 ) ); # Second Order Heading } else if ( match( block, /^[^\n]+\n---+(\n|$)/ ) ) { len = RLENGTH; - return "

" inline( gensub( /\n.*$/, "", "g", block ) ) "

\n\n" \ + HL[2]++; HL[3] = 0; HL[4] = 0; HL[5] = 0; HL[6] = 0; + return "

" inline( gensub( /\n.*$/, "", "g", block ) ) "

\n\n" \ _block( substr( block, len + 1) ); # Nth Order Heading - } else if ( match( block, /^#{1,6}[[:space:]]*[^\n]+([[:space:]]*#*)(\n|$)/ ) ) { + } else if ( match( block, /^#{1,6}[ \t]*[^\n]+([ \t]*#*)(\n|$)/ ) ) { len = RLENGTH; hlvl = length( gensub( /^(#{1,6}).*$/, "\\1", "g", block ) ); - htxt = gensub( /[[:space:]]*#*$/, "", "1", gensub( /^#{1,6}[[:space:]]*([^\n]+)([[:space:]]*#*)\n.*$/, "\\1", "g", block ) ) - return "" inline( htxt ) "\n\n" \ + htxt = gensub(/^#{1,6}[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[^\n#])+)([ \t]*#*)(\n.*)?$/, "\\1", 1, block); + HL[hlvl]++; for ( n = hlvl + 1; n < 7; n++) { HL[n] = 0;} + hid = HL[1]; for ( n = 2; n <= hlvl; n++) { hid = hid "." HL[n] ; } + return "" inline( htxt ) "\n\n" \ _block( substr( block, len + 1) ); # Plain paragraph @@ -409,6 +414,7 @@ BEGIN { # Global Vars file = ""; rl_href[""] = ""; rl_title[""] = ""; if (ENVIRON["MD_HTML"] == "true") { AllowHTML = "true"; } + HL[1] = 0; HL[2] = 0; HL[3] = 0; HL[4] = 0; HL[5] = 0; HL[6] = 0; # Buffering of full file ist necessary, e.g. to find reference links while (getline) { file = file $0 "\n"; } -- 2.39.2