aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/roff.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-06-27 15:52:41 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-06-27 15:52:41 +0000
commitdc649a73f967c1a61e60d2495f16d56db82eac57 (patch)
tree219a85e24404486b7c0136c293975e680de9c05d /roff.c
parent0d82fb509497f4929c0d0c2c4619f27aa7fc0052 (diff)
downloadmandoc-dc649a73f967c1a61e60d2495f16d56db82eac57.tar.gz
mandoc-dc649a73f967c1a61e60d2495f16d56db82eac57.tar.zst
mandoc-dc649a73f967c1a61e60d2495f16d56db82eac57.zip
Downstream maintainers: this removes UGLY! I don't want diverging
functionality and UGLY works quite well thanks to schwarze@'s careful attention. This also backs out function-prototype changes for struct regset, instead stuffing a pointer to the regset directly into struct mdoc/man/roff.
Diffstat (limited to 'roff.c')
-rw-r--r--roff.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/roff.c b/roff.c
index 513de8e0..4bb34f68 100644
--- a/roff.c
+++ b/roff.c
@@ -1,4 +1,4 @@
-/* $Id: roff.c,v 1.89 2010/06/26 15:22:19 kristaps Exp $ */
+/* $Id: roff.c,v 1.90 2010/06/27 15:52:41 kristaps Exp $ */
/*
* Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -74,6 +74,7 @@ struct roff {
void *data; /* privdata for messages */
enum roffrule rstack[RSTACK_MAX]; /* stack of !`ie' rules */
int rstackpos; /* position in rstack */
+ struct regset *regs; /* read/writable registers */
};
struct roffnode {
@@ -87,7 +88,6 @@ struct roffnode {
};
#define ROFF_ARGS struct roff *r, /* parse ctx */ \
- struct regset *regs, /* registers */ \
enum rofft tok, /* tok of macro */ \
char **bufp, /* input buffer */ \
size_t *szp, /* size of input buffer */ \
@@ -289,7 +289,7 @@ roff_free(struct roff *r)
struct roff *
-roff_alloc(const mandocmsg msg, void *data)
+roff_alloc(struct regset *regs, const mandocmsg msg, void *data)
{
struct roff *r;
@@ -298,6 +298,7 @@ roff_alloc(const mandocmsg msg, void *data)
return(0);
}
+ r->regs = regs;
r->msg = msg;
r->data = data;
r->rstackpos = -1;
@@ -308,8 +309,8 @@ roff_alloc(const mandocmsg msg, void *data)
enum rofferr
-roff_parseln(struct roff *r, struct regset *regs, int ln,
- char **bufp, size_t *szp, int pos, int *offs)
+roff_parseln(struct roff *r, int ln, char **bufp,
+ size_t *szp, int pos, int *offs)
{
enum rofft t;
int ppos;
@@ -326,8 +327,8 @@ roff_parseln(struct roff *r, struct regset *regs, int ln,
ROFF_DEBUG("roff: intercept scoped text: %s, [%s]\n",
roffs[t].name, &(*bufp)[pos]);
return((*roffs[t].text)
- (r, regs, t, bufp,
- szp, ln, pos, pos, offs));
+ (r, t, bufp, szp,
+ ln, pos, pos, offs));
} else if ( ! ROFF_CTL((*bufp)[pos])) {
ROFF_DEBUG("roff: pass non-scoped text: [%s]\n",
&(*bufp)[pos]);
@@ -345,8 +346,8 @@ roff_parseln(struct roff *r, struct regset *regs, int ln,
ROFF_DEBUG("roff: intercept scoped context: %s\n",
roffs[t].name);
return((*roffs[t].sub)
- (r, regs, t, bufp,
- szp, ln, pos, pos, offs));
+ (r, t, bufp, szp,
+ ln, pos, pos, offs));
}
/*
@@ -366,8 +367,8 @@ roff_parseln(struct roff *r, struct regset *regs, int ln,
roffs[t].name, &(*bufp)[pos]);
assert(roffs[t].proc);
return((*roffs[t].proc)
- (r, regs, t, bufp,
- szp, ln, ppos, pos, offs));
+ (r, t, bufp, szp,
+ ln, ppos, pos, offs));
}
@@ -653,8 +654,8 @@ roff_block_sub(ROFF_ARGS)
return(ROFF_IGN);
assert(roffs[t].proc);
- return((*roffs[t].proc)(r, regs, t, bufp,
- szp, ln, ppos, pos, offs));
+ return((*roffs[t].proc)(r, t, bufp, szp,
+ ln, ppos, pos, offs));
}
@@ -703,8 +704,8 @@ roff_cond_sub(ROFF_ARGS)
return(ROFF_IGN);
assert(roffs[t].proc);
- return((*roffs[t].proc)
- (r, regs, t, bufp, szp, ln, ppos, pos, offs));
+ return((*roffs[t].proc)(r, t, bufp, szp,
+ ln, ppos, pos, offs));
}
@@ -904,11 +905,11 @@ roff_nr(ROFF_ARGS)
/* Process register token. */
if (0 == strcmp(key, "nS")) {
- if ( ! roff_parse_nat(val, &regs->regs[(int)REG_nS].i))
- regs->regs[(int)REG_nS].i = 0;
+ if ( ! roff_parse_nat(val, &r->regs->regs[(int)REG_nS].i))
+ r->regs->regs[(int)REG_nS].i = 0;
ROFF_DEBUG("roff: register nS: %d\n",
- regs->regs[(int)REG_nS].i);
+ r->regs->regs[(int)REG_nS].i);
} else
ROFF_DEBUG("roff: ignoring register: %s\n", key);