=================================================================== RCS file: /cvs/mandoc/eqn.c,v retrieving revision 1.80 retrieving revision 1.83 diff -u -p -r1.80 -r1.83 --- mandoc/eqn.c 2018/12/13 03:40:13 1.80 +++ mandoc/eqn.c 2018/12/14 06:33:14 1.83 @@ -1,7 +1,7 @@ -/* $Id: eqn.c,v 1.80 2018/12/13 03:40:13 schwarze Exp $ */ +/* $Id: eqn.c,v 1.83 2018/12/14 06:33:14 schwarze Exp $ */ /* * Copyright (c) 2011, 2014 Kristaps Dzonsons - * Copyright (c) 2014, 2015, 2017 Ingo Schwarze + * Copyright (c) 2014, 2015, 2017, 2018 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -30,6 +30,7 @@ #include "mandoc_aux.h" #include "mandoc.h" #include "roff.h" +#include "eqn.h" #include "libmandoc.h" #include "eqn_parse.h" @@ -302,12 +303,11 @@ static void eqn_undef(struct eqn_node *); struct eqn_node * -eqn_alloc(struct mparse *parse) +eqn_alloc(void) { struct eqn_node *ep; ep = mandoc_calloc(1, sizeof(*ep)); - ep->parse = parse; ep->gsize = EQN_DEFSIZE; return ep; } @@ -406,7 +406,7 @@ eqn_next(struct eqn_node *ep, enum parse_mode mode) ep->end = strchr(ep->start + 1, *ep->start); ep->start++; /* Skip opening quote. */ if (ep->end == NULL) { - mandoc_msg(MANDOCERR_ARG_QUOTE, ep->parse, + mandoc_msg(MANDOCERR_ARG_QUOTE, ep->node->line, ep->node->pos, NULL); ep->end = strchr(ep->start, '\0'); } @@ -427,7 +427,7 @@ eqn_next(struct eqn_node *ep, enum parse_mode mode) if ((def = eqn_def_find(ep)) == NULL) break; if (++lim > EQN_NEST_MAX) { - mandoc_msg(MANDOCERR_ROFFLOOP, ep->parse, + mandoc_msg(MANDOCERR_ROFFLOOP, ep->node->line, ep->node->pos, NULL); return EQN_TOK_EOF; } @@ -491,6 +491,16 @@ eqn_box_free(struct eqn_box *bp) free(bp); } +struct eqn_box * +eqn_box_new(void) +{ + struct eqn_box *bp; + + bp = mandoc_calloc(1, sizeof(*bp)); + bp->expectargs = UINT_MAX; + return bp; +} + /* * Allocate a box as the last child of the parent node. */ @@ -499,10 +509,9 @@ eqn_box_alloc(struct eqn_node *ep, struct eqn_box *par { struct eqn_box *bp; - bp = mandoc_calloc(1, sizeof(struct eqn_box)); + bp = eqn_box_new(); bp->parent = parent; bp->parent->args++; - bp->expectargs = UINT_MAX; bp->font = bp->parent->font; bp->size = ep->gsize; @@ -551,7 +560,7 @@ static void eqn_delim(struct eqn_node *ep) { if (ep->end[0] == '\0' || ep->end[1] == '\0') { - mandoc_msg(MANDOCERR_REQ_EMPTY, ep->parse, + mandoc_msg(MANDOCERR_REQ_EMPTY, ep->node->line, ep->node->pos, "delim"); if (ep->end[0] != '\0') ep->end++; @@ -578,7 +587,7 @@ eqn_undef(struct eqn_node *ep) struct eqn_def *def; if (eqn_next(ep, MODE_NOSUB) == EQN_TOK_EOF) { - mandoc_msg(MANDOCERR_REQ_EMPTY, ep->parse, + mandoc_msg(MANDOCERR_REQ_EMPTY, ep->node->line, ep->node->pos, "undef"); return; } @@ -597,7 +606,7 @@ eqn_def(struct eqn_node *ep) int i; if (eqn_next(ep, MODE_NOSUB) == EQN_TOK_EOF) { - mandoc_msg(MANDOCERR_REQ_EMPTY, ep->parse, + mandoc_msg(MANDOCERR_REQ_EMPTY, ep->node->line, ep->node->pos, "define"); return; } @@ -626,7 +635,7 @@ eqn_def(struct eqn_node *ep) } if (eqn_next(ep, MODE_QUOTED) == EQN_TOK_EOF) { - mandoc_vmsg(MANDOCERR_REQ_EMPTY, ep->parse, + mandoc_msg(MANDOCERR_REQ_EMPTY, ep->node->line, ep->node->pos, "define %s", def->key); free(def->key); free(def->val); @@ -675,7 +684,7 @@ next_tok: case EQN_TOK_TDEFINE: if (eqn_next(ep, MODE_NOSUB) == EQN_TOK_EOF || eqn_next(ep, MODE_QUOTED) == EQN_TOK_EOF) - mandoc_msg(MANDOCERR_REQ_EMPTY, ep->parse, + mandoc_msg(MANDOCERR_REQ_EMPTY, ep->node->line, ep->node->pos, "tdefine"); break; case EQN_TOK_DELIM: @@ -683,8 +692,8 @@ next_tok: break; case EQN_TOK_GFONT: if (eqn_next(ep, MODE_SUB) == EQN_TOK_EOF) - mandoc_msg(MANDOCERR_REQ_EMPTY, ep->parse, - ep->node->line, ep->node->pos, eqn_toks[tok]); + mandoc_msg(MANDOCERR_REQ_EMPTY, ep->node->line, + ep->node->pos, "%s", eqn_toks[tok]); break; case EQN_TOK_MARK: case EQN_TOK_LINEUP: @@ -699,8 +708,8 @@ next_tok: case EQN_TOK_DOT: case EQN_TOK_DOTDOT: if (parent->last == NULL) { - mandoc_msg(MANDOCERR_EQN_NOBOX, ep->parse, - ep->node->line, ep->node->pos, eqn_toks[tok]); + mandoc_msg(MANDOCERR_EQN_NOBOX, ep->node->line, + ep->node->pos, "%s", eqn_toks[tok]); cur = eqn_box_alloc(ep, parent); cur->type = EQN_TEXT; cur->text = mandoc_strdup(""); @@ -744,8 +753,8 @@ next_tok: case EQN_TOK_DOWN: case EQN_TOK_UP: if (eqn_next(ep, MODE_SUB) == EQN_TOK_EOF) - mandoc_msg(MANDOCERR_REQ_EMPTY, ep->parse, - ep->node->line, ep->node->pos, eqn_toks[tok]); + mandoc_msg(MANDOCERR_REQ_EMPTY, ep->node->line, + ep->node->pos, "%s", eqn_toks[tok]); break; case EQN_TOK_FAT: case EQN_TOK_ROMAN: @@ -782,14 +791,14 @@ next_tok: case EQN_TOK_GSIZE: /* Accept two values: integral size and a single. */ if (eqn_next(ep, MODE_SUB) == EQN_TOK_EOF) { - mandoc_msg(MANDOCERR_REQ_EMPTY, ep->parse, - ep->node->line, ep->node->pos, eqn_toks[tok]); + mandoc_msg(MANDOCERR_REQ_EMPTY, ep->node->line, + ep->node->pos, "%s", eqn_toks[tok]); break; } size = mandoc_strntoi(ep->start, ep->toksz, 10); if (-1 == size) { - mandoc_msg(MANDOCERR_IT_NONUM, ep->parse, - ep->node->line, ep->node->pos, eqn_toks[tok]); + mandoc_msg(MANDOCERR_IT_NONUM, ep->node->line, + ep->node->pos, "%s", eqn_toks[tok]); break; } if (EQN_TOK_GSIZE == tok) { @@ -813,8 +822,8 @@ next_tok: * and keep on reading. */ if (parent->last == NULL) { - mandoc_msg(MANDOCERR_EQN_NOBOX, ep->parse, - ep->node->line, ep->node->pos, eqn_toks[tok]); + mandoc_msg(MANDOCERR_EQN_NOBOX, ep->node->line, + ep->node->pos, "%s", eqn_toks[tok]); cur = eqn_box_alloc(ep, parent); cur->type = EQN_TEXT; cur->text = mandoc_strdup(""); @@ -880,8 +889,8 @@ next_tok: * rebalance and continue reading. */ if (parent->last == NULL) { - mandoc_msg(MANDOCERR_EQN_NOBOX, ep->parse, - ep->node->line, ep->node->pos, eqn_toks[tok]); + mandoc_msg(MANDOCERR_EQN_NOBOX, ep->node->line, + ep->node->pos, "%s", eqn_toks[tok]); cur = eqn_box_alloc(ep, parent); cur->type = EQN_TEXT; cur->text = mandoc_strdup(""); @@ -907,16 +916,16 @@ next_tok: cur->left != NULL)) break; if (cur == NULL) { - mandoc_msg(MANDOCERR_BLK_NOTOPEN, ep->parse, - ep->node->line, ep->node->pos, eqn_toks[tok]); + mandoc_msg(MANDOCERR_BLK_NOTOPEN, ep->node->line, + ep->node->pos, "%s", eqn_toks[tok]); break; } parent = cur; if (EQN_TOK_RIGHT == tok) { if (eqn_next(ep, MODE_SUB) == EQN_TOK_EOF) { mandoc_msg(MANDOCERR_REQ_EMPTY, - ep->parse, ep->node->line, - ep->node->pos, eqn_toks[tok]); + ep->node->line, ep->node->pos, + "%s", eqn_toks[tok]); break; } /* Handling depends on right/left. */ @@ -950,8 +959,8 @@ next_tok: parent = parent->parent; if (EQN_TOK_LEFT == tok && eqn_next(ep, MODE_SUB) == EQN_TOK_EOF) { - mandoc_msg(MANDOCERR_REQ_EMPTY, ep->parse, - ep->node->line, ep->node->pos, eqn_toks[tok]); + mandoc_msg(MANDOCERR_REQ_EMPTY, ep->node->line, + ep->node->pos, "%s", eqn_toks[tok]); break; } parent = eqn_box_alloc(ep, parent); @@ -984,8 +993,8 @@ next_tok: if (cur->type == EQN_PILE) break; if (cur == NULL) { - mandoc_msg(MANDOCERR_IT_STRAY, ep->parse, - ep->node->line, ep->node->pos, eqn_toks[tok]); + mandoc_msg(MANDOCERR_IT_STRAY, ep->node->line, + ep->node->pos, "%s", eqn_toks[tok]); break; } parent = eqn_box_alloc(ep, cur);