Blame


1 335917eb 2022-05-10 op # gmi2txt
2 335917eb 2022-05-10 op
3 335917eb 2022-05-10 op gmi2txt is a small script to format a text/gemini page. needs par(1)
4 335917eb 2022-05-10 op
5 335917eb 2022-05-10 op #!/usr/bin/awk -f
6 335917eb 2022-05-10 op
7 335917eb 2022-05-10 op BEGIN {
8 335917eb 2022-05-10 op in_pre = 0
9 335917eb 2022-05-10 op
10 335917eb 2022-05-10 op title1 = "sed s/./=/g"
11 335917eb 2022-05-10 op title2 = "sed s/./-/g"
12 335917eb 2022-05-10 op parl = "par 72p2"
13 335917eb 2022-05-10 op pari = "par 72p3 | sed '2,$s/^ \\*/ /'"
14 335917eb 2022-05-10 op parq = "par 72p2"
15 335917eb 2022-05-10 op par = "par 72"
16 335917eb 2022-05-10 op }
17 335917eb 2022-05-10 op
18 335917eb 2022-05-10 op !in_pre && /^```/ {
19 335917eb 2022-05-10 op in_pre = 1
20 335917eb 2022-05-10 op print $0
21 335917eb 2022-05-10 op next
22 335917eb 2022-05-10 op }
23 335917eb 2022-05-10 op in_pre && /^```/ {
24 335917eb 2022-05-10 op in_pre = 0
25 335917eb 2022-05-10 op print $0
26 335917eb 2022-05-10 op next
27 335917eb 2022-05-10 op }
28 335917eb 2022-05-10 op in_pre { print $0; next }
29 335917eb 2022-05-10 op
30 335917eb 2022-05-10 op // {
31 335917eb 2022-05-10 op # print a blank line between links and other line
32 335917eb 2022-05-10 op # types, unless there's already a blank line.
33 335917eb 2022-05-10 op
34 335917eb 2022-05-10 op if (last_was_link && !match($0, "^[ \t]*$")) {
35 335917eb 2022-05-10 op print "";
36 335917eb 2022-05-10 op }
37 335917eb 2022-05-10 op }
38 335917eb 2022-05-10 op
39 335917eb 2022-05-10 op /^=>/ {
40 335917eb 2022-05-10 op last_was_link = 1
41 335917eb 2022-05-10 op
42 335917eb 2022-05-10 op $0 = gensub("=> *", "", 1)
43 335917eb 2022-05-10 op link = $1
44 335917eb 2022-05-10 op $1 = ""
45 335917eb 2022-05-10 op text = gensub("^ *", "", 1)
46 335917eb 2022-05-10 op if (text == "")
47 335917eb 2022-05-10 op text = link
48 335917eb 2022-05-10 op
49 335917eb 2022-05-10 op printf("~ %s\n", text) | parl
50 335917eb 2022-05-10 op printf("%s\n", link)
51 335917eb 2022-05-10 op close(parl)
52 335917eb 2022-05-10 op next
53 335917eb 2022-05-10 op }
54 335917eb 2022-05-10 op
55 335917eb 2022-05-10 op // { last_was_link = 0 }
56 335917eb 2022-05-10 op
57 335917eb 2022-05-10 op /^###/ {
58 335917eb 2022-05-10 op t = gensub("### *", "", "1")
59 335917eb 2022-05-10 op printf("-%s-\n", t)
60 335917eb 2022-05-10 op next
61 335917eb 2022-05-10 op }
62 335917eb 2022-05-10 op
63 335917eb 2022-05-10 op /^##/ {
64 335917eb 2022-05-10 op t = gensub("## *", "", 1)
65 335917eb 2022-05-10 op print t
66 335917eb 2022-05-10 op print t | title2
67 335917eb 2022-05-10 op close(title2)
68 335917eb 2022-05-10 op next
69 335917eb 2022-05-10 op }
70 335917eb 2022-05-10 op
71 335917eb 2022-05-10 op /^#/ {
72 335917eb 2022-05-10 op t = gensub("# *", "", 1)
73 335917eb 2022-05-10 op print t
74 335917eb 2022-05-10 op print t | title1
75 335917eb 2022-05-10 op close(title1)
76 335917eb 2022-05-10 op next
77 335917eb 2022-05-10 op }
78 335917eb 2022-05-10 op
79 335917eb 2022-05-10 op /^>/ {
80 335917eb 2022-05-10 op print $0 | parq
81 335917eb 2022-05-10 op close(parq)
82 335917eb 2022-05-10 op next
83 335917eb 2022-05-10 op }
84 335917eb 2022-05-10 op
85 335917eb 2022-05-10 op /^\*/ {
86 335917eb 2022-05-10 op printf(" %s", $0) | pari
87 335917eb 2022-05-10 op close(pari)
88 335917eb 2022-05-10 op next
89 335917eb 2022-05-10 op }
90 335917eb 2022-05-10 op
91 335917eb 2022-05-10 op // {
92 335917eb 2022-05-10 op print $0 | par
93 335917eb 2022-05-10 op close(par)
94 335917eb 2022-05-10 op }
95 335917eb 2022-05-10 op
96 335917eb 2022-05-10 op END {
97 335917eb 2022-05-10 op if (in_pre)
98 335917eb 2022-05-10 op print "```"
99 335917eb 2022-05-10 op }
100 335917eb 2022-05-10 op