flex-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Harbs <harbs.li...@gmail.com>
Subject Re: [FalconJX]Compilation error in XML
Date Tue, 31 May 2016 20:27:43 GMT
Yay!

I think I just managed to complete my first fix for FalconJX. :-)

I committed a fix and added a test case for it.

Harbs

On May 31, 2016, at 9:53 PM, Alex Harui <aharui@adobe.com> wrote:

> AIUI, a String literal can be passed to JS as-is.  An XML literal is trickier because
we want to wrap the literal in quotes so it can be passed as an parameter to the XML constructor.
> 
> The current code attempts to try to figure out what quoting was used in the XML literal
and use the other quotes.  Naturally, this isn't sufficient when both quotes are used.  Probably
even for:
>> <root firstName="Alex" lastName='Harui' />;
> 
> It would suck to have to parse the XML first and canonicalize it, but maybe that's the
only "true" answer, I don't know.  Maybe you can just escape every double and single quote.
 It might be worth trying: http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#wrap(java.lang.String,%20char)
> 
> -Alex
> 
> 
> From: Harbs <harbs.lists@gmail.com>
> Date: Tuesday, May 31, 2016 at 11:26 AM
> To: Alex Harui <aharui@adobe.com>
> Subject: Re: [FalconJX]Compilation error in XML
> 
> No. That’s not going to work because the first character is not the quote. It’s “n”
from new XML…
> 
> I’ll give it a go and see if I can fix this…
> 
> On May 31, 2016, at 9:16 PM, Harbs <harbs.lists@gmail.com> wrote:
> 
>> I just simplified the case to:
>> private var quotedXML : XML =<root title="That's Entertainment"/>;
>> 
>> This is enough to cause the error:
>> this.quotedXML = new XML( "<root title="That's Entertainment"/>");
>> 
>> I added it to the manualtest for XML.
>> 
>> I looked at the code again, and it looks like it should be escaping the quotes on
line 111 and on:
>> 
>>              if (c == '"')
>>             {
>>             s = s.substring(1, s.length() - 1);
>>             s = s.replace("\"", "\\\"");
>>             s = "\"" + s + "\"";
>>             }
>>             else if (c == '\'')
>>             {
>>             s = s.substring(1, s.length() - 1);
>>             s = s.replace("'", "\\'");            
>>             s = "'" + s + "'";
>>             }
>> 
>> I think the problem is that this is wrapped in a check for:
>> if (node.getLiteralType() == LiteralType.STRING)
>> 
>> While the XML type is LiteralType.XML (I think)
>> 
>> I’m not sure why that check is there. Does it make sense to check for:
>> 
>> if (node.getLiteralType() == LiteralType.STRING || node.getLiteralType() == LiteralType.XML)
>> 
>> instead?
>> 
>> On May 31, 2016, at 8:50 PM, Alex Harui <aharui@adobe.com> wrote:
>> 
>>> I haven't looked at the test case in detail.  Is there a tricky use of both single
and double quotes as string delimiters?  Otherwise, I think the simple-ish answer is to replace
the s.contains test for a better test that tests whether a single-quote is being used in the
string without being escaped.
>>> 
>>> Or am I missing what the issue is?
>>> -Alex
>>> 
>>> From: Harbs <harbs.lists@gmail.com>
>>> Date: Tuesday, May 31, 2016 at 10:07 AM
>>> To: Alex Harui <aharui@adobe.com>
>>> Subject: Re: [FalconJX]Compilation error in XML
>>> 
>>> That’s the current code. I’m not really sure how to fix it…
>>> 
>>> On May 31, 2016, at 7:47 PM, Alex Harui <aharui@adobe.com> wrote:
>>> 
>>>> Feel free to try it.  That code scares me.
>>>> 
>>>> From: Harbs <harbs.lists@gmail.com>
>>>> Date: Tuesday, May 31, 2016 at 8:00 AM
>>>> To: Alex Harui <aharui@adobe.com>
>>>> Subject: Re: [FalconJX]Compilation error in XML
>>>> 
>>>> I think this is the problem:
>>>>              s = ((LiteralNode)child).getValue(true);
>>>>                    if (s.contains("'"))
>>>>                    sb.append("\"" + s + "\"");
>>>>                    else
>>>>                    sb.append("'" + s + "'");
>>>> 
>>>> The problem is the line which contains both a single quote and a double quote...
>>>> 
>>>> On May 31, 2016, at 5:58 PM, Harbs <harbs.lists@gmail.com> wrote:
>>>> 
>>>>> Theoretically it should be doing that already:
>>>>>             s = s.replaceAll("\\\\\"", "__QUOTE_PLACEHOLDER__");
>>>>> 
>>>>> I’m not sure where __QUOTE_PLACEHOLDER__ is set…
>>>>> 
>>>>> On May 31, 2016, at 4:42 PM, Alex Harui <aharui@adobe.com> wrote:
>>>>> 
>>>>>> That's probably the code in LiteralEmitter. You're welcome to try
to fix it.
>>>>>> 
>>>>>> Sent from my LG G3, an AT&T 4G LTE smartphone
>>>>>> 
>>>>>> ------ Original message------
>>>>>> From: Harbs
>>>>>> Date: Tue, May 31, 2016 4:15 AM
>>>>>> To: dev;
>>>>>> Subject:[FalconJX]Compilation error in XML
>>>>>> 
>>>>>> The following XML does not compile correctly:
>>>>>> private var xml : XML =<root title="That's Entertainment">
>>>>>>         <node title="My Music">
>>>>>>                 <node title="Language and Perspective" artist="Bad
Suns">
>>>>>>                         <node title="Matthew James" length="3:24"/>
>>>>>>                         <node title="We Move Like the Ocean" length="3:56"/>
>>>>>>                         <node title="Cardiac Arrest" length="3:15"/>
>>>>>>                 </node>
>>>>>>                 <node title="Strange Desire" artist="Bleachers">
>>>>>>                         <node title="Wild Heart" length="4:15"/>
>>>>>>                         <node title="Rollercoaster" length="3:39"/>
>>>>>>                         <node title="Shadow" length="3:46"/>
>>>>>>                         <node title="I Wanna Get Better" length="4:23"/>
>>>>>>                 </node>
>>>>>>         </node>
>>>>>>         <node title="My Books">
>>>>>>                 <node title="Wizard of Oz">
>>>>>>                         <node title="So this is Kansas?" length="82"/>
>>>>>>                         <node title="A Might Dusty Here" length="63"/>
>>>>>>                         <node title="Is that a Tornado?" length="103"/>
>>>>>>                 </node>
>>>>>>                 <node title="Favorite Book #2">
>>>>>>                         <node title="Chapter 1" length="15"/>
>>>>>>                         <node title="Chapter 2" length="86"/>
>>>>>>                         <node title="Chapter 3" length="104"/>
>>>>>>                         <node title="Chapter 4" length="99"/>
>>>>>>                 </node>
>>>>>>         </node>
>>>>>> </root>;
>>>>>> 
>>>>>> It gets compiled to:
>>>>>> 
>>>>>>   this.xml = new XML( "<root title="That's Entertainment">\
>>>>>> \t<node title="My Music">\
>>>>>> \t\t<node title="Language and Perspective" artist="Bad Suns">\
>>>>>> \t\t\t<node title="Matthew James" length="3:24"/>\
>>>>>> \t\t\t<node title="We Move Like the Ocean" length="3:56"/>\
>>>>>> \t\t\t<node title="Cardiac Arrest" length="3:15"/>\
>>>>>> \t\t</node>\
>>>>>> \t\t<node title="Strange Desire" artist="Bleachers">\
>>>>>> \t\t\t<node title="Wild Heart" length="4:15"/>\
>>>>>> \t\t\t<node title="Rollercoaster" length="3:39"/>\
>>>>>> \t\t\t<node title="Shadow" length="3:46"/>\
>>>>>> \t\t\t<node title="I Wanna Get Better" length="4:23"/>\
>>>>>> \t\t</node>\
>>>>>> \t</node>\
>>>>>> \t<node title="My Books">\
>>>>>> \t\t<node title="Wizard of Oz">\
>>>>>> \t\t\t<node title="So this is Kansas?" length="82"/>\
>>>>>> \t\t\t<node title="A Might Dusty Here" length="63"/>\
>>>>>> \t\t\t<node title="Is that a Tornado?" length="103"/>\
>>>>>> \t\t</node>\
>>>>>> \t\t<node title="Favorite Book #2">\
>>>>>> \t\t\t<node title="Chapter 1" length="15"/>\
>>>>>> \t\t\t<node title="Chapter 2" length="86"/>\
>>>>>> \t\t\t<node title="Chapter 3" length="104"/>\
>>>>>> \t\t\t<node title="Chapter 4" length="99"/>\
>>>>>> \t\t</node>\
>>>>>> \t</node>\
>>>>>> </root>");
>>>>>> 
>>>>>> Note that the quotes are not properly escaped which causes the string
to be terminated prematurely.
>>>>> 
>>>> 
>>> 
>> 
> 


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message