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

Reply via email to