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

Diff for /mandoc/mdoc.c between version 1.124 and 1.127

version 1.124, 2010/05/07 15:49:36 version 1.127, 2010/05/08 10:25:27
Line 542  mdoc_word_alloc(struct mdoc *m, int line, int pos, con
Line 542  mdoc_word_alloc(struct mdoc *m, int line, int pos, con
   
         len = strlen(p);          len = strlen(p);
   
         n = node_alloc(m, line, pos, -1, MDOC_TEXT);          n = node_alloc(m, line, pos, MDOC_MAX, MDOC_TEXT);
         n->string = mandoc_malloc(len + 1);          n->string = mandoc_malloc(len + 1);
         sv = strlcpy(n->string, p, len + 1);          sv = strlcpy(n->string, p, len + 1);
   
Line 665  mdoc_ptext(struct mdoc *m, int line, char *buf)
Line 665  mdoc_ptext(struct mdoc *m, int line, char *buf)
                 return(1);                  return(1);
         }          }
   
         /* Warn if the last un-escaped character is whitespace. */          /*
            * Warn if the last un-escaped character is whitespace. Then
            * strip away the remaining spaces (tabs stay!).
            */
   
         i = (int)strlen(buf);          i = (int)strlen(buf);
         assert(i);          assert(i);
   
         if (' ' == buf[i - 1] || '\t' == buf[i - 1])          if (' ' == buf[i - 1] || '\t' == buf[i - 1]) {
                 if (1 == i || ('\\' != buf[i - 2]))                  if (i > 1 && '\\' != buf[i - 2])
                         if ( ! mdoc_pwarn(m, line, i - 1, ETAILWS))                          if ( ! mdoc_pwarn(m, line, i - 1, ETAILWS))
                                 return(0);                                  return(0);
   
                   for (--i; i && ' ' == buf[i]; i--)
                           /* Spin back to non-space. */ ;
   
                   /* Jump ahead of escaped whitespace. */
                   i += '\\' == buf[i] ? 2 : 1;
   
                   buf[i] = '\0';
           }
   
         /* Allocate the whole word. */          /* Allocate the whole word. */
   
         return(mdoc_word_alloc(m, line, 0, buf));          return(mdoc_word_alloc(m, line, 0, buf));
 }  }
   
   
   
 static int  static int
 macrowarn(struct mdoc *m, int ln, const char *buf)  macrowarn(struct mdoc *m, int ln, const char *buf)
 {  {
         if ( ! (MDOC_IGN_MACRO & m->pflags))          if ( ! (MDOC_IGN_MACRO & m->pflags))
                 return(mdoc_verr(m, ln, 0,                  return(mdoc_verr(m, ln, 0, "unknown macro: %s%s",
                                 "unknown macro: %s%s",  
                                 buf, strlen(buf) > 3 ? "..." : ""));                                  buf, strlen(buf) > 3 ? "..." : ""));
         return(mdoc_vwarn(m, ln, 0, "unknown macro: %s%s",          return(mdoc_vwarn(m, ln, 0, "unknown macro: %s%s",
                                 buf, strlen(buf) > 3 ? "..." : ""));                                  buf, strlen(buf) > 3 ? "..." : ""));
Line 701  macrowarn(struct mdoc *m, int ln, const char *buf)
Line 711  macrowarn(struct mdoc *m, int ln, const char *buf)
 int  int
 mdoc_pmacro(struct mdoc *m, int ln, char *buf)  mdoc_pmacro(struct mdoc *m, int ln, char *buf)
 {  {
         int               i, j, c;          enum mdoct      tok;
         char              mac[5];          int             i, j;
           char            mac[5];
   
         /* Empty lines are ignored. */          /* Empty lines are ignored. */
   
Line 744  mdoc_pmacro(struct mdoc *m, int ln, char *buf)
Line 755  mdoc_pmacro(struct mdoc *m, int ln, char *buf)
                 return(1);                  return(1);
         }          }
   
         if (MDOC_MAX == (c = mdoc_hash_find(mac))) {          if (MDOC_MAX == (tok = mdoc_hash_find(mac))) {
                 if ( ! macrowarn(m, ln, mac))                  if ( ! macrowarn(m, ln, mac))
                         goto err;                          goto err;
                 return(1);                  return(1);
Line 755  mdoc_pmacro(struct mdoc *m, int ln, char *buf)
Line 766  mdoc_pmacro(struct mdoc *m, int ln, char *buf)
         while (buf[i] && ' ' == buf[i])          while (buf[i] && ' ' == buf[i])
                 i++;                  i++;
   
         /* Trailing whitespace? */          /*
            * Trailing whitespace.  Note that tabs are allowed to be passed
            * into the parser as "text", so we only warn about spaces here.
            */
   
         if ('\0' == buf[i] && ' ' == buf[i - 1])          if ('\0' == buf[i] && ' ' == buf[i - 1])
                 if ( ! mdoc_pwarn(m, ln, i - 1, ETAILWS))                  if ( ! mdoc_pwarn(m, ln, i - 1, ETAILWS))
Line 765  mdoc_pmacro(struct mdoc *m, int ln, char *buf)
Line 779  mdoc_pmacro(struct mdoc *m, int ln, char *buf)
          * Begin recursive parse sequence.  Since we're at the start of           * Begin recursive parse sequence.  Since we're at the start of
          * the line, we don't need to do callable/parseable checks.           * the line, we don't need to do callable/parseable checks.
          */           */
         if ( ! mdoc_macro(m, c, ln, 1, &i, buf))          if ( ! mdoc_macro(m, tok, ln, 1, &i, buf))
                 goto err;                  goto err;
   
         return(1);          return(1);

Legend:
Removed from v.1.124  
changed lines
  Added in v.1.127

CVSweb