* pod2mdoc: In text mode, do not print whitespace *after* printing a word
@ 2015-02-13 18:02 schwarze
0 siblings, 0 replies; only message in thread
From: schwarze @ 2015-02-13 18:02 UTC (permalink / raw)
To: source
Log Message:
-----------
In text mode, do not print whitespace *after* printing a word
because that may end up at the end of a line if a macro follows.
Instead, delay printing whitespace until before printing the next word.
Requires being a bit more careful about the wantws flag in the
function formatcode().
Modified Files:
--------------
pod2mdoc:
pod2mdoc.c
Revision Data
-------------
Index: pod2mdoc.c
===================================================================
RCS file: /home/cvs/mdocml/pod2mdoc/pod2mdoc.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -Lpod2mdoc.c -Lpod2mdoc.c -u -p -r1.39 -r1.40
--- pod2mdoc.c
+++ pod2mdoc.c
@@ -160,7 +160,6 @@ outbuf_addchar(struct state *st)
if ('\\' == last)
st->outbuf[st->outbuflen++] = 'e';
st->outbuf[st->outbuflen] = '\0';
- st->wantws = 0;
}
static void
@@ -174,7 +173,6 @@ outbuf_addstr(struct state *st, const ch
memcpy(st->outbuf + st->outbuflen, str, slen+1);
st->outbuflen += slen;
last = str[slen - 1];
- st->wantws = 0;
}
static void
@@ -184,6 +182,9 @@ outbuf_flush(struct state *st)
if (0 == st->outbuflen)
return;
+ if (OUST_TXT == st->oust && st->wantws)
+ putchar(' ');
+
fputs(st->outbuf, stdout);
*st->outbuf = '\0';
st->outbuflen = 0;
@@ -477,8 +478,9 @@ static int
formatcode(struct state *st, const char *buf, size_t *start,
size_t end, int nomacro, int pos)
{
- enum fmt fmt;
size_t i, j, dsz;
+ enum fmt fmt;
+ int wantws;
unsigned char uc;
assert(*start + 1 < end);
@@ -563,7 +565,8 @@ formatcode(struct state *st, const char
* allows to break at this point as well.
*/
- st->wantws |= ' ' == buf[*start];
+ wantws = ' ' == buf[*start] ||
+ (OUST_MAC == st->oust ? st->wantws : ! st->outbuflen);
/*
* If we are on a text line and there is no
@@ -573,22 +576,23 @@ formatcode(struct state *st, const char
* lest we clobber out output state.
*/
- if (OUST_MAC != st->oust && !st->wantws) {
+ if (OUST_MAC != st->oust && ! wantws) {
if (OUST_NL != st->oust)
putchar('\n');
printf(".Pf ");
+ st->wantws = 0;
}
outbuf_flush(st);
/* Whitespace is easier to suppress on macro lines. */
- if (OUST_MAC == st->oust && !st->wantws)
+ if (OUST_MAC == st->oust && ! wantws)
printf(" Ns ");
/* Unless we are on a macro line, start one. */
- if (OUST_MAC != st->oust && st->wantws) {
+ if (OUST_MAC != st->oust && wantws) {
if (OUST_NL != st->oust)
putchar('\n');
putchar('.');
@@ -687,7 +691,8 @@ formatcode(struct state *st, const char
}
if (*start + 1 < end && '<' == buf[*start + 1] &&
'A' <= buf[*start] && 'Z' >= buf[*start]) {
- formatcode(st, buf, start, end, nomacro, 1);
+ if ( ! formatcode(st, buf, start, end, nomacro, 1))
+ st->wantws = 1;
continue;
}
@@ -729,14 +734,11 @@ formatcode(struct state *st, const char
putchar('e');
}
- if (FMT__MAX == fmt)
- return(0);
-
if ( ! nomacro && FMT_CODE == fmt)
printf(" Qc ");
st->wantws = ' ' == last;
- return(1);
+ return(FMT__MAX != fmt);
}
/*
@@ -1309,7 +1311,8 @@ donamenm(struct state *st, const char *b
*
* Uses formatcode() to go to OUST_MAC mode
* and outbuf_flush() to go to OUST_TXT mode.
- * Main text mode wantws handling is in this function.
+ * In text mode, wantws requests white space before the text
+ * currently contained in the outbuf, not before upcoming text.
* Must make sure to go back to OUST_NL/wantws mode before returning.
*/
static void
@@ -1385,7 +1388,7 @@ ordinary(struct state *st, const char *b
/*
* On whitespace, flush the output buffer
* and allow breaking to a macro line.
- * Otherwise, buffer text and clear wantws.
+ * Otherwise, merely buffer text.
*/
last = buf[start++];
@@ -1407,8 +1410,10 @@ ordinary(struct state *st, const char *b
}
outbuf_flush(st);
- putchar(' ');
- st->wantws = 1;
+ if (OUST_MAC == st->oust)
+ mdoc_newln(st);
+ else
+ st->wantws = 1;
}
if (start < end - 1 && '<' == buf[start + 1] &&
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2015-02-13 18:02 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-13 18:02 pod2mdoc: In text mode, do not print whitespace *after* printing a word schwarze
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).