1
//========================================================================
5
// Copyright 2002 Glyph & Cog, LLC
7
//========================================================================
11
#ifdef USE_GCC_PRAGMAS
12
#pragma implementation
18
#include "pstokenizer.h"
20
//------------------------------------------------------------------------
22
// A '1' in this array means the character is white space. A '1' or
23
// '2' means the character ends a name or command.
24
static char specialChars[256] = {
25
1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, // 0x
26
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1x
27
1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, // 2x
28
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, // 3x
29
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4x
30
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 5x
31
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6x
32
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 7x
33
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8x
34
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9x
35
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ax
36
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // bx
37
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // cx
38
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // dx
39
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ex
40
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // fx
43
//------------------------------------------------------------------------
45
PSTokenizer::PSTokenizer(int (*getCharFuncA)(void *), void *dataA) {
46
getCharFunc = getCharFuncA;
51
PSTokenizer::~PSTokenizer() {
54
GBool PSTokenizer::getToken(char *buf, int size, int *length) {
55
GBool comment, backslash;
59
// skip whitespace and comments
62
if ((c = getChar()) == EOF) {
68
if (c == '\x0a' || c == '\x0d') {
71
} else if (c == '%') {
73
} else if (specialChars[c] != 1) {
83
while ((c = lookChar()) != EOF) {
90
} else if (!backslash && c == ')') {
96
} else if (c == '<') {
97
while ((c = lookChar()) != EOF) {
106
} else if (c != '[' && c != ']') {
107
while ((c = lookChar()) != EOF && !specialChars[c]) {
120
int PSTokenizer::lookChar() {
122
charBuf = (*getCharFunc)(data);
127
int PSTokenizer::getChar() {
131
charBuf = (*getCharFunc)(data);