]> git.cameronkatri.com Git - mandoc.git/blobdiff - eqn.c
simplify a few accesses to fields of structs, using auxiliary pointer
[mandoc.git] / eqn.c
diff --git a/eqn.c b/eqn.c
index 2383c7985aa482146528c1c4d17292ae442c2746..27f5cac396cb52578a0d93b664c2c2bbda1ac251 100644 (file)
--- a/eqn.c
+++ b/eqn.c
@@ -1,7 +1,7 @@
-/*     $Id: eqn.c,v 1.81 2018/12/13 05:23:38 schwarze Exp $ */
+/*     $Id: eqn.c,v 1.84 2020/01/08 12:16:24 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2014, 2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2014,2015,2017,2018,2020 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -303,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;
 }
@@ -400,6 +399,14 @@ eqn_next(struct eqn_node *ep, enum parse_mode mode)
                case '"':
                        quoted = 1;
                        break;
+               case ' ':
+               case '\t':
+               case '~':
+               case '^':
+                       if (quoted)
+                               break;
+                       ep->start++;
+                       continue;
                default:
                        break;
                }
@@ -407,7 +414,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');
                        }
@@ -428,7 +435,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;
                }
@@ -561,7 +568,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++;
@@ -588,7 +595,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;
        }
@@ -607,7 +614,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;
        }
@@ -636,7 +643,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);
@@ -670,7 +677,7 @@ eqn_parse(struct eqn_node *ep)
        if (ep->data == NULL)
                return;
 
-       ep->start = ep->end = ep->data + strspn(ep->data, " ^~");
+       ep->start = ep->end = ep->data;
 
 next_tok:
        tok = eqn_next(ep, MODE_TOK);
@@ -685,7 +692,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:
@@ -693,8 +700,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:
@@ -709,8 +716,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("");
@@ -754,8 +761,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:
@@ -792,14 +799,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) {
@@ -823,8 +830,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("");
@@ -890,8 +897,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("");
@@ -917,16 +924,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. */
@@ -960,8 +967,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);
@@ -994,8 +1001,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);