]> git.plutz.net Git - cgilite/blobdiff - markdown.awk
change order of precedence (HTML binds more than link brackets)
[cgilite] / markdown.awk
index 6d22e3912e6f5e3580bffb61babf36b077117b39..7ec1280d34784d35377afd860d88b81f47df4906 100755 (executable)
@@ -154,6 +154,11 @@ function inline( line, LOCAL, len, text, code, href, guard ) {
       return "<code>" code "</code>" inline( substr( line, len + 1 ) )
     }
 
+  # Macros
+  } else if ( match( line, /^<<([^>]|>[^>])+>>/ ) ) {
+    len = RLENGTH;
+    return "<code class=\"macro\">" HTML( substr( line, 3, len - 4 ) ) "</code>" inline(substr(line, len + 1));
+
   # Wiki style links
   } else if ( match( line, /^\[\[([^]|]+)(\|[^]]+)?\]\]/) ) {
     len = RLENGTH;
@@ -174,6 +179,11 @@ function inline( line, LOCAL, len, text, code, href, guard ) {
     href = URL( substr( line, 2, len - 2) );
     return "<a href=\"mailto:" href "\">" href "</a>" inline( substr( line, len + 1) );
 
+  # Verbatim inline HTML
+  } else if ( AllowHTML && match( line, /^(<!--([^-]|-[^-]|--[^>])*-->|<\?([^\?]|\?[^>])*\?>|<![A-Z][^>]*>|<!\[CDATA\[([^\]]|\][^\]]|\]\][^>])*\]\]>|<\/[A-Za-z][A-Za-z0-9-]*[[:space:]]*>|<[A-Za-z][A-Za-z0-9-]*([[:space:]]+[A-Za-z_:][A-Za-z0-9_\.:-]*([[:space:]]*=[[:space:]]*([[:space:]"'=<>`]+|"[^"]*"|'[^']*'))?)*[[:space:]]*\/?>)/) ) {
+    len = RLENGTH;
+    return substr( line, 1, len) inline(substr(line, len + 1));
+
   # inline links
   #                                 ,_______________________Image____________________________,
   } else if ( match(line, /^\[([^]]+|!\[[^]]*\]\([^"\)]+([ \t]+"[^"]+")?\)(\{[a-zA-Z \t-]*\})?)\]\(([^"\)]+)([[:space:]]+"([^"]+)")?\)/) ) {
@@ -290,16 +300,6 @@ function inline( line, LOCAL, len, text, code, href, guard ) {
     len = RLENGTH;
     return "<em>" inline( substr( line, 2, len - 2 ) ) "</em>" inline( substr( line, len + 1 ) );
 
-  # Macros
-  } else if ( AllowMacros && match( line, /^<<([^>]|>[^>])+>>/) ) {
-    len = RLENGTH;
-    return macro( substr( line, 3, len - 4 ) ) inline(substr(line, len + 1));
-
-  # Verbatim inline HTML
-  } else if ( AllowHTML && match( line, /^(<!--([^-]|-[^-]|--[^>])*-->|<\?([^\?]|\?[^>])*\?>|<![A-Z][^>]*>|<!\[CDATA\[([^\]]|\][^\]]|\]\][^>])*\]\]>|<\/[A-Za-z][A-Za-z0-9-]*[[:space:]]*>|<[A-Za-z][A-Za-z0-9-]*([[:space:]]+[A-Za-z_:][A-Za-z0-9_\.:-]*([[:space:]]*=[[:space:]]*([[:space:]"'=<>`]+|"[^"]*"|'[^']*'))?)*[[:space:]]*\/?>)/) ) {
-    len = RLENGTH;
-    return substr( line, 1, len) inline(substr(line, len + 1));
-
   # Literal HTML entities
   } else if ( match( line, /^&([a-zA-Z]{2,32}|#[0-9]{1,7}|#[xX][0-9a-fA-F]{1,6});/) ) {
     len = RLENGTH;
@@ -402,7 +402,7 @@ function _block( block, LOCAL, st, len, text, title, attrib, href, guard, code,
 
   # Pipe Tables (pandoc / php md / gfm )
   } else if ( match(block, "^((\\|)?([^\n]+\\|)+[^\n]+(\\|)?)\n" \
-                           "((\\|)?:?(-+:?[\\|+])+:?-+:?(\\|)?)\n" \
+                           "((\\|)?(:?-+:?[\\|+])+:?-+:?(\\|)?)\n" \
                            "((\\|)?([^\n]+\\|)+[^\n]+(\\|)?(\n|$))+" ) ) {
     len = RLENGTH; st = RSTART;
     #initialize empty arrays
@@ -688,10 +688,10 @@ function _block( block, LOCAL, st, len, text, title, attrib, href, guard, code,
     }
 
   # Macros (standalone <<macro>> calls handled as block, so they are not wrapped in paragraph)
-  } else if ( AllowMacros && match( block, /^<<(([^>]|>[^>])+)>>(\n|$)/) ) {
+  } else if ( match( block, /^<<(([^>]|>[^>])+)>>(\n|$)/ ) ) {
     len = RLENGTH;
     text = gensub(/^<<(([^>]|>[^>])+)>>(\n.*)?$/, "\\1", 1, block);
-    return macro(text) _block(substr(block, len + 1) );
+    return "<code class=\"macro\">" HTML(text) "</code>" _block(substr(block, len + 1) );
 
   # Definition list
   } else if (match( block, "^(([ \t]*\n)*[^:\n \t][^\n]+\n" \