From 8f409578f267f4da34ffe57c26032acc6706bde7 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 24 Apr 2007 20:16:35 +0000 Subject: Parse half-open ranges like -2 or 3-, and be a bit more liberal about 2007-04-24 Matthias Clasen * gtk/gtkprintunixdialog.c (dialog_get_page_ranges): Parse half-open ranges like -2 or 3-, and be a bit more liberal about whitespace. (dialog_set_page_ranges): Support half-open ranges. * gtk/gtkprintoperation.c (print_pages_idle): Substitute the number of pages in half-open ranges. (preview_iface_is_selected): Support half-open ranges here, too. svn path=/trunk/; revision=17627 --- gtk/gtkprintunixdialog.c | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) (limited to 'gtk/gtkprintunixdialog.c') diff --git a/gtk/gtkprintunixdialog.c b/gtk/gtkprintunixdialog.c index 47d6c22e7a..e72d7c4b96 100644 --- a/gtk/gtkprintunixdialog.c +++ b/gtk/gtkprintunixdialog.c @@ -1652,22 +1652,33 @@ dialog_get_page_ranges (GtkPrintUnixDialog *dialog, p = text; while (*p) { - start = (int)strtol (p, &next, 10); - if (start < 1) - start = 1; + while (isspace (*p)) p++; + + if (*p == '-') + { + /* a half-open range like -2 */ + start = 1; + } + else + { + start = (int)strtol (p, &next, 10); + if (start < 1) + start = 1; + p = next; + } + end = start; - if (next != p) - { - p = next; + while (isspace (*p)) p++; - if (*p == '-') - { - p++; - end = (int)strtol (p, NULL, 10); - if (end < start) - end = start; - } + if (*p == '-') + { + p++; + end = (int)strtol (p, &next, 10); + if (next == p) /* a half-open range like 2- */ + end = 0; + else if (end < start) + end = start; } ranges[i].start = start - 1; @@ -1685,6 +1696,9 @@ dialog_get_page_ranges (GtkPrintUnixDialog *dialog, *n_ranges_out = i; + for (i = 0; i < *n_ranges_out; i++) + g_print ("[%d, %d]\n", ranges[i].start, ranges[i].end); + return ranges; } @@ -1702,6 +1716,8 @@ dialog_set_page_ranges (GtkPrintUnixDialog *dialog, g_string_append_printf (s, "%d", ranges[i].start + 1); if (ranges[i].end > ranges[i].start) g_string_append_printf (s, "-%d", ranges[i].end + 1); + else if (ranges[i].end == -1) + g_string_append (s, "-"); if (i != n_ranges - 1) g_string_append (s, ","); -- cgit v1.2.1