asciiman: improve attribute handling

This commit is contained in:
Přemysl Eric Janouch 2022-10-09 18:43:37 +02:00
parent 0e86ffe7c3
commit 29bf109a51
Signed by: p
GPG Key ID: A0420B94F92B9493
1 changed files with 24 additions and 21 deletions

View File

@ -20,21 +20,17 @@ function fatal(message) {
exit 1 exit 1
} }
function haveattribute(name) { BEGIN {
return name in Attrs || ("asciidoc-" name) in ENVIRON for (name in ENVIRON)
if (match(name, /^asciidoc-/))
Attrs[substr(name, RSTART + RLENGTH)] = ENVIRON[name]
} }
function getattribute(name) { function expand(s, attrname, v) {
if (!(name in Attrs) && ("asciidoc-" name) in ENVIRON) while (match(s, /[{][^{}]+[}]/)) {
Attrs[name] = ENVIRON["asciidoc-" name] attrname = substr(s, RSTART + 1, RLENGTH - 2)
return Attrs[name] if (attrname in Attrs)
} v = v substr(s, 1, RSTART - 1) Attrs[attrname]
function expand(s, attr, v) {
while (match(s, /[{][^{}]*[}]/)) {
attr = substr(s, RSTART + 1, RLENGTH - 2)
if (haveattribute(attr))
v = v substr(s, 1, RSTART - 1) getattribute(attr)
else else
v = v substr(s, 1, RSTART + RLENGTH - 1) v = v substr(s, 1, RSTART + RLENGTH - 1)
s = substr(s, RSTART + RLENGTH) s = substr(s, RSTART + RLENGTH)
@ -49,13 +45,20 @@ function escape(s) {
return s return s
} }
function readattribute(line, attrname, attrvalue) { function readattribute(line, attrname) {
if (match(line, /^:[^:]*: /)) { if (match(line, /^:[^:]+:$/)) {
Attrs[substr(line, RSTART + 1, RLENGTH - 2)] = ""
} else if (match(line, /^:[^:]+!:$/)) {
delete Attrs[substr(line, RSTART + 1, RLENGTH - 3)]
} else if (match(line, /^:![^:]+:$/)) {
delete Attrs[substr(line, RSTART + 2, RLENGTH - 3)]
} else if (match(line, /^:[^:]+: /)) {
attrname = substr(line, RSTART + 1, RLENGTH - 3) attrname = substr(line, RSTART + 1, RLENGTH - 3)
attrvalue = substr(line, RSTART + RLENGTH) Attrs[attrname] = expand(substr(line, RSTART + RLENGTH))
Attrs[attrname] = expand(attrvalue) } else {
return 1 return 0
} }
return 1
} }
NR == 1 { NR == 1 {
@ -80,9 +83,9 @@ NR == 1 {
# Requesting tbl(1), even though we currently do not support tables. # Requesting tbl(1), even though we currently do not support tables.
print "'\\\" t" print "'\\\" t"
printf ".TH \"%s\" \"%s\" \"\" \"%s\"", printf ".TH \"%s\" \"%s\" \"\" \"%s\"",
toupper(name), section, getattribute("mansource") toupper(name), section, Attrs["mansource"]
if (getattribute("manmanual")) if ("manmanual" in Attrs)
printf " \"%s\"", getattribute("manmanual") printf " \"%s\"", Attrs["manmanual"]
print "" print ""
# Hyphenation is indeed rather annoying, in particular with long links. # Hyphenation is indeed rather annoying, in particular with long links.