=================================================================== RCS file: /cvs/texi2mdoc/util.c,v retrieving revision 1.22 retrieving revision 1.25 diff -u -p -r1.22 -r1.25 --- texi2mdoc/util.c 2015/03/01 16:57:39 1.22 +++ texi2mdoc/util.c 2015/03/03 22:37:24 1.25 @@ -1,4 +1,4 @@ -/* $Id: util.c,v 1.22 2015/03/01 16:57:39 kristaps Exp $ */ +/* $Id: util.c,v 1.25 2015/03/03 22:37:24 kristaps Exp $ */ /* * Copyright (c) 2015 Kristaps Dzonsons * @@ -184,7 +184,10 @@ texiputchar(struct texi *p, char c) if ('\'' == c && 0 == p->outcol) fputs("\\&", p->outfile); - fputc(c, p->outfile); + if (p->uppercase) + fputc(toupper((unsigned int)c), p->outfile); + else + fputc(c, p->outfile); if ('\\' == c) fputc('e', p->outfile); p->seenvs = 0; @@ -210,7 +213,12 @@ texiputchars(struct texi *p, const char *s) fputs("\\&", p->outfile); if ('\'' == *s && 0 == p->outcol) fputs("\\&", p->outfile); - p->outcol += fputs(s, p->outfile); + if (p->uppercase) + for ( ; '\0' != *s; s++) + p->outcol += fputc(toupper + ((unsigned int)*s), p->outfile); + else + p->outcol += fputs(s, p->outfile); p->seenvs = 0; } @@ -472,7 +480,7 @@ texiexecmacro(struct texi *p, struct teximacro *m, siz * The "sv" value was initialised at the start of the macro. */ if (sv > 0) - if (++p->files[p->filepos].depth > 64) + if (++p->files[p->filepos - 1].depth > 64) texierr(p, "maximium recursive depth"); args = argparse(p, pos, &asz, m->argsz); @@ -561,10 +569,16 @@ static void parseword(struct texi *p, size_t *pos, char extra) { + /* + * 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 && p->outcol > 72 && 0 == p->literal) 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) texiputchar(p, ' '); @@ -593,6 +607,15 @@ parseword(struct texi *p, size_t *pos, char extra) texiputchar(p, BUF(p)[*pos]); advance(p, pos); } + + /* + * 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'); } /* @@ -616,7 +639,7 @@ texicmd(const struct texi *p, size_t pos, size_t *end, return(TEXICMD__MAX); /* Alphabetic commands are special. */ - if ( ! isalpha((unsigned char)BUF(p)[pos])) { + if ( ! isalpha((unsigned int)BUF(p)[pos])) { if ((*end = pos + 1) == BUFSZ(p)) return(TEXICMD__MAX); for (i = 0; i < TEXICMD__MAX; i++) {