tttml-gopher - tttml - converters for a simpler syntax than markdown
HTML git clone git://bitreich.org/tttml git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/tttml
DIR Log
DIR Files
DIR Refs
DIR Tags
DIR README
---
tttml-gopher (1722B)
---
1 #!/usr/bin/awk -f
2
3 # format plain text markdown-style document into browsable gophermap
4
5 # It recognises and convert the following patterns:
6 #
7 # [tag]: proto://host:port/path
8 # [tag]: proto://host/path
9 # [tag]: gopher://host:port/t/path
10 # [tag]: gopher://host/t/path
11 # [tag]: t/path
12
13 BEGIN {
14 if (ARGC < 3 || 4 < ARGC) {
15 print("usage: tttml-gph <host> <port> [<file>]");
16 exit(1);
17 }
18 HOST = ARGV[1];
19 PORT = ARGV[2];
20 ARGV[1] = ARGV[3];
21 ARGC = 2;
22 }
23
24 match($0, "^\\[[^]]*\\]: ") {
25 host = HOST; uri = substr($0, RLENGTH + 1);
26 port = PORT; tag = substr($0, 2, RLENGTH - 4);
27 path = uri; type = "0";
28
29 sub("^[ \t]*", "", uri);
30
31 if (match(uri, "^[01789aghI]/")) {
32 type = substr(uri, 1, 1);
33 path = uri; sub(".", "", path);
34
35 } else if (sub("^gopher://", "", uri)) {
36 host = uri; sub("/.*", "", host);
37 if (match(host, "[a-z.-]+:")) {
38 port = substr(host, RLENGTH + 1);
39 host = substr(host, RSTART, RLENGTH - 1);
40 }
41
42 path = uri; sub(".*/", "/", path);
43 if (match(path, "^/./")) {
44 type = substr(path, 2, 1);
45 sub("^/./", "/", path);
46 } else if (match(path, "^/?$")) {
47 type = "1";
48 } else {
49 type = "3";
50 }
51
52 } else if (match(uri, "^/")) {
53 path = uri;
54 type = sub("/$", "", uri) ? "1" : "0";
55
56 } else {
57 path = "URL:" uri;
58 type = "h"; host = ""; port = "";
59 }
60
61 for (name = ""; match($0, /[^ \t]/); name = name " " $0)
62 if (!getline) { end = 1; break; }
63 if (name == "" || name == " ")
64 name = " " uri;
65
66 printf("%s%s:%s\t%s\t%s\t%s\n", type, tag, name, path, host, port);
67
68 if (end) exit;
69 }
70
71 /^###+ / { sub("##", ""); gsub("#", "•"); }
72 /^=+$/ { gsub("=", "━"); }
73 /^-+$/ { gsub("-", "─"); }
74 /^\t/ { sub("^\t", "│ "); }
75
76 {
77 gsub("\t", " ");
78 printf("i%s\t\t\t\n", $0);
79 }