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>'].