summaryrefslogtreecommitdiff
path: root/src/pdflib/pdcore/pc_ctype.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/pdflib/pdcore/pc_ctype.h')
-rw-r--r--src/pdflib/pdcore/pc_ctype.h149
1 files changed, 98 insertions, 51 deletions
diff --git a/src/pdflib/pdcore/pc_ctype.h b/src/pdflib/pdcore/pc_ctype.h
index 5aebcb4..59da980 100644
--- a/src/pdflib/pdcore/pc_ctype.h
+++ b/src/pdflib/pdcore/pc_ctype.h
@@ -6,72 +6,119 @@
| Proprietary source code -- do not redistribute! |
*---------------------------------------------------------------------------*/
-/* $Id: pc_ctype.h,v 1.1 2008/10/17 06:10:43 scuri Exp $ */
+/* $Id: pc_ctype.h,v 1.2 2009/10/20 18:12:26 scuri Exp $ */
#ifndef PC_CTYPE_H_INCLUDED
#define PC_CTYPE_H_INCLUDED
#include "pc_util.h"
+extern const unsigned short pdc_ctype[];
+
+#define PDC_ISLOWER 0x0001
+#define PDC_ISUPPER 0x0002
+#define PDC_ISDIGIT 0x0004
+#define PDC_ISPUNCT 0x0008
+#define PDC_ISSPACE 0x0010
+#define PDC_ISSPACE2 0x0020
+
+#define PDC_ISOCT 0x0100
+#define PDC_ISXDIGIT 0x0200
+#define PDC_ISDELIM 0x0400
+#define PDC_ISNUM0 0x0800 /* '+' '-' '.' '0'..'9' */
+#define PDC_ISPDFSP 0x1000 /* ' ' NUL HT NL CR FF */
+
+
+#define PDC_CONVCHAR(c) ((pdc_byte) c)
+
+
/* these are the locale-free replacements for the standard library
-** isXXX() functions. use the macros below, DO NOT use the pdc__isXXX()
-** functions directly.
+** isXXX() functions.
*/
-#define pdc_isalnum(c) pdc__isalnum((pdc_byte) (c))
-#define pdc_isalpha(c) pdc__isalpha((pdc_byte) (c))
-#define pdc_isdigit(c) pdc__isdigit((pdc_byte) (c))
-#define pdc_islower(c) pdc__islower((pdc_byte) (c))
-#define pdc_isprint(c) pdc__isprint((pdc_byte) (c))
-#define pdc_ispunct(c) pdc__ispunct((pdc_byte) (c))
-#define pdc_isspace(c) pdc__isspace((pdc_byte) (c))
-#define pdc_isupper(c) pdc__isupper((pdc_byte) (c))
-#define pdc_isxdigit(c) pdc__isxdigit((pdc_byte) (c))
-
-#define pdc_tolower(c) pdc__tolower((pdc_byte) (c))
-#define pdc_toupper(c) pdc__toupper((pdc_byte) (c))
-
-pdc_bool pdc__isalnum(pdc_byte c);
-pdc_bool pdc__isalpha(pdc_byte c);
-pdc_bool pdc__isdigit(pdc_byte c);
-pdc_bool pdc__islower(pdc_byte c);
-pdc_bool pdc__isprint(pdc_byte c);
-pdc_bool pdc__ispunct(pdc_byte c);
-pdc_bool pdc__isspace(pdc_byte c);
-pdc_bool pdc__isupper(pdc_byte c);
-pdc_bool pdc__isxdigit(pdc_byte c);
-
-pdc_byte pdc__tolower(pdc_byte c);
-pdc_byte pdc__toupper(pdc_byte c);
+#define pdc_isalnum(c) \
+ ((pdc_ctype[PDC_CONVCHAR(c)] & \
+ (PDC_ISLOWER | PDC_ISUPPER | PDC_ISDIGIT)) != 0)
+
+#define pdc_isalpha(c) \
+ ((pdc_ctype[PDC_CONVCHAR(c)] & (PDC_ISLOWER | PDC_ISUPPER)) != 0)
+
+#define pdc_isdigit(c) \
+ ((pdc_ctype[PDC_CONVCHAR(c)] & PDC_ISDIGIT) != 0)
+
+#define pdc_islower(c) \
+ ((pdc_ctype[PDC_CONVCHAR(c)] & PDC_ISLOWER) != 0)
+
+#define pdc_isprint(c) \
+ ((pdc_ctype[PDC_CONVCHAR(c)] & \
+ (PDC_ISLOWER | PDC_ISUPPER | \
+ PDC_ISDIGIT | PDC_ISPUNCT | PDC_ISSPACE2)) != 0)
+
+#define pdc_ispunct(c) \
+ ((pdc_ctype[PDC_CONVCHAR(c)] & PDC_ISPUNCT) != 0)
+
+#define pdc_isspace(c) \
+ ((pdc_ctype[PDC_CONVCHAR(c)] & PDC_ISSPACE) != 0)
+
+#define pdc_isupper(c) \
+ ((pdc_ctype[PDC_CONVCHAR(c)] & PDC_ISUPPER) != 0)
+
+#define pdc_isxdigit(c) \
+ ((pdc_ctype[PDC_CONVCHAR(c)] & PDC_ISXDIGIT) != 0)
+
+
+#define pdc_tolower(c) \
+ (pdc_isupper(c) ? ((pdc_byte) ((c) + 0x20)) : (pdc_byte) (c))
+
+
+#define pdc_toupper(c) \
+ (pdc_islower(c) ? ((pdc_byte) ((c) - 0x20)) : (pdc_byte) (c))
/* these macros are for the various flavors of the token scanner. they
** expect ASCII input even on EBCDIC platforms (thus the "_a" suffix),
** and they implement special rules for PDF character classification.
*/
-#define pdc_isalpha_a(c) pdc__isalpha_a((pdc_byte) (c))
-#define pdc_isdecdt_a(c) pdc__isdecdt_a((pdc_byte) (c))
-#define pdc_isdelim_a(c) pdc__isdelim_a((pdc_byte) (c))
-#define pdc_ishexdt_a(c) pdc__ishexdt_a((pdc_byte) (c))
-#define pdc_islower_a(c) pdc__islower_a((pdc_byte) (c))
-#define pdc_isnum0_a(c) pdc__isnum0_a((pdc_byte) (c))
-#define pdc_isoctdt_a(c) pdc__isoctdt_a((pdc_byte) (c))
+#define pdc_isalnum_a(c) \
+ ((pdc_ctype[(pdc_byte) (c)] & \
+ (PDC_ISLOWER | PDC_ISUPPER | PDC_ISDIGIT)) != 0)
+
+#define pdc_isalpha_a(c) \
+ ((pdc_ctype[(pdc_byte) (c)] & (PDC_ISLOWER | PDC_ISUPPER)) != 0)
+
+#define pdc_isdecdt_a(c) \
+ ((pdc_ctype[(pdc_byte) (c)] & PDC_ISDIGIT) != 0)
+
+#define pdc_isdelim_a(c) \
+ ((pdc_ctype[(pdc_byte) (c)] & PDC_ISDELIM) != 0)
+
+#define pdc_ishexdt_a(c) \
+ ((pdc_ctype[(pdc_byte) (c)] & PDC_ISXDIGIT) != 0)
+
+#define pdc_islower_a(c) \
+ ((pdc_ctype[(pdc_byte) (c)] & PDC_ISLOWER) != 0)
+
+#define pdc_isnum0_a(c) \
+ ((pdc_ctype[(pdc_byte) (c)] & PDC_ISNUM0) != 0)
+
+#define pdc_isoctdt_a(c) \
+ ((pdc_ctype[(pdc_byte) (c)] & PDC_ISOCT) != 0)
+
+#define pdc_isspace_a(c) \
+ ((pdc_ctype[(pdc_byte) (c)] & PDC_ISPDFSP) != 0)
+
+#define pdc_isspecial_a(c) \
+ ((pdc_ctype[(pdc_byte) (c)] & (PDC_ISPDFSP | PDC_ISDELIM)) != 0)
+
+#define pdc_isupper_a(c) \
+ ((pdc_ctype[(pdc_byte) (c)] & PDC_ISUPPER) != 0)
#define pdc_isregular_a(c) \
- ((c) != -1 && !pdc__isspecial_a((pdc_byte) (c)))
-
-#define pdc_isspace_a(c) pdc__isspace_a((pdc_byte) (c))
-#define pdc_isspecial_a(c) pdc__isspecial_a((pdc_byte) (c))
-#define pdc_isupper_a(c) pdc__isupper_a((pdc_byte) (c))
-
-pdc_bool pdc__isalpha_a(pdc_byte c);
-pdc_bool pdc__isdecdt_a(pdc_byte c);
-pdc_bool pdc__isdelim_a(pdc_byte c);
-pdc_bool pdc__ishexdt_a(pdc_byte c);
-pdc_bool pdc__islower_a(pdc_byte c);
-pdc_bool pdc__isnum0_a(pdc_byte c);
-pdc_bool pdc__isoctdt_a(pdc_byte c);
-pdc_bool pdc__isspace_a(pdc_byte c);
-pdc_bool pdc__isspecial_a(pdc_byte c);
-pdc_bool pdc__isupper_a(pdc_byte c);
+ ((c) != -1 && !pdc_isspecial_a((pdc_byte) (c)))
+
+#define pdc_tolower_a(c) \
+ (pdc_isupper_a(c) ? ((pdc_byte) ((c) + 0x20)) : (pdc_byte) (c))
+
+#define pdc_toupper_a(c) \
+ (pdc_islower_a(c) ? ((pdc_byte) ((c) - 0x20)) : (pdc_byte) (c))
#endif /* PC_CTYPE_H_INCLUDED */