You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2012/06/13 00:07:07 UTC

svn commit: r1349560 [10/10] - in /incubator/flex/trunk: ./ frameworks/ frameworks/projects/airframework/ frameworks/projects/airframework/assets/ frameworks/projects/framework/ frameworks/projects/framework/assets/ frameworks/projects/framework/assets...

Modified: incubator/flex/trunk/modules/compiler/src/java/flex2/compiler/fxg/FXGCompiler.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/compiler/src/java/flex2/compiler/fxg/FXGCompiler.java?rev=1349560&r1=1349559&r2=1349560&view=diff
==============================================================================
--- incubator/flex/trunk/modules/compiler/src/java/flex2/compiler/fxg/FXGCompiler.java (original)
+++ incubator/flex/trunk/modules/compiler/src/java/flex2/compiler/fxg/FXGCompiler.java Tue Jun 12 22:06:59 2012
@@ -37,6 +37,7 @@ import com.adobe.fxg.dom.FXGNode;
 import com.adobe.fxg.util.FXGLocalizationUtil;
 import com.adobe.fxg.util.FXGLog;
 import com.adobe.fxg.util.FXGLogger;
+import com.adobe.internal.fxg.dom.GraphicNode;
 
 import flash.localization.LocalizationManager;
 import flash.util.FileUtils;
@@ -62,6 +63,7 @@ import flex2.compiler.mxml.reflect.TypeT
 import flex2.compiler.util.CompilerMessage;
 import flex2.compiler.util.MimeMappings;
 import flex2.compiler.util.MultiName;
+import flex2.compiler.util.NameFormatter;
 import flex2.compiler.util.NameMappings;
 import flex2.compiler.util.QName;
 import flex2.compiler.util.ThreadLocalToolkit;
@@ -564,10 +566,28 @@ public class FXGCompiler extends Abstrac
                 QName topLevelQName = getQNameFromSource(source);
                 unit.topLevelDefinitions.add(topLevelQName);
 
+                MultiName baseMultiName = MULTINAME_SPRITEVISUALELEMENT;
+                if (node instanceof GraphicNode)
+                {
+                	GraphicNode graphicNode = (GraphicNode)node;
+                	if (graphicNode.baseClassName != null)
+                	{
+                		String pkg = "";
+                		String baseClassName = graphicNode.baseClassName;
+                		String className = baseClassName;
+                		int lastDot = baseClassName.lastIndexOf(".");
+                		if (lastDot > -1)
+                		{
+                			pkg = baseClassName.substring(0, lastDot);
+                			className = baseClassName.substring(lastDot + 1);
+                		}
+                		baseMultiName = new MultiName(NameFormatter.toColon(pkg, className));
+                	}
+                }
                 // We add the base class for our generated skeleton here so that
                 // the type will be resolved after returning from parse1() and
                 // before we get to analyze2().
-                unit.inheritance.add(MULTINAME_SPRITEVISUALELEMENT);
+                unit.inheritance.add(baseMultiName);
             }
             catch (FXGException ex)
             {
@@ -600,6 +620,7 @@ public class FXGCompiler extends Abstrac
             // Determine whether we need to introduce text class dependencies
             FXGNode rootNode = (FXGNode)unit.getContext().getAttribute(FXG_DOM_ROOT);
             boolean hasTextGraphic = false;
+            String baseClassName = null;
             double version = 1.0;
 
             if (rootNode instanceof FlexGraphicNode)
@@ -608,11 +629,12 @@ public class FXGCompiler extends Abstrac
                 FXGVersion v = graphicNode.getVersion();
                 version = v != null ? v.asDouble() : 1.0;
                 hasTextGraphic = graphicNode.hasText;
+                baseClassName = graphicNode.baseClassName;
             }
 
             try
             {
-                generatedSource = generateSource(originalSource, symbolTable, version, hasTextGraphic);
+                generatedSource = generateSource(originalSource, symbolTable, version, hasTextGraphic, baseClassName);
             }
             catch (IOException ex)
             {
@@ -689,7 +711,7 @@ public class FXGCompiler extends Abstrac
          * @param hasText - whether the document made use of text 
          */
         private Source generateSource(Source originalSource, SymbolTable symbolTable,
-                double version, boolean hasText) throws IOException
+                double version, boolean hasText, String baseClassName) throws IOException
         {
             // Derive package/class names from source name and location
             String className = originalSource.getShortName();
@@ -715,8 +737,20 @@ public class FXGCompiler extends Abstrac
                 buf.append("import spark.components.RichText;\n");
             }
 
-            buf.append("import spark.core.SpriteVisualElement;\n\n");
-            buf.append("public class ").append(className).append(" extends SpriteVisualElement\n{\n");
+            if (baseClassName != null)
+            {
+                buf.append("import ");
+                buf.append(baseClassName);
+                buf.append(";\n\n");
+                buf.append("public class ").append(className).append(" extends ");
+                buf.append(baseClassName);
+                buf.append("\n{\n");            	
+            }
+            else
+            {
+                buf.append("import spark.core.SpriteVisualElement;\n\n");
+                buf.append("public class ").append(className).append(" extends SpriteVisualElement\n{\n");            	
+            }
             buf.append("    public function ").append(className).append("()\n");
             buf.append("    {\n");
             buf.append("        super();\n");

Modified: incubator/flex/trunk/modules/compiler/src/java/flex2/compiler/fxg/FlexFXG2SWFTranscoder.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/compiler/src/java/flex2/compiler/fxg/FlexFXG2SWFTranscoder.java?rev=1349560&r1=1349559&r2=1349560&view=diff
==============================================================================
--- incubator/flex/trunk/modules/compiler/src/java/flex2/compiler/fxg/FlexFXG2SWFTranscoder.java (original)
+++ incubator/flex/trunk/modules/compiler/src/java/flex2/compiler/fxg/FlexFXG2SWFTranscoder.java Tue Jun 12 22:06:59 2012
@@ -135,13 +135,29 @@ public class FlexFXG2SWFTranscoder exten
 
             DefineSprite sprite = (DefineSprite)transcode(graphicNode);
             graphicClass.setSymbol(sprite);
+            
+            // use specified className if specified
+            if (graphicNode.className != null)
+            	sprite.name = graphicNode.className;
 
             // Create a new sprite class to map to this Graphic's DefineSprite
             StringBuilder buf = new StringBuilder(512);
             buf.append("package ").append(packageName).append("\n");
             buf.append("{\n\n");
-            buf.append("import spark.core.SpriteVisualElement;\n\n");
-            buf.append("public class ").append(className).append(" extends SpriteVisualElement\n");
+            if (graphicNode.baseClassName != null)
+            {
+            	buf.append("import ");
+            	buf.append(graphicNode.baseClassName);
+            	buf.append(";\n\n");
+            	buf.append("public class ").append(className).append(" extends ");
+            	buf.append(graphicNode.baseClassName);
+            	buf.append("\n");
+            }
+            else
+            {
+            	buf.append("import spark.core.SpriteVisualElement;\n\n");
+            	buf.append("public class ").append(className).append(" extends SpriteVisualElement\n");
+            }
             buf.append("{\n");
             buf.append("    public function ").append(className).append("()\n");
             buf.append("    {\n");

Modified: incubator/flex/trunk/modules/fxgutils/src/java/com/adobe/internal/fxg/dom/GraphicNode.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/fxgutils/src/java/com/adobe/internal/fxg/dom/GraphicNode.java?rev=1349560&r1=1349559&r2=1349560&view=diff
==============================================================================
--- incubator/flex/trunk/modules/fxgutils/src/java/com/adobe/internal/fxg/dom/GraphicNode.java (original)
+++ incubator/flex/trunk/modules/fxgutils/src/java/com/adobe/internal/fxg/dom/GraphicNode.java Tue Jun 12 22:06:59 2012
@@ -39,6 +39,9 @@ import com.adobe.internal.fxg.dom.types.
  */
 public class GraphicNode extends AbstractFXGNode implements MaskableNode
 {
+	public static final String APACHE_FLEX_CLASSNAME = "className";
+	public static final String APACHE_FLEX_BASECLASSNAME = "baseClassName";
+	
     private FXGVersion compilerVersion = null; // The version of FXG compiler.
     private String profile;
     private String documentName = null;
@@ -74,6 +77,12 @@ public class GraphicNode extends Abstrac
     
     /** The view height. */
     public double viewHeight = Double.NaN;
+
+    /** an optional class name */
+    public String className = null;
+    
+    /** an optional base class name */
+    public String baseClassName = null;
     
     /** The mask type. */
     public MaskType maskType = MaskType.CLIP;
@@ -358,6 +367,14 @@ public class GraphicNode extends Abstrac
         {
             luminosityClip = DOMParserHelper.parseBoolean(this, value, name); 
         }        
+        else if (APACHE_FLEX_CLASSNAME.equals(name))
+        {
+            className = value; 
+        }        
+        else if (APACHE_FLEX_BASECLASSNAME.equals(name))
+        {
+            baseClassName = value; 
+        }        
         else
         {
             super.setAttribute(name, value);

Modified: incubator/flex/trunk/modules/fxgutils/src/java/com/adobe/internal/fxg/sax/FXGSAXScanner.java
URL: http://svn.apache.org/viewvc/incubator/flex/trunk/modules/fxgutils/src/java/com/adobe/internal/fxg/sax/FXGSAXScanner.java?rev=1349560&r1=1349559&r2=1349560&view=diff
==============================================================================
--- incubator/flex/trunk/modules/fxgutils/src/java/com/adobe/internal/fxg/sax/FXGSAXScanner.java (original)
+++ incubator/flex/trunk/modules/fxgutils/src/java/com/adobe/internal/fxg/sax/FXGSAXScanner.java Tue Jun 12 22:06:59 2012
@@ -55,6 +55,9 @@ import static com.adobe.fxg.FXGConstants
  */
 public class FXGSAXScanner extends DefaultHandler
 {
+    // Namespaces
+    public static final String APACHE_FLEX_NAMESPACE = "http://ns.apache.org/flex/2012";
+    
     private static boolean REJECT_MAJOR_VERSION_MISMATCH = false;
     
     // A special case needed to short circuit GroupNode creation inside a
@@ -224,7 +227,9 @@ public class FXGSAXScanner extends Defau
         for (int i = 0; i < attributes.getLength(); i++)
         {
             String attributeURI = attributes.getURI(i);
-            if (attributeURI == null || attributeURI == "" || isFXGNamespace(attributeURI))
+            if (attributeURI == null || attributeURI == "" || 
+            		isFXGNamespace(attributeURI) || 
+            		isApacheFlexNamespace(attributeURI))
             {
                 String attributeName = attributes.getLocalName(i);
                 String attributeValue = attributes.getValue(i);
@@ -402,6 +407,15 @@ public class FXGSAXScanner extends Defau
     }
 
     /**
+     * @param uri - the namespace URI to check
+     * @return whether the given namespace URI is considered an Apache Flex namespace. 
+     */
+    protected boolean isApacheFlexNamespace(String uri)
+    {
+        return APACHE_FLEX_NAMESPACE.equals(uri);
+    }
+
+    /**
      * Specifies that a particular element should be skipped while scanning for
      * tokens in an FXG document. All of the element's attributes and child
      * nodes will be skipped too.