]> git.plutz.net Git - cgilite/blobdiff - markdown.awk
list padding, to prevent bullets floating into elements to the left
[cgilite] / markdown.awk
index 100242cb1ebb9b0e2a706a1025dbc552c51c190b..af3d7224657418caa809b5fa6223ce3cc1411224 100755 (executable)
@@ -115,8 +115,8 @@ function inline( line, LOCAL, len, code, href, guard ) {
     return "";
 
   # omit processing of escaped characters
-  } else if ( line ~ /^\\[]\\`\*_\{\}\(\)#\+-\.![]/) {
-    return substr(line, 2, 1) inline( substr(line, 3) );
+  } else if ( line ~ /^\\./) {
+    return HTML(substr(line, 2, 1)) inline( substr(line, 3) );
 
   # hard brakes
   } else if ( match(line, /^  \n/) ) {
@@ -137,10 +137,10 @@ function inline( line, LOCAL, len, code, href, guard ) {
     }
 
   # Wiki style links
-  } else if ( match( line, /^\[\[([^\]\|]+)(\|([^\]]+))?\]\]/) ) {
+  } else if ( match( line, /^\[\[([^]|]+)(\|[^]]+)?\]\]/) ) {
     len = RLENGTH;
-    href = gensub(/^\[\[([^\]\|]+)(\|([^\]]+))?\]\]/, "\\1", 1, substr(line, 1, len) );
-    text = gensub(/^\[\[([^\]\|]+)(\|([^\]]+))?\]\]/, "\\3", 1, substr(line, 1, len) );
+    href = gensub(/^\[\[([^]|]+)(\|([^]]+))?\]\]/, "\\1", 1, substr(line, 1, len) );
+    text = gensub(/^\[\[([^]|]+)(\|([^]]+))?\]\]/, "\\3", 1, substr(line, 1, len) );
     if ( ! text ) text = href;
     return "<a href=\"" URL(href) "\">" HTML(text) "</a>" inline( substr( line, len + 1) );
 
@@ -399,22 +399,25 @@ function _block( block, LOCAL, st, len, hlvl, htxt, guard, code, indent, attrib
                             "(\\|([^\n]+\\|)+\n)+" \
                             "(\\+(:?=+:?\\+)+)\n" \
                            "((\\|([^\n]+\\|)+\n)+" \
-                             "\\+(-+\\+)+(\n|$))+", \
-                     tread \
+                             "\\+(-+\\+)+(\n|$))+" \
                    ) || \
               match( block, "^()()()" \
                             "(\\+(:?-+:?\\+)+)\n" \
                            "((\\|([^\n]+\\|)+\n)+" \
-                             "\\+(-+\\+)+(\n|$))+", \
-                     tread \
+                             "\\+(-+\\+)+(\n|$))+" \
   ) ) {
     len = RLENGTH; st = RSTART;
     #initialize empty arrays
-    split("", talign); split("", tarray); split("", tread);
+    split("", talign); split("", tarray); split("", tread);
     cols = 0; cnt=0; ttext = "";
 
+    # Column Count
+    cols = split(   gensub( "^(\\+(:?-+:?\\+)+)(\n.*)*$", "\\1", 1, block), tread, /\+/) - 2;
+    # debug(" Cols: " gensub( "^(\\+(:?-+:?\\+)+)(\n.*)*$", "\\1", 1, block ));
+
     # table alignment
-    cols = split( gensub( /(^\+|\+$)/, "", "g", tread[4] ), talign, /\+/ );
+    split( gensub( "^(.*\n)?\\+((:?=+:?\\+|(:-+|-+:|:-+:)\\+)+)(\n.*)$", "\\2", "g", block ), talign, /\+/ );
+    # debug("Align: " gensub( "^(.*\n)?\\+((:?=+:?\\+|(:-+|-+:|:-+:)\\+)+)(\n.*)$", "\\2", "g", block ));
 
     for (cnt = 1; cnt <= cols; cnt++) {
            if (match(talign[cnt], /:(-+|=+):/)) talign[cnt]="center";
@@ -432,9 +435,9 @@ function _block( block, LOCAL, st, len, hlvl, htxt, guard, code, indent, attrib
       # table header
       block = substr(block, match(block, /(\n|$)/) + 1 );
       while ( match(block, "^\\|([^\n]+\\|)+\n") ) {
-        cols = split( gensub( /(^\||\|$)/, "", "g", \
-               gensub( /(^|[^\\])\\\|/, "\\1\\&#x7C;", "g", \
-               substr(block, 1, match(block, /(\n|$)/)) \
+        split( gensub( /(^\||\|$)/, "", "g", \
+                 gensub( /(^|[^\\])\\\|/, "\\1\\&#x7C;", "g", \
+                   substr(block, 1, match(block, /(\n|$)/)) \
         )), tread, /\|/);
         block = substr(block, match(block, /(\n|$)/) + 1 );
         for (cnt = 1; cnt <= cols; cnt++)