summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2022-04-30 11:32:42 +0000
committerIngo Schwarze <schwarze@openbsd.org>2022-04-30 11:32:42 +0000
commit48ea36cd719fe9e1d2b8360d426a8ac9003439af (patch)
treeffccfca70cdf0b5b82ad4133cf66c734dbb8e4e4
parentc0667bb0674363961e21650dd6fa239e4696d039 (diff)
downloadmandoc-48ea36cd719fe9e1d2b8360d426a8ac9003439af.tar.gz
Refactor the handler function roff_block_sub() for clarity and simplicity.
1. Do not needlessly access the function pointer table roffs[]. Instead, simply call the block closing function directly. 2. Sort code: handle both cases of block closing at the beginning of the function rather than one at the beginning and one at the end. 3. Trim excessive, partially repetitive and obvious comments, also making the comments considerably more precise. No functional change.
-rw-r--r--roff.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/roff.c b/roff.c
index 2d3f44a5..0215bf4c 100644
--- a/roff.c
+++ b/roff.c
@@ -2276,12 +2276,8 @@ roff_block_sub(ROFF_ARGS)
int i, j;
/*
- * First check whether a custom macro exists at this level. If
- * it does, then check against it. This is some of groff's
- * stranger behaviours. If we encountered a custom end-scope
- * tag and that tag also happens to be a "real" macro, then we
- * need to try interpreting it again as a real macro. If it's
- * not, then return ignore. Else continue.
+ * If a custom end marker is a user-defined or predefined macro
+ * or a request, interpret it.
*/
if (r->last->end) {
@@ -2307,20 +2303,17 @@ roff_block_sub(ROFF_ARGS)
}
}
- /*
- * If we have no custom end-query or lookup failed, then try
- * pulling it out of the hashtable.
- */
+ /* Handle the standard end marker. */
t = roff_parse(r, buf->buf, &pos, ln, ppos);
+ if (t == ROFF_cblock)
+ return roff_cblock(r, t, buf, ln, ppos, pos, offs);
- if (t != ROFF_cblock) {
- if (tok != ROFF_ig)
- roff_setstr(r, r->last->name, buf->buf + ppos, 2);
- return ROFF_IGN;
- }
+ /* Not an end marker, so append the line to the block. */
- return (*roffs[t].proc)(r, t, buf, ln, ppos, pos, offs);
+ if (tok != ROFF_ig)
+ roff_setstr(r, r->last->name, buf->buf + ppos, 2);
+ return ROFF_IGN;
}
static int