diff options
| Commit | afee47c616ca5551f1b7eef7428c416134d31789 (patch) | |
|---|---|---|
| Author | 2024-12-31 20:20:07 +0200 | |
| Committer | 2024-12-31 20:20:07 +0200 | |
| Files | ce6f6ef63a6b21e247036b2177e3c16266c14c46 /single.awk | |
| csg-afee47c616ca5551f1b7eef7428c416134d31789.tar csg-afee47c616ca5551f1b7eef7428c416134d31789.tar.gz csg-afee47c616ca5551f1b7eef7428c416134d31789.zip | ||
| Parent | 885be8887eb05fff87c9ed150edff94cc2d3d6d7 (diff) | |
feat(single): Implement autoescaping
1 files changed, 22 insertions, 1 deletions
| -rw-r--r-- | single.awk | 23 |
@@ -1,6 +1,6 @@ # Status: # [.] Inline HTML -# [ ] Autoescape +# [x] Autoescape # [.] Block elements # [x] Paragraph # [x] Line break @@ -155,6 +155,14 @@ blockquote_level > 0 && empty0 { P1 = P1 "<pre><code>" inside_codeblock = 1 } + + ## Autoescape & and < + for (i = 1; match(substr($0, i), /&/); i += RSTART) { + RSTART += i - 1 + sub_match("&") + } + gsub(/</, "\\<") + _next() } inside_codeblock && ! /^[ \t]*$/ { @@ -192,6 +200,19 @@ inside_codeblock && ! /^[ \t]*$/ { } } +# Autoescape & +/&/ { + for (i = 1; match(substr($0, i), /&/); i += RSTART) { + RSTART += i - 1 + if (substr($0, RSTART) ~ /&[A-Za-z0-9#]+;/) { continue } + sub_match("&") + } +} +# Autoescape < +/ < / { + gsub(/ < /, "\\<") +} + # Line break / $/ { sub(/[ \t]* $/, "</br>") |
