gmi2txt is a small script to format a text/gemini page. needs par(1)
#!/usr/bin/awk -f
BEGIN {
in_pre = 0
title1 = "sed s/./=/g"
title2 = "sed s/./-/g"
parl = "par 72p2"
pari = "par 72p3 | sed '2,$s/^ \\*/ /'"
parq = "par 72p2"
par = "par 72"
}
!in_pre && /^```/ {
in_pre = 1
print $0
next
}
in_pre && /^```/ {
in_pre = 0
print $0
next
}
in_pre { print $0; next }
// {
# print a blank line between links and other line
# types, unless there's already a blank line.
if (last_was_link && !match($0, "^[ \t]*$")) {
print "";
}
}
/^=>/ {
last_was_link = 1
$0 = gensub("=> *", "", 1)
link = $1
$1 = ""
text = gensub("^ *", "", 1)
if (text == "")
text = link
printf("~ %s\n", text) | parl
printf("%s\n", link)
close(parl)
next
}
// { last_was_link = 0 }
/^###/ {
t = gensub("### *", "", "1")
printf("-%s-\n", t)
next
}
/^##/ {
t = gensub("## *", "", 1)
print t
print t | title2
close(title2)
next
}
/^#/ {
t = gensub("# *", "", 1)
print t
print t | title1
close(title1)
next
}
/^>/ {
print $0 | parq
close(parq)
next
}
/^\*/ {
printf(" %s", $0) | pari
close(pari)
next
}
// {
print $0 | par
close(par)
}
END {
if (in_pre)
print "```"
}