From: Paul Hänsch Date: Sun, 2 Jul 2023 20:45:12 +0000 (+0200) Subject: headline atttributes X-Git-Url: http://git.plutz.net/?p=cgilite;a=commitdiff_plain;h=854547d423e0a1bc2d4437cb15e7c51d8be4904a headline atttributes --- diff --git a/markdown.awk b/markdown.awk index 8ac8b63..506d22d 100755 --- a/markdown.awk +++ b/markdown.awk @@ -40,6 +40,7 @@ # ---------------------------- # - [x] Automatic
-wrapping (custom) # - ? Heading identifiers (php md, pandoc) +# - [x] Heading attributes (custom) # - [x] Automatic heading identifiers (custom) # - [x] Fenced code blocks (php md, pandoc) # - [x] Fenced code attributes @@ -307,7 +308,7 @@ function inline( line, LOCAL, len, code, href, guard ) { } } -function headline( hlvl, htxt, LOCAL, sec, n, HL) { +function headline( hlvl, htxt, attrib, LOCAL, sec, n, HL) { split( gensub( /^(.* )?([0-9]+( [0-9]+){5})$/, "\\2" ,"1", hstack), HL); for ( n = hlvl; n <= 6; n++ ) { sec = sec (HL[n]?"
":""); } @@ -319,8 +320,8 @@ function headline( hlvl, htxt, LOCAL, sec, n, HL) { hstack = gensub( /^(.* )?([0-9]+( [0-9]+){5})$/, "\\1" ,"1", hstack) \ HL[1] " " HL[2] " " HL[3] " " HL[4] " " HL[5] " " HL[6]; - return sec "
" \ - "" inline( htxt ) \ + return sec "
" \ + "" inline( htxt ) \ "" \ "\n\n"; } @@ -589,28 +590,60 @@ 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 ); + # First Order Heading H1 + Attrib + } else if ( match( block, /^([^\n]+)([ \t]*\{([^\}\n]+)\})\n===+(\n|$)/ ) ) { + len = RLENGTH; + text = gensub(/^([^\n]+)([ \t]*\{([^\}\n]+)\})\n===+(\n.*)?$/, "\\1", 1, block) + attrib = gensub(/^([^\n]+)([ \t]*\{([^\}\n]+)\})\n===+(\n.*)?$/, "\\3", 1, block) + gsub(/[^a-zA-Z0-9_-]+/, " ", attrib); gsub(/(^ | $)/, "", attrib); + + return headline(1, text, attrib) \ + _block( substr( block, len + 1 ) ); + # First Order Heading H1 - } else if ( match( block, /^[^\n]+\n===+(\n|$)/ ) ) { + } else if ( match( block, /^([^\n]+)\n===+(\n|$)/ ) ) { len = RLENGTH; + text = gensub(/^([^\n]+)\n===+(\n.*)?$/, "\\1", 1, block) - return headline(1, gensub( /\n.*$/, "", "g", block )) \ + return headline(1, text, 0) \ _block( substr( block, len + 1 ) ); + # Second Order Heading H2 + Attrib + } else if ( match( block, /^([^\n]+)([ \t]*\{([^\}\n]+)\})\n---+(\n|$)/ ) ) { + len = RLENGTH; + text = gensub(/^([^\n]+)([ \t]*\{([^\}\n]+)\})\n---+(\n.*)?$/, "\\1", 1, block) + attrib = gensub(/^([^\n]+)([ \t]*\{([^\}\n]+)\})\n---+(\n.*)?$/, "\\3", 1, block) + gsub(/[^a-zA-Z0-9_-]+/, " ", attrib); gsub(/(^ | $)/, "", attrib); + + return headline(2, text, attrib) \ + _block( substr( block, len + 1) ); + # Second Order Heading H2 - } else if ( match( block, /^[^\n]+\n---+(\n|$)/ ) ) { + } else if ( match( block, /^([^\n]+)\n---+(\n|$)/ ) ) { + len = RLENGTH; + text = gensub(/^([^\n]+)\n---+(\n.*)?$/, "\\1", 1, block) + + return headline(2, text, 0) \ + _block( substr( block, len + 1) ); + + # Nth Order Heading H1 H2 H3 H4 H5 H6 + Attrib + } else if ( match( block, /^(#{1,6})[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[ \t]*[^ \t\n#])+)[ \t]*#*([ \t]*\{([a-zA-Z \t-]*)\})(\n|$)/ ) ) { len = RLENGTH; + n = gensub(/^(#{1,6})[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[ \t]*[^ \t\n#])+)[ \t]*#*([ \t]*\{([a-zA-Z \t-]*)\})(\n.*)?$/, "\\1", 1, block); + text = gensub(/^(#{1,6})[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[ \t]*[^ \t\n#])+)[ \t]*#*([ \t]*\{([a-zA-Z \t-]*)\})(\n.*)?$/, "\\2", 1, block); + attrib = gensub(/^(#{1,6})[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[ \t]*[^ \t\n#])+)[ \t]*#*([ \t]*\{([a-zA-Z \t-]*)\})(\n.*)?$/, "\\5", 1, block); + gsub(/[^a-zA-Z0-9_-]+/, " ", attrib); gsub(/(^ | $)/, "", attrib); - return headline(2, gensub( /\n.*$/, "", "g", block )) \ + return headline( length(n), text, attrib ) \ _block( substr( block, len + 1) ); # Nth Order Heading H1 H2 H3 H4 H5 H6 - } else if ( match( block, /^#{1,6}[ \t]*[^\n]+([ \t]*#*)(\n|$)/ ) ) { + } else if ( match( block, /^(#{1,6})[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[ \t]*[^ \t\n#])+)[ \t]*#*(\n|$)/ ) ) { len = RLENGTH; + n = gensub(/^(#{1,6})[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[ \t]*[^ \t\n#])+)[ \t]*#*(\n.*)?$/, "\\1", 1, block); + text = gensub(/^(#{1,6})[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[ \t]*[^ \t\n#])+)[ \t]*#*(\n.*)?$/, "\\2", 1, block); - return headline( \ - length( gensub( /^(#{1,6}).*$/, "\\1", "g", block ) ), \ - gensub(/^#{1,6}[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[^\n#])+)([ \t]*#*)(\n.*)?$/, "\\1", 1, block) \ - ) \ + return headline( length(n), text, 0 ) \ _block( substr( block, len + 1) ); # block images (wrapped in
)