**diff options**

author | Vincent Sanders <vince@kyllikki.org> | 2017-12-15 17:33:19 +0000 |
---|---|---|

committer | Vincent Sanders <vince@kyllikki.org> | 2017-12-15 17:33:19 +0000 |

commit | 5de69a618c7858f997e9944c06837d951fc129aa (patch) | |

tree | a91d3ee6972a7d3f31693f3f3091569f63b13da1 | |

parent | d1ee370eaa428fafb27cce60624bdf73ca35716d (diff) | |

download | libnspdf-5de69a618c7858f997e9944c06837d951fc129aa.tar.gz libnspdf-5de69a618c7858f997e9944c06837d951fc129aa.tar.bz2 |

split out byte class

-rw-r--r-- | src/Makefile | 2 | ||||

-rw-r--r-- | src/byte_class.c | 184 | ||||

-rw-r--r-- | src/byte_class.h | 8 | ||||

-rw-r--r-- | src/xref.c | 90 |

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; @@ -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, |