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

Diff for /mandoc/Attic/mmain.c between version 1.9 and 1.10

version 1.9, 2009/03/08 19:32:03 version 1.10, 2009/03/09 13:04:01
Line 217  static int
Line 217  static int
 optsopt(struct mmain *p, char *arg)  optsopt(struct mmain *p, char *arg)
 {  {
         char            *v;          char            *v;
         char            *toks[] = { "ign-scope", "ign-escape", NULL };          char            *toks[] = { "ign-scope", "ign-escape",
                                       "ign-macro", NULL };
   
         while (*arg)          while (*arg)
                 switch (getsubopt(&arg, toks, &v)) {                  switch (getsubopt(&arg, toks, &v)) {
Line 227  optsopt(struct mmain *p, char *arg)
Line 228  optsopt(struct mmain *p, char *arg)
                 case (1):                  case (1):
                         p->pflags |= MDOC_IGN_ESCAPE;                          p->pflags |= MDOC_IGN_ESCAPE;
                         break;                          break;
                   case (2):
                           p->pflags |= MDOC_IGN_MACRO;
                           break;
                 default:                  default:
                         /* FIXME: report? */                          warnx("unknown -f argument");
                         return(0);                          return(0);
                 }                  }
   
Line 258  optswarn(struct mmain *p, char *arg)
Line 262  optswarn(struct mmain *p, char *arg)
                         p->warn |= MD_WARN_ERR;                          p->warn |= MD_WARN_ERR;
                         break;                          break;
                 default:                  default:
                         /* FIXME: report? */                          warnx("unknown -W argument");
                         return(0);                          return(0);
                 }                  }
   
Line 270  static int
Line 274  static int
 parse(struct mmain *p)  parse(struct mmain *p)
 {  {
         ssize_t          sz;          ssize_t          sz;
         int              i, pos, len, lnn;          int              j, i, pos, len, lnn;
         char            *line;          char            *ln;
   
         for (line = NULL, lnn = 1, len = pos = 0; ; ) {          for (ln = NULL, lnn = 1, len = pos = 0; ; ) {
                 if (-1 == (sz = read(p->fdin, p->buf, p->bufsz))) {                  if (-1 == (sz = read(p->fdin, p->buf, p->bufsz))) {
                         warn("%s", p->in);                          warn("%s", p->in);
                         return(0);                          return(0);
Line 283  parse(struct mmain *p)
Line 287  parse(struct mmain *p)
                 for (i = 0; i < (int)sz; i++) {                  for (i = 0; i < (int)sz; i++) {
                         if (pos >= len) {                          if (pos >= len) {
                                 len += MD_LINE_SZ;                                  len += MD_LINE_SZ;
                                 line = realloc(line, (size_t)len);                                  ln = realloc(ln, (size_t)len);
                                 if (NULL == line)                                  if (NULL == ln)
                                         err(1, "realloc");                                          err(1, "realloc");
                         }                          }
   
                         if ('\n' != p->buf[i]) {                          if ('\n' != p->buf[i]) {
                                 line[pos++] = p->buf[i];                                  ln[pos++] = p->buf[i];
                                 continue;                                  continue;
                         }                          }
   
                         line[pos] = 0;                          /* Check for escaped newline.  */
                         if ( ! mdoc_parseln(p->mdoc, lnn, line))  
                                 return(0);  
   
                           if (pos > 0 && '\\' == ln[pos - 1]) {
                                   for (j = pos - 1; j >= 0; j--)
                                           if ('\\' != ln[j])
                                                   break;
   
                                   if ( ! ((pos - j) % 2)) {
                                           pos--;
                                           lnn++;
                                           continue;
                                   }
                           }
   
                           ln[pos] = 0;
                           if ( ! mdoc_parseln(p->mdoc, lnn, ln))
                                   return(0);
                         lnn++;                          lnn++;
                         pos = 0;                          pos = 0;
                 }                  }
         }          }
   
         if (line)          if (pos > 0)
                 free(line);                  warnx("%s: file not eof-terminated", p->in);
   
           if (ln)
                   free(ln);
         return(mdoc_endparse(p->mdoc));          return(mdoc_endparse(p->mdoc));
 }  }
   

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

CVSweb