You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2017/12/26 08:12:48 UTC

[royale-compiler] branch develop updated: handle innerHTML as special case, allowing text and HTML tags

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 <ah...@apache.org>
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
['"commits@royale.apache.org" <co...@royale.apache.org>'].