X-Git-Url: http://git.plutz.net/?p=cgilite;a=blobdiff_plain;f=markdown.awk;h=be7d723b6b96d0efa7ccdc9ecc5be38c881f1026;hp=ffa225b477f6e8ff3dd1b157bc0f6e715df0a494;hb=ae55f6f3fd50539c90fbc8237ae025edc9b17ba4;hpb=1cf0dab1d218582457bce9c839e845b920fecee0
diff --git a/markdown.awk b/markdown.awk
index ffa225b..be7d723 100755
--- a/markdown.awk
+++ b/markdown.awk
@@ -54,7 +54,7 @@
# - [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)
@@ -590,6 +590,17 @@ 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 );
+ # 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;
@@ -721,6 +732,31 @@ function _block( block, LOCAL, st, len, hlvl, htxt, sec, guard, code, indent, at
}
}
+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 "" inline( text ) "\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*|
\n*$)", "", text);
+ return "" text "\n" _dlist( substr(block, len + 1) );
+ }
+}
+
function _list( block, last, LOCAL, p) {
if ( ! length(block) ) return "";
gsub(/^([-+*]|[0-9]+\.|#\.)( ? ? ?|\t)/, "", block)