X-Git-Url: https://git.plutz.net/?p=cgilite;a=blobdiff_plain;f=markdown.awk;h=512be5d5723da1f9a049bb1ba31241d813dba5ac;hp=973818067497779dc286f234b1c1ed489f2e4dfe;hb=b65a5aecf5675a87f47f0888e90ceea5dbfb219c;hpb=b089a33c27ef1af2b4d5816d4af7ef7809210a02
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"; }