summaryrefslogtreecommitdiff
path: root/source/tools/muconvert.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2016-05-11 12:42:12 +0200
committerTor Andersson <tor.andersson@artifex.com>2016-05-13 11:42:00 +0200
commit4ce9b5a1023be2e931d4205ed17f44f135c920d1 (patch)
treea8fdee5c427d6c0b4e907e4b902d751e69fe972f /source/tools/muconvert.c
parentae9780583c18c949bf975131a24eb8b8361ddbf6 (diff)
downloadmupdf-4ce9b5a1023be2e931d4205ed17f44f135c920d1.tar.xz
Add common page range parsing function for tools.
Diffstat (limited to 'source/tools/muconvert.c')
-rw-r--r--source/tools/muconvert.c47
1 files changed, 5 insertions, 42 deletions
diff --git a/source/tools/muconvert.c b/source/tools/muconvert.c
index 7c2d1f4f..6f354b01 100644
--- a/source/tools/muconvert.c
+++ b/source/tools/muconvert.c
@@ -40,7 +40,7 @@ static void usage(void)
"\t\tcbz, pdf\n"
"\t-O -\tcomma separated list of options for output format\n"
"\n"
- "\tpages\tcomma separated list of page numbers and ranges\n"
+ "\tpages\tcomma separated list of page numbers and ranges, where N is the last page\n"
"\n"
);
fprintf(stderr, "%s\n", fz_cbz_write_options_usage);
@@ -48,17 +48,6 @@ static void usage(void)
exit(1);
}
-static int isrange(const char *s)
-{
- while (*s)
- {
- if ((*s < '0' || *s > '9') && *s != 'N' && *s != '-' && *s != ',')
- return 0;
- s++;
- }
- return 1;
-}
-
static void runpage(int number)
{
fz_matrix ctm;
@@ -74,44 +63,18 @@ static void runpage(int number)
fz_drop_page(ctx, page);
}
-static void runrange(char *s)
+static void runrange(const char *range)
{
int start, end, i;
- while (s[0])
- {
- if (s[0] == 'N')
- {
- start = count;
- s += 1;
- }
- else
- start = strtol(s, &s, 10);
-
- if (s[0] == '-')
- {
- if (s[1] == 'N')
- {
- end = count;
- s += 2;
- }
- else
- end = strtol(s+1, &s, 10);
- }
- else
- end = start;
-
- start = fz_clampi(start, 1, count);
- end = fz_clampi(end, 1, count);
+ while ((range = fz_parse_page_range(ctx, range, &start, &end, count)))
+ {
if (start < end)
for (i = start; i <= end; ++i)
runpage(i);
else
for (i = start; i >= end; --i)
runpage(i);
-
- if (s[0] != ',')
- break;
}
}
@@ -188,7 +151,7 @@ int muconvert_main(int argc, char **argv)
fz_layout_document(ctx, doc, layout_w, layout_h, layout_em);
count = fz_count_pages(ctx, doc);
- if (isrange(argv[i+1]))
+ if (i+1 < argc && fz_is_page_range(ctx, argv[i+1]))
runrange(argv[++i]);
else
runrange("1-N");