diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2022-05-30 23:03:47 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2022-05-30 23:03:47 +0000 |
commit | d677d96107effef249eb44f9d28860fe7a0fe029 (patch) | |
tree | a2ceebb9647eed1188d39e6eba6108f948ed0a1d /roff.c | |
parent | 1b20206767c4c7b1861876c71172d99fb14c8113 (diff) | |
download | mandoc-d677d96107effef249eb44f9d28860fe7a0fe029.tar.gz |
Dummy implementation of the roff(7) \V (interpolate environment variable)
escape sequence. This is needed to get \V into the correct parsing
class, ESCAPE_EXPAND.
It is intentional that mandoc(1) output is *not* influenced by environment
variables, so interpolate the name of the variable with some decorating
punctuation rather than interpolating its value.
Diffstat (limited to 'roff.c')
-rw-r--r-- | roff.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -1529,6 +1529,12 @@ roff_expand(struct roff *r, struct buf *buf, int ln, int pos, char ec) ubuf[1] = '\0'; res = ubuf; break; + case 'V': + mandoc_msg(MANDOCERR_UNSUPP, ln, iesc, + "%.*s", iend - iesc, buf->buf + iesc); + roff_expand_patch(buf, iendarg, "}", iend); + roff_expand_patch(buf, iesc, "${", iarg); + continue; case 'n': if (iendarg > iarg) (void)snprintf(ubuf, sizeof(ubuf), "%d", @@ -1567,9 +1573,8 @@ roff_expand_patch(struct buf *buf, int start, const char *repl, int end) { char *nbuf; - buf->buf[start] = '\0'; - buf->sz = mandoc_asprintf(&nbuf, "%s%s%s", buf->buf, repl, - buf->buf + end) + 1; + buf->sz = mandoc_asprintf(&nbuf, "%.*s%s%s", start, buf->buf, + repl, buf->buf + end) + 1; free(buf->buf); buf->buf = nbuf; } |