[BACK]Return to roff.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mandoc

Diff for /src/usr.bin/mandoc/roff.c between version 1.190 and 1.191

version 1.190, 2017/07/04 22:49:59 version 1.191, 2017/07/08 14:51:01
Line 96 
Line 96 
         struct tbl_node *first_tbl; /* first table parsed */          struct tbl_node *first_tbl; /* first table parsed */
         struct tbl_node *last_tbl; /* last table parsed */          struct tbl_node *last_tbl; /* last table parsed */
         struct tbl_node *tbl; /* current table being parsed */          struct tbl_node *tbl; /* current table being parsed */
         struct eqn_node *last_eqn; /* last equation parsed */          struct eqn_node *last_eqn; /* equation parser */
         struct eqn_node *first_eqn; /* first equation parsed */          struct eqn_node *eqn; /* active equation parser */
         struct eqn_node *eqn; /* current equation being parsed */  
         int              eqn_inline; /* current equation is inline */          int              eqn_inline; /* current equation is inline */
         int              options; /* parse options */          int              options; /* parse options */
         int              rstacksz; /* current size limit of rstack */          int              rstacksz; /* current size limit of rstack */
Line 693 
Line 692 
 roff_free1(struct roff *r)  roff_free1(struct roff *r)
 {  {
         struct tbl_node *tbl;          struct tbl_node *tbl;
         struct eqn_node *e;  
         int              i;          int              i;
   
         while (NULL != (tbl = r->first_tbl)) {          while (NULL != (tbl = r->first_tbl)) {
Line 702 
Line 700 
         }          }
         r->first_tbl = r->last_tbl = r->tbl = NULL;          r->first_tbl = r->last_tbl = r->tbl = NULL;
   
         while (NULL != (e = r->first_eqn)) {          if (r->last_eqn != NULL)
                 r->first_eqn = e->next;                  eqn_free(r->last_eqn);
                 eqn_free(e);          r->last_eqn = r->eqn = NULL;
         }  
         r->first_eqn = r->last_eqn = r->eqn = NULL;  
   
         while (r->last)          while (r->last)
                 roffnode_pop(r);                  roffnode_pop(r);
Line 982 
Line 978 
 }  }
   
 void  void
 roff_addeqn(struct roff_man *man, const struct eqn *eqn)  
 {  
         struct roff_node        *n;  
   
         n = roff_node_alloc(man, eqn->ln, eqn->pos, ROFFT_EQN, TOKEN_NONE);  
         n->eqn = eqn;  
         if (eqn->ln > man->last->line)  
                 n->flags |= NODE_LINE;  
         roff_node_append(man, n);  
         man->next = ROFF_NEXT_SIBLING;  
 }  
   
 void  
 roff_addtbl(struct roff_man *man, const struct tbl_span *tbl)  roff_addtbl(struct roff_man *man, const struct tbl_span *tbl)
 {  {
         struct roff_node        *n;          struct roff_node        *n;
Line 1053 
Line 1036 
                 mdoc_argv_free(n->args);                  mdoc_argv_free(n->args);
         if (n->type == ROFFT_BLOCK || n->type == ROFFT_ELEM)          if (n->type == ROFFT_BLOCK || n->type == ROFFT_ELEM)
                 free(n->norm);                  free(n->norm);
           if (n->eqn != NULL)
                   eqn_box_free(n->eqn);
         free(n->string);          free(n->string);
         free(n);          free(n);
 }  }
Line 1510 
Line 1495 
                         return e;                          return e;
                 assert(e == ROFF_CONT);                  assert(e == ROFF_CONT);
         }          }
         if (r->eqn != NULL)          if (r->eqn != NULL && strncmp(buf->buf + ppos, ".EN", 3)) {
                 return eqn_read(&r->eqn, ln, buf->buf, ppos, offs);                  eqn_read(r->eqn, buf->buf + ppos);
                   return ROFF_IGN;
           }
         if (r->tbl != NULL && ( ! ctl || buf->buf[pos] == '\0'))          if (r->tbl != NULL && ( ! ctl || buf->buf[pos] == '\0'))
                 return tbl_read(r->tbl, ln, buf->buf, ppos);                  return tbl_read(r->tbl, ln, buf->buf, ppos);
         if ( ! ctl)          if ( ! ctl)
