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

Diff for /mandoc/roff.c between version 1.138 and 1.140

version 1.138, 2011/05/14 16:06:08 version 1.140, 2011/05/24 15:22:14
Line 840  roff_cond_sub(ROFF_ARGS)
Line 840  roff_cond_sub(ROFF_ARGS)
 {  {
         enum rofft       t;          enum rofft       t;
         enum roffrule    rr;          enum roffrule    rr;
           char            *ep;
   
         rr = r->last->rule;          rr = r->last->rule;
           roffnode_cleanscope(r);
   
         /*          /*
          * Clean out scope.  If we've closed ourselves, then don't           * If the macro is unknown, first check if it contains a closing
          * continue.           * delimiter `\}'.  If it does, close out our scope and return
            * the currently-scoped rule (ignore or continue).  Else, drop
            * into the currently-scoped rule.
          */           */
   
         roffnode_cleanscope(r);  
   
         if (ROFF_MAX == (t = roff_parse(r, *bufp, &pos))) {          if (ROFF_MAX == (t = roff_parse(r, *bufp, &pos))) {
                 if ('\\' == (*bufp)[pos] && '}' == (*bufp)[pos + 1])                  ep = &(*bufp)[pos];
                         return(roff_ccond                  for ( ; NULL != (ep = strchr(ep, '\\')); ep++) {
                                 (r, ROFF_ccond, bufp, szp,                          ep++;
                                  ln, pos, pos + 2, offs));                          if ('}' != *ep)
                                   continue;
                           *ep = '&';
                           roff_ccond(r, ROFF_ccond, bufp, szp,
                                           ln, pos, pos + 2, offs);
                           break;
                   }
                 return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT);                  return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT);
         }          }
   
Line 863  roff_cond_sub(ROFF_ARGS)
Line 871  roff_cond_sub(ROFF_ARGS)
          * if they're either structurally required (such as loops and           * if they're either structurally required (such as loops and
          * conditionals) or a closing macro.           * conditionals) or a closing macro.
          */           */
   
         if (ROFFRULE_DENY == rr)          if (ROFFRULE_DENY == rr)
                 if ( ! (ROFFMAC_STRUCT & roffs[t].flags))                  if ( ! (ROFFMAC_STRUCT & roffs[t].flags))
                         if (ROFF_ccond != t)                          if (ROFF_ccond != t)
Line 873  roff_cond_sub(ROFF_ARGS)
Line 882  roff_cond_sub(ROFF_ARGS)
                                 ln, ppos, pos, offs));                                  ln, ppos, pos, offs));
 }  }
   
   
 /* ARGSUSED */  /* ARGSUSED */
 static enum rofferr  static enum rofferr
 roff_cond_text(ROFF_ARGS)  roff_cond_text(ROFF_ARGS)
 {  {
         char            *ep, *st;          char            *ep;
         enum roffrule    rr;          enum roffrule    rr;
   
         rr = r->last->rule;          rr = r->last->rule;
           roffnode_cleanscope(r);
   
         /*          ep = &(*bufp)[pos];
          * We display the value of the text if out current evaluation          for ( ; NULL != (ep = strchr(ep, '\\')); ep++) {
          * scope permits us to do so.                  ep++;
          */                  if ('}' != *ep)
                           continue;
         /* FIXME: use roff_ccond? */                  *ep = '&';
                   roff_ccond(r, ROFF_ccond, bufp, szp,
         st = &(*bufp)[pos];                                  ln, pos, pos + 2, offs);
         if (NULL == (ep = strstr(st, "\\}"))) {  
                 roffnode_cleanscope(r);  
                 return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT);  
         }          }
   
         if (ep == st || (ep > st && '\\' != *(ep - 1)))  
                 roffnode_pop(r);  
   
         roffnode_cleanscope(r);  
         return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT);          return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT);
 }  }
   
   
 static enum roffrule  static enum roffrule
 roff_evalcond(const char *v, int *pos)  roff_evalcond(const char *v, int *pos)

Legend:
Removed from v.1.138  
changed lines
  Added in v.1.140

CVSweb