summaryrefslogtreecommitdiffstats
path: root/term_ps.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-07-04 20:17:42 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-07-04 20:17:42 +0000
commit5dbcea4594d8b16bf100320bc68f4bc0892bda30 (patch)
tree9ce6cd6402c1bd1ecc68219d6a32f3746d39306d /term_ps.c
parenta6dcadc095a90f39dc0c4f1edd94608d4488f665 (diff)
downloadmandoc-5dbcea4594d8b16bf100320bc68f4bc0892bda30.tar.gz
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.
Diffstat (limited to 'term_ps.c')
-rw-r--r--term_ps.c30
1 files changed, 24 insertions, 6 deletions
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;
}