=================================================================== RCS file: /cvs/texi2mdoc/util.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -p -r1.26 -r1.27 --- texi2mdoc/util.c 2015/03/05 08:35:35 1.26 +++ texi2mdoc/util.c 2015/03/05 09:36:41 1.27 @@ -1,4 +1,4 @@ -/* $Id: util.c,v 1.26 2015/03/05 08:35:35 kristaps Exp $ */ +/* $Id: util.c,v 1.27 2015/03/05 09:36:41 kristaps Exp $ */ /* * Copyright (c) 2015 Kristaps Dzonsons * @@ -191,7 +191,6 @@ texiputchar(struct texi *p, char c) fputc(c, p->outfile); if ('\\' == c) fputc('e', p->outfile); - p->seenvs = 0; if ('\n' == c) { p->outcol = 0; p->seenws = 0; @@ -220,7 +219,6 @@ texiputchars(struct texi *p, const char *s) ((unsigned int)*s), p->outfile); else p->outcol += fputs(s, p->outfile); - p->seenvs = 0; } /* @@ -251,6 +249,7 @@ teximacroclose(struct texi *p) fputc('\n', p->outfile); p->outcol = p->seenws = 0; } + p->seenvs = 0; } /* @@ -284,6 +283,7 @@ teximacroopen(struct texi *p, const char *s) p->outcol++; p->outmacro++; p->seenws = 0; + p->seenvs = 0; } /* @@ -308,6 +308,7 @@ teximacro(struct texi *p, const char *s) fputs(s, p->outfile); fputc('\n', p->outfile); p->outcol = p->seenws = 0; + p->seenvs = 0; } /* @@ -317,10 +318,8 @@ void texivspace(struct texi *p) { - if (p->seenvs || TEXILIST_TABLE == p->list) - return; - teximacro(p, "Pp"); - p->seenvs = 1; + if (TEXILIST_TABLE != p->list) + teximacro(p, "Pp"); } /* @@ -411,13 +410,6 @@ advancenext(struct texi *p, size_t *pos) while (*pos < BUFSZ(p) && ismspace(BUF(p)[*pos])) { 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); } return(*pos); @@ -571,6 +563,17 @@ 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. @@ -609,6 +612,11 @@ parseword(struct texi *p, size_t *pos, char extra) 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 @@ -1494,6 +1502,5 @@ teximdocopen(struct texi *p, size_t *pos) } else texiputchars(p, "Unknown description"); teximacroclose(p); - p->seenvs = 1; }