From d4bf92cbf5983f96df2039eb6cb501f1912918c8 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Thu, 20 Mar 2014 13:01:47 +0100 Subject: Respect reverse page ranges in mutool clean. --- source/tools/pdfclean.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'source/tools') 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, ","); } -- cgit v1.2.3