asciiman: render libertyxdr.adoc properly

This commit is contained in:
Přemysl Eric Janouch 2022-09-30 15:01:14 +02:00
parent 035bfe5e81
commit 089593bb0f
Signed by: p
GPG Key ID: A0420B94F92B9493
1 changed files with 27 additions and 30 deletions

View File

@ -72,13 +72,39 @@ NR == 1 {
print ".nh"
}
function format(line, v) {
# Pass-through, otherwise useful for hacks, is a bit of a lie here,
# and formatting doesn't fully respect word boundaries.
while (line) {
if (match(line, /^[+][+][+][^+]+[+][+][+]/)) {
v = v substr(line, RSTART + 3, RLENGTH - 6)
} else if (match(line, /^__[^_]+__/)) {
v = v "\\fI" substr(line, RSTART + 2, RLENGTH - 4) "\\fP"
} else if (match(line, /^[*][*][^*]+[*][*]/)) {
v = v "\\fB" substr(line, RSTART + 2, RLENGTH - 4) "\\fP"
} else if (match(line, /^_[^_]+_/) &&
substr(line, RSTART + RLENGTH) !~ /^[[:alnum:]]/) {
v = v "\\fI" substr(line, RSTART + 1, RLENGTH - 2) "\\fP"
} else if (match(line, /^[*][^*]+[*]/) &&
substr(line, RSTART + RLENGTH) !~ /^[[:alnum:]]/) {
v = v "\\fB" substr(line, RSTART + 1, RLENGTH - 2) "\\fP"
} else {
v = v substr(line, 1, 1)
line = substr(line, 2)
continue
}
line = substr(line, RSTART + RLENGTH)
}
return v
}
function inline(line) {
if (!line) {
print ".sp"
return
}
line = escape(expand(line))
line = format(escape(expand(line)))
# Strip empty URL descriptions, otherwise useful for demarking the end.
while (match(line, /[^[:space:]]+\[\]/)) {
@ -86,35 +112,6 @@ function inline(line) {
substr(line, RSTART + RLENGTH)
}
# Pass-through, otherwise useful for hacks, is a lie here.
while (match(line, /[+][+][+][^+]+[+][+][+]/)) {
line = substr(line, 1, RSTART - 1) \
substr(line, RSTART + 3, RLENGTH - 6) \
substr(line, RSTART + RLENGTH)
}
# Italic and bold formatting doesn't respect any word boundaries.
while (match(line, /__[^_]+__/)) {
line = substr(line, 1, RSTART - 1) \
"\\fI" substr(line, RSTART + 2, RLENGTH - 4) "\\fP" \
substr(line, RSTART + RLENGTH)
}
while (match(line, /_[^_]+_/)) {
line = substr(line, 1, RSTART - 1) \
"\\fI" substr(line, RSTART + 1, RLENGTH - 2) "\\fP" \
substr(line, RSTART + RLENGTH)
}
while (match(line, /[*][*][^*]+[*][*]/)) {
line = substr(line, 1, RSTART - 1) \
"\\fB" substr(line, RSTART + 2, RLENGTH - 4) "\\fP" \
substr(line, RSTART + RLENGTH)
}
while (match(line, /[*][^*]+[*]/)) {
line = substr(line, 1, RSTART - 1) \
"\\fB" substr(line, RSTART + 1, RLENGTH - 2) "\\fP" \
substr(line, RSTART + RLENGTH)
}
# Enable double-spacing after the end of a sentence.
gsub(/[.][[:space:]]+/, ".\n", line)
gsub(/[!][[:space:]]+/, "!\n", line)