* Copyright 2008, Haiku.
* Distributed under the terms of the MIT license.
*
* Authors:
* Michael Pfeiffer <laplace@users.sourceforge.net>
*/
#include "CharacterClasses.h"
#include "Scanner.h"
#include <stdio.h>
int FileBuffer::Read()
{
if (fIndex >= fSize) {
fSize = fFile->Read(fBuffer, kReadBufferSize);
fIndex = 0;
}
if (fSize <= 0) {
return -1;
}
return (int)fBuffer[fIndex ++];
}
PPDFile::PPDFile(const char* file, PPDFile* previousFile)
: fFileName(file)
, fFile(file, B_READ_ONLY)
, fPreviousFile(previousFile)
, fCurrentPosition(0, 1)
, fCurrentChar(-1)
, fBuffer(&fFile)
{
}
PPDFile::~PPDFile()
{
}
status_t PPDFile::InitCheck()
{
return fFile.InitCheck();
}
int PPDFile::GetCurrentChar()
{
return fCurrentChar;
}
void PPDFile::NextChar() {
fCurrentChar = fBuffer.Read();
if (fCurrentChar != -1) {
#if TRACE_SCANNER
fprintf(stderr, "%c ", fCurrentChar);
#endif
if (fCurrentChar == kCr) {
fCurrentPosition.x = 0;
fCurrentPosition.y ++;
} else {
fCurrentPosition.x ++;
}
}
}
Position PPDFile::GetPosition()
{
return fCurrentPosition;
}
PPDFile* PPDFile::GetPreviousFile()
{
return fPreviousFile;
}
const char* PPDFile::GetFileName()
{
return fFileName.String();
}