# - [x] Automatic <section>-wrapping (custom)
# - ? Heading identifiers (php md, pandoc)
# - [x] Heading attributes (custom)
+# - [ ] <hr> ends section
# - [x] Automatic heading identifiers (custom)
# - [x] Fenced code blocks (php md, pandoc)
# - [x] Fenced code attributes
for ( n = hlvl; n <= 6; n++ ) { sec = sec (HL[n]?"</section>":""); }
HL[hlvl]++; for ( n = hlvl + 1; n <= 6; n++) { HL[n] = 0;}
+
hid = ""; for ( n = 2; n <= blvl; n++) { hid = hid BL[n] "/"; }
hid = hid HL[1]; for ( n = 2; n <= hlvl; n++) { hid = hid "." HL[n] ; }
hid = hid ":" URL(htxt, 1);
}
# Nested Block, resets heading counters
-function _nblock( block, LOCAL, hlsav, sec, n ) {
- hlsav = hstack;
+function _nblock( block, LOCAL, sec, n ) {
hstack = hstack " 0 0 0 0 0 0";
# Block Level
block = _block( block );
split( gensub( /^(.* )?([0-9]+( [0-9]+){5})$/, "\\2" ,"1", hstack), HL);
sec = ""; for ( n = 1; n <= 6; n++ ) { sec = sec (HL[n]?"</section>":""); }
- hstack = hlsav; blvl--;
+
+ sub("( +[0-9]+){6} *$", "", hstack); blvl--;
return block sec;
}
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 ) );
+ return headline(1, text, attrib) _block( substr( block, len + 1 ) );
# First Order Heading H1
} else if ( match( block, /^([^\n]+)\n===+(\n|$)/ ) ) {
len = RLENGTH;
text = gensub(/^([^\n]+)\n===+(\n.*)?$/, "\\1", 1, block)
- return headline(1, text, 0) \
- _block( substr( block, len + 1 ) );
+ return headline(1, text, 0) _block( substr( block, len + 1 ) );
# Second Order Heading H2 + Attrib
} else if ( match( block, /^([^\n]+)([ \t]*\{([^\}\n]+)\})\n---+(\n|$)/ ) ) {
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) );
+ return headline(2, text, attrib) _block( substr( block, len + 1) );
# Second Order Heading H2
} 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) );
+ 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|$)/ ) ) {
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( length(n), text, attrib ) \
- _block( substr( block, len + 1) );
+ 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]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[ \t]*[^ \t\n#])+)[ \t]*#*(\n|$)/ ) ) {
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(n), text, 0 ) \
- _block( substr( block, len + 1) );
+ return headline( length(n), text, 0 ) _block( substr( block, len + 1) );
# block images (wrapped in <figure>)
} else if ( match(block, /^!\[([^]]*)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)(\{([a-zA-Z \t-]*)\})?(\n|$)/) ) {
text = gensub(/^<<(([^>]|>[^>])+)>>(\n.*)?$/, "\\1", 1, block);
return macro(text) _block(substr(block, len + 1) );
- # Horizontal rule
- } else if ( match( block, /(^|\n) ? ? ?((\* *){3,}|(- *){3,}|(_ *){3,})($|\n)/) ) {
- len = RLENGTH; st = RSTART;
- return _block(substr(block, 1, st - 1)) "<hr>\n" _block(substr(block, st + len));
-
# Definition list
} else if (match( block, "^(([ \t]*\n)*[^:\n \t][^\n]+\n" \
"([ \t]*\n)* ? ? ?:[ \t][^\n]+(\n|$)" \
return _block( substr(block, 1, st - 1) ) "\n" \
_block( substr(block, st + len) );
+ # Horizontal rule
+ } else if ( match( block, /(^|\n) ? ? ?((\* *){3,}|(- *){3,}|(_ *){3,})($|\n)/) ) {
+ len = RLENGTH; st = RSTART;
+ return _block(substr(block, 1, st - 1)) "<hr>\n" _block(substr(block, st + len));
+
# Plain paragraph
} else {
return "<p>" inline(block) "</p>\n";