diff options
Diffstat (limited to 'ht.awk')
-rwxr-xr-x | ht.awk | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/ht.awk b/ht.awk index faa729d..a382ae7 100755 --- a/ht.awk +++ b/ht.awk | |||
@@ -11,7 +11,8 @@ function bufpush(s) { | |||
11 | function buflush() { | 11 | function buflush() { |
12 | if (BUF) print BUF; | 12 | if (BUF) print BUF; |
13 | BUF = ""; | 13 | BUF = ""; |
14 | if (tag && (tag != "html")) print "</" tag ">"; | 14 | if (tag && (tag != "html") && (tag != "raw")) |
15 | print "</" tag ">"; | ||
15 | } | 16 | } |
16 | 17 | ||
17 | function esc(t) { | 18 | function esc(t) { |
@@ -19,6 +20,7 @@ function esc(t) { | |||
19 | gsub(/&/, "\\&", t); | 20 | gsub(/&/, "\\&", t); |
20 | gsub(/</, "\\<", t); | 21 | gsub(/</, "\\<", t); |
21 | gsub(/>/, "\\>", t); | 22 | gsub(/>/, "\\>", t); |
23 | sub(/^ /, "\\ ", t); | ||
22 | return t; | 24 | return t; |
23 | } | 25 | } |
24 | 26 | ||
@@ -30,7 +32,21 @@ function esc(t) { | |||
30 | next; | 32 | next; |
31 | } | 33 | } |
32 | 34 | ||
35 | /^```$/ { # Raw block | ||
36 | if (! (tag == "raw")) { | ||
37 | tag = "raw"; | ||
38 | getline; | ||
39 | bufpush("<pre><code>" $0); | ||
40 | } else { | ||
41 | bufpush("</code></pre>"); | ||
42 | buflush(); | ||
43 | tag = ""; | ||
44 | } | ||
45 | next; | ||
46 | } | ||
47 | |||
33 | /^=>/ { # Links (Gemini-style) | 48 | /^=>/ { # Links (Gemini-style) |
49 | if (tag == "raw") next; | ||
34 | link = "<a href=\"" esc($2) "\">" $3; | 50 | link = "<a href=\"" esc($2) "\">" $3; |
35 | for (i=4;i<=NF;i++) link = link " " $i; | 51 | for (i=4;i<=NF;i++) link = link " " $i; |
36 | link = link "</a>"; | 52 | link = link "</a>"; |
@@ -39,21 +55,25 @@ function esc(t) { | |||
39 | } | 55 | } |
40 | 56 | ||
41 | /^-/ { # Unordered lists | 57 | /^-/ { # Unordered lists |
58 | if (tag == "raw") next; | ||
42 | if (! (tag == "ul")) tag = "ul"; | 59 | if (! (tag == "ul")) tag = "ul"; |
43 | sub(/^-[ \t]*/, "<li>"); | 60 | sub(/^-[ \t]*/, "<li>"); |
44 | } | 61 | } |
45 | 62 | ||
46 | /^[0-9]+\./ { # Ordered lists | 63 | /^[0-9]+\./ { # Ordered lists |
64 | if (tag == "raw") next; | ||
47 | if (! (tag == "ol")) tag = "ol"; | 65 | if (! (tag == "ol")) tag = "ol"; |
48 | sub(/^[0-9]+\.[ \t]/, "<li>"); | 66 | sub(/^[0-9]+\.[ \t]/, "<li>"); |
49 | } | 67 | } |
50 | 68 | ||
51 | /^>/ { # Blockquotes | 69 | /^>/ { # Blockquotes |
70 | if (tag == "raw") next; | ||
52 | if (! (tag == "blockquote")) tag = "blockquote"; | 71 | if (! (tag == "blockquote")) tag = "blockquote"; |
53 | sub(/^>[ \t]*/,""); | 72 | sub(/^>[ \t]*/,""); |
54 | } | 73 | } |
55 | 74 | ||
56 | /^#+/ { # Headers | 75 | /^#+/ { # Headers |
76 | if (tag == "raw") next; | ||
57 | match($0, /^#+/); | 77 | match($0, /^#+/); |
58 | if (! (tag == "h" RLENGTH)) { | 78 | if (! (tag == "h" RLENGTH)) { |
59 | buflush(); | 79 | buflush(); |
@@ -63,6 +83,7 @@ function esc(t) { | |||
63 | } | 83 | } |
64 | 84 | ||
65 | /^$/ { | 85 | /^$/ { |
86 | if (tag == "raw") next; | ||
66 | buflush(); | 87 | buflush(); |
67 | tag = ""; | 88 | tag = ""; |
68 | } | 89 | } |
@@ -70,6 +91,7 @@ function esc(t) { | |||
70 | /./ { | 91 | /./ { |
71 | if (! tag) tag = "p"; | 92 | if (! tag) tag = "p"; |
72 | if (! BUF) bufpush("<" tag ">"); | 93 | if (! BUF) bufpush("<" tag ">"); |
94 | if (tag == "raw") $0 = esc($0); | ||
73 | bufpush($0); | 95 | bufpush($0); |
74 | } | 96 | } |
75 | 97 | ||