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 <aha...@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.li...@gmail.com> > Date: Tuesday, May 31, 2016 at 11:26 AM > To: Alex Harui <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> 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> 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> >>> Date: Tuesday, May 31, 2016 at 10:07 AM >>> To: Alex Harui <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> wrote: >>> >>>> Feel free to try it. That code scares me. >>>> >>>> From: Harbs <harbs.li...@gmail.com> >>>> Date: Tuesday, May 31, 2016 at 8:00 AM >>>> To: Alex Harui <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> 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> 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. >>>>> >>>> >>> >> >