Updated the handling of string in the .osg reading and writing so that it

handles the use of " quotes inside the string.
This commit is contained in:
Robert Osfield
2002-10-28 12:55:19 +00:00
parent 91c73c6da1
commit 32c6a7809a
7 changed files with 76 additions and 15 deletions

View File

@@ -162,6 +162,7 @@ bool FieldReader::_readField(Field* fieldPtr)
}
_fin->ignore(1);
char c;
bool escape = false; // use the escape character sequence \" to allow " to included in strings.
while (true)
{
ch = _fin->peek();
@@ -170,15 +171,34 @@ bool FieldReader::_readField(Field* fieldPtr)
_eof = true;
return fieldPtr && fieldPtr->getNoCharacters()!=0;
}
c = ch;
if (ch=='"')
{
c = ch;
if (ch=='\\' && !escape)
{
escape = true;
_fin->ignore(1);
//return fieldPtr && fieldPtr->getNoCharacters()!=0;
return fieldPtr!=NULL;
}
else if (ch=='"')
{
if (escape)
{
escape = false;
_fin->get(c);
if (fieldPtr) fieldPtr->addChar(c);
}
else
{
_fin->ignore(1);
//return fieldPtr && fieldPtr->getNoCharacters()!=0;
return fieldPtr!=NULL;
}
}
else
{
if (escape)
{
escape = false;
if (fieldPtr) fieldPtr->addChar('\\');
}
_fin->get(c);
if (fieldPtr) fieldPtr->addChar(c);
}
@@ -193,6 +213,7 @@ bool FieldReader::_readField(Field* fieldPtr)
}
_fin->ignore(1);
char c;
bool escape = false; // use the escape character sequence \' to allow ' to included in strings.
while (true)
{
ch = _fin->peek();
@@ -202,14 +223,33 @@ bool FieldReader::_readField(Field* fieldPtr)
return fieldPtr && fieldPtr->getNoCharacters()!=0;
}
c = ch;
if (ch=='\'')
{
if (ch=='\\' && !escape)
{
escape = true;
_fin->ignore(1);
//return fieldPtr && fieldPtr->getNoCharacters()!=0;
return fieldPtr!=NULL;
}
else if (ch=='\'')
{
if (escape)
{
escape = false;
_fin->get(c);
if (fieldPtr) fieldPtr->addChar(c);
}
else
{
_fin->ignore(1);
//return fieldPtr && fieldPtr->getNoCharacters()!=0;
return fieldPtr!=NULL;
}
}
else
{
if (escape)
{
escape = false;
if (fieldPtr) fieldPtr->addChar('\\');
}
_fin->get(c);
if (fieldPtr) fieldPtr->addChar(c);
}