| git.druid.rocks | index | druid520 | btf | txt2btf.sh |
txt2btf.sh
#!/bin/sh
# txt2btf - convert plaintext pages to btf markup. usage: txt2btf [file] > out.btft
set -e
AWK='
function linkify(line, out, rest, p1, p2, p, i, c, url, tail) {
out = ""
rest = line
for (;;) {
p1 = index(rest, "http://")
p2 = index(rest, "https://")
if (p1 == 0 && p2 == 0) { break }
if (p1 == 0) { p = p2 }
else if (p2 == 0) { p = p1 }
else if (p1 < p2) { p = p1 }
else { p = p2 }
out = out substr(rest, 1, p - 1)
rest = substr(rest, p)
url = ""
i = 1
while (i <= length(rest)) {
c = substr(rest, i, 1)
if (c == " " || c == "\t") { break }
url = url c
i = i + 1
}
tail = ""
for (;;) {
if (length(url) == 0) { break }
c = substr(url, length(url), 1)
if (c == "." || c == "," || c == ";" || c == ":") {
tail = c tail
url = substr(url, 1, length(url) - 1)
} else if (c == "!" || c == "?" || c == ")") {
tail = c tail
url = substr(url, 1, length(url) - 1)
} else { break }
}
out = out "[url=\"" url "\"]" url "[e]" tail
rest = substr(rest, i)
}
return out rest
}
{
line = $0
gsub(/\\/, "\\\\&", line)
gsub(/\[/, "\\[", line)
line = linkify(line)
if (line ~ /^[ \t]*$/) {
cur = 0
} else {
cur = 1
}
if (prev != 0 && cur != 0) { print "[br]" }
print line
prev = cur
}
'
exec awk "$AWK" ${@+"$@"}