# - [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)
return sec "<section class=\"" (attrib ? "h" hlvl " " attrib : "h" hlvl) "\" id=\"" hid "\">" \
"<h" hlvl (attrib ? " class=\"" attrib "\"" : "") ">" inline( htxt ) \
"<a class=\"anchor\" href=\"#" hid "\"></a>" \
- "</h" hlvl ">\n\n";
+ "</h" hlvl ">\n";
}
# Nested Block, resets heading counters
return block sec;
}
-function _block( block, LOCAL, st, len, hlvl, htxt, sec, guard, code, indent, attrib ) {
+function _block( block, LOCAL, st, len, text, title, attrib, href, guard, code, indent ) {
gsub( /^\n+|\n+$/, "", block );
if ( block == "" ) {
# Line Blocks (pandoc)
} else if ( match(block, /^\| [^\n]*(\n|$)(\| [^\n]*(\n|$)|[ \t]+[^\n[:space:]][^\n]*(\n|$))*/) ) {
len = RLENGTH; st = RSTART;
- code = substr(block, 1, len);
- gsub(/\n[[:space:]]+/, " ", code);
- gsub(/\n\| /, "\n", code);
- gsub(/^\| |\n$/, "", code);
- return "<div class=\"line-block\">" gensub(/\n/, "<br>\n", "g", inline( code )) "</div>\n" \
+ text = substr(block, 1, len);
+ gsub(/\n[[:space:]]+/, " ", text);
+ gsub(/\n\| /, "\n", text);
+ gsub(/^\| |\n$/, "", text);
+ return "<div class=\"line-block\">" gensub(/\n/, "<br>\n", "g", inline( text )) "</div>\n" \
_block( substr( block, len + 1) );
# Indented Code Block
gsub("(^|\n) {0," indent "}", "\n", list);
return "\n<ol>\n" _list( substr(list, 2) ) "</ol>\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<dl>\n" _dlist( list ) "</dl>\n" _block( block );
+
# First Order Heading H1 + Attrib
} else if ( match( block, /^([^\n]+)([ \t]*\{([^\}\n]+)\})\n===+(\n|$)/ ) ) {
len = RLENGTH;
}
}
+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 "<dt>" inline( text ) "</dt>\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*<p>|</p>\n*$)", "", text);
+ return "<dd>" text "</dd>\n" _dlist( substr(block, len + 1) );
+ }
+}
+
function _list( block, last, LOCAL, p) {
if ( ! length(block) ) return "";
gsub(/^([-+*]|[0-9]+\.|#\.)( ? ? ?|\t)/, "", block)