From: Paul Hänsch Date: Mon, 5 Jul 2021 13:19:59 +0000 (+0200) Subject: md: verbatim html block, md: allow emphasis before punctuation X-Git-Url: https://git.plutz.net/?p=cgilite;a=commitdiff_plain;h=987f4ef7db8df774e437d36f199be7c2e1396584 md: verbatim html block, md: allow emphasis before punctuation --- diff --git a/markdown.awk b/markdown.awk index 98a3e8b..e652be1 100755 --- a/markdown.awk +++ b/markdown.awk @@ -24,6 +24,7 @@ # - [x] Lists (ordered, unordered) # - [x] Code blocks (using indention) # - [x] Horizontal rules +# - [x] Verbatim HTML block (gfm) # # Basic Markdown - Inline elements: # --------------------------------- @@ -34,6 +35,7 @@ # - [x] Images / reference style images # - [x] # - [x] backslash escapes +# - [ ] Verbatim HTML inline # # Extensions - Block elements: # ---------------------------- @@ -197,7 +199,7 @@ function inline( line, LOCAL, len, code, href, guard ) { return "" inline( substr( line, 3, len - 4 ) ) "" inline( substr( line, len + 1 ) ); # __strong__ - } else if ( match(line, "^__(([^_[:space:]]|" ieu ")|([^_[:space:]]|" ieu ")(" nu "|" ieu ")*([^_[:space:]]|" ieu "))__[[:space:]]") ) { + } else if ( match(line, "^__(([^_[:space:]]|" ieu ")|([^_[:space:]]|" ieu ")(" nu "|" ieu ")*([^_[:space:]]|" ieu "))__[[:space:][:punct:]]") ) { len = RLENGTH; return "" inline( substr( line, 3, len - 5 ) ) "" inline( substr( line, len) ); @@ -212,7 +214,7 @@ function inline( line, LOCAL, len, code, href, guard ) { return "" inline( substr( line, 2, len - 2 ) ) "" inline( substr( line, len + 1 ) ); # _em_ - } else if ( match(line, "^_(([^_[:space:]]|" isu ")|([^_[:space:]]|" isu ")(" nu "|" isu ")*([^_[:space:]]|" isu "))_[[:space:]]") ) { + } else if ( match(line, "^_(([^_[:space:]]|" isu ")|([^_[:space:]]|" isu ")(" nu "|" isu ")*([^_[:space:]]|" isu "))_[[:space:][:punct:]]") ) { len = RLENGTH; return "" inline( substr( line, 2, len - 3 ) ) "" inline( substr( line, len ) ); @@ -233,6 +235,41 @@ function _block( block, LOCAL, st, len, hlvl, htxt, guard, code, indent ) { if ( block == "" ) { return ""; + # HTML #2 + } else if ( match( block, /(^|\n) ? ? ?|$)/) ) { + len = RLENGTH; st = RSTART; + return _block(substr(block, 1, st - 1)) substr(block, st, len) _block(substr(block, st + len)); + + # HTML #3 + } else if ( match( block, /(^|\n) ? ? ?<\?([^\?]|\?[^>])*(\?>|$)/) ) { + len = RLENGTH; st = RSTART; + return _block(substr(block, 1, st - 1)) substr(block, st, len) _block(substr(block, st + len)); + + # HTML #4 + } else if ( match( block, /(^|\n) ? ? ?]*(>|$)/) ) { + len = RLENGTH; st = RSTART; + return _block(substr(block, 1, st - 1)) substr(block, st, len) _block(substr(block, st + len)); + + # HTML #5 + } else if ( match( block, /(^|\n) ? ? ?])*(\]\]>|$)/) ) { + len = RLENGTH; st = RSTART; + return _block(substr(block, 1, st - 1)) substr(block, st, len) _block(substr(block, st + len)); + + # HTML #6 + } else if ( match( tolower(block), /(^|\n) ? ? ?<\/?(address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[123456]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)([[:space:]\n>]|\/>)([^\n]|\n[ \t]*[^\n])*(\n[[:space:]]*\n|$)/) ) { + len = RLENGTH; st = RSTART; + return _block(substr(block, 1, st - 1)) substr(block, st, len) _block(substr(block, st + len)); + + # HTML #1 + } else if ( match( tolower(block), /(^|\n) ? ? ?<(script|pre|style)([[:space:]\n>]).*(<\/script>|<\/pre>|<\/style>|$)/) ) { + len = RLENGTH; st = RSTART; + return _block(substr(block, 1, st - 1)) substr(block, st, len) _block(substr(block, st + len)); + + # HTML #7 + } else if ( match( block, /^ ? ? ?(<\/[A-Za-z][A-Za-z0-9-]* \t]*>|<[A-Za-z][A-Za-z0-9-]*([ \t]+[A-Za-z_:][A-Za-z0-9_\.:-]*[ \t]*=[ \t]*([[:space:]"'=<>`]+|"[^"]*"|'[^']*'))*[ \t]*\/?>)([[:space:]]*\n).*(\n[[:space:]]*\n|$)/) ) { + len = RLENGTH; st = RSTART; + return substr(block, st, len) _block(substr(block, st + len)); + # Horizontal rule } else if ( match( block, /(^|\n) ? ? ?((\* *){3,}|(- *){3,}|(_ *){3,})($|\n)/) ) { len = RLENGTH; st = RSTART;