This is an automated email from the ASF dual-hosted git repository.

aharui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git


The following commit(s) were added to refs/heads/develop by this push:
     new f440df1  handle innerHTML as special case, allowing text and HTML tags
f440df1 is described below

commit f440df1fbb676543bc94a2329ae5d7ba0c48c2e7
Author: Alex Harui <[email protected]>
AuthorDate: Tue Dec 26 00:12:33 2017 -0800

    handle innerHTML as special case, allowing text and HTML tags
---
 .../internal/parsing/SourceFragmentsReader.java    | 24 ++++++++++++++++++++++
 .../tree/mxml/MXMLClassReferenceNodeBase.java      | 16 +++++++++++----
 .../internal/tree/mxml/MXMLTreeBuilder.java        |  2 ++
 3 files changed, 38 insertions(+), 4 deletions(-)

diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/SourceFragmentsReader.java
 
b/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/SourceFragmentsReader.java
index b511e26..84e6a50 100644
--- 
a/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/SourceFragmentsReader.java
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/SourceFragmentsReader.java
@@ -21,6 +21,8 @@ package org.apache.royale.compiler.internal.parsing;
 
 import java.io.StringReader;
 
+import org.apache.royale.compiler.constants.IMXMLCoreConstants;
+
 public class SourceFragmentsReader extends StringReader
 {
     /**
@@ -37,6 +39,28 @@ public class SourceFragmentsReader extends StringReader
     }
 
     /**
+     * Concatenates the physical text of multiple source fragments.
+     */
+    public static String concatPhysicalText(ISourceFragment[] sourceFragments)
+    {
+        StringBuilder sb = new StringBuilder();
+        for (ISourceFragment sourceFragment : sourceFragments)
+        {
+               String physicalText = sourceFragment.getPhysicalText();
+               if (physicalText.startsWith(IMXMLCoreConstants.cDataStart))
+               {
+                       physicalText = 
physicalText.substring(IMXMLCoreConstants.cDataStart.length());
+                       if (physicalText.endsWith(IMXMLCoreConstants.cDataEnd))
+                       {
+                               physicalText = physicalText.substring(0, 
physicalText.length() - IMXMLCoreConstants.cDataEnd.length());
+                       }
+               }
+            sb.append(physicalText);
+        }
+        return sb.toString();
+    }
+
+    /**
      * Constructor.
      */
     SourceFragmentsReader(ISourceFragment[] sourceFragments)
diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLClassReferenceNodeBase.java
 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLClassReferenceNodeBase.java
index 2d49c32..90e5836 100644
--- 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLClassReferenceNodeBase.java
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLClassReferenceNodeBase.java
@@ -38,6 +38,7 @@ import 
org.apache.royale.compiler.internal.definitions.ClassDefinition;
 import org.apache.royale.compiler.internal.mxml.MXMLDialect;
 import org.apache.royale.compiler.internal.mxml.MXMLTagData;
 import org.apache.royale.compiler.internal.mxml.MXMLTextData;
+import org.apache.royale.compiler.internal.parsing.SourceFragment;
 import org.apache.royale.compiler.internal.parsing.mxml.MXMLToken;
 import org.apache.royale.compiler.internal.projects.RoyaleProject;
 import org.apache.royale.compiler.internal.scopes.ASProjectScope;
@@ -530,12 +531,12 @@ abstract class MXMLClassReferenceNodeBase extends 
MXMLNodeBase implements IMXMLC
                         }
                        }
                 }
-                else if (altDefaultPropertyDefinition != null && 
!processedDefaultProperty && 
altDefaultPropertyDefinition.getBaseName().equals("textContent"))
+                else if (altDefaultPropertyDefinition != null && 
!processedDefaultProperty && 
altDefaultPropertyDefinition.getBaseName().equals("innerHTML"))
                 {
                        String uri = childTag.getURI();
                        if (uri.equals("library://ns.apache.org/royale/html"))
                        {
-                        IVariableDefinition textDef = 
(IVariableDefinition)project.resolveSpecifier(classReference, "textContent");
+                        IVariableDefinition textDef = 
(IVariableDefinition)project.resolveSpecifier(classReference, "innerHTML");
                         if (textDef != null)
                         {
                                List<IMXMLNode> nodes = info.getChildNodeList();
@@ -546,8 +547,9 @@ abstract class MXMLClassReferenceNodeBase extends 
MXMLNodeBase implements IMXMLC
                                        {
                                                MXMLPropertySpecifierNode 
propNode = (MXMLPropertySpecifierNode)lastNode;
                                                String name = 
propNode.getName();
-                                               if (name.equals("textContent"))
+                                               if (name.equals("innerHTML"))
                                                {
+                                                       /*
                                                        MXMLStringNode 
stringNode = (MXMLStringNode)propNode.getChild(0);
                                                        MXMLLiteralNode 
valueNode = (MXMLLiteralNode)stringNode.getChild(0);
                                                        String tagAsString = 
((MXMLTagData)childTag).stringify();
@@ -558,12 +560,18 @@ abstract class MXMLClassReferenceNodeBase extends 
MXMLNodeBase implements IMXMLC
                                                        newChildren[0] = 
newValueNode;
                                                        
stringNode.setChildren(newChildren);
                                                        
stringNode.setExpressionNode(newValueNode);
+                                                       */
+                                                       SourceFragment[] 
sourceFragments = new SourceFragment[1];
+                                                       String tagAsString = 
((MXMLTagData)childTag).stringify();
+                                                       SourceFragment 
sourceFragment = new SourceFragment(tagAsString, tagAsString, 
childTag.getLocationOfChildUnits());
+                                                       sourceFragments[0] = 
sourceFragment;
+                                                       
info.addSourceFragments(childTag.getSourcePath(), sourceFragments);
                                                }
                                        }
                                }
                                else
                                {
-                                childNode = createSpecifierNode(builder, 
"textContent");
+                                childNode = createSpecifierNode(builder, 
"innerHTML");
                                 if (childNode != null)
                                 {
                                     childNode.setSuffix(builder, 
childTag.getStateName());
diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLTreeBuilder.java
 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLTreeBuilder.java
index 877375b..08b47fc 100644
--- 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLTreeBuilder.java
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLTreeBuilder.java
@@ -457,6 +457,8 @@ public class MXMLTreeBuilder
                                               Object defaultValue)
     {
         String text = SourceFragmentsReader.concatLogicalText(fragments);
+        if (propertyNode != null && propertyNode.getName().equals("innerHTML"))
+               text = SourceFragmentsReader.concatPhysicalText(fragments);
 
         Object value = mxmlDialect.isWhitespace(text) ?
                        defaultValue :

-- 
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].

Reply via email to