cpp/tests/CMakeLists.txt | 2 cpp/tests/Makefile.am | 2 goo/gtypes.h | 7 - utils/CMakeLists.txt | 2 utils/Makefile.am | 2 utils/parseargs.c | 208 ----------------------------------------------- utils/parseargs.cc | 208 +++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 216 insertions(+), 215 deletions(-)
New commits: commit ae79fc504c5424be2fa21dbc5498ced4db6e5dd3 Author: Albert Astals Cid <[email protected]> Date: Tue Aug 31 22:14:57 2010 +0100 Make GBool a bool instead of an int Passes the regression tests and might make things faster and use a bit less memory diff --git a/cpp/tests/CMakeLists.txt b/cpp/tests/CMakeLists.txt index f718290..85e20fb 100644 --- a/cpp/tests/CMakeLists.txt +++ b/cpp/tests/CMakeLists.txt @@ -18,5 +18,5 @@ macro(CPP_ADD_SIMPLETEST exe) endmacro(CPP_ADD_SIMPLETEST) -cpp_add_simpletest(poppler-dump poppler-dump.cpp ${CMAKE_SOURCE_DIR}/utils/parseargs.c) +cpp_add_simpletest(poppler-dump poppler-dump.cpp ${CMAKE_SOURCE_DIR}/utils/parseargs.cc) target_link_libraries(poppler-dump poppler) diff --git a/cpp/tests/Makefile.am b/cpp/tests/Makefile.am index 5066889..87a4f7a 100644 --- a/cpp/tests/Makefile.am +++ b/cpp/tests/Makefile.am @@ -14,7 +14,7 @@ noinst_PROGRAMS = \ poppler-dump poppler_dump_SOURCES = \ - $(top_srcdir)/utils/parseargs.c \ + $(top_srcdir)/utils/parseargs.cc \ poppler-dump.cpp poppler_dump_LDADD = $(LDADDS) diff --git a/goo/gtypes.h b/goo/gtypes.h index a6887ad..b7a2dd2 100644 --- a/goo/gtypes.h +++ b/goo/gtypes.h @@ -14,6 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2010 Patrick Spendrin <[email protected]> +// Copyright (C) 2010 Albert Astals Cid <[email protected]> // // To see a description of the changes please see the Changelog file that // came with your tarball or type make ChangeLog if you are building from git @@ -27,9 +28,9 @@ * These have stupid names to avoid conflicts with some (but not all) * C++ compilers which define them. */ -typedef int GBool; -#define gTrue 1 -#define gFalse 0 +typedef bool GBool; +#define gTrue true +#define gFalse false #ifdef _MSC_VER #pragma warning(disable: 4800) /* 'type' : forcing value to bool 'true' or 'false' (performance warning) */ diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index f8e8f4c..7b44b05 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -1,6 +1,6 @@ set(common_srcs - parseargs.c + parseargs.cc ) set(common_libs poppler diff --git a/utils/Makefile.am b/utils/Makefile.am index e57c71b..56f2cfd 100644 --- a/utils/Makefile.am +++ b/utils/Makefile.am @@ -57,7 +57,7 @@ dist_man1_MANS = \ pdftohtml.1 \ $(pdftoppm_manpage) -common = parseargs.c parseargs.h +common = parseargs.cc parseargs.h pdffonts_SOURCES = \ pdffonts.cc \ diff --git a/utils/parseargs.c b/utils/parseargs.c deleted file mode 100644 index c5f3007..0000000 --- a/utils/parseargs.c +++ /dev/null @@ -1,208 +0,0 @@ -/* - * parseargs.h - * - * Command line argument parser. - * - * Copyright 1996-2003 Glyph & Cog, LLC - */ - -/*======================================================================== - - Modified under the Poppler project - http://poppler.freedesktop.org - - Poppler project changes to this file are under the GPLv2 or later license - - All changes made under the Poppler project to this file are licensed - under GPL version 2 or later - - Copyright (C) 2008, 2009 Albert Astals Cid <[email protected]> - - To see a description of the changes please see the Changelog file that - came with your tarball or type make ChangeLog if you are building from git - -========================================================================*/ - -#include <stdio.h> -#include <stddef.h> -#include <string.h> -#include <stdlib.h> -#include <ctype.h> -#include "parseargs.h" - -#include "goo/gstrtod.h" - -static const ArgDesc *findArg(const ArgDesc *args, char *arg); -static GBool grabArg(const ArgDesc *arg, int i, int *argc, char *argv[]); - -GBool parseArgs(const ArgDesc *args, int *argc, char *argv[]) { - const ArgDesc *arg; - int i, j; - GBool ok; - - ok = gTrue; - i = 1; - while (i < *argc) { - if (!strcmp(argv[i], "--")) { - --*argc; - for (j = i; j < *argc; ++j) - argv[j] = argv[j+1]; - break; - } else if ((arg = findArg(args, argv[i]))) { - if (!grabArg(arg, i, argc, argv)) - ok = gFalse; - } else { - ++i; - } - } - return ok; -} - -void printUsage(char *program, char *otherArgs, const ArgDesc *args) { - const ArgDesc *arg; - char *typ; - int w, w1; - - w = 0; - for (arg = args; arg->arg; ++arg) { - if ((w1 = strlen(arg->arg)) > w) - w = w1; - } - - fprintf(stderr, "Usage: %s [options]", program); - if (otherArgs) - fprintf(stderr, " %s", otherArgs); - fprintf(stderr, "\n"); - - for (arg = args; arg->arg; ++arg) { - fprintf(stderr, " %s", arg->arg); - w1 = 9 + w - strlen(arg->arg); - switch (arg->kind) { - case argInt: - case argIntDummy: - typ = " <int>"; - break; - case argFP: - case argFPDummy: - typ = " <fp>"; - break; - case argString: - case argStringDummy: - typ = " <string>"; - break; - case argFlag: - case argFlagDummy: - default: - typ = ""; - break; - } - fprintf(stderr, "%-*s", w1, typ); - if (arg->usage) - fprintf(stderr, ": %s", arg->usage); - fprintf(stderr, "\n"); - } -} - -static const ArgDesc *findArg(const ArgDesc *args, char *arg) { - const ArgDesc *p; - - for (p = args; p->arg; ++p) { - if (p->kind < argFlagDummy && !strcmp(p->arg, arg)) - return p; - } - return NULL; -} - -static GBool grabArg(const ArgDesc *arg, int i, int *argc, char *argv[]) { - int n; - int j; - GBool ok; - - ok = gTrue; - n = 0; - switch (arg->kind) { - case argFlag: - *(GBool *)arg->val = gTrue; - n = 1; - break; - case argInt: - if (i + 1 < *argc && isInt(argv[i+1])) { - *(int *)arg->val = atoi(argv[i+1]); - n = 2; - } else { - ok = gFalse; - n = 1; - } - break; - case argFP: - if (i + 1 < *argc && isFP(argv[i+1])) { - *(double *)arg->val = gatof(argv[i+1]); - n = 2; - } else { - ok = gFalse; - n = 1; - } - break; - case argString: - if (i + 1 < *argc) { - strncpy((char *)arg->val, argv[i+1], arg->size - 1); - ((char *)arg->val)[arg->size - 1] = '\0'; - n = 2; - } else { - ok = gFalse; - n = 1; - } - break; - default: - fprintf(stderr, "Internal error in arg table\n"); - n = 1; - break; - } - if (n > 0) { - *argc -= n; - for (j = i; j < *argc; ++j) - argv[j] = argv[j+n]; - } - return ok; -} - -GBool isInt(char *s) { - if (*s == '-' || *s == '+') - ++s; - while (isdigit(*s)) - ++s; - if (*s) - return gFalse; - return gTrue; -} - -GBool isFP(char *s) { - int n; - - if (*s == '-' || *s == '+') - ++s; - n = 0; - while (isdigit(*s)) { - ++s; - ++n; - } - if (*s == '.') - ++s; - while (isdigit(*s)) { - ++s; - ++n; - } - if (n > 0 && (*s == 'e' || *s == 'E')) { - ++s; - if (*s == '-' || *s == '+') - ++s; - n = 0; - if (!isdigit(*s)) - return gFalse; - do { - ++s; - } while (isdigit(*s)); - } - if (*s) - return gFalse; - return gTrue; -} diff --git a/utils/parseargs.cc b/utils/parseargs.cc new file mode 100644 index 0000000..c5f3007 --- /dev/null +++ b/utils/parseargs.cc @@ -0,0 +1,208 @@ +/* + * parseargs.h + * + * Command line argument parser. + * + * Copyright 1996-2003 Glyph & Cog, LLC + */ + +/*======================================================================== + + Modified under the Poppler project - http://poppler.freedesktop.org + + Poppler project changes to this file are under the GPLv2 or later license + + All changes made under the Poppler project to this file are licensed + under GPL version 2 or later + + Copyright (C) 2008, 2009 Albert Astals Cid <[email protected]> + + To see a description of the changes please see the Changelog file that + came with your tarball or type make ChangeLog if you are building from git + +========================================================================*/ + +#include <stdio.h> +#include <stddef.h> +#include <string.h> +#include <stdlib.h> +#include <ctype.h> +#include "parseargs.h" + +#include "goo/gstrtod.h" + +static const ArgDesc *findArg(const ArgDesc *args, char *arg); +static GBool grabArg(const ArgDesc *arg, int i, int *argc, char *argv[]); + +GBool parseArgs(const ArgDesc *args, int *argc, char *argv[]) { + const ArgDesc *arg; + int i, j; + GBool ok; + + ok = gTrue; + i = 1; + while (i < *argc) { + if (!strcmp(argv[i], "--")) { + --*argc; + for (j = i; j < *argc; ++j) + argv[j] = argv[j+1]; + break; + } else if ((arg = findArg(args, argv[i]))) { + if (!grabArg(arg, i, argc, argv)) + ok = gFalse; + } else { + ++i; + } + } + return ok; +} + +void printUsage(char *program, char *otherArgs, const ArgDesc *args) { + const ArgDesc *arg; + char *typ; + int w, w1; + + w = 0; + for (arg = args; arg->arg; ++arg) { + if ((w1 = strlen(arg->arg)) > w) + w = w1; + } + + fprintf(stderr, "Usage: %s [options]", program); + if (otherArgs) + fprintf(stderr, " %s", otherArgs); + fprintf(stderr, "\n"); + + for (arg = args; arg->arg; ++arg) { + fprintf(stderr, " %s", arg->arg); + w1 = 9 + w - strlen(arg->arg); + switch (arg->kind) { + case argInt: + case argIntDummy: + typ = " <int>"; + break; + case argFP: + case argFPDummy: + typ = " <fp>"; + break; + case argString: + case argStringDummy: + typ = " <string>"; + break; + case argFlag: + case argFlagDummy: + default: + typ = ""; + break; + } + fprintf(stderr, "%-*s", w1, typ); + if (arg->usage) + fprintf(stderr, ": %s", arg->usage); + fprintf(stderr, "\n"); + } +} + +static const ArgDesc *findArg(const ArgDesc *args, char *arg) { + const ArgDesc *p; + + for (p = args; p->arg; ++p) { + if (p->kind < argFlagDummy && !strcmp(p->arg, arg)) + return p; + } + return NULL; +} + +static GBool grabArg(const ArgDesc *arg, int i, int *argc, char *argv[]) { + int n; + int j; + GBool ok; + + ok = gTrue; + n = 0; + switch (arg->kind) { + case argFlag: + *(GBool *)arg->val = gTrue; + n = 1; + break; + case argInt: + if (i + 1 < *argc && isInt(argv[i+1])) { + *(int *)arg->val = atoi(argv[i+1]); + n = 2; + } else { + ok = gFalse; + n = 1; + } + break; + case argFP: + if (i + 1 < *argc && isFP(argv[i+1])) { + *(double *)arg->val = gatof(argv[i+1]); + n = 2; + } else { + ok = gFalse; + n = 1; + } + break; + case argString: + if (i + 1 < *argc) { + strncpy((char *)arg->val, argv[i+1], arg->size - 1); + ((char *)arg->val)[arg->size - 1] = '\0'; + n = 2; + } else { + ok = gFalse; + n = 1; + } + break; + default: + fprintf(stderr, "Internal error in arg table\n"); + n = 1; + break; + } + if (n > 0) { + *argc -= n; + for (j = i; j < *argc; ++j) + argv[j] = argv[j+n]; + } + return ok; +} + +GBool isInt(char *s) { + if (*s == '-' || *s == '+') + ++s; + while (isdigit(*s)) + ++s; + if (*s) + return gFalse; + return gTrue; +} + +GBool isFP(char *s) { + int n; + + if (*s == '-' || *s == '+') + ++s; + n = 0; + while (isdigit(*s)) { + ++s; + ++n; + } + if (*s == '.') + ++s; + while (isdigit(*s)) { + ++s; + ++n; + } + if (n > 0 && (*s == 'e' || *s == 'E')) { + ++s; + if (*s == '-' || *s == '+') + ++s; + n = 0; + if (!isdigit(*s)) + return gFalse; + do { + ++s; + } while (isdigit(*s)); + } + if (*s) + return gFalse; + return gTrue; +} _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
