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.li...@gmail.com<mailto:harbs.li...@gmail.com>>
Date: Tuesday, May 31, 2016 at 11:26 AM
To: Alex Harui <aha...@adobe.com<mailto:aha...@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.li...@gmail.com<mailto:harbs.li...@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 
<aha...@adobe.com<mailto:aha...@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.li...@gmail.com<mailto:harbs.li...@gmail.com>>
Date: Tuesday, May 31, 2016 at 10:07 AM
To: Alex Harui <aha...@adobe.com<mailto:aha...@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 
<aha...@adobe.com<mailto:aha...@adobe.com>> wrote:

Feel free to try it.  That code scares me.

From: Harbs <harbs.li...@gmail.com<mailto:harbs.li...@gmail.com>>
Date: Tuesday, May 31, 2016 at 8:00 AM
To: Alex Harui <aha...@adobe.com<mailto:aha...@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.li...@gmail.com<mailto:harbs.li...@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 
<aha...@adobe.com<mailto:aha...@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.





Reply via email to