From: Paul Hänsch " inline(block) " (\n" _list( substr(list, 2) ) "
\n" _block( block );
-
- # Ordered list
- } else if ( match( block, "^ ? ? ?([0-9]+|#)\\.[ \t]+[^\n]+(\n|$)" \
- "(([ \t]*\n)* ? ? ?([0-9]+|#)\\.[ \t]+[^\n]+(\n|$)" \
- "|([ \t]*\n)*( ? ? ?\t| +)[^\n]+(\n|$)" \
- "|[^\n]+(\n|$))*" ) ) {
- list = substr( block, 1, RLENGTH);
- block = substr( block, RLENGTH + 1);
- indent = length( gensub(/([0-9]+|#)\.[ \t]+[^\n]+.*$/, "", 1, list) );
-
- gsub("(^|\n) {0," indent "}", "\n", list);
- return "\n\n" _list( substr(list, 2) ) "
\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\n" _dlist( list ) "
\n" _block( block );
-
# First Order Heading H1 + Attrib
} else if ( match( block, /^([^\n]+)([ \t]*\{([^\}\n]+)\})\n===+(\n|$)/ ) ) {
len = RLENGTH;
@@ -715,23 +680,96 @@ function _block( block, LOCAL, st, len, text, title, attrib, href, guard, code,
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)) "
\n" _block(substr(block, st + len));
+
+ # 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\n" _dlist( list ) "
\n" _block( block );
+
+ # Unordered list
+ } else if ( match( block, "(^|\n) ? ? ?[-+*][ \t][^\n]+(\n|$)" \
+ "(([ \t]*\n)* ? ? ?[-+*][ \t][^\n]+(\n|$)" \
+ "|([ \t]*\n)*( ? ? ?\t| +)[^\n]+(\n|$)" \
+ "|[^\n \t][^\n]+(\n|$))*" ) ) {
+ st = RSTART; len = RLENGTH; list = substr( block, RSTART, RLENGTH);
+ sub("^\n", "", list); match(list, "^ ? ? ?[-+*]"); indent = RLENGTH;
+ gsub( "(^|\n) {0," indent - 1 "}", "\n", list); sub("^\n", "", list);
+
+ text = substr(block, 1, st - 1); block = substr(block, st + len);
+ if (match( list, "\n([0-9]+\\.|#\\.)[ \t]" )) {
+ block = substr(list, RSTART + 1) block;
+ list = substr(list, 1, RSTART);
+ }
+
+ return _block( text ) "\n" _list( list, "[-+*]" ) "
\n" _block( block );
+
+ # Ordered list
+ } else if ( match( block, "(^|\n) ? ? ?([0-9]+\\.|#\\.)[ \t][^\n]+(\n|$)" \
+ "(([ \t]*\n)* ? ? ?([0-9]+\\.|#\\.)[ \t][^\n]+(\n|$)" \
+ "|([ \t]*\n)*( ? ? ?\t| +)[^\n]+(\n|$)" \
+ "|[^\n \t][^\n]+(\n|$))*" ) ) {
+ st = RSTART; len = RLENGTH; list = substr( block, RSTART, RLENGTH);
+ sub("^\n", "", list); match(list, "^ ? ? ?[0-9#]"); indent = RLENGTH;
+ gsub( "(^|\n) {0," indent - 1 "}", "\n", list); sub("^\n", "", list);
+
+ text = substr(block, 1, st - 1); block = substr(block, st + len);
+ if (match( list, "\n[-+*][ \t]" )) {
+ block = substr(list, RSTART + 1) block;
+ list = substr(list, 1, RSTART);
+ }
+
+ return _block( text ) "\n" _list( list, "([0-9]+\\.|#\\.)" ) "
\n" _block( block );
+
# Split paragraphs
} else if ( match( block, /(^|\n)[[:space:]]*(\n|$)/) ) {
len = RLENGTH; st = RSTART;
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)) "
\n" _block(substr(block, st + len));
-
# Plain paragraph
} else {
return "
|
\n$)", "", text); + + return task text "\n" _list(block, mark); +} + 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); @@ -743,66 +781,17 @@ function _dlist (block, LOCAL, len, st, text, indent, p) { "|([ \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*|
\n*$)", "", text); - return "(
]|[^p]|<[^/]|[^<])*\n$" )) + gsub( "(^|
\n$)", "", text); - # if this should be a paragraph item - # either previous item (last) or current item (p) contains blank lines - if (match(last, /\n[[:space:]]*\n/) || match(p, /\n[[:space:]]*\n/) ) { - last = p; p = _nblock(p); - } else { - last = p; p = _nblock(p); - sub( /^/, "", p ); - sub( /<\/p>\n/, "", p ); + return "
\[ \].*/ ) { return "
" \ - substr(p, 7) "
\[-\].*/ ) { return "
" \ - substr(p, 7) "
\[\?\].*/ ) { return "
" \ - substr(p, 7) "
\[\/\].*/ ) { return "
" \ - substr(p, 7) "
\[[xX]\].*/ ) { return "
" \ - substr(p, 7) "