summaryrefslogtreecommitdiffstats
path: root/roff.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2022-05-31 20:23:05 +0000
committerIngo Schwarze <schwarze@openbsd.org>2022-05-31 20:23:05 +0000
commit91d4baecc6f10b6b8b7119f78bfec0721659961d (patch)
treeb0f0dc2950dbc8a97fcef44482127a53fc2e8cc8 /roff.c
parentafaba3e78072edb0c5149a491c9709b57f31745a (diff)
downloadmandoc-91d4baecc6f10b6b8b7119f78bfec0721659961d.tar.gz
Rudimentary implementation of the \A escape sequence, following groff
semantics (test identifier for syntactical validity), not at all following the completely unrelated Heirloom semantics (define hyperlink target position). The main motivation for providing this implementation is to get \A into the parsing class ESCAPE_EXPAND that corresponds to groff parsing behaviour, which is quite similar to the \B escape sequence (test numerical expression for syntactical validity). This is likely to improve parsing of nested escape sequences in the future. Validation isn't perfect yet. In particular, this implementation rejects \A arguments containing some escape sequences that groff allows to slip through. But that is unlikely to cause trouble even in documents using \A for non-trivial purposes. Rejecting the nested escapes in question might even improve robustnest because the rejected names are unlikely to really be usable for practical purposes - no matter that groff dubiously considers them syntactically valid.
Diffstat (limited to 'roff.c')
-rw-r--r--roff.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/roff.c b/roff.c
index 119be89f..a10c4d4b 100644
--- a/roff.c
+++ b/roff.c
@@ -1520,6 +1520,11 @@ roff_expand(struct roff *r, struct buf *buf, int ln, int pos, char ec)
*dst++ = '"';
}
continue;
+ case 'A':
+ ubuf[0] = iendarg > iarg ? '1' : '0';
+ ubuf[1] = '\0';
+ res = ubuf;
+ break;
case 'B':
npos = 0;
ubuf[0] = iendarg > iarg && iend > iendarg &&