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

Diff for /texi2mdoc/util.c between version 1.23 and 1.28

version 1.23, 2015/03/02 18:12:53 version 1.28, 2015/03/05 15:18:13
Line 100  texiexit(struct texi *p)
Line 100  texiexit(struct texi *p)
         free(p->dirs);          free(p->dirs);
         free(p->subtitle);          free(p->subtitle);
         free(p->title);          free(p->title);
           free(p->copying);
 }  }
   
 /*  /*
Line 190  texiputchar(struct texi *p, char c)
Line 191  texiputchar(struct texi *p, char c)
                 fputc(c, p->outfile);                  fputc(c, p->outfile);
         if ('\\' == c)          if ('\\' == c)
                 fputc('e', p->outfile);                  fputc('e', p->outfile);
         p->seenvs = 0;  
         if ('\n' == c) {          if ('\n' == c) {
                 p->outcol = 0;                  p->outcol = 0;
                 p->seenws = 0;                  p->seenws = 0;
Line 219  texiputchars(struct texi *p, const char *s)
Line 219  texiputchars(struct texi *p, const char *s)
                                 ((unsigned int)*s), p->outfile);                                  ((unsigned int)*s), p->outfile);
         else          else
                 p->outcol += fputs(s, p->outfile);                  p->outcol += fputs(s, p->outfile);
         p->seenvs = 0;  
 }  }
   
 /*  /*
Line 250  teximacroclose(struct texi *p)
Line 249  teximacroclose(struct texi *p)
                 fputc('\n', p->outfile);                  fputc('\n', p->outfile);
                 p->outcol = p->seenws = 0;                  p->outcol = p->seenws = 0;
         }          }
           p->seenvs = 0;
 }  }
   
 /*  /*
Line 283  teximacroopen(struct texi *p, const char *s)
Line 283  teximacroopen(struct texi *p, const char *s)
         p->outcol++;          p->outcol++;
         p->outmacro++;          p->outmacro++;
         p->seenws = 0;          p->seenws = 0;
           p->seenvs = 0;
 }  }
   
 /*  /*
Line 307  teximacro(struct texi *p, const char *s)
Line 308  teximacro(struct texi *p, const char *s)
         fputs(s, p->outfile);          fputs(s, p->outfile);
         fputc('\n', p->outfile);          fputc('\n', p->outfile);
         p->outcol = p->seenws = 0;          p->outcol = p->seenws = 0;
           p->seenvs = 0;
 }  }
   
 /*  /*
Line 316  void
Line 318  void
 texivspace(struct texi *p)  texivspace(struct texi *p)
 {  {
   
         if (p->seenvs || TEXILIST_TABLE == p->list)          if (TEXILIST_TABLE != p->list)
                 return;                  teximacro(p, "Pp");
         teximacro(p, "Pp");  
         p->seenvs = 1;  
 }  }
   
 /*  /*
Line 410  advancenext(struct texi *p, size_t *pos)
Line 410  advancenext(struct texi *p, size_t *pos)
   
         while (*pos < BUFSZ(p) && ismspace(BUF(p)[*pos])) {          while (*pos < BUFSZ(p) && ismspace(BUF(p)[*pos])) {
                 p->seenws = 1;                  p->seenws = 1;
                 /*  
                  * If it looks like we've printed a double-line, then  
                  * output a paragraph.  
                  * FIXME: this is stupid.  
                  */  
                 if (*pos && '\n' == BUF(p)[*pos] && '\n' == BUF(p)[*pos - 1])  
                         texivspace(p);  
                 advance(p, pos);                  advance(p, pos);
         }          }
         return(*pos);          return(*pos);
