I ran into a problem where a quoted text string in a OGR Style String
gets lost while interacting with it via an OGRStyleTool. Using the same
style string afterwords causes OGRStyleTool::Parse() to fail because the
quote string contained parentheses which would have typically been
ignored because of the CSLT_HONOURSTRINGS and CSLT_PRESERVEQUOTES flags
that are passed to CSLTokenizeString2.
Here is a code snippet that exposes the issue that I am seeing:
void testGetStyleString()
{
const char* const originalStyleString = "LABEL(t:\"MyText(1)\")";
std::cout << "originalStyleString:" << originalStyleString <<
std::endl;
::OGRStyleLabel styleLabel;
styleLabel.SetStyleString(originalStyleString);
const char* const styleStringAfterBeingSet =
styleLabel.GetStyleString();
std::cout << "styleStringAfterBeingSet:" <<
styleStringAfterBeingSet << std::endl;
GBool defaultValue = false;
const char* const textString = styleLabel.TextString(defaultValue);
std::cout << "textString:" << textString << std::endl;
const char* const styleStringAfterParsingStage =
styleLabel.GetStyleString();
std::cout << "styleStringAfterParsingStage:" <<
styleStringAfterParsingStage << std::endl;
return;
}
Which produces the following output:
originalStyleString:LABEL(t:"MyText(1)")
styleStringAfterBeingSet:LABEL(t:"MyText(1)")
textString:MyText(1)
styleStringAfterParsingStage:LABEL(t:MyText(1))
So, the main problem I have encountered, as far as I can tell is that
GetStyleString() does not honor the quotes after it has been set to have
been parse and set as modified (StyleModified). I my case, I didn't even
modify the tool, OGRStyleTool::Parse() seems to be the one who set the
style tool as being modified. The modified flag is why GetStyleString()
regenerates the string from the parameters. So, I have two questions:
1. Should Parse() set the style tool as modified as it currently does?
2. Should the parsing of the parameters retain the quotes? It currently
doesn't specify CSLT_PRESERVEQUOTES when splitting t:"MyText" at the colon.
Doing #2 would obviously mean the TextString() would return the quoted
string which it doesn't do currently.
Any thoughts?
André
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev