summaryrefslogtreecommitdiff
path: root/source/tools
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2014-03-20 13:01:47 +0100
committerTor Andersson <tor.andersson@artifex.com>2014-03-20 13:28:48 +0100
commitd4bf92cbf5983f96df2039eb6cb501f1912918c8 (patch)
tree02bd75caa06b1f73cce63b4e17f566599df113f3 /source/tools
parente4d36ce68e0467ac4702f717386934a44970f4e5 (diff)
downloadmupdf-d4bf92cbf5983f96df2039eb6cb501f1912918c8.tar.xz
Respect reverse page ranges in mutool clean.
Diffstat (limited to 'source/tools')
-rw-r--r--source/tools/pdfclean.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/source/tools/pdfclean.c b/source/tools/pdfclean.c
index d2ded0b7..d7d5ac97 100644
--- a/source/tools/pdfclean.c
+++ b/source/tools/pdfclean.c
@@ -53,6 +53,18 @@ string_in_names_list(pdf_obj *p, pdf_obj *names_list)
/*
* Recreate page tree to only retain specified pages.
*/
+
+static void retainpage(pdf_document *doc, pdf_obj *parent, pdf_obj *kids, int page)
+{
+ pdf_obj *pageref = pdf_lookup_page_obj(doc, page-1);
+ pdf_obj *pageobj = pdf_resolve_indirect(pageref);
+
+ pdf_dict_puts(pageobj, "Parent", parent);
+
+ /* Store page object in new kids array */
+ pdf_array_push(kids, pageref);
+}
+
static void retainpages(globals *glo, int argc, char **argv)
{
pdf_obj *oldroot, *root, *pages, *kids, *countobj, *parent, *olddests;
@@ -106,22 +118,15 @@ static void retainpages(globals *glo, int argc, char **argv)
epage = pagecount;
}
- if (spage > epage)
- page = spage, spage = epage, epage = page;
-
spage = fz_clampi(spage, 1, pagecount);
epage = fz_clampi(epage, 1, pagecount);
- for (page = spage; page <= epage; page++)
- {
- pdf_obj *pageref = pdf_lookup_page_obj(doc, page-1);
- pdf_obj *pageobj = pdf_resolve_indirect(pageref);
-
- pdf_dict_puts(pageobj, "Parent", parent);
-
- /* Store page object in new kids array */
- pdf_array_push(kids, pageref);
- }
+ if (spage < epage)
+ for (page = spage; page <= epage; ++page)
+ retainpage(doc, parent, kids, page);
+ else
+ for (page = spage; page >= epage; --page)
+ retainpage(doc, parent, kids, page);
spec = fz_strsep(&pagelist, ",");
}