Line 480  texiexecmacro(struct texi *p, struct teximacro *m, siz
Line 473  texiexecmacro(struct texi *p, struct teximacro *m, siz
          * The "sv" value was initialised at the start of the macro.           * The "sv" value was initialised at the start of the macro.
          */           */
         if (sv > 0)          if (sv > 0)
                 if (++p->files[p->filepos].depth > 64)                  if (++p->files[p->filepos - 1].depth > 64)
                         texierr(p, "maximium recursive depth");                          texierr(p, "maximium recursive depth");
   
         args = argparse(p, pos, &asz, m->argsz);          args = argparse(p, pos, &asz, m->argsz);
Line 569  static void
Line 562  static void
 parseword(struct texi *p, size_t *pos, char extra)  parseword(struct texi *p, size_t *pos, char extra)
 {  {
   
           /*
            * If a prior word had a terminating double-newline, then begin
            * this text block with a `Pp'.
            * We don't do this if we're in a literal context (we'll print
            * out the newlines themselves) nor in a `TS' table.
            */
           if (p->seenvs && 0 == p->literal && TEXILIST_TABLE != p->list)
                   teximacro(p, "Pp");
   
           p->seenvs = 0;
   
           /*
            * Some line control: if we (non-macro, non-literal) already
            * have more than 72 characters written to the screen, then
            * output a newline before getting started.
            */
         if (p->seenws && 0 == p->outmacro &&          if (p->seenws && 0 == p->outmacro &&
                  p->outcol > 72 && 0 == p->literal)                   p->outcol > 72 && 0 == p->literal)
                 texiputchar(p, '\n');                  texiputchar(p, '\n');
         /* FIXME: abstract this: we use it elsewhere. */  
           /* Usual padding in the case of seen whitespace. */
         if (p->seenws && p->outcol && 0 == p->literal)          if (p->seenws && p->outcol && 0 == p->literal)
                 texiputchar(p, ' ');                  texiputchar(p, ' ');
   
Line 587  parseword(struct texi *p, size_t *pos, char extra)
Line 597  parseword(struct texi *p, size_t *pos, char extra)
                 }                  }
                 if ('\0' != extra && BUF(p)[*pos] == extra)                  if ('\0' != extra && BUF(p)[*pos] == extra)
                         return;                          return;
                 if (*pos < BUFSZ(p) - 1 &&  
                   if (p->literal) {
                           texiputchar(p, BUF(p)[*pos]);
                           advance(p, pos);
                           continue;
                   }
   
                   if (*pos < BUFSZ(p) - 2 &&
                            '-' == BUF(p)[*pos] &&
                            '-' == BUF(p)[*pos + 1] &&
                            '-' == BUF(p)[*pos + 2]) {
                           texiputchars(p, "\\(em");
                           advance(p, pos);
                           advance(p, pos);
                   } else if (*pos < BUFSZ(p) - 1 &&
                            '-' == BUF(p)[*pos] &&
                            '-' == BUF(p)[*pos + 1]) {
                           texiputchars(p, "\\(en");
                           advance(p, pos);
                   } else if (*pos < BUFSZ(p) - 1 &&
                          '`' == BUF(p)[*pos] &&                           '`' == BUF(p)[*pos] &&
                          '`' == BUF(p)[*pos + 1]) {                           '`' == BUF(p)[*pos + 1]) {
                         texiputchars(p, "\\(lq");                          texiputchars(p, "\\(lq");
Line 599  parseword(struct texi *p, size_t *pos, char extra)
Line 628  parseword(struct texi *p, size_t *pos, char extra)
                         advance(p, pos);                          advance(p, pos);
                 } else                  } else
                         texiputchar(p, BUF(p)[*pos]);                          texiputchar(p, BUF(p)[*pos]);
   
                 advance(p, pos);                  advance(p, pos);
         }          }
   
           if (*pos + 1 < BUFSZ(p) &&
                   '\n' == BUF(p)[*pos] &&
                   '\n' == BUF(p)[*pos + 1])
                   p->seenvs = 1;
   
           /*
            * New sentence, new line:if we (non-macro, non-literal) see a
            * period at the end of the last printed word, then open a
            * newline.
            */
           if (0 == p->literal && 0 == p->outmacro &&
                   *pos < BUFSZ(p) && '.' == BUF(p)[*pos - 1])
                   texiputchar(p, '\n');
 }  }
   
 /*  /*
Line 1478  teximdocopen(struct texi *p, size_t *pos)
Line 1522  teximdocopen(struct texi *p, size_t *pos)
         } else          } else
                 texiputchars(p, "Unknown description");                  texiputchars(p, "Unknown description");
         teximacroclose(p);          teximacroclose(p);
         p->seenvs = 1;  
 }  }
   

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

CVSweb