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:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user