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

Diff for /texi2mdoc/main.c between version 1.47 and 1.54

version 1.47, 2015/02/25 15:04:13 version 1.54, 2015/02/28 13:16:44
Line 296  static const struct texitok __texitoks[TEXICMD__MAX] =
Line 296  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 */          { dodefindex, "synindex", 8 }, /* TEXICMD_SYNINDEX */
         { doignline, "syncodeindex", 12 }, /* TEXICMD_SYNCODEINDEX */          { dodefindex, "syncodeindex", 12 }, /* TEXICMD_SYNCODEINDEX */
         { doinline, "t", 1 }, /* TEXICMD_T */          { doinline, "t", 1 }, /* TEXICMD_T */
         { dotab, "tab", 3 }, /* TEXICMD_TAB */          { dotab, "tab", 3 }, /* TEXICMD_TAB */
         { dosymbol, "\t", 1 }, /* TEXICMD_TABSYM */          { dosymbol, "\t", 1 }, /* TEXICMD_TABSYM */
Line 432  dodefn(struct texi *p, enum texicmd cmd, size_t *pos)
Line 432  dodefn(struct texi *p, enum texicmd cmd, size_t *pos)
                 break;                  break;
         }          }
   
         texiputchars(p, ":\n");          texiputchar(p, ':');
           texiputchar(p, '\n');
   
         switch (cmd) {          switch (cmd) {
         case (TEXICMD_DEFMAC):          case (TEXICMD_DEFMAC):
Line 497  dodefn(struct texi *p, enum texicmd cmd, size_t *pos)
Line 498  dodefn(struct texi *p, enum texicmd cmd, size_t *pos)
                 abort();                  abort();
         }          }
   
         texivspace(p);          if (NULL == blk)
         if (NULL != blk)                  return;
                 parseto(p, pos, blk);  
           /*
            * All "block" definitions have their block bodies indented
            * unless they have the "x" form of the command following.
            * E.g.,
            *   @deffn some function
            *   @deffnx another
            *   An explanation.
            *   @end deffn
            * With this loop, we delay opening the indented block until we
            * skipped past conformant macros.
            */
           for (;;) {
                   switch (peekcmd(p, *pos)) {
                   case (TEXICMD_DEFFNX):
                   case (TEXICMD_DEFMACX):
                   case (TEXICMD_DEFTPX):
                   case (TEXICMD_DEFTYPEFNX):
                   case (TEXICMD_DEFTYPEFUNX):
                   case (TEXICMD_DEFTYPEMETHODX):
                   case (TEXICMD_DEFTYPEVARX):
                   case (TEXICMD_DEFTYPEVRX):
                   case (TEXICMD_DEFUNX):
                   case (TEXICMD_DEFVARX):
                   case (TEXICMD_DEFVRX):
                           texivspace(p);
                           parseeoln(p, pos);
                           continue;
                   default:
                           break;
                   }
                   break;
           }
           teximacro(p, "Bd -filled -offset indent");
           p->seenvs = 1;
           parseto(p, pos, blk);
           teximacro(p, "Ed");
 }  }
   
 static void  static void
