|
|
tttml-gopher - tttml - converters for a simpler syntax than markdown |
|
|
 |
git clone git://bitreich.org/tttml git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/tttml (git://bitreich.org) |
|
|
 |
Log |
|
|
 |
Files |
|
|
 |
Refs |
|
|
 |
Tags |
|
|
 |
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 } |
|