From 5dbcea4594d8b16bf100320bc68f4bc0892bda30 Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Sun, 4 Jul 2010 20:17:42 +0000 Subject: gv(1) doesn't remember the last set font when displaying new pages, so print it out for each new page. This also prevents superfluous printings of the font before the %%Page: comment has been displayed. --- term_ps.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'term_ps.c') diff --git a/term_ps.c b/term_ps.c index fecb86c8..ff5fa130 100644 --- a/term_ps.c +++ b/term_ps.c @@ -657,23 +657,32 @@ static void ps_pletter(struct termp *p, int c) { int f; - + /* - * If we're not in a PostScript "word" context, then open one - * now at the current cursor. + * If we haven't opened a page context, then output that we're + * in a new page and make sure the font is correctly set. */ - if (PS_NEWPAGE & p->engine.ps.flags) + if (PS_NEWPAGE & p->engine.ps.flags) { printf("%%%%Page: %zu %zu\n", p->engine.ps.pages + 1, p->engine.ps.pages + 1); + ps_printf(p, "/%s %zu selectfont\n", + fonts[(int)p->engine.ps.lastf].name, + p->engine.ps.scale); + p->engine.ps.flags &= ~PS_NEWPAGE; + } + + /* + * If we're not in a PostScript "word" context, then open one + * now at the current cursor. + */ if ( ! (PS_INLINE & p->engine.ps.flags)) { ps_printf(p, "%zu %zu moveto\n(", AFM2PNT(p, p->engine.ps.pscol), AFM2PNT(p, p->engine.ps.psrow)); p->engine.ps.flags |= PS_INLINE; - p->engine.ps.flags &= ~PS_NEWPAGE; } assert( ! (PS_NEWPAGE & p->engine.ps.flags)); @@ -875,9 +884,18 @@ ps_setfont(struct termp *p, enum termfont f) { assert(f < TERMFONT__MAX); + p->engine.ps.lastf = f; + + /* + * If we're still at the top of the page, let the font-setting + * be delayed until we actually have stuff to print. + */ + + if (PS_NEWPAGE & p->engine.ps.flags) + return; + ps_printf(p, "/%s %zu selectfont\n", fonts[(int)f].name, p->engine.ps.scale); - p->engine.ps.lastf = f; } -- cgit