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

Diff for /mandoc/roff.c between version 1.219 and 1.220

version 1.219, 2014/07/06 19:09:00 version 1.220, 2014/07/07 11:35:06
Line 847  roff_cblock(ROFF_ARGS)
Line 847  roff_cblock(ROFF_ARGS)
   
         switch (r->last->tok) {          switch (r->last->tok) {
         case ROFF_am:          case ROFF_am:
                   /* ROFF_am1 is remapped to ROFF_am in roff_block(). */
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case ROFF_ami:          case ROFF_ami:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case ROFF_am1:  
                 /* FALLTHROUGH */  
         case ROFF_de:          case ROFF_de:
                 /* ROFF_de1 is remapped to ROFF_de in roff_block(). */                  /* ROFF_de1 is remapped to ROFF_de in roff_block(). */
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
Line 919  roff_ccond(struct roff *r, int ln, int ppos)
Line 918  roff_ccond(struct roff *r, int ln, int ppos)
 static enum rofferr  static enum rofferr
 roff_block(ROFF_ARGS)  roff_block(ROFF_ARGS)
 {  {
         char            *name, *cp;          const char      *name;
           char            *iname, *cp;
         size_t           namesz;          size_t           namesz;
   
         name = cp = *bufp + pos;          /* Ignore groff compatibility mode for now. */
         namesz = 0;  
   
         if (ROFF_ig != tok) {          if (ROFF_de1 == tok)
                 if ('\0' == *cp) {                  tok = ROFF_de;
                         mandoc_msg(MANDOCERR_REQ_EMPTY, r->parse,          else if (ROFF_am1 == tok)
                             ln, ppos, roffs[tok].name);                  tok = ROFF_am;
                         return(ROFF_IGN);  
                 }  
   
                 /*          /* Parse the macro name argument. */
                  * Re-write `de1', since we don't really care about  
                  * groff's strange compatibility mode, into `de'.  
                  */  
   
                 if (ROFF_de1 == tok)          cp = *bufp + pos;
                         tok = ROFF_de;          if (ROFF_ig == tok) {
                 else if (ROFF_de != tok)                  iname = NULL;
                         mandoc_msg(MANDOCERR_REQUEST, r->parse, ln, ppos,                  namesz = 0;
                             roffs[tok].name);          } else {
                   iname = cp;
                 namesz = roff_getname(r, &cp, ln, ppos);                  namesz = roff_getname(r, &cp, ln, ppos);
                 name[namesz] = '\0';                  iname[namesz] = '\0';
           }
   
           /* Resolve the macro name argument if it is indirect. */
   
           if (namesz && (ROFF_dei == tok || ROFF_ami == tok)) {
                   if (NULL == (name = roff_getstrn(r, iname, namesz))) {
                           mandoc_vmsg(MANDOCERR_STR_UNDEF,
                               r->parse, ln, (int)(iname - *bufp),
                               "%.*s", (int)namesz, iname);
                           namesz = 0;
                   } else
                           namesz = strlen(name);
         } else          } else
                 name = NULL;                  name = iname;
   
           if (0 == namesz && ROFF_ig != tok) {
                   mandoc_msg(MANDOCERR_REQ_EMPTY, r->parse,
                       ln, ppos, roffs[tok].name);
                   return(ROFF_IGN);
           }
   
         roffnode_push(r, tok, name, ln, ppos);          roffnode_push(r, tok, name, ln, ppos);
   
         /*          /*
Line 956  roff_block(ROFF_ARGS)
Line 968  roff_block(ROFF_ARGS)
          * appended from roff_block_text() in multiline mode.           * appended from roff_block_text() in multiline mode.
          */           */
   
         if (namesz && ROFF_de == tok)          if (ROFF_de == tok || ROFF_dei == tok)
                 roff_setstrn(&r->strtab, name, namesz, "", 0, 0);                  roff_setstrn(&r->strtab, name, namesz, "", 0, 0);
   
         if ('\0' == *cp)          if ('\0' == *cp)
                 return(ROFF_IGN);                  return(ROFF_IGN);
   
         /* If present, process the custom end-of-line marker. */          /* Get the custom end marker. */
   
         name = cp;          iname = cp;
         namesz = roff_getname(r, &cp, ln, ppos);          namesz = roff_getname(r, &cp, ln, ppos);
   
           /* Resolve the end marker if it is indirect. */
   
           if (namesz && (ROFF_dei == tok || ROFF_ami == tok)) {
                   if (NULL == (name = roff_getstrn(r, iname, namesz))) {
                           mandoc_vmsg(MANDOCERR_STR_UNDEF,
                               r->parse, ln, (int)(iname - *bufp),
                               "%.*s", (int)namesz, iname);
                           namesz = 0;
                   } else
                           namesz = strlen(name);
           } else
                   name = iname;
   
         if (namesz)          if (namesz)
                 r->last->end = mandoc_strndup(name, namesz);                  r->last->end = mandoc_strndup(name, namesz);
   
Line 1020  roff_block_sub(ROFF_ARGS)
Line 1046  roff_block_sub(ROFF_ARGS)
   
         t = roff_parse(r, *bufp, &pos, ln, ppos);          t = roff_parse(r, *bufp, &pos, ln, ppos);
   
         /*  
          * Macros other than block-end are only significant  
          * in `de' blocks; elsewhere, simply throw them away.  
          */  
         if (ROFF_cblock != t) {          if (ROFF_cblock != t) {
                 if (ROFF_de == tok)                  if (ROFF_ig != tok)
                         roff_setstr(r, r->last->name, *bufp + ppos, 2);                          roff_setstr(r, r->last->name, *bufp + ppos, 2);
                 return(ROFF_IGN);                  return(ROFF_IGN);
         }          }
Line 1038  static enum rofferr
Line 1060  static enum rofferr
 roff_block_text(ROFF_ARGS)  roff_block_text(ROFF_ARGS)
 {  {
   
         if (ROFF_de == tok)          if (ROFF_ig != tok)
                 roff_setstr(r, r->last->name, *bufp + pos, 2);                  roff_setstr(r, r->last->name, *bufp + pos, 2);
   
         return(ROFF_IGN);          return(ROFF_IGN);

Legend:
Removed from v.1.219  
changed lines
  Added in v.1.220

CVSweb