Line 1591 
Line 1578 
   
         if (r->eqn) {          if (r->eqn) {
                 mandoc_msg(MANDOCERR_BLK_NOEND, r->parse,                  mandoc_msg(MANDOCERR_BLK_NOEND, r->parse,
                     r->eqn->eqn.ln, r->eqn->eqn.pos, "EQ");                      r->eqn->node->line, r->eqn->node->pos, "EQ");
                 eqn_end(&r->eqn);                  eqn_parse(r->eqn);
                   r->eqn = NULL;
         }          }
   
         if (r->tbl) {          if (r->tbl) {
Line 2875 
Line 2863 
 static enum rofferr  static enum rofferr
 roff_EQ(ROFF_ARGS)  roff_EQ(ROFF_ARGS)
 {  {
         struct eqn_node *e;          struct roff_node        *n;
   
           n = roff_node_alloc(r->man, ln, ppos, ROFFT_EQN, TOKEN_NONE);
           if (ln > r->man->last->line)
                   n->flags |= NODE_LINE;
           n->eqn = mandoc_calloc(1, sizeof(*n->eqn));
           n->eqn->expectargs = UINT_MAX;
           roff_node_append(r->man, n);
           r->man->next = ROFF_NEXT_SIBLING;
   
         assert(r->eqn == NULL);          assert(r->eqn == NULL);
         e = eqn_alloc(ppos, ln, r->parse);          if (r->last_eqn == NULL)
                   r->last_eqn = eqn_alloc(r->parse);
           else
                   eqn_reset(r->last_eqn);
           r->eqn = r->last_eqn;
           r->eqn->node = n;
   
         if (r->last_eqn) {  
                 r->last_eqn->next = e;  
                 e->delim = r->last_eqn->delim;  
                 e->odelim = r->last_eqn->odelim;  
                 e->cdelim = r->last_eqn->cdelim;  
         } else  
                 r->first_eqn = r->last_eqn = e;  
   
         r->eqn = r->last_eqn = e;  
   
         if (buf->buf[pos] != '\0')          if (buf->buf[pos] != '\0')
                 mandoc_vmsg(MANDOCERR_ARG_SKIP, r->parse, ln, pos,                  mandoc_vmsg(MANDOCERR_ARG_SKIP, r->parse, ln, pos,
                     ".EQ %s", buf->buf + pos);                      ".EQ %s", buf->buf + pos);
Line 2900 
Line 2891 
 static enum rofferr  static enum rofferr
 roff_EN(ROFF_ARGS)  roff_EN(ROFF_ARGS)
 {  {
           if (r->eqn != NULL) {
         mandoc_msg(MANDOCERR_BLK_NOTOPEN, r->parse, ln, ppos, "EN");                  eqn_parse(r->eqn);
                   r->eqn = NULL;
           } else
                   mandoc_msg(MANDOCERR_BLK_NOTOPEN, r->parse, ln, ppos, "EN");
           if (buf->buf[pos] != '\0')
                   mandoc_vmsg(MANDOCERR_ARG_SKIP, r->parse, ln, pos,
                       "EN %s", buf->buf + pos);
         return ROFF_IGN;          return ROFF_IGN;
 }  }
   
Line 3606 
Line 3603 
 {  {
   
         return r->tbl ? tbl_span(r->tbl) : NULL;          return r->tbl ? tbl_span(r->tbl) : NULL;
 }  
   
 const struct eqn *  
 roff_eqn(const struct roff *r)  
 {  
   
         return r->last_eqn ? &r->last_eqn->eqn : NULL;  
 }  }
   
 /*  /*

Legend:
Removed from v.1.190  
changed lines
  Added in v.1.191