From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from krisdoz.my.domain (kristaps@localhost [127.0.0.1]) by krisdoz.my.domain (8.14.3/8.14.3) with ESMTP id o5BFQeQZ011614 for ; Fri, 11 Jun 2010 11:26:41 -0400 (EDT) Received: (from kristaps@localhost) by krisdoz.my.domain (8.14.3/8.14.3/Submit) id o5BFQdvA006804; Fri, 11 Jun 2010 11:26:39 -0400 (EDT) Date: Fri, 11 Jun 2010 11:26:39 -0400 (EDT) Message-Id: <201006111526.o5BFQdvA006804@krisdoz.my.domain> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: kristaps@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: mdocml: Delay opening a word state until a character is ready to be X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Delay opening a word state until a character is ready to be output. This paves the way for closing/reopening scope in the event that a font changes. Modified Files: -------------- mdocml: term_ps.c Revision Data ------------- Index: term_ps.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/term_ps.c,v retrieving revision 1.7 retrieving revision 1.8 diff -Lterm_ps.c -Lterm_ps.c -u -p -r1.7 -r1.8 --- term_ps.c +++ term_ps.c @@ -58,6 +58,7 @@ static void ps_begin(struct termp *); static void ps_end(struct termp *); static void ps_advance(struct termp *, size_t); static void ps_endline(struct termp *); +static void ps_pletter(struct termp *, char); static void ps_printf(struct termp *, const char *, ...); static void ps_putchar(struct termp *, char); @@ -161,6 +162,8 @@ ps_end(struct termp *p) * well as just one. */ + assert(0 == p->engine.ps.psstate); + assert('\0' == p->engine.ps.last); assert(p->engine.ps.psmarg && p->engine.ps.psmarg[0]); printf("%s", p->engine.ps.psmarg); printf("showpage\n"); @@ -226,9 +229,8 @@ ps_begin(struct termp *p) static void -ps_letter(struct termp *p, char c) +ps_pletter(struct termp *p, char c) { - char cc; if ( ! (PS_INLINE & p->engine.ps.psstate)) { /* @@ -241,24 +243,6 @@ ps_letter(struct termp *p, char c) p->engine.ps.psstate |= PS_INLINE; } - if ('\0' == p->engine.ps.last) { - assert(8 != c); - p->engine.ps.last = c; - return; - } else if (8 == p->engine.ps.last) { - assert(8 != c); - p->engine.ps.last = c; - return; - } else if (8 == c) { - assert(8 != p->engine.ps.last); - p->engine.ps.last = c; - return; - } else { - cc = p->engine.ps.last; - p->engine.ps.last = c; - c = cc; - } - /* * We need to escape these characters as per the PostScript * specification. We would also escape non-graphable characters @@ -285,10 +269,42 @@ ps_letter(struct termp *p, char c) static void +ps_letter(struct termp *p, char c) +{ + char cc; + + if ('\0' == p->engine.ps.last) { + assert(8 != c); + p->engine.ps.last = c; + return; + } else if (8 == p->engine.ps.last) { + assert(8 != c); + p->engine.ps.last = c; + return; + } else if (8 == c) { + assert(8 != p->engine.ps.last); + p->engine.ps.last = c; + return; + } else { + cc = p->engine.ps.last; + p->engine.ps.last = c; + c = cc; + } + + return(ps_pletter(p, c)); +} + + +static void ps_advance(struct termp *p, size_t len) { size_t i; + if ('\0' != p->engine.ps.last) { + ps_pletter(p, p->engine.ps.last); + p->engine.ps.last = '\0'; + } + if (PS_INLINE & p->engine.ps.psstate) { assert(8 != p->engine.ps.last); if (p->engine.ps.last) @@ -307,6 +323,11 @@ ps_advance(struct termp *p, size_t len) static void ps_endline(struct termp *p) { + + if ('\0' != p->engine.ps.last) { + ps_pletter(p, p->engine.ps.last); + p->engine.ps.last = '\0'; + } if (PS_INLINE & p->engine.ps.psstate) { assert(8 != p->engine.ps.last); -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv