#ifndef _SCANNER_H
#define _SCANNER_H
#include "CharacterClasses.h"
#include "PPDFile.h"
class Scanner {
private:
PPDFile* fCurrentFile;
BString fLastError;
BString fWarnings;
BString* Scan(bool (cond)(int ch));
bool ScanHexadecimalSubstring(BString* literal);
BString* ScanLiteral(bool quotedValue, int separator);
public:
Scanner(const char* file);
virtual ~Scanner();
status_t InitCheck();
int GetCurrentChar();
void NextChar();
Position GetPosition();
const char* GetFileName();
BString* ScanIdent() { return Scan(IsIdentChar); }
BString* ScanOption() { return Scan(IsOptionChar); }
BString* ScanSymbolValue() { return Scan(IsPrintableWithoutWhitespaces); }
BString* ScanInvocationValue() { return Scan(IsPrintableWithWhitespaces); }
BString* ScanStringValue() { return Scan(IsStringChar); }
BString* ScanTranslationValue(int separator = kEof)
{ return ScanLiteral(false, separator); }
BString* ScanQuotedValue() { return ScanLiteral(true, kEof); }
bool Include(const char* file);
void Warning(const char* message);
const char* GetWarningMessage();
bool HasWarning();
void Error(const char* message);
const char* GetErrorMessage();
bool HasError();
};
#endif