summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2017-12-15 17:33:19 +0000
committerVincent Sanders <vince@kyllikki.org>2017-12-15 17:33:19 +0000
commit5de69a618c7858f997e9944c06837d951fc129aa (patch)
treea91d3ee6972a7d3f31693f3f3091569f63b13da1
parentd1ee370eaa428fafb27cce60624bdf73ca35716d (diff)
downloadlibnspdf-5de69a618c7858f997e9944c06837d951fc129aa.tar.gz
libnspdf-5de69a618c7858f997e9944c06837d951fc129aa.tar.bz2
split out byte class
-rw-r--r--src/Makefile2
-rw-r--r--src/byte_class.c184
-rw-r--r--src/byte_class.h8
-rw-r--r--src/xref.c90
4 files changed, 195 insertions, 89 deletions
diff --git a/src/Makefile b/src/Makefile
index f137a81..ac8c347 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -6,7 +6,7 @@ CFLAGS+=-g -Wall
all:xref
-xref:xref.o
+xref:xref.o byte_class.o
clean:
${RM} xref xref.o
diff --git a/src/byte_class.c b/src/byte_class.c
new file mode 100644
index 0000000..a8ab735
--- /dev/null
+++ b/src/byte_class.c
@@ -0,0 +1,184 @@
+#include <stdint.h>
+
+#include "byte_class.h"
+
+/**
+ * pdf byte classification
+ *
+ * spec defines three classes which this implementation futher subdivides for
+ * comments, strings and streams:
+ * regular - the default class
+ * decimal - characters that appear in decimal values 0123456789
+ * hexidecimal - characters that appear in hex values 0123456789ABCDEF
+ * delimiter - The characters used to separate tokens ()[]{}<>/%
+ * whitespace - separate syntactic constructs like names and numbers treated
+ * as a single character except in comments, strings and streams
+ * end of line - characters that signify an end of line
+ */
+const uint8_t byte_classification[] = {
+ BC_WSPC, /* 00 - NULL */
+ BC_RGLR, /* 01 */
+ BC_RGLR, /* 02 */
+ BC_RGLR, /* 03 */
+ BC_RGLR, /* 04 */
+ BC_RGLR, /* 05 */
+ BC_RGLR, /* 06 */
+ BC_RGLR, /* 07 */
+ BC_RGLR, /* 08 */
+ BC_WSPC, /* 09 - HT */
+ BC_WSPC | BC_EOLM, /* 0A - LF */
+ BC_RGLR, /* 0B */
+ BC_WSPC, /* 0C - FF */
+ BC_WSPC | BC_EOLM, /* 0D - CR */
+ BC_RGLR, /* 0E */
+ BC_RGLR, /* 0F */
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR, /* 10 - 13 */
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR, /* 14 - 17 */
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR, /* 18 - 1B */
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR, /* 1C - 1F */
+ BC_WSPC, /* 20 - SP */
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR, /* 20 - 23 */
+ BC_RGLR,
+ BC_DELM, /* '$' '%' */
+ BC_RGLR,
+ BC_RGLR, /* 26 - 27 */
+ BC_DELM,
+ BC_DELM, /* '(' ')' */
+ BC_RGLR,
+ BC_RGLR, /* 2A - 2B */
+ BC_RGLR,
+ BC_RGLR, /* 2C - 2D */
+ BC_RGLR,
+ BC_DELM, /* '.' '/' */
+ BC_DCML | BC_HEXL,
+ BC_DCML | BC_HEXL, /* '0' '1' */
+ BC_DCML | BC_HEXL,
+ BC_DCML | BC_HEXL, /* '2' '3' */
+ BC_DCML | BC_HEXL,
+ BC_DCML | BC_HEXL, /* '4' '5' */
+ BC_DCML | BC_HEXL,
+ BC_DCML | BC_HEXL, /* '6' '7' */
+ BC_DCML | BC_HEXL,
+ BC_DCML | BC_HEXL, /* '8' '9' */
+ BC_RGLR,
+ BC_RGLR, /* ':' ';' */
+ BC_DELM,
+ BC_RGLR, /* '<' '=' */
+ BC_DELM,
+ BC_RGLR, /* '>' '?' */
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR, /* 40 - 43 */
+ BC_RGLR,
+ BC_HEXL,
+ BC_HEXL,
+ BC_HEXL, /* 44 - 47 */
+ BC_HEXL,
+ BC_HEXL,
+ BC_HEXL,
+ BC_RGLR, /* 48 - 4B */
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR, /* 4C - 4F */
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR, /* 50 - 53 */
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR, /* 54 - 57 */
+ BC_RGLR,
+ BC_RGLR, /* 58 - 59 */
+ BC_RGLR,
+ BC_DELM, /* 'Z' '[' */
+ BC_RGLR,
+ BC_DELM, /* '\' ']' */
+ BC_RGLR,
+ BC_RGLR, /* 5E - 5F */
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_HEXL,
+ BC_HEXL,
+ BC_HEXL, /* 60 - 67 */
+ BC_HEXL,
+ BC_HEXL,
+ BC_HEXL,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR, /* 68 - 6F */
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR, /* 70 - 77 */
+ BC_RGLR,
+ BC_RGLR, /* 78 - 79 */
+ BC_RGLR,
+ BC_DELM, /* 'z' '{' */
+ BC_RGLR,
+ BC_DELM, /* '|' '}' */
+ BC_RGLR,
+ BC_RGLR, /* 7E - 7F */
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR,
+ BC_RGLR, /* 80 - 83 */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* 84 - 87 */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* 88 - 8F */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* 90 - 97 */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* 98 - 9F */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* A0 - A7 */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* A8 - AF */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* B0 - B7 */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* B8 - BF */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* C0 - C7 */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* C8 - CF */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* D0 - D7 */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* D8 - DF */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* E0 - E7 */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* E8 - EF */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* F0 - F7 */
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR,
+ BC_RGLR, BC_RGLR, BC_RGLR, BC_RGLR, /* F8 - FF */
+};
+
+const uint8_t *blcass = &byte_classification[0];
diff --git a/src/byte_class.h b/src/byte_class.h
new file mode 100644
index 0000000..011acda
--- /dev/null
+++ b/src/byte_class.h
@@ -0,0 +1,8 @@
+#define BC_RGLR 0 /* regular character */
+#define BC_WSPC 1 /* character is whitespace */
+#define BC_EOLM (1<<1) /* character signifies end of line */
+#define BC_DCML (1<<2) /* character is a decimal */
+#define BC_HEXL (1<<3) /* character is a hexadecimal */
+#define BC_DELM (1<<4) /* character is a delimiter */
+
+const uint8_t *bclass;
diff --git a/src/xref.c b/src/xref.c
index 76ed194..afb223f 100644
--- a/src/xref.c
+++ b/src/xref.c
@@ -5,95 +5,9 @@
#include <stdbool.h>
#include <string.h>
-#define SLEN(x) (sizeof((x)) - 1)
-
-#define BC_NONE 0
-#define BC_WSPC 1 /* character is whitespace */
-#define BC_EOLM (1<<1) /* character signifies end of line */
-#define BC_DCML (1<<2) /* character is a decimal */
-#define BC_HEXL (1<<3) /* character is a hexadecimal */
-#define BC_DELM (1<<4) /* character is a delimiter */
+#include "byte_class.h"
-/**
- * pdf byte classification
- */
-uint8_t bclass[] = {
- BC_WSPC, BC_NONE, BC_NONE, BC_NONE, /* 00 - 03 */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 04 - 07 */
- BC_NONE, BC_WSPC, BC_WSPC | BC_EOLM, BC_NONE, /* 08 - 0B */
- BC_WSPC, BC_WSPC | BC_EOLM, BC_NONE, BC_NONE, /* 0C - 0F */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 10 - 13 */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 14 - 17 */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 18 - 1B */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 1C - 1F */
- BC_WSPC, BC_NONE, BC_NONE, BC_NONE, /* 20 - 23 */
- BC_NONE, BC_DELM, /* '$' '%' */
- BC_NONE, BC_NONE, /* 26 - 27 */
- BC_DELM, BC_DELM, /* '(' ')' */
- BC_NONE, BC_NONE, /* 2A - 2B */
- BC_NONE, BC_NONE, /* 2C - 2D */
- BC_NONE, BC_DELM, /* '.' '/' */
- BC_DCML | BC_HEXL, BC_DCML | BC_HEXL, /* '0' '1' */
- BC_DCML | BC_HEXL, BC_DCML | BC_HEXL, /* '2' '3' */
- BC_DCML | BC_HEXL, BC_DCML | BC_HEXL, /* '4' '5' */
- BC_DCML | BC_HEXL, BC_DCML | BC_HEXL, /* '6' '7' */
- BC_DCML | BC_HEXL, BC_DCML | BC_HEXL, /* '8' '9' */
- BC_NONE, BC_NONE, /* ':' ';' */
- BC_DELM, BC_NONE, /* '<' '=' */
- BC_DELM, BC_NONE, /* '>' '?' */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 40 - 43 */
- BC_NONE, BC_HEXL, BC_HEXL, BC_HEXL, /* 44 - 47 */
- BC_HEXL, BC_HEXL, BC_HEXL, BC_NONE, /* 48 - 4B */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 4C - 4F */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 50 - 53 */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 54 - 57 */
- BC_NONE, BC_NONE, /* 58 - 59 */
- BC_NONE, BC_DELM, /* 'Z' '[' */
- BC_NONE, BC_DELM, /* '\' ']' */
- BC_NONE, BC_NONE, /* 5E - 5F */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_HEXL, BC_HEXL, BC_HEXL, /* 60 - 67 */
- BC_HEXL, BC_HEXL, BC_HEXL, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 68 - 6F */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 70 - 77 */
- BC_NONE, BC_NONE, /* 78 - 79 */
- BC_NONE, BC_DELM, /* 'z' '{' */
- BC_NONE, BC_DELM, /* '|' '}' */
- BC_NONE, BC_NONE, /* 7E - 7F */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 80 - 83 */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 84 - 87 */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 88 - 8F */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 90 - 97 */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* 98 - 9F */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* A0 - A7 */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* A8 - AF */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* B0 - B7 */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* B8 - BF */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* C0 - C7 */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* C8 - CF */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* D0 - D7 */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* D8 - DF */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* E0 - E7 */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* E8 - EF */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* F0 - F7 */
- BC_NONE, BC_NONE, BC_NONE, BC_NONE,
- BC_NONE, BC_NONE, BC_NONE, BC_NONE, /* F8 - FF */
-};
+#define SLEN(x) (sizeof((x)) - 1)
enum cos_type {
COS_TYPE_NULL,