[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.67 and 1.68

version 1.67, 2014/02/14 23:24:17 version 1.68, 2014/03/07 02:21:55
Line 68 
Line 68 
         ROFF_EQ,          ROFF_EQ,
         ROFF_EN,          ROFF_EN,
         ROFF_cblock,          ROFF_cblock,
         ROFF_ccond,  
         ROFF_USERDEF,          ROFF_USERDEF,
         ROFF_MAX          ROFF_MAX
 };  };
Line 176 
Line 175 
 static  enum rofferr     roff_block_sub(ROFF_ARGS);  static  enum rofferr     roff_block_sub(ROFF_ARGS);
 static  enum rofferr     roff_cblock(ROFF_ARGS);  static  enum rofferr     roff_cblock(ROFF_ARGS);
 static  enum rofferr     roff_cc(ROFF_ARGS);  static  enum rofferr     roff_cc(ROFF_ARGS);
 static  enum rofferr     roff_ccond(ROFF_ARGS);  static  void             roff_ccond(struct roff *, int, int);
 static  enum rofferr     roff_cond(ROFF_ARGS);  static  enum rofferr     roff_cond(ROFF_ARGS);
 static  enum rofferr     roff_cond_text(ROFF_ARGS);  static  enum rofferr     roff_cond_text(ROFF_ARGS);
 static  enum rofferr     roff_cond_sub(ROFF_ARGS);  static  enum rofferr     roff_cond_sub(ROFF_ARGS);
Line 263 
Line 262 
         { "EQ", roff_EQ, NULL, NULL, 0, NULL },          { "EQ", roff_EQ, NULL, NULL, 0, NULL },
         { "EN", roff_EN, NULL, NULL, 0, NULL },          { "EN", roff_EN, NULL, NULL, 0, NULL },
         { ".", roff_cblock, NULL, NULL, 0, NULL },          { ".", roff_cblock, NULL, NULL, 0, NULL },
         { "\\}", roff_ccond, NULL, NULL, 0, NULL },  
         { NULL, roff_userdef, NULL, NULL, 0, NULL },          { NULL, roff_userdef, NULL, NULL, 0, NULL },
 };  };
   
Line 786 
Line 784 
                         '\t' == buf[*pos] || ' ' == buf[*pos])                          '\t' == buf[*pos] || ' ' == buf[*pos])
                 return(ROFF_MAX);                  return(ROFF_MAX);
   
         /*          /* We stop the macro parse at an escape, tab, space, or nil. */
          * We stop the macro parse at an escape, tab, space, or nil.  
          * However, `\}' is also a valid macro, so make sure we don't  
          * clobber it by seeing the `\' as the end of token.  
          */  
   
         mac = buf + *pos;          mac = buf + *pos;
         maclen = strcspn(mac + 1, " \\\t\0") + 1;          maclen = strcspn(mac, " \\\t\0");
   
         t = (r->current_string = roff_getstrn(r, mac, maclen))          t = (r->current_string = roff_getstrn(r, mac, maclen))
             ? ROFF_USERDEF : roffhash_find(mac, maclen);              ? ROFF_USERDEF : roffhash_find(mac, maclen);
Line 862 
Line 856 
 }  }
   
   
 /* ARGSUSED */  static void
 static enum rofferr  roff_ccond(struct roff *r, int ln, int ppos)
 roff_ccond(ROFF_ARGS)  
 {  {
   
         if (NULL == r->last) {          if (NULL == r->last) {
                 mandoc_msg(MANDOCERR_NOSCOPE, r->parse, ln, ppos, NULL);                  mandoc_msg(MANDOCERR_NOSCOPE, r->parse, ln, ppos, NULL);
                 return(ROFF_IGN);                  return;
         }          }
   
         switch (r->last->tok) {          switch (r->last->tok) {
Line 881 
Line 874 
                 break;                  break;
         default:          default:
                 mandoc_msg(MANDOCERR_NOSCOPE, r->parse, ln, ppos, NULL);                  mandoc_msg(MANDOCERR_NOSCOPE, r->parse, ln, ppos, NULL);
                 return(ROFF_IGN);                  return;
         }          }
   
         if (r->last->endspan > -1) {          if (r->last->endspan > -1) {
                 mandoc_msg(MANDOCERR_NOSCOPE, r->parse, ln, ppos, NULL);                  mandoc_msg(MANDOCERR_NOSCOPE, r->parse, ln, ppos, NULL);
                 return(ROFF_IGN);                  return;
         }          }
   
         if ((*bufp)[pos])  
                 mandoc_msg(MANDOCERR_ARGSLOST, r->parse, ln, pos, NULL);  
   
         roffnode_pop(r);          roffnode_pop(r);
         roffnode_cleanscope(r);          roffnode_cleanscope(r);
         return(ROFF_IGN);          return;
 }  }
   
   
Line 1069 
Line 1059 
          */           */
   
         if ((ROFF_MAX != t) &&          if ((ROFF_MAX != t) &&
             (ROFF_ccond == t || ROFFRULE_ALLOW == rr ||              (ROFFRULE_ALLOW == rr ||
              ROFFMAC_STRUCT & roffs[t].flags)) {               ROFFMAC_STRUCT & roffs[t].flags)) {
                 assert(roffs[t].proc);                  assert(roffs[t].proc);
                 return((*roffs[t].proc)(r, t, bufp, szp,                  return((*roffs[t].proc)(r, t, bufp, szp,
Line 1095 
Line 1085 
                 } else                  } else
                         *(ep - 1) = *ep = ' ';                          *(ep - 1) = *ep = ' ';
   
                 roff_ccond(r, ROFF_ccond, bufp, szp,                  roff_ccond(r, ln, pos);
                                 ln, pos, pos + 2, offs);  
                 break;  
         }          }
         return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT);          return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT);
 }  }
Line 1118 
Line 1106 
                 if ('}' != *ep)                  if ('}' != *ep)
                         continue;                          continue;
                 *ep = '&';                  *ep = '&';
                 roff_ccond(r, ROFF_ccond, bufp, szp,                  roff_ccond(r, ln, pos);
                                 ln, pos, pos + 2, offs);  
         }          }
         return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT);          return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT);
 }  }

Legend:
Removed from v.1.67  
changed lines
  Added in v.1.68