You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.8 KiB
77 lines
1.8 KiB
//======================================================================== |
|
// |
|
// Lexer.h |
|
// |
|
// Copyright 1996-2003 Glyph & Cog, LLC |
|
// |
|
//======================================================================== |
|
|
|
#ifndef LEXER_H |
|
#define LEXER_H |
|
|
|
#include <aconf.h> |
|
|
|
#ifdef USE_GCC_PRAGMAS |
|
#pragma interface |
|
#endif |
|
|
|
#include "Object.h" |
|
#include "Stream.h" |
|
|
|
class XRef; |
|
|
|
#define tokBufSize 128 // size of token buffer |
|
|
|
//------------------------------------------------------------------------ |
|
// Lexer |
|
//------------------------------------------------------------------------ |
|
|
|
class Lexer { |
|
public: |
|
|
|
// Construct a lexer for a single stream. Deletes the stream when |
|
// lexer is deleted. |
|
Lexer(XRef *xref, Stream *str); |
|
|
|
// Construct a lexer for a stream or array of streams (assumes obj |
|
// is either a stream or array of streams). |
|
Lexer(XRef *xref, Object *obj); |
|
|
|
// Destructor. |
|
~Lexer(); |
|
|
|
// Get the next object from the input stream. |
|
Object *getObj(Object *obj); |
|
|
|
// Skip to the beginning of the next line in the input stream. |
|
void skipToNextLine(); |
|
|
|
// Skip over one character. |
|
void skipChar() { getChar(); } |
|
|
|
// Get stream. |
|
Stream *getStream() |
|
{ return curStr.isNone() ? (Stream *)NULL : curStr.getStream(); } |
|
|
|
// Get current position in file. This is only used for error |
|
// messages, so it returns an int instead of a Guint. |
|
int getPos() |
|
{ return curStr.isNone() ? -1 : (int)curStr.streamGetPos(); } |
|
|
|
// Set position in file. |
|
void setPos(Guint pos, int dir = 0) |
|
{ if (!curStr.isNone()) curStr.streamSetPos(pos, dir); } |
|
|
|
private: |
|
|
|
int getChar(); |
|
int lookChar(); |
|
|
|
Array *streams; // array of input streams |
|
int strPtr; // index of current stream |
|
Object curStr; // current stream |
|
GBool freeArray; // should lexer free the streams array? |
|
char tokBuf[tokBufSize]; // temporary token buffer |
|
}; |
|
|
|
#endif
|
|
|