[mapserver-dev] classObj.setText, text must be quoted

Tamas Szekeres szekerest at gmail.com
Thu Feb 23 15:34:03 EST 2012


I assume loadExpressionString is called from many places, so it is
difficult to make sure about the purpose. Another option would be to use
the original string ("value" argument of loadExpressionString) and
not msyystring when getSymbol fails.

Tamas


2012/2/23 Lime, Steve D (DNR) <Steve.Lime at state.mn.us>

>  I agree on the awkward part.****
>
> ** **
>
> I’d add the quotes if not present in loadExpressionString() so
> setExpression and setFilter also worked the same way. Problem is
> determining when you want to quote. I suppose a little helper function
> could be added.****
>
> ** **
>
> Steve****
>
> ** **
>
> ** **
>
> *From:* Tamas Szekeres [mailto:szekerest at gmail.com]
> *Sent:* Thursday, February 23, 2012 1:49 PM
>
> *To:* Lime, Steve D (DNR)
> *Cc:* mapserver-dev at lists.osgeo.org
> *Subject:* Re: [mapserver-dev] classObj.setText, text must be quoted****
>
>  ** **
>
> Steve,****
>
> ** **
>
> I'm still uncertain about the most reasonable solution here. Forcing the
> requirement to quote strings in a mapfile looks fairly straightforward to
> use, but quoting strings in classObj.setText is a bit awkward. Wouldn't
> that be a solution to add quotes around a string in the interface file
> (class.i) if that hasn't yet been added by the user?****
>
> ** **
>
> Best regards,****
>
> ** **
>
> Tamas****
>
> ** **
>
> ** **
>
> 2012/2/22 Lime, Steve D (DNR) <Steve.Lime at state.mn.us>****
>
> msyytext/msyystring isn’t being truncated per se it’s just that a string
> with spaces is not valid in a mapfile. That is:****
>
>  ****
>
>   TEXT Sample Text****
>
>  ****
>
> would normally generate a parsing error. In this case only the string
> Sample Text is being parsed and without the quotes only the text ahead of
> the space is matched. I suppose it’s possible to relax the string matching
> expression in maplexer.l when in EXPRESSION_STRING context to allow spaces
> and other characters.****
>
>  ****
>
> Steve****
>
>  ****
>
> *From:* Tamas Szekeres [mailto:szekerest at gmail.com]
> *Sent:* Wednesday, February 22, 2012 9:14 AM
> *To:* Lime, Steve D (DNR)
> *Cc:* mapserver-dev at lists.osgeo.org
> *Subject:* Re: [mapserver-dev] classObj.setText, text must be quoted****
>
>  ****
>
> Checking the first character instead of the length would be a good
> solution for MapServer 6.0 and the earlier versions. But I'm not sure how
> this would solve the same problem in trunk. Actually when getSymbol is
> failing we can obtain only a truncated text from msyytext/msyystring so we
> cannot use this to assign the value to the corresponding property. We
> should probably find out the reason why  msyytext/msyystring is truncated
> in this case or use the "value" argument of loadExpressionString
> instead. Does this make sense?****
>
>  ****
>
> Best regards,****
>
>  ****
>
> Tamas****
>
>  ****
>
>  ****
>
> 2012/2/22 Lime, Steve D (DNR) <Steve.Lime at state.mn.us>****
>
> In 6.0 class->text is a true expressionObj, not a string as in previous
> versions so at least via SWIG setText() calls msLoadExpressionString(). I
> think there could be a bug in that function at line 2169 (in trunk). Older
> versions of that function treat the input string as a the expression if
> parsing doesn't detect a delimited type. So does this version but in a
> different way:
>
> // trunk
>     exp->type = MS_STRING;
>     exp->string = msStrdup(msyystring_buffer);
>
> // 5.6 branch
>     exp->type = MS_STRING;
>     if((strlen(value) - strlen(msyytext)) == 2)
>       exp->string = strdup(msyytext); /* value was quoted */
>     else
>       exp->string = strdup(value); /* use the whole value */
>
> I've got a feeling this has to do with escaping quotes where
> msyystring_buffer contains the escaped text. Perhaps we could do something
> like:
>
>     exp->type = MS_STRING;
>     if(... if first char in value is not a single or double quote ...)
>         exp->string = strdup(value);  /* use the whole value */
>     else
>         exp->string = msStrdup(msyystring_buffer);
>
> Alan, does this make sense or is there another way to know that escaping
> was processed?
>
> Steve****
>  ------------------------------
>
> *From:* mapserver-dev-bounces at lists.osgeo.org [
> mapserver-dev-bounces at lists.osgeo.org] on behalf of Tamas Szekeres [
> szekerest at gmail.com]
> *Sent:* Tuesday, February 21, 2012 4:09 PM
> *To:* mapserver-dev at lists.osgeo.org
> *Subject:* [mapserver-dev] classObj.setText, text must be quoted****
>
> Hi Devs, ****
>
>  ****
>
> By using the following mapscript example:****
>
>  ****
>
>      *// creating a new map from scratch*****
>
> *      mapObj map = new mapObj(null);*****
>
> *      // adding a layer*****
>
> *      layerObj layer = new layerObj(map);*****
>
> *      // define the class*****
>
> *      classObj classobj = new classObj(layer);*****
>
> * classobj.setText("Sample Text");*****
>
> *      Console.WriteLine("Sample Text -> " + classobj.getTextString());***
> **
>
> * classobj.setText("Sample T");*****
>
> *      Console.WriteLine("Sample T -> " + classobj.getTextString());*****
>
> * classobj.setText("\"Sample T\"");*****
>
> *      Console.WriteLine("\"Sample T\" -> " + classobj.getTextString());**
> ***
>
>  ****
>
> I got the following output (from trunk):****
>
>  ****
>
> Sample Text -> "Sample Text"****
>
> Sample T -> "Sample"****
>
> "Sample T" -> "Sample T"****
>
>  ****
>
>  ****
>
> 6.0 branch produces this:****
>
>  ****
>
> Sample Text -> "Sample"****
>
> Sample T -> "Sample"****
>
> "Sample T" -> "Sample T"****
>
>  ****
>
> Do we have a requirement that the texts must be quoted which is passed to
> *classobj.setText?*****
>
>  ****
>
> Best regards,****
>
>  ****
>
> Tamas****
>
>  ****
>
>  ****
>
> ** **
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/mapserver-dev/attachments/20120223/bd24f7b9/attachment.html


More information about the mapserver-dev mailing list