Line 613  doignblock(struct texi *p, enum texicmd cmd, size_t *p
Line 650  doignblock(struct texi *p, enum texicmd cmd, size_t *p
          * Thus, we keep track of scopes for matching "end" blocks.           * Thus, we keep track of scopes for matching "end" blocks.
          */           */
         while (stack > 0 && *pos < BUFSZ(p)) {          while (stack > 0 && *pos < BUFSZ(p)) {
                 if (stack > 10)                  if (stack > 64)
                         abort();                          texierr(p, "run-away nested stack?");
                 endt = memmem(&BUF(p)[*pos], BUFSZ(p) - *pos, end, esz);                  endt = memmem(&BUF(p)[*pos], BUFSZ(p) - *pos, end, esz);
                 startt = memmem(&BUF(p)[*pos], BUFSZ(p) - *pos, start, ssz);                  startt = memmem(&BUF(p)[*pos], BUFSZ(p) - *pos, start, ssz);
                 if (NULL == endt) {                  if (NULL == endt) {
Line 689  doinline(struct texi *p, enum texicmd cmd, size_t *pos
Line 726  doinline(struct texi *p, enum texicmd cmd, size_t *pos
         }          }
   
         if (NULL == macro || p->literal || TEXILIST_TABLE == p->list) {          if (NULL == macro || p->literal || TEXILIST_TABLE == p->list) {
                 parsebracket(p, pos);                  parsebracket(p, pos, 0);
                 return;                  return;
         }          }
   
         teximacroopen(p, macro);          teximacroopen(p, macro);
         p->seenws = 0;          p->seenws = 0;
         parsebracket(p, pos);          parsebracket(p, pos, 0);
         texipunctuate(p, pos);          texipunctuate(p, pos);
         teximacroclose(p);          teximacroclose(p);
 }  }
Line 727  doverb(struct texi *p, enum texicmd cmd, size_t *pos)
Line 764  doverb(struct texi *p, enum texicmd cmd, size_t *pos)
                         break;                          break;
                 advance(p, pos);                  advance(p, pos);
         }          }
         if (*pos == BUFSZ(p) - 1)          if (*pos >= BUFSZ(p) - 1)
                 return;                  return;
         texiputbuf(p, start, *pos);          texiputbuf(p, start, *pos);
   
Line 899  static void
Line 936  static void
 dobracket(struct texi *p, enum texicmd cmd, size_t *pos)  dobracket(struct texi *p, enum texicmd cmd, size_t *pos)
 {  {
   
         parsebracket(p, pos);          parsebracket(p, pos, 0);
 }  }
   
 static void  static void
Line 989  doaccent(struct texi *p, enum texicmd cmd, size_t *pos
Line 1026  doaccent(struct texi *p, enum texicmd cmd, size_t *pos
         if ('{' == BUF(p)[*pos]) {          if ('{' == BUF(p)[*pos]) {
                 brace = 1;                  brace = 1;
                 advance(p, pos);                  advance(p, pos);
         } else if (isalpha(texitoks[cmd].tok[0]))          } else if (isalpha((unsigned char)texitoks[cmd].tok[0]))
                 while (*pos < BUFSZ(p) && isws(BUF(p)[*pos]))                  while (*pos < BUFSZ(p) && isws(BUF(p)[*pos]))
                         advance(p, pos);                          advance(p, pos);
   
Line 1311  dosymbol(struct texi *p, enum texicmd cmd, size_t *pos
Line 1348  dosymbol(struct texi *p, enum texicmd cmd, size_t *pos
         }          }
   
         /* Alphabetic commands have braces we ignore. */          /* Alphabetic commands have braces we ignore. */
         if (isalpha(texitoks[cmd].tok[0]))          if (isalpha((unsigned char)texitoks[cmd].tok[0]))
                 doignbracket(p, cmd, pos);                  doignbracket(p, cmd, pos);
 }  }
   
Line 1327  doquotation(struct texi *p, enum texicmd cmd, size_t *
Line 1364  doquotation(struct texi *p, enum texicmd cmd, size_t *
 static void  static void
 domath(struct texi *p, enum texicmd cmd, size_t *pos)  domath(struct texi *p, enum texicmd cmd, size_t *pos)
 {  {
         size_t   nest, start;  
   
         /*          parsebracket(p, pos, 1);
          * Math handling is different from everything else.  
          * We don't allow any subcomponents, and we ignore the rules in  
          * terms of @-commands.  
          * This departs from GNU's rules, but whatever.  
          */  
         while (*pos < BUFSZ(p) && isws(BUF(p)[*pos]))  
                 advance(p, pos);  
         if (*pos == BUFSZ(p) || '{' != BUF(p)[*pos])  
                 return;  
         advance(p, pos);  
         if (p->seenws && p->outcol && 0 == p->literal)  
                 texiputchar(p, ' ');  
         p->seenws = 0;  
         for (nest = 1, start = *pos; *pos < BUFSZ(p) && nest > 0; ) {  
                 if ('{' == BUF(p)[*pos])  
                         nest++;  
                 else if ('}' == BUF(p)[*pos])  
                         if (0 == --nest)  
                                 continue;  
                 advance(p, pos);  
         }  
         if (*pos == BUFSZ(p))  
                 return;  
         assert('}' == BUF(p)[*pos]);  
         texiputbuf(p, start, *pos);  
         advance(p, pos);  
 }  }
   
 static void  static void
Line 1607  dotop(struct texi *p, enum texicmd cmd, size_t *pos)
Line 1617  dotop(struct texi *p, enum texicmd cmd, size_t *pos)
         teximacroclose(p);          teximacroclose(p);
         teximacroopen(p, "Dt");          teximacroopen(p, "Dt");
         for (cp = p->title; '\0' != *cp; cp++)          for (cp = p->title; '\0' != *cp; cp++)
                 texiputchar(p, toupper(*cp));                  texiputchar(p, toupper((unsigned int)*cp));
         texiputchars(p, " 7");          texiputchars(p, " 7");
         teximacroclose(p);          teximacroclose(p);
         teximacro(p, "Os");          teximacro(p, "Os");
Line 1808  doignbracket(struct texi *p, enum texicmd cmd, size_t 
Line 1818  doignbracket(struct texi *p, enum texicmd cmd, size_t 
 {  {
   
         p->ign++;          p->ign++;
         parsebracket(p, pos);          parsebracket(p, pos, 0);
         p->ign--;          p->ign--;
 }  }
   

Legend:
Removed from v.1.47  
changed lines
  Added in v.1.54

CVSweb