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

Diff for /texi2mdoc/main.c between version 1.26 and 1.27

version 1.26, 2015/02/20 15:37:33 version 1.27, 2015/02/21 17:00:33
Line 44  static void doaccent(struct texi *, enum texicmd, cons
Line 44  static void doaccent(struct texi *, enum texicmd, cons
 static  void doblock(struct texi *, enum texicmd, const char *, size_t, size_t *);  static  void doblock(struct texi *, enum texicmd, const char *, size_t, size_t *);
 static  void dobracket(struct texi *, enum texicmd, const char *, size_t, size_t *);  static  void dobracket(struct texi *, enum texicmd, const char *, size_t, size_t *);
 static  void dobye(struct texi *, enum texicmd, const char *, size_t, size_t *);  static  void dobye(struct texi *, enum texicmd, const char *, size_t, size_t *);
   static  void dodefindex(struct texi *, enum texicmd, const char *, size_t, size_t *);
 static  void dodefn(struct texi *, enum texicmd, const char *, size_t, size_t *);  static  void dodefn(struct texi *, enum texicmd, const char *, size_t, size_t *);
 static  void dodisplay(struct texi *, enum texicmd, const char *, size_t, size_t *);  static  void dodisplay(struct texi *, enum texicmd, const char *, size_t, size_t *);
 static  void doenumerate(struct texi *, enum texicmd, const char *, size_t, size_t *);  static  void doenumerate(struct texi *, enum texicmd, const char *, size_t, size_t *);
Line 107  static const struct texitok __texitoks[TEXICMD__MAX] =
Line 108  static const struct texitok __texitoks[TEXICMD__MAX] =
         { doignline, "contents", 8 }, /* TEXICMD_CONTENTS */          { doignline, "contents", 8 }, /* TEXICMD_CONTENTS */
         { doignblock, "copying", 7 }, /* TEXICMD_COPYING */          { doignblock, "copying", 7 }, /* TEXICMD_COPYING */
         { dosymbol, "copyright", 9 }, /* TEXICMD_COPYRIGHT */          { dosymbol, "copyright", 9 }, /* TEXICMD_COPYRIGHT */
           { dodefindex, "defcodeindex", 12 }, /* TEXICMD_DEFCODEINDEX */
         { dodefn, "deffn", 5 }, /* TEXICMD_DEFFN */          { dodefn, "deffn", 5 }, /* TEXICMD_DEFFN */
         { dodefn, "deffnx", 6 }, /* TEXICMD_DEFFNX */          { dodefn, "deffnx", 6 }, /* TEXICMD_DEFFNX */
           { dodefindex, "defindex", 8 }, /* TEXICMD_DEFINDEX */
         { dodefn, "defmac", 6 }, /* TEXICMD_DEFMAC */          { dodefn, "defmac", 6 }, /* TEXICMD_DEFMAC */
         { dodefn, "defmacx", 7 }, /* TEXICMD_DEFMACX */          { dodefn, "defmacx", 7 }, /* TEXICMD_DEFMACX */
         { dodefn, "deftp", 5 }, /* TEXICMD_DEFTP */          { dodefn, "deftp", 5 }, /* TEXICMD_DEFTP */
Line 173  static const struct texitok __texitoks[TEXICMD__MAX] =
Line 176  static const struct texitok __texitoks[TEXICMD__MAX] =
         { 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, "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 227  static const struct texitok __texitoks[TEXICMD__MAX] =
Line 231  static const struct texitok __texitoks[TEXICMD__MAX] =
         { dosubsubsection, "subsubsection", 13 }, /* TEXICMD_SUBSUBSECTION */          { dosubsubsection, "subsubsection", 13 }, /* TEXICMD_SUBSUBSECTION */
         { doignline, "subtitle", 8 }, /* TEXICMD_SUBTITLE */          { doignline, "subtitle", 8 }, /* TEXICMD_SUBTITLE */
         { doignline, "summarycontents", 15 }, /* TEXICMD_SUMMARYCONTENTS */          { doignline, "summarycontents", 15 }, /* TEXICMD_SUMMARYCONTENTS */
           { doignline, "synindex", 8 }, /* TEXICMD_SYNINDEX */
         { doignline, "syncodeindex", 12 }, /* TEXICMD_SYNCODEINDEX */          { doignline, "syncodeindex", 12 }, /* TEXICMD_SYNCODEINDEX */
         { doinline, "t", 1 }, /* TEXICMD_T */          { doinline, "t", 1 }, /* TEXICMD_T */
         { dotab, "tab", 3 }, /* TEXICMD_TAB */          { dotab, "tab", 3 }, /* TEXICMD_TAB */
Line 262  static const struct texitok __texitoks[TEXICMD__MAX] =
Line 267  static const struct texitok __texitoks[TEXICMD__MAX] =
 const   struct texitok *const texitoks = __texitoks;  const   struct texitok *const texitoks = __texitoks;
   
 static void  static void
   dodefindex(struct texi *p, enum texicmd cmd,
           const char *buf, size_t sz, size_t *pos)
   {
           size_t   start, end;
           char    *cp;
   
           while (*pos < sz && isws(buf[*pos]))
                   advance(p, buf, pos);
   
           start = end = *pos;
           while (end < sz && ! ismspace(buf[end]))
                   end++;
   
           if (start == end) {
                   advanceeoln(p, buf, sz, pos, 1);
                   return;
           } else if (NULL == (cp = malloc(end - start + 1)))
                   texiabort(p, NULL);
   
           memcpy(cp, &buf[start], end - start);
           cp[end - start] = '\0';
   
           p->indexs = realloc(p->indexs,
                   sizeof(char *) * (p->indexsz + 1));
   
           if (NULL == p->indexs)
                   texiabort(p, NULL);
           p->indexs[p->indexsz++] = cp;
   }
   
   static void
 dodefn(struct texi *p, enum texicmd cmd,  dodefn(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 713  dotitle(struct texi *p, enum texicmd cmd, 
Line 749  dotitle(struct texi *p, enum texicmd cmd, 
         advanceeoln(p, buf, sz, pos, 1);          advanceeoln(p, buf, sz, pos, 1);
         free(p->subtitle);          free(p->subtitle);
         p->subtitle = malloc(end - start + 1);          p->subtitle = malloc(end - start + 1);
           if (NULL == p->subtitle)
                   texiabort(p, NULL);
         memcpy(p->subtitle, &buf[start], end - start);          memcpy(p->subtitle, &buf[start], end - start);
         p->subtitle[end - start] = '\0';          p->subtitle[end - start] = '\0';
 }  }
Line 939  dovalue(struct texi *p, enum texicmd cmd, 
Line 977  dovalue(struct texi *p, enum texicmd cmd, 
                 advanceto(p, buf, pos, end);                  advanceto(p, buf, pos, end);
   
                 key = malloc(end - start + 1);                  key = malloc(end - start + 1);
                 if (NULL == key) {                  if (NULL == key)
                         perror(NULL);                          texiabort(p, NULL);
                         exit(EXIT_FAILURE);  
                 }  
                 memcpy(key, &buf[start], end - start);                  memcpy(key, &buf[start], end - start);
                 key[end - start] = '\0';                  key[end - start] = '\0';
   
Line 955  dovalue(struct texi *p, enum texicmd cmd, 
Line 991  dovalue(struct texi *p, enum texicmd cmd, 
                 advanceeoln(p, buf, sz, pos, 1);                  advanceeoln(p, buf, sz, pos, 1);
   
                 val = malloc(end - start + 1);                  val = malloc(end - start + 1);
                 if (NULL == val) {                  if (NULL == val)
                         perror(NULL);                          texiabort(p, NULL);
                         exit(EXIT_FAILURE);  
                 }  
                 memcpy(val, &buf[start], end - start);                  memcpy(val, &buf[start], end - start);
                 val[end - start] = '\0';                  val[end - start] = '\0';
                 valueadd(p, key, val);                  valueadd(p, key, val);
Line 1368  doignline(struct texi *p, enum texicmd cmd, 
Line 1402  doignline(struct texi *p, enum texicmd cmd, 
  * This does NOT sanitise the directories!   * This does NOT sanitise the directories!
  */   */
 static char **  static char **
 parsedirs(const char *base, const char *cp, size_t *sz)  parsedirs(struct texi *p, const char *base, const char *cp, size_t *sz)
 {  {
         char             *tok, *str, *tofree;          char             *tok, *str, *tofree;
         const char       *cpp;          const char       *cpp;
Line 1380  parsedirs(const char *base, const char *cp, size_t *sz
Line 1414  parsedirs(const char *base, const char *cp, size_t *sz
                 for ( ; NULL != (cpp = strchr(cpp, ':')); (*sz)++)                  for ( ; NULL != (cpp = strchr(cpp, ':')); (*sz)++)
                         cpp++;                          cpp++;
   
         dirs = calloc(*sz, sizeof(char *));          if (NULL == (dirs = calloc(*sz, sizeof(char *))))
         if (NULL == dirs) {                  texiabort(p, NULL);
                 perror(NULL);          else if (NULL == (dirs[0] = strdup(base)))
                 exit(EXIT_FAILURE);                  texiabort(p, NULL);
         } else if (NULL == (dirs[0] = strdup(base))) {  
                 perror(NULL);  
                 exit(EXIT_FAILURE);  
         }  
   
         if (NULL == cp)          if (NULL == cp)
                 return(dirs);                  return(dirs);
   
         if (NULL == (tofree = tok = str = strdup(cp))) {          if (NULL == (tofree = tok = str = strdup(cp)))
                 perror(NULL);                  texiabort(p, NULL);
                 exit(EXIT_FAILURE);  
         }  
   
         for (i = 1; NULL != (tok = strsep(&str, ":")); i++)          for (i = 1; NULL != (tok = strsep(&str, ":")); i++)
                 if (NULL == (dirs[i] = strdup(tok))) {                  if (NULL == (dirs[i] = strdup(tok)))
                         perror(NULL);                          texiabort(p, NULL);
                         exit(EXIT_FAILURE);  
                 }  
   
         free(tofree);          free(tofree);
         return(dirs);          return(dirs);
Line 1437  main(int argc, char *argv[])
Line 1463  main(int argc, char *argv[])
         if (0 == (argc -= optind))          if (0 == (argc -= optind))
                 goto usage;                  goto usage;
   
         if (NULL == (path = strdup(argv[0]))) {          if (NULL == (path = strdup(argv[0])))
                 perror(NULL);                  texiabort(&texi, NULL);
                 exit(EXIT_FAILURE);          else if (NULL == (dir = dirname(path)))
         } else if (NULL == (dir = dirname(path))) {                  texiabort(&texi, NULL);
                 perror(argv[0]);  
                 free(path);  
                 exit(EXIT_FAILURE);  
         }  
         free(path);          free(path);
   
         if (NULL != (cp = strrchr(argv[0], '/')))          if (NULL != (cp = strrchr(argv[0], '/')))
Line 1452  main(int argc, char *argv[])
Line 1475  main(int argc, char *argv[])
         else          else
                 texi.title = strdup(argv[0]);                  texi.title = strdup(argv[0]);
   
         if (NULL == texi.title) {          if (NULL == texi.title)
                 perror(NULL);                  texiabort(&texi, NULL);
                 exit(EXIT_FAILURE);          else if (NULL != (path = strchr(texi.title, '.')))
         } else if (NULL != (path = strchr(texi.title, '.')))  
                 *path = '\0';                  *path = '\0';
   
         texi.ign = 1;          texi.ign = 1;
         texi.dirs = parsedirs(dir, Idir, &texi.dirsz);          texi.dirs = parsedirs(&texi, dir, Idir, &texi.dirsz);
         parsefile(&texi, argv[0], 1);          parsefile(&texi, argv[0], 1);
         /* We shouldn't get here. */          /* We shouldn't get here. */
         texiexit(&texi);          texiexit(&texi);

Legend:
Removed from v.1.26  
changed lines
  Added in v.1.27

CVSweb