[BACK]Return to mdoc_macro.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/mdoc_macro.c between version 1.190 and 1.197

version 1.190, 2015/04/19 13:50:26 version 1.197, 2015/04/29 21:58:32
Line 210  const struct mdoc_macro * const mdoc_macros = __mdoc_m
Line 210  const struct mdoc_macro * const mdoc_macros = __mdoc_m
  * are errors.   * are errors.
  */   */
 void  void
 mdoc_macroend(struct roff_man *mdoc)  mdoc_endparse(struct roff_man *mdoc)
 {  {
         struct roff_node *n;          struct roff_node *n;
   
Line 232  mdoc_macroend(struct roff_man *mdoc)
Line 232  mdoc_macroend(struct roff_man *mdoc)
   
 /*  /*
  * Look up the macro at *p called by "from",   * Look up the macro at *p called by "from",
  * or as a line macro if from == MDOC_MAX.   * or as a line macro if from == TOKEN_NONE.
  */   */
 static int  static int
 lookup(struct roff_man *mdoc, int from, int line, int ppos, const char *p)  lookup(struct roff_man *mdoc, int from, int line, int ppos, const char *p)
 {  {
         int      res;          int      res;
   
         if (from == MDOC_MAX || mdoc_macros[from].flags & MDOC_PARSED) {          if (from == TOKEN_NONE || mdoc_macros[from].flags & MDOC_PARSED) {
                 res = mdoc_hash_find(p);                  res = mdoc_hash_find(p);
                 if (res != MDOC_MAX) {                  if (res != TOKEN_NONE) {
                         if (mdoc_macros[res].flags & MDOC_CALLABLE)                          if (mdoc_macros[res].flags & MDOC_CALLABLE)
                                 return(res);                                  return(res);
                         if (res != MDOC_br && res != MDOC_sp && res != MDOC_ll)                          if (res != MDOC_br && res != MDOC_sp && res != MDOC_ll)
Line 249  lookup(struct roff_man *mdoc, int from, int line, int 
Line 249  lookup(struct roff_man *mdoc, int from, int line, int 
                                     mdoc->parse, line, ppos, p);                                      mdoc->parse, line, ppos, p);
                 }                  }
         }          }
         return(MDOC_MAX);          return(TOKEN_NONE);
 }  }
   
 /*  /*
Line 291  rew_pending(struct roff_man *mdoc, const struct roff_n
Line 291  rew_pending(struct roff_man *mdoc, const struct roff_n
         for (;;) {          for (;;) {
                 rew_last(mdoc, n);                  rew_last(mdoc, n);
   
                 switch (n->type) {                  if (mdoc->last == n) {
                 case ROFFT_HEAD:                          switch (n->type) {
                         roff_body_alloc(mdoc, n->line, n->pos, n->tok);                          case ROFFT_HEAD:
                         return;                                  roff_body_alloc(mdoc, n->line, n->pos,
                 case ROFFT_BLOCK:                                      n->tok);
                         break;                                  return;
                 default:                          case ROFFT_BLOCK:
                         return;                                  break;
                 }                          default:
                                   return;
                           }
                           if ( ! (n->flags & MDOC_BROKEN))
                                   return;
                   } else
                           n = mdoc->last;
   
                 if ( ! (n->flags & MDOC_BROKEN))  
                         return;  
   
                 for (;;) {                  for (;;) {
                         if ((n = n->parent) == NULL)                          if ((n = n->parent) == NULL)
                                 return;                                  return;
Line 432  dword(struct roff_man *mdoc, int line, int col, const 
Line 435  dword(struct roff_man *mdoc, int line, int col, const 
             ! (mdoc->flags & (MDOC_SYNOPSIS | MDOC_KEEP | MDOC_SMOFF)) &&              ! (mdoc->flags & (MDOC_SYNOPSIS | MDOC_KEEP | MDOC_SMOFF)) &&
             d == DELIM_NONE && mdoc->last->type == ROFFT_TEXT &&              d == DELIM_NONE && mdoc->last->type == ROFFT_TEXT &&
             mdoc_isdelim(mdoc->last->string) == DELIM_NONE) {              mdoc_isdelim(mdoc->last->string) == DELIM_NONE) {
                 mdoc_word_append(mdoc, p);                  roff_word_append(mdoc, p);
                 return;                  return;
         }          }
   
         mdoc_word_alloc(mdoc, line, col, p);          roff_word_alloc(mdoc, line, col, p);
   
         /*          /*
          * If the word consists of a bare delimiter,           * If the word consists of a bare delimiter,
Line 465  append_delims(struct roff_man *mdoc, int line, int *po
Line 468  append_delims(struct roff_man *mdoc, int line, int *po
   
         for (;;) {          for (;;) {
                 la = *pos;                  la = *pos;
                 if (mdoc_args(mdoc, line, pos, buf, MDOC_MAX, &p) == ARGS_EOLN)                  if (mdoc_args(mdoc, line, pos, buf, TOKEN_NONE, &p) ==
                       ARGS_EOLN)
                         break;                          break;
                 dword(mdoc, line, la, p, DELIM_MAX, 1);                  dword(mdoc, line, la, p, DELIM_MAX, 1);
   
Line 498  macro_or_word(MACRO_PROT_ARGS, int parsed)
Line 502  macro_or_word(MACRO_PROT_ARGS, int parsed)
         int              ntok;          int              ntok;
   
         p = buf + ppos;          p = buf + ppos;
         ntok = MDOC_MAX;          ntok = TOKEN_NONE;
         if (*p == '"')          if (*p == '"')
                 p++;                  p++;
         else if (parsed && ! (mdoc->flags & MDOC_PHRASELIT))          else if (parsed && ! (mdoc->flags & MDOC_PHRASELIT))
                 ntok = lookup(mdoc, tok, line, ppos, p);                  ntok = lookup(mdoc, tok, line, ppos, p);
   
         if (ntok == MDOC_MAX) {          if (ntok == TOKEN_NONE) {
                 dword(mdoc, line, ppos, p, DELIM_MAX, tok == MDOC_MAX ||                  dword(mdoc, line, ppos, p, DELIM_MAX, tok == TOKEN_NONE ||
                     mdoc_macros[tok].flags & MDOC_JOIN);                      mdoc_macros[tok].flags & MDOC_JOIN);
                 return(0);                  return(0);
         } else {          } else {
                 if (mdoc_macros[tok].fp == in_line_eoln)                  if (mdoc_macros[tok].fp == in_line_eoln)
                         rew_elem(mdoc, tok);                          rew_elem(mdoc, tok);
                 mdoc_macro(mdoc, ntok, line, ppos, pos, buf);                  mdoc_macro(mdoc, ntok, line, ppos, pos, buf);
                 if (tok == MDOC_MAX)                  if (tok == TOKEN_NONE)
                         append_delims(mdoc, line, pos, buf);                          append_delims(mdoc, line, pos, buf);
                 return(1);                  return(1);
         }          }
Line 640  blk_exp_close(MACRO_PROT_ARGS)
Line 644  blk_exp_close(MACRO_PROT_ARGS)
         if (body == NULL) {          if (body == NULL) {
                 mandoc_msg(MANDOCERR_BLK_NOTOPEN, mdoc->parse,                  mandoc_msg(MANDOCERR_BLK_NOTOPEN, mdoc->parse,
                     line, ppos, mdoc_macronames[tok]);                      line, ppos, mdoc_macronames[tok]);
                   if (later != NULL)
                           later->flags &= ~MDOC_BROKEN;
                 if (maxargs && endbody == NULL) {                  if (maxargs && endbody == NULL) {
                         /*                          /*
                          * Stray .Ec without previous .Eo:                           * Stray .Ec without previous .Eo:
                          * Break the output line, keep the arguments.                           * Break the output line, keep the arguments.
                          */                           */
                         mdoc_elem_alloc(mdoc, line, ppos, MDOC_br, NULL);                          roff_elem_alloc(mdoc, line, ppos, MDOC_br);
                         rew_elem(mdoc, MDOC_br);                          rew_elem(mdoc, MDOC_br);
                 }                  }
         } else if (endbody == NULL) {          } else if (endbody == NULL) {
Line 667  blk_exp_close(MACRO_PROT_ARGS)
Line 673  blk_exp_close(MACRO_PROT_ARGS)
   
         if (endbody != NULL)          if (endbody != NULL)
                 n = endbody;                  n = endbody;
   
           ntok = TOKEN_NONE;
         for (j = 0; ; j++) {          for (j = 0; ; j++) {
                 lastarg = *pos;                  lastarg = *pos;
   
Line 677  blk_exp_close(MACRO_PROT_ARGS)
Line 685  blk_exp_close(MACRO_PROT_ARGS)
                 if (ac == ARGS_PUNCT || ac == ARGS_EOLN)                  if (ac == ARGS_PUNCT || ac == ARGS_EOLN)
                         break;                          break;
   
                 ntok = ac == ARGS_QWORD ? MDOC_MAX :                  ntok = ac == ARGS_QWORD ? TOKEN_NONE :
                     lookup(mdoc, tok, line, lastarg, p);                      lookup(mdoc, tok, line, lastarg, p);
   
                 if (ntok == MDOC_MAX) {                  if (ntok == TOKEN_NONE) {
                         dword(mdoc, line, lastarg, p, DELIM_MAX,                          dword(mdoc, line, lastarg, p, DELIM_MAX,
                             MDOC_JOIN & mdoc_macros[tok].flags);                              MDOC_JOIN & mdoc_macros[tok].flags);
                         continue;                          continue;
Line 694  blk_exp_close(MACRO_PROT_ARGS)
Line 702  blk_exp_close(MACRO_PROT_ARGS)
         }          }
   
         if (n != NULL) {          if (n != NULL) {
                 if (n != mdoc->last && n->flags & MDOC_BROKEN) {                  if (ntok != TOKEN_NONE && n->flags & MDOC_BROKEN) {
                         target = n;                          target = n;
                         do                          do
                                 target = target->parent;                                  target = target->parent;
Line 781  in_line(MACRO_PROT_ARGS)
Line 789  in_line(MACRO_PROT_ARGS)
                 }                  }
   
                 ntok = (ac == ARGS_QWORD || (tok == MDOC_Fn && !cnt)) ?                  ntok = (ac == ARGS_QWORD || (tok == MDOC_Fn && !cnt)) ?
                     MDOC_MAX : lookup(mdoc, tok, line, la, p);                      TOKEN_NONE : lookup(mdoc, tok, line, la, p);
   
                 /*                  /*
                  * In this case, we've located a submacro and must                   * In this case, we've located a submacro and must
Line 790  in_line(MACRO_PROT_ARGS)
Line 798  in_line(MACRO_PROT_ARGS)
                  * or raise a warning.                   * or raise a warning.
                  */                   */
   
                 if (ntok != MDOC_MAX) {                  if (ntok != TOKEN_NONE) {
                         if (scope)                          if (scope)
                                 rew_elem(mdoc, tok);                                  rew_elem(mdoc, tok);
                         if (nc && ! cnt) {                          if (nc && ! cnt) {
Line 989  blk_full(MACRO_PROT_ARGS)
Line 997  blk_full(MACRO_PROT_ARGS)
                 if (tok == MDOC_It && (n == NULL || n->tok != MDOC_Bl)) {                  if (tok == MDOC_It && (n == NULL || n->tok != MDOC_Bl)) {
                         mandoc_vmsg(MANDOCERR_IT_STRAY, mdoc->parse,                          mandoc_vmsg(MANDOCERR_IT_STRAY, mdoc->parse,
                             line, ppos, "It %s", buf + *pos);                              line, ppos, "It %s", buf + *pos);
                         mdoc_elem_alloc(mdoc, line, ppos, MDOC_br, NULL);                          roff_elem_alloc(mdoc, line, ppos, MDOC_br);
                         rew_elem(mdoc, MDOC_br);                          rew_elem(mdoc, MDOC_br);
                         return;                          return;
                 }                  }
Line 1107  blk_full(MACRO_PROT_ARGS)
Line 1115  blk_full(MACRO_PROT_ARGS)
                                 mdoc->flags |= MDOC_PPHRASE;                                  mdoc->flags |= MDOC_PPHRASE;
                         if (ac == ARGS_PEND && lac == ARGS_PPHRASE)                          if (ac == ARGS_PEND && lac == ARGS_PPHRASE)
                                 mdoc->flags |= MDOC_PPHRASE;                                  mdoc->flags |= MDOC_PPHRASE;
                         parse_rest(mdoc, MDOC_MAX, line, &la, buf);                          parse_rest(mdoc, TOKEN_NONE, line, &la, buf);
                         mdoc->flags &= ~MDOC_PPHRASE;                          mdoc->flags &= ~MDOC_PPHRASE;
                         continue;                          continue;
                 }                  }
Line 1222  blk_part_exp(MACRO_PROT_ARGS)
Line 1230  blk_part_exp(MACRO_PROT_ARGS)
          * case of `Eo'); and a body that may be empty.           * case of `Eo'); and a body that may be empty.
          */           */
   
         mdoc_block_alloc(mdoc, line, ppos, tok, NULL);          roff_block_alloc(mdoc, line, ppos, tok);
         head = NULL;          head = NULL;
         for (;;) {          for (;;) {
                 la = *pos;                  la = *pos;
Line 1337  in_line_argn(MACRO_PROT_ARGS)
Line 1345  in_line_argn(MACRO_PROT_ARGS)
                 }                  }
   
                 ntok = (ac == ARGS_QWORD || (tok == MDOC_Pf && state == 0)) ?                  ntok = (ac == ARGS_QWORD || (tok == MDOC_Pf && state == 0)) ?
                     MDOC_MAX : lookup(mdoc, tok, line, la, p);                      TOKEN_NONE : lookup(mdoc, tok, line, la, p);
   
                 if (ntok != MDOC_MAX) {                  if (ntok != TOKEN_NONE) {
                         if (state >= 0) {                          if (state >= 0) {
                                 rew_elem(mdoc, tok);                                  rew_elem(mdoc, tok);
                                 state = -2;                                  state = -2;
Line 1473  phrase_ta(MACRO_PROT_ARGS)
Line 1481  phrase_ta(MACRO_PROT_ARGS)
   
         rew_last(mdoc, body);          rew_last(mdoc, body);
         roff_body_alloc(mdoc, line, ppos, MDOC_It);          roff_body_alloc(mdoc, line, ppos, MDOC_It);
         parse_rest(mdoc, MDOC_MAX, line, pos, buf);          parse_rest(mdoc, TOKEN_NONE, line, pos, buf);
 }  }

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

CVSweb