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

Diff for /texi2mdoc/main.c between version 1.28 and 1.30

version 1.28, 2015/02/21 21:49:18 version 1.30, 2015/02/23 11:44:30
Line 58  static void doinclude(struct texi *, enum texicmd, con
Line 58  static void doinclude(struct texi *, enum texicmd, con
 static  void doitem(struct texi *, enum texicmd, const char *, size_t, size_t *);  static  void doitem(struct texi *, enum texicmd, const char *, size_t, size_t *);
 static  void doitemize(struct texi *, enum texicmd, const char *, size_t, size_t *);  static  void doitemize(struct texi *, enum texicmd, const char *, size_t, size_t *);
 static  void dolink(struct texi *, enum texicmd, const char *, size_t, size_t *);  static  void dolink(struct texi *, enum texicmd, const char *, size_t, size_t *);
   static  void domacro(struct texi *, enum texicmd, const char *, size_t, size_t *);
 static  void domath(struct texi *, enum texicmd, const char *, size_t, size_t *);  static  void domath(struct texi *, enum texicmd, const char *, size_t, size_t *);
 static  void domultitable(struct texi *, enum texicmd, const char *, size_t, size_t *);  static  void domultitable(struct texi *, enum texicmd, const char *, size_t, size_t *);
 static  void doquotation(struct texi *, enum texicmd, const char *, size_t, size_t *);  static  void doquotation(struct texi *, enum texicmd, const char *, size_t, size_t *);
Line 172  static const struct texitok __texitoks[TEXICMD__MAX] =
Line 173  static const struct texitok __texitoks[TEXICMD__MAX] =
         { doblock, "ifnotxml", 8 }, /* TEXICMD_IFNOTXML */          { doblock, "ifnotxml", 8 }, /* TEXICMD_IFNOTXML */
         { doblock, "ifplaintext", 11 }, /* TEXICMD_IFPLAINTEXT */          { doblock, "ifplaintext", 11 }, /* TEXICMD_IFPLAINTEXT */
         { doignblock, "iftex", 5 }, /* TEXICMD_IFTEX */          { doignblock, "iftex", 5 }, /* TEXICMD_IFTEX */
         { doignblock, "ifset", 5 }, /* TEXICMD_IFSET */          { dovalue, "ifset", 5 }, /* TEXICMD_IFSET */
         { doignblock, "ifxml", 5 }, /* TEXICMD_IFXML */          { doignblock, "ifxml", 5 }, /* TEXICMD_IFXML */
         { doignblock, "ignore", 6 }, /* TEXICMD_IGNORE */          { doignblock, "ignore", 6 }, /* TEXICMD_IGNORE */
         { doignbracket, "image", 5 }, /* TEXICMD_IMAGE */          { doignbracket, "image", 5 }, /* TEXICMD_IMAGE */
         { doinclude, "include", 7 }, /* TEXICMD_INCLUDE */          { doinclude, "include", 7 }, /* TEXICMD_INCLUDE */
         { dodisplay, "indentblock", 11 }, /* TEXICMD_INDENTBLOCK */          { dodisplay, "indentblock", 11 }, /* TEXICMD_INDENTBLOCK */
         { doignline, "", 0 }, /* TEXICMD_INDEX */          { doignline, "", 0 }, /* TEXICMD_USER_INDEX */
         { doignline, "insertcopying", 13 }, /* TEXICMD_INSERTCOPYING */          { doignline, "insertcopying", 13 }, /* TEXICMD_INSERTCOPYING */
         { doitem, "item", 4 }, /* TEXICMD_ITEM */          { doitem, "item", 4 }, /* TEXICMD_ITEM */
         { doitemize, "itemize", 7 }, /* TEXICMD_ITEMIZE */          { doitemize, "itemize", 7 }, /* TEXICMD_ITEMIZE */
Line 188  static const struct texitok __texitoks[TEXICMD__MAX] =
Line 189  static const struct texitok __texitoks[TEXICMD__MAX] =
         { doignline, "kindex", 6 }, /* TEXICMD_KINDEX */          { doignline, "kindex", 6 }, /* TEXICMD_KINDEX */
         { dosymbol, "LaTeX", 5 }, /* TEXICMD_LATEX */          { dosymbol, "LaTeX", 5 }, /* TEXICMD_LATEX */
         { dosecoffs, "lowersections", 13 }, /* TEXICMD_LOWERSECTIONS */          { dosecoffs, "lowersections", 13 }, /* TEXICMD_LOWERSECTIONS */
           { domacro, "macro", 5 }, /* TEXICMD_MACRO */
         { domath, "math", 4 }, /* TEXICMD_MATH */          { domath, "math", 4 }, /* TEXICMD_MATH */
         { doignblock, "menu", 4 }, /* TEXICMD_MENU */          { doignblock, "menu", 4 }, /* TEXICMD_MENU */
         { dosymbol, "minus", 5 }, /* TEXICMD_MINUS */          { dosymbol, "minus", 5 }, /* TEXICMD_MINUS */
Line 426  dodefn(struct texi *p, enum texicmd cmd, 
Line 428  dodefn(struct texi *p, enum texicmd cmd, 
 }  }
   
 static void  static void
   domacro(struct texi *p, enum texicmd cmd,
           const char *buf, size_t sz, size_t *pos)
   {
           size_t            start, end, endtoksz, len;
           struct teximacro  m;
           const char       *endtok, *blk;
   
           memset(&m, 0, sizeof(struct teximacro));
   
           while (*pos < sz && isws(buf[*pos]))
                   advance(p, buf, pos);
   
           for (start = end = *pos; end < sz; end++)
                   if (ismspace(buf[end]) || '{' == buf[end])
                           break;
   
           if (start == end)
                   texierr(p, "zero-length macro name");
   
           advanceto(p, buf, pos, end);
   
           m.key = malloc(end - start + 1);
           if (NULL == m.key)
                   texiabort(p, NULL);
           memcpy(m.key, &buf[start], end - start);
           m.key[end - start] = '\0';
   
           m.args = argparse(p, buf, sz, pos, &m.argsz);
           advanceeoln(p, buf, sz, pos, 0);
   
           start = *pos;
           endtok = "\n@end macro\n";
           endtoksz = strlen(endtok);
           blk = memmem(&buf[start], sz, endtok, endtoksz);
           if (NULL == blk)
                   texierr(p, "unterminated macro body");
           while (&buf[*pos] != blk)
                   advance(p, buf, pos);
           assert('\n' == buf[*pos]);
           advance(p, buf, pos);
           len = blk - &buf[start];
           m.value = malloc(len + 1);
           if (NULL == m.value)
                   texiabort(p, NULL);
           memcpy(m.value, &buf[start], len);
           m.value[len] = '\0';
   
           p->macros = realloc
                   (p->macros,
                   (p->macrosz + 1) *
                   sizeof(struct teximacro));
           if (NULL == p->macros)
                   texiabort(p, NULL);
   
           p->macros[p->macrosz++] = m;
           advanceeoln(p, buf, sz, pos, 1);
   }
   
   static void
 doignblock(struct texi *p, enum texicmd cmd,  doignblock(struct texi *p, enum texicmd cmd,
         const char *buf, size_t sz, size_t *pos)          const char *buf, size_t sz, size_t *pos)
 {  {
Line 584  doverbinclude(struct texi *p, enum texicmd cmd, 
Line 645  doverbinclude(struct texi *p, enum texicmd cmd, 
                         advance(p, buf, pos);                          advance(p, buf, pos);
                         continue;                          continue;
                 }                  }
                 type = texicmd(p, buf, *pos, sz, &end);                  type = texicmd(p, buf, *pos, sz, &end, NULL);
                 advanceto(p, buf, pos, end);                  advanceto(p, buf, pos, end);
                 if (TEXICMD_VALUE != type)                  if (TEXICMD_VALUE != type)
                         texierr(p, "unknown verbatiminclude command");                          texierr(p, "unknown verbatiminclude command");
Line 643  doinclude(struct texi *p, enum texicmd cmd, 
Line 704  doinclude(struct texi *p, enum texicmd cmd, 
                         advance(p, buf, pos);                          advance(p, buf, pos);
                         continue;                          continue;
                 }                  }
                 type = texicmd(p, buf, *pos, sz, &end);                  type = texicmd(p, buf, *pos, sz, &end, NULL);
                 advanceto(p, buf, pos, end);                  advanceto(p, buf, pos, end);
                 if (TEXICMD_VALUE != type)                  if (TEXICMD_VALUE != type)
                         texierr(p, "unknown include command");                          texierr(p, "unknown include command");
Line 912  dosymbol(struct texi *p, enum texicmd cmd, 
Line 973  dosymbol(struct texi *p, enum texicmd cmd, 
         case (TEXICMD_HYPHEN):          case (TEXICMD_HYPHEN):
                 break;                  break;
         default:          default:
                 texiwarn(p, "sym: %d", cmd);  
                 abort();                  abort();
         }          }
   
Line 1014  dovalue(struct texi *p, enum texicmd cmd, 
Line 1074  dovalue(struct texi *p, enum texicmd cmd, 
                                         break;                                          break;
                         if (i < p->valstackpos)                          if (i < p->valstackpos)
                                 texierr(p, "recursive value");                                  texierr(p, "recursive value");
                           if (64 == p->valstackpos)
                                   texierr(p, "too many nested values");
                         p->valstack[p->valstackpos++] = cp;                          p->valstack[p->valstackpos++] = cp;
                         parseeof(p, cp, strlen(cp));                          parseeof(p, cp, strlen(cp));
                         p->valstackpos--;                          p->valstackpos--;
Line 1024  dovalue(struct texi *p, enum texicmd cmd, 
Line 1086  dovalue(struct texi *p, enum texicmd cmd, 
                         doignblock(p, cmd, buf, sz, pos);                          doignblock(p, cmd, buf, sz, pos);
                 else                  else
                         parseto(p, buf, sz, pos, texitoks[cmd].tok);                          parseto(p, buf, sz, pos, texitoks[cmd].tok);
           } else if (TEXICMD_IFSET == cmd) {
                   if (NULL == valuellookup(p, buf, sz, pos))
                           doignblock(p, cmd, buf, sz, pos);
                   else
                           parseto(p, buf, sz, pos, texitoks[cmd].tok);
         } else if (TEXICMD_CLEAR == cmd)          } else if (TEXICMD_CLEAR == cmd)
                 valuelclear(p, buf, sz, pos);                  valuelclear(p, buf, sz, pos);
 }  }
Line 1304  domultitable(struct texi *p, enum texicmd cmd, 
Line 1371  domultitable(struct texi *p, enum texicmd cmd, 
                  * arguments to set the number of columns that we'll                   * arguments to set the number of columns that we'll
                  * have.                   * have.
                  */                   */
                 type = texicmd(p, buf, *pos, sz, &end);                  type = texicmd(p, buf, *pos, sz, &end, NULL);
                 advanceto(p, buf, pos, end);                  advanceto(p, buf, pos, end);
                 if (TEXICMD_COLUMNFRACTIONS != type)                  if (TEXICMD_COLUMNFRACTIONS != type)
                         texierr(p, "unknown multitable command");                          texierr(p, "unknown multitable command");

Legend:
Removed from v.1.28  
changed lines
  Added in v.1.30

CVSweb