tttml-html - tttml - converters for a simpler syntax than markdown
(HTM) git clone git://bitreich.org/tttml git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/tttml
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Tags
(DIR) README
---
tttml-html (2784B)
---
1 #!/usr/bin/awk -f
2
3 function esc(str)
4 {
5 gsub("&", "\\&", str);
6 gsub("<", "\\<", str);
7 gsub(">", "\\>", str);
8 gsub("\"", "\\"", str);
9 gsub("'", "\\'", str);
10 return str;
11 }
12
13 function format(blk)
14 {
15 gsub("[*_/]", "", blk);
16
17 for (out = ""; match(blk, /\[[^]]+\]/);) {
18 out = out substr(blk, 1, RSTART - 1);
19 label = substr(blk, RSTART + 1, RLENGTH - 2);
20 out = out sprintf("<sup>[<a href=\"#%s\">%s</a>]</sup>", label, label);
21 blk = substr(blk, RSTART + RLENGTH);
22 }
23 out = out blk;
24 return out;
25 }
26
27 function paragraph(blk)
28 {
29 if (blk)
30 print("<p>" format(esc(blk)) "</p>");
31 }
32
33 function blockquote(blk)
34 {
35 if (blk)
36 print("<blockquote>" format(esc(blk)) "</blockquote>");
37 }
38
39 function list(blk)
40 {
41 if (blk)
42 print("<ul><li>" format(esc(blk)) "</li></ul>");
43 }
44
45 function title(blk)
46 {
47 print("\n<h1>" esc(blk) "</h1>\n");
48 }
49
50 function heading(blk)
51 {
52 print("\n<h2>" esc(blk) "</h2>\n");
53 }
54
55 function subheading(str)
56 {
57 print("\n<h3>" esc(str) "</h3>\n");
58 }
59
60 function tag(blk)
61 {
62 print("");
63 match(blk, /^\*[^*]*\*:/);
64 len = RLENGTH;
65 print("<dt>" format(esc(substr(blk, 1, len - 2))) "</dt>");
66 print("<dd>" format(esc(substr(blk, len + 2))) "</dd>");
67 }
68
69 function link(blk)
70 {
71 match(blk, /^\[[^]]*\]:/);
72 label = esc(substr(blk, RSTART + 1, RLENGTH - 3));
73 blk = substr(blk, RLENGTH + 1);
74 match(blk, /[^ \t]+/);
75 printf("<p id=\"%s\">%s: <a href=\"%s\">%s</a></p>\n",
76 esc(label),
77 esc(label),
78 esc(substr(blk, RSTART, RLENGTH + 1)),
79 esc(substr(blk, RSTART + RLENGTH)));
80 }
81
82 function literal()
83 {
84 print("<pre>");
85 sub(/^\t/, "", $0);
86 do {
87 print(esc($0));
88 } while (getline && sub(/^\t/, "", $0));
89 print("</pre>");
90 }
91
92 function printblk(blk)
93 {
94 if (type == PARAGRAPH) paragraph(blk);
95 else if (type == QUOTE) blockquote(blk);
96 else if (type == LIST) list(blk);
97 else if (type == TAG) tag(blk);
98 else if (type == LINK) link(blk);
99 }
100
101 BEGIN {
102 PARAGRAPH = 1; QUOTE = 2; LIST = 3; TAG = 4; LINK = 5;
103 }
104
105 # print the append line set type or skip append
106 # last block to current print the to block
107 # right now block or not current block (see the end)
108
109 /^[ \t]*$/ {
110 printblk(blk); blk = $0; type = PARAGRAPH; next;
111 }
112
113 sub(/^[-*] /, "") {
114 printblk(blk); blk = $0; type = LIST; next;
115 }
116
117 /^\[[^]]*\]:/ {
118 printblk(blk); blk = $0; type = LINK; next;
119 }
120
121 /^\*[^*]*\*:/ {
122 printblk(blk); blk = $0; type = TAG; next;
123 }
124
125 sub(/^> */, "") {
126 type = QUOTE;
127 }
128
129 /^\t/ {
130 printblk(blk); blk = ""; literal(); next;
131 }
132
133 sub(/^# +/, "") {
134 printblk(blk); blk = ""; title($0); next;
135 }
136
137 sub(/^## +/, "") {
138 printblk(blk); blk = ""; heading($0); next;
139 }
140
141 sub(/^###+ */, "") {
142 printblk(blk); blk = ""; subheading($0); next;
143 }
144
145 /^=+$/ {
146 title(blk); blk = ""; next;
147 }
148
149 /^-+$/ {
150 heading(blk); blk = ""; next;
151 }
152
153 {
154 blk = blk " " $0;
155 }
156
157 END {
158 printblk(blk);
159 }