X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=markdown.awk;h=3b5a9bb063ce8e18c7a7bc41abfa8569f08bad15;hb=4ee910d547ff383c57c513436a6ed2576f66bf0d;hp=b5aa538055fe017b8c2b2827f23631f5d91d23b3;hpb=d4da2a56ff96e4d6d79c246bdb0223f14ef3965e;p=cgilite diff --git a/markdown.awk b/markdown.awk index b5aa538..3b5a9bb 100755 --- a/markdown.awk +++ b/markdown.awk @@ -5,6 +5,20 @@ # Meant to support all features of John Grubers basic Markdown # + a number of common extensions, mostly inspired by Pandoc Markdown +# Copyright 2021 - 2023 Paul Hänsch +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + # Supported Features / TODO: # ========================== # [x] done [ ] todo [-] not planned ? unsure @@ -727,15 +741,17 @@ function _block( block, LOCAL, st, len, text, title, attrib, href, guard, code, function _startlist(block, type, mark, exclude, LOCAL, st, len, list, indent, text) { if (match( block, "(^|\n) ? ? ?" mark "[ \t][^\n]+(\n|$)" \ - "(([ \t]*\n)* ? ? ?" mark "[ \t][^\n]+(\n|$)" \ - "|([ \t]*\n)*( ? ? ?\t| +)[^\n]+(\n|$)" \ - "|[^\n \t][^\n]+(\n|$))*" ) ) { - st = RSTART; len = RLENGTH; list = substr( block, RSTART, RLENGTH); + "(([ \t]*\n)* ? ? ?" mark "[ \t][^\n]+(\n|$)" \ + "|([ \t]*\n)*( ? ? ?\t| +)[^\n]+(\n|$)" \ + "|[^\n \t][^\n]+(\n|$))*" ) ) { + st = RSTART; len = RLENGTH; list = substr( block, st, len); sub("^\n", "", list); match(list, "^ ? ? ?"); indent = RLENGTH; gsub( "(^|\n) {0," indent "}", "\n", list); sub("^\n", "", list); text = substr(block, 1, st - 1); block = substr(block, st + len); + if (match(text, /\n[[:space:]]*\n/)) return 0; + if (match(text, "(^|\n) ? ? ?" exclude "[ \t][^\n]+")) return 0; if (match( list, "\n" exclude "[ \t]" )) { block = substr(list, RSTART + 1) block; list = substr(list, 1, RSTART);