version 1.24, 2015/03/03 15:21:01 |
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; |
} |
} |
|
|
/* |
/* |
|
|
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); |
|
|
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; |
|
} |
} |
|
|