summaryrefslogtreecommitdiff
path: root/filter/pstops.c
diff options
context:
space:
mode:
Diffstat (limited to 'filter/pstops.c')
-rw-r--r--filter/pstops.c56
1 files changed, 51 insertions, 5 deletions
diff --git a/filter/pstops.c b/filter/pstops.c
index 77bc2df96..7517a4978 100644
--- a/filter/pstops.c
+++ b/filter/pstops.c
@@ -1,5 +1,5 @@
/*
- * "$Id: pstops.c 7006 2007-10-04 17:43:38Z mike $"
+ * "$Id: pstops.c 7689 2008-06-24 20:50:57Z mike $"
*
* PostScript filter for the Common UNIX Printing System (CUPS).
*
@@ -1259,6 +1259,7 @@ copy_page(cups_file_t *fp, /* I - File to read from */
int level; /* Embedded document level */
pstops_page_t *pageinfo; /* Page information */
int first_page; /* First page on N-up output? */
+ int has_page_setup; /* Does the page have %%Begin/EndPageSetup? */
int bounding_box[4]; /* PageBoundingBox */
@@ -1508,7 +1509,7 @@ copy_page(cups_file_t *fp, /* I - File to read from */
if (first_page)
doc_puts(doc, "%%BeginPageSetup\n");
- if (!strncmp(line, "%%BeginPageSetup", 16))
+ if ((has_page_setup = !strncmp(line, "%%BeginPageSetup", 16)) != 0)
{
int feature = 0; /* In a Begin/EndFeature block? */
@@ -1540,6 +1541,9 @@ copy_page(cups_file_t *fp, /* I - File to read from */
else if (!strncmp(line, "%%Include", 9))
continue;
+ if (line[0] != '%' && !feature)
+ break;
+
if (!feature || (doc->number_up == 1 && !doc->fitplot))
doc_write(doc, line, linelen);
}
@@ -1548,8 +1552,11 @@ copy_page(cups_file_t *fp, /* I - File to read from */
* Skip %%EndPageSetup...
*/
- if (linelen > 0)
- linelen = cupsFileGetLine(fp, line, linesize);
+ if (linelen > 0 && !strncmp(line, "%%EndPageSetup", 14))
+ {
+ linelen = cupsFileGetLine(fp, line, linesize);
+ has_page_setup = 0;
+ }
}
if (first_page)
@@ -1629,6 +1636,45 @@ copy_page(cups_file_t *fp, /* I - File to read from */
* Finish the PageSetup section as needed...
*/
+ if (has_page_setup)
+ {
+ int feature = 0; /* In a Begin/EndFeature block? */
+
+ doc_write(doc, line, linelen);
+
+ while ((linelen = cupsFileGetLine(fp, line, linesize)) > 0)
+ {
+ if (!strncmp(line, "%%EndPageSetup", 14))
+ break;
+ else if (!strncmp(line, "%%BeginFeature:", 15))
+ {
+ feature = 1;
+
+ if (doc->number_up > 1 || doc->fitplot)
+ continue;
+ }
+ else if (!strncmp(line, "%%EndFeature", 12))
+ {
+ feature = 0;
+
+ if (doc->number_up > 1 || doc->fitplot)
+ continue;
+ }
+ else if (!strncmp(line, "%%Include", 9))
+ continue;
+
+ if (!feature || (doc->number_up == 1 && !doc->fitplot))
+ doc_write(doc, line, linelen);
+ }
+
+ /*
+ * Skip %%EndPageSetup...
+ */
+
+ if (linelen > 0 && !strncmp(line, "%%EndPageSetup", 14))
+ linelen = cupsFileGetLine(fp, line, linesize);
+ }
+
if (first_page)
doc_puts(doc, "%%EndPageSetup\n");
@@ -3369,5 +3415,5 @@ write_labels(pstops_doc_t *doc, /* I - Document information */
/*
- * End of "$Id: pstops.c 7006 2007-10-04 17:43:38Z mike $".
+ * End of "$Id: pstops.c 7689 2008-06-24 20:50:57Z mike $".
*/