/* * Copyright 2018 Vincent Sanders * * This file is part of libnspdf. * * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license.php */ #include #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 ()[]{}<>/% * comment - the % character used to introduce a comment * 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, /* 10 */ BC_RGLR, /* 11 */ BC_RGLR, /* 12 */ BC_RGLR, /* 13 */ BC_RGLR, /* 14 */ BC_RGLR, /* 15 */ BC_RGLR, /* 16 */ BC_RGLR, /* 17 */ BC_RGLR, /* 18 */ BC_RGLR, /* 19 */ BC_RGLR, /* 1A */ BC_RGLR, /* 1B */ BC_RGLR, /* 1C */ BC_RGLR, /* 1D */ BC_RGLR, /* 1E */ BC_RGLR, /* 1F */ BC_WSPC, /* 20 - SP */ BC_RGLR, /* 21 */ BC_RGLR, /* 22 */ BC_RGLR, /* 23 */ BC_RGLR, /* 24 - '$' */ BC_DELM | BC_CMNT, /* 25 - '%' */ BC_RGLR, /* 26 */ BC_RGLR, /* 27 */ BC_DELM, /* 28 - '(' */ BC_DELM, /* 29 - ')' */ BC_RGLR, /* 2A */ BC_RGLR, /* 2B */ BC_RGLR, /* 2C */ BC_RGLR, /* 2D */ BC_RGLR, /* 2E - '.' */ BC_DELM, /* 2F - '/' */ BC_OCTL | BC_DCML | BC_HEXL, /* 30 - '0' */ BC_OCTL | BC_DCML | BC_HEXL, /* 31 - '1' */ BC_OCTL | BC_DCML | BC_HEXL, /* 32 - '2' */ BC_OCTL | BC_DCML | BC_HEXL, /* 33 - '3' */ BC_OCTL | BC_DCML | BC_HEXL, /* 34 - '4' */ BC_OCTL | BC_DCML | BC_HEXL, /* 35 - '5' */ BC_OCTL | BC_DCML | BC_HEXL, /* 36 - '6' */ BC_OCTL | BC_DCML | BC_HEXL, /* 37 - '7' */ BC_DCML | BC_HEXL, /* 38 - '8' */ BC_DCML | BC_HEXL, /* 39 - '9' */ BC_RGLR, /* 3A - ':' */ BC_RGLR, /* 3B - ';' */ BC_DELM, /* 3C - '<' */ BC_RGLR, /* 3D - '=' */ BC_DELM, /* 3E - '>' */ BC_RGLR, /* 3F - '?' */ BC_RGLR, /* 40 - */ BC_HEXL, /* 41 - A */ BC_HEXL, /* 42 - B */ BC_HEXL, /* 43 - C */ BC_HEXL, /* 44 - D */ BC_HEXL, /* 45 - E */ BC_HEXL, /* 46 - F */ BC_RGLR, /* 47 - G */ BC_RGLR, /* 48 - H */ BC_RGLR, /* 49 - I */ BC_RGLR, /* 4A - J */ BC_RGLR, /* 4B - K */ BC_RGLR, /* 4C - L */ BC_RGLR, /* 4D - M */ BC_RGLR, /* 4E - N */ BC_RGLR, /* 4F - O */ BC_RGLR, /* 50 - P */ BC_RGLR, /* 51 - Q */ BC_RGLR, /* 52 - R */ BC_RGLR, /* 53 - S */ BC_RGLR, /* 54 - T */ BC_RGLR, /* 55 - U */ BC_RGLR, /* 56 - V */ BC_RGLR, /* 57 - W */ BC_RGLR, /* 58 - X */ BC_RGLR, /* 59 - Y */ BC_RGLR, /* 5A - 'Z' */ BC_DELM, /* 5B - '[' */ BC_RGLR, /* 5C - '\' */ BC_DELM, /* 5D - ']' */ BC_RGLR, /* 5E */ BC_RGLR, /* 5F */ BC_RGLR, /* 60 */ BC_HEXL, /* 61 - a */ BC_HEXL, /* 62 - b */ BC_HEXL, /* 63 - c */ BC_HEXL, /* 64 - d */ BC_HEXL, /* 65 - e */ BC_HEXL, /* 66 - f */ BC_RGLR, /* 67 - g */ BC_RGLR, /* 68 - h */ BC_RGLR, /* 69 - i */ BC_RGLR, /* 6A - j */ BC_RGLR, /* 6B - k */ BC_RGLR, /* 6C - l */ BC_RGLR, /* 6D - m */ BC_RGLR, /* 6E - n */ BC_RGLR, /* 6F - o */ BC_RGLR, /* 70 - p */ BC_RGLR, /* 71 - q */ BC_RGLR, /* 72 - r */ BC_RGLR, /* 73 - s */ BC_RGLR, /* 74 - t */ BC_RGLR, /* 75 - u */ BC_RGLR, /* 76 - v */ BC_RGLR, /* 77 - w */ BC_RGLR, /* 78 - x */ BC_RGLR, /* 79 - y */ BC_RGLR, /* 7A - 'z' */ BC_DELM, /* 7B - '{' */ BC_RGLR, /* 7C - '|' */ BC_DELM, /* 7D - '}' */ 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 *bclass = &byte_classification[0];