X-Git-Url: https://git.plutz.net/?p=cgilite;a=blobdiff_plain;f=markdown.awk;h=44d4e0d7d16aa8aaab7638da20debc775f9770c3;hp=2dec7c8fec3830b4e07d9260436d43caf29ca456;hb=970afdafe1d1125607c10d3e410abae8d2244392;hpb=dfadf30dcbd36c4ea8a694ac556e22d78e4419a6 diff --git a/markdown.awk b/markdown.awk index 2dec7c8..44d4e0d 100755 --- a/markdown.awk +++ b/markdown.awk @@ -62,6 +62,8 @@ # - [x] ^Superscript^ ~Subscript~ (pandoc) # - [-] Bracketed spans (pandoc) # - [-] Inline attributes (pandoc) +# - [x] Image attributes (custom, pandoc inspired, inline only) +# - [x] Wiki style links [[PageName]] / [[PageName|Link Text]] # - [-] TEX-Math (pandoc) # - ? Footnotes (php md) # - ? Abbreviations (php md) @@ -117,6 +119,14 @@ function inline( line, LOCAL, len, code, href, guard ) { return "" code "" inline( substr( line, len + 1 ) ) } + # Wiki style links + } else if ( match( line, /^\[\[([^\]\|]+)(\|([^\]]+))?\]\]/) ) { + len = RLENGTH; + href = gensub(/^\[\[([^\]\|]+)(\|([^\]]+))?\]\]/, "\\1", 1, substr(line, 1, len) ); + text = gensub(/^\[\[([^\]\|]+)(\|([^\]]+))?\]\]/, "\\3", 1, substr(line, 1, len) ); + if ( ! text ) text = href; + return "" HTML(text) "" inline( substr( line, len + 1) ); + # quick links ("automatic links" in md doc) } else if ( match( line, /^<[a-zA-Z]+:\/\/([-\.[:alnum:]]+)(:[0-9]*)?(\/[^>]*)?>/ ) ) { len = RLENGTH; @@ -156,13 +166,18 @@ function inline( line, LOCAL, len, code, href, guard ) { } # inline images - } else if ( match(line, /^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)/) ) { + } else if ( match(line, /^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)(\{([a-zA-Z \t-]*)\})?/) ) { len = RLENGTH; - text = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)/, "\\1", "g", substr(line, 1, len) ); - href = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)/, "\\2", "g", substr(line, 1, len) ); - title = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)/, "\\4", "g", substr(line, 1, len) ); - if ( title ) { + text = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)(\{([a-zA-Z \t-]*)\})?/, "\\1", "g", substr(line, 1, len) ); + href = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)(\{([a-zA-Z \t-]*)\})?/, "\\2", "g", substr(line, 1, len) ); + title = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)(\{([a-zA-Z \t-]*)\})?/, "\\4", "g", substr(line, 1, len) ); + attrib = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)(\{([a-zA-Z \t-]*)\})?/, "\\6", "g", substr(line, 1, len) ); + if ( title && attrib ) { + return "\""" inline( substr( line, len + 1) ); + } else if ( title ) { return "\""" inline( substr( line, len + 1) ); + } else if ( attrib ) { + return "\""" inline( substr( line, len + 1) ); } else { return "\""" inline( substr( line, len + 1) ); } @@ -416,7 +431,7 @@ function _block( block, LOCAL, st, len, hlvl, htxt, guard, code, indent, attrib _block( substr( block, len + 1) ); # Indented Code Block - } else if ( match(block, /^( |\t)( *\t*[^ \t\n])+(\n|$)(( |\t)[^\n]+(\n|$)|[ \t]*(\n|$))*/) ) { + } else if ( match(block, /^( |\t)( *\t*[^ \t\n]+ *\t*)+(\n|$)(( |\t)[^\n]+(\n|$)|[ \t]*(\n|$))*/) ) { len = RLENGTH; st = RSTART; code = substr(block, 1, len); gsub(/(^|\n)( |\t)/, "\n", code); @@ -490,7 +505,7 @@ function _block( block, LOCAL, st, len, hlvl, htxt, guard, code, indent, attrib HL[1]++; HL[2] = 0; HL[3] = 0; HL[4] = 0; HL[5] = 0; HL[6] = 0; return "

" \ inline( gensub( /\n.*$/, "", "g", block ) ) \ - "

\n\n" \ _block( substr( block, len + 1 ) ); @@ -500,7 +515,7 @@ function _block( block, LOCAL, st, len, hlvl, htxt, guard, code, indent, attrib HL[2]++; HL[3] = 0; HL[4] = 0; HL[5] = 0; HL[6] = 0; return "

" \ inline( gensub( /\n.*$/, "", "g", block ) ) \ - "

\n\n" \ _block( substr( block, len + 1) ); @@ -512,7 +527,7 @@ function _block( block, LOCAL, st, len, hlvl, htxt, guard, code, indent, attrib HL[hlvl]++; for ( n = hlvl + 1; n < 7; n++) { HL[n] = 0;} hid = HL[1]; for ( n = 2; n <= hlvl; n++) { hid = hid "." HL[n] ; } return "" inline( htxt ) \ - "\n\n" \ + "\n\n" \ _block( substr( block, len + 1) ); # Split paragraphs