enderalse/source/fs.dll/common/ITextParser.cpp

84 lines
1.1 KiB
C++

#include "ITextParser.h"
#include "IDataStream.h"
ITextParser::ITextParser()
:m_stream(NULL)
{
//
}
ITextParser::ITextParser(IDataStream * stream)
:m_stream(stream)
{
//
}
ITextParser::~ITextParser()
{
//
}
void ITextParser::Attach(IDataStream * stream)
{
m_stream = stream;
}
void ITextParser::SkipWhitespace(void)
{
while(!m_stream->HitEOF())
{
char data = m_stream->Peek8();
if(!isspace(data))
break;
m_stream->Skip(1);
}
}
void ITextParser::SkipLine(void)
{
while(!m_stream->HitEOF())
{
char data = m_stream->Peek8();
if((data != '\n') && (data != '\r'))
break;
m_stream->Skip(1);
}
}
void ITextParser::ReadLine(char * out, UInt32 length)
{
m_stream->ReadString(out, length, '\n', '\r');
}
void ITextParser::ReadToken(char * buf, UInt32 bufLength)
{
char * traverse = buf;
ASSERT_STR(bufLength > 0, "ITextParser::ReadToken: zero-sized buffer");
if(bufLength == 1)
{
buf[0] = 0;
}
else
{
bufLength--;
for(UInt32 i = 0; (i < bufLength) && !m_stream->HitEOF(); i++)
{
UInt8 data = m_stream->Read8();
if(isspace(data) || !data)
break;
*traverse++ = data;
}
*traverse++ = 0;
}
}