You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2011/04/01 05:59:35 UTC

svn commit: r1087575 [1/2] - in /myfaces/core/branches/2.1.x/impl/src: main/java/org/apache/myfaces/config/ main/java/org/apache/myfaces/config/element/ main/java/org/apache/myfaces/config/impl/digester/ main/java/org/apache/myfaces/config/impl/digeste...

Author: lu4242
Date: Fri Apr  1 03:59:34 2011
New Revision: 1087575

URL: http://svn.apache.org/viewvc?rev=1087575&view=rev
Log:
MYFACES-3098 Add support for view.xml handling and facelets-processing element

Added:
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FaceletsProcessing.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfigExtension.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FaceletsProcessing.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FacesConfigExtension.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/FaceletsProcessingInstructions.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/LiteralNonExcapedTextInstruction.java
    myfaces/core/branches/2.1.x/impl/src/main/resources/org/apache/myfaces/resource/web-facesconfig_2_1.xsd
    myfaces/core/branches/2.1.x/impl/src/test/java/org/apache/myfaces/view/facelets/compiler/JSPXFaceletsProcessingTestCase.java
    myfaces/core/branches/2.1.x/impl/src/test/java/org/apache/myfaces/view/facelets/compiler/XHTMLFaceletsProcessingTestCase.java
    myfaces/core/branches/2.1.x/impl/src/test/java/org/apache/myfaces/view/facelets/compiler/XMLFaceletsProcessingTestCase.java
    myfaces/core/branches/2.1.x/impl/src/test/resources/org/apache/myfaces/view/facelets/compiler/testJSPXProcessing1.jspx
    myfaces/core/branches/2.1.x/impl/src/test/resources/org/apache/myfaces/view/facelets/compiler/testXHTMLProcessing1.xhtml
    myfaces/core/branches/2.1.x/impl/src/test/resources/org/apache/myfaces/view/facelets/compiler/testXMLProcessing1.view.xml
Modified:
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/ConfigFilesXmlValidationUtils.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/DefaultFacesConfigurationProvider.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfig.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfigData.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigDispenserImpl.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigUnmarshallerImpl.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FacesConfig.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/CompilationManager.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/Compiler.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java
    myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/TextUnit.java
    myfaces/core/branches/2.1.x/impl/src/test/java/org/apache/myfaces/view/facelets/FaceletTestCase.java

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/ConfigFilesXmlValidationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/ConfigFilesXmlValidationUtils.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/ConfigFilesXmlValidationUtils.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/ConfigFilesXmlValidationUtils.java Fri Apr  1 03:59:34 2011
@@ -53,6 +53,7 @@ public class ConfigFilesXmlValidationUti
 
     private final static String FACES_CONFIG_SCHEMA_PATH_12 = "org/apache/myfaces/resource/web-facesconfig_1_2.xsd";
     private final static String FACES_CONFIG_SCHEMA_PATH_20 = "org/apache/myfaces/resource/web-facesconfig_2_0.xsd";
+    private final static String FACES_CONFIG_SCHEMA_PATH_21 = "org/apache/myfaces/resource/web-facesconfig_2_0.xsd";
     private final static String FACES_TAGLIB_SCHEMA_PATH = "org/apache/myfaces/resource/web-facelettaglibrary_2_0.xsd";
 
     public static class LSInputImpl implements LSInput
@@ -225,7 +226,7 @@ public class ConfigFilesXmlValidationUti
 
     private static Source getFacesConfigSchemaFileAsSource(ExternalContext externalContext, String version)
     {
-        String xmlSchema = "1.2".equals(version) ? FACES_CONFIG_SCHEMA_PATH_12 : FACES_CONFIG_SCHEMA_PATH_20; 
+        String xmlSchema = "1.2".equals(version) ? FACES_CONFIG_SCHEMA_PATH_12 : ("2.0".equals(version) ? FACES_CONFIG_SCHEMA_PATH_20 : FACES_CONFIG_SCHEMA_PATH_21) ; 
         
         InputStream stream = ClassUtils.getResourceAsStream(xmlSchema);
         
@@ -276,8 +277,8 @@ public class ConfigFilesXmlValidationUti
                 // This is as a result of our aborted parse, so ignore.
             }
 
-            result = handler.isVersion20OrLater() ? "2.0" : (handler
-                    .isVersion12() ? "1.2" : "1.1");
+            result = handler.isVersion21OrLater() ? "2.1" : (handler.isVersion20() ? "2.0" : (handler
+                    .isVersion12() ? "1.2" : "1.1"));
         }
 
         catch (Throwable e)
@@ -306,16 +307,22 @@ public class ConfigFilesXmlValidationUti
     private static class FacesConfigVersionCheckHandler extends DefaultHandler
     {
         private boolean version12;
-        private boolean version20OrLater;
+        private boolean version20;
+        private boolean version21OrLater;
 
         public boolean isVersion12()
         {
             return this.version12;
         }
 
-        public boolean isVersion20OrLater()
+        public boolean isVersion20()
         {
-            return this.version20OrLater;
+            return this.version20 || this.version21OrLater;
+        }
+        
+        public boolean isVersion21OrLater()
+        {
+            return version21OrLater;
         }
 
         @Override
@@ -337,11 +344,19 @@ public class ConfigFilesXmlValidationUti
                         if (attributes.getValue(i).equals("1.2"))
                         {
                             this.version12 = true;
-                            this.version20OrLater = false;
+                            this.version20 = false;
+                            this.version21OrLater = false;
+                        }
+                        else if (attributes.getValue(i).equals("2.0"))
+                        {
+                            this.version21OrLater = false;
+                            this.version20 = true;
+                            this.version12 = false;
                         }
                         else
                         {
-                            this.version20OrLater = true;
+                            this.version21OrLater = true;
+                            this.version20 = false;
                             this.version12 = false;
                         }
                     }

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/DefaultFacesConfigurationProvider.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/DefaultFacesConfigurationProvider.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/DefaultFacesConfigurationProvider.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/DefaultFacesConfigurationProvider.java Fri Apr  1 03:59:34 2011
@@ -392,7 +392,7 @@ public class DefaultFacesConfigurationPr
     private void validateFacesConfig(ExternalContext ectx, URL url) throws IOException, SAXException
     {
         String version = ConfigFilesXmlValidationUtils.getFacesConfigVersion(url);
-        if ("1.2".equals(version) || "2.0".equals(version))
+        if ("1.2".equals(version) || "2.0".equals(version) || "2.1".equals(version))
         {
             ConfigFilesXmlValidationUtils.validateFacesConfigFile(url, ectx, version);
         }

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java Fri Apr  1 03:59:34 2011
@@ -26,6 +26,7 @@ import org.apache.myfaces.config.annotat
 import org.apache.myfaces.config.annotation.LifecycleProviderFactory;
 import org.apache.myfaces.config.element.Behavior;
 import org.apache.myfaces.config.element.ClientBehaviorRenderer;
+import org.apache.myfaces.config.element.FaceletsProcessing;
 import org.apache.myfaces.config.element.FacesConfig;
 import org.apache.myfaces.config.element.FacesConfigData;
 import org.apache.myfaces.config.element.ManagedBean;
@@ -899,6 +900,11 @@ public class FacesConfigurator
                 log.log(Level.SEVERE, "Named event could not be initialized, reason:",e);
             }
         }
+        
+        for (FaceletsProcessing faceletsProcessing : dispenser.getFaceletsProcessing())
+        {
+            runtimeConfig.addFaceletProcessingConfiguration(faceletsProcessing.getFileExtension(), faceletsProcessing);
+        }
     }
 
     private void removePurgedBeansFromSessionAndApplication(RuntimeConfig runtimeConfig)

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java Fri Apr  1 03:59:34 2011
@@ -34,6 +34,7 @@ import javax.faces.context.ExternalConte
 import javax.faces.el.PropertyResolver;
 import javax.faces.el.VariableResolver;
 
+import org.apache.myfaces.config.element.FaceletsProcessing;
 import org.apache.myfaces.config.element.ManagedBean;
 import org.apache.myfaces.config.element.NavigationRule;
 import org.apache.myfaces.config.element.ResourceBundle;
@@ -78,6 +79,9 @@ public class RuntimeConfig
         new ConcurrentHashMap<String, org.apache.myfaces.config.element.Converter>();
     
     private NamedEventManager _namedEventManager;
+    
+    private final Map<String, FaceletsProcessing> _faceletsProcessingByFileExtension =
+        new HashMap<String, FaceletsProcessing>();
 
     public static RuntimeConfig getCurrentInstance(ExternalContext externalContext)
     {
@@ -326,4 +330,23 @@ public class RuntimeConfig
     {
         this._namedEventManager = namedEventManager;
     }
+    
+    public void addFaceletProcessingConfiguration(String fileExtension, FaceletsProcessing configuration)
+    {
+        checkNull(fileExtension, "fileExtension");
+        checkEmpty(fileExtension, "fileExtension");
+        checkNull(configuration, "configuration");
+
+        this._faceletsProcessingByFileExtension.put(fileExtension, configuration);
+    }
+    
+    public FaceletsProcessing getFaceletProcessingConfiguration(String fileExtensions)
+    {
+        return _faceletsProcessingByFileExtension.get(fileExtensions);
+    }
+    
+    public Collection<FaceletsProcessing> getFaceletProcessingConfigurations()
+    {
+        return _faceletsProcessingByFileExtension.values();
+    }
 }

Added: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FaceletsProcessing.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FaceletsProcessing.java?rev=1087575&view=auto
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FaceletsProcessing.java (added)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FaceletsProcessing.java Fri Apr  1 03:59:34 2011
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.config.element;
+
+import java.io.Serializable;
+
+/**
+ * 
+ * @author Leonardo Uribe
+ * @since 2.1.0
+ */
+public abstract class FaceletsProcessing implements Serializable
+{
+    public static final String PROCESS_AS_XHTML = "xhtml";
+    public static final String PROCESS_AS_XML = "xml";
+    public static final String PROCESS_AS_JSPX = "jspx";
+    
+    public abstract String getFileExtension();
+    
+    public abstract String getProcessAs();
+}

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfig.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfig.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfig.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfig.java Fri Apr  1 03:59:34 2011
@@ -19,6 +19,7 @@
 package org.apache.myfaces.config.element;
 
 import java.io.Serializable;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -60,4 +61,13 @@ public abstract class FacesConfig implem
     public abstract String getMetadataComplete();
 
     public abstract String getVersion ();
+    
+    /**
+     * 
+     * @since 2.1.0
+     */
+    public List<FacesConfigExtension> getFacesConfigExtensions()
+    {
+        return Collections.emptyList();
+    }
 }

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfigData.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfigData.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfigData.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfigData.java Fri Apr  1 03:59:34 2011
@@ -20,6 +20,7 @@ package org.apache.myfaces.config.elemen
 
 import java.io.Serializable;
 import java.util.Collection;
+import java.util.Collections;
 
 import javax.el.ELResolver;
 
@@ -209,4 +210,13 @@ public abstract class FacesConfigData im
      */
     public abstract Collection<NamedEvent> getNamedEvents();
 
+    /**
+     * 
+     * @since 2.1.0
+     */
+    public Collection<FaceletsProcessing> getFaceletsProcessing()
+    {
+        return Collections.emptyList();
+    }
+
 }

Added: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfigExtension.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfigExtension.java?rev=1087575&view=auto
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfigExtension.java (added)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/element/FacesConfigExtension.java Fri Apr  1 03:59:34 2011
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.config.element;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 
+ * @author Leonardo Uribe
+ * @since 2.1.0
+ */
+public abstract class FacesConfigExtension implements Serializable
+{
+    public abstract List<FaceletsProcessing> getFaceletsProcessingList();
+}

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigDispenserImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigDispenserImpl.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigDispenserImpl.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigDispenserImpl.java Fri Apr  1 03:59:34 2011
@@ -31,6 +31,8 @@ import javax.faces.render.RenderKitFacto
 import org.apache.myfaces.config.FacesConfigDispenser;
 import org.apache.myfaces.config.element.Behavior;
 import org.apache.myfaces.config.element.ClientBehaviorRenderer;
+import org.apache.myfaces.config.element.FaceletsProcessing;
+import org.apache.myfaces.config.element.FacesConfigExtension;
 import org.apache.myfaces.config.element.ManagedBean;
 import org.apache.myfaces.config.element.NavigationRule;
 import org.apache.myfaces.config.element.Renderer;
@@ -102,6 +104,8 @@ public class DigesterFacesConfigDispense
     
     private List<NamedEvent> namedEvents = new ArrayList<NamedEvent>();
     
+    private Map<String, FaceletsProcessing> faceletsProcessingByFileExtension = new HashMap<String, FaceletsProcessing>();
+    
     /**
      * Add another unmarshalled faces config object.
      * 
@@ -220,6 +224,17 @@ public class DigesterFacesConfigDispense
             }
         }
 
+        for (FacesConfigExtension extension : config.getFacesConfigExtensions())
+        {
+            for (FaceletsProcessing faceletsProcessing : extension.getFaceletsProcessingList())
+            {
+                if (faceletsProcessing.getFileExtension() != null && faceletsProcessing.getFileExtension().length() > 0)
+                {
+                    faceletsProcessingByFileExtension.put(faceletsProcessing.getFileExtension(), faceletsProcessing);
+                }
+            }
+        }
+
         lifecyclePhaseListeners.addAll(config.getLifecyclePhaseListener());
         managedBeans.addAll(config.getManagedBeans());
         navigationRules.addAll(config.getNavigationRules());
@@ -641,4 +656,14 @@ public class DigesterFacesConfigDispense
     {
         return namedEvents;
     }
+    
+    public Collection<FaceletsProcessing> getFaceletsProcessing()
+    {
+        return faceletsProcessingByFileExtension.values();
+    }
+
+    public FaceletsProcessing getFaceletsProcessingConfiguration(String fileExtension)
+    {
+        return faceletsProcessingByFileExtension.get(fileExtension);
+    }
 }

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigUnmarshallerImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigUnmarshallerImpl.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigUnmarshallerImpl.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigUnmarshallerImpl.java Fri Apr  1 03:59:34 2011
@@ -278,6 +278,16 @@ public class DigesterFacesConfigUnmarsha
         digester.addCallMethod("faces-config/validator", "addValidator", 2);
         digester.addCallParam("faces-config/validator/validator-id", 0);
         digester.addCallParam("faces-config/validator/validator-class", 1);
+        
+        // 2.1 facelets-processing start
+        digester.addObjectCreate("faces-config/faces-config-extension", FacesConfigExtension.class);
+        digester.addSetNext("faces-config/faces-config-extension", "addFacesConfigExtension");
+        digester.addObjectCreate("faces-config/faces-config-extension/facelets-processing", FaceletsProcessing.class);
+        digester.addSetNext("faces-config/faces-config-extension/facelets-processing", "addFaceletsProcessing");
+        digester.addCallMethod("faces-config/faces-config-extension/facelets-processing/file-extension", "setFileExtension", 0);
+        digester.addCallMethod("faces-config/faces-config-extension/facelets-processing/process-as", "setProcessAs", 0);
+
+        // 2.1 facelets-processing end
     }
 
     public FacesConfig getFacesConfig(InputStream in, String systemId) throws IOException, SAXException

Added: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FaceletsProcessing.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FaceletsProcessing.java?rev=1087575&view=auto
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FaceletsProcessing.java (added)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FaceletsProcessing.java Fri Apr  1 03:59:34 2011
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.config.impl.digester.elements;
+
+/**
+ * 
+ * @author Leonardo Uribe
+ * @since 2.1.0
+ */
+public class FaceletsProcessing extends org.apache.myfaces.config.element.FaceletsProcessing 
+{
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 7692451499973040255L;
+
+    private String fileExtension;
+    
+    private String processAs;
+
+    public String getFileExtension()
+    {
+        return fileExtension;
+    }
+
+    public String getProcessAs()
+    {
+        return processAs;
+    }
+
+    public void setFileExtension(String fileExtension)
+    {
+        this.fileExtension = fileExtension;
+    }
+
+    public void setProcessAs(String processAs)
+    {
+        this.processAs = processAs;
+    }
+}

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FacesConfig.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FacesConfig.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FacesConfig.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FacesConfig.java Fri Apr  1 03:59:34 2011
@@ -41,6 +41,7 @@ public class FacesConfig extends org.apa
     private Map<String, String> validators = new HashMap<String, String>();
     private List<org.apache.myfaces.config.element.Behavior> behaviors = new ArrayList<org.apache.myfaces.config.element.Behavior>();
     private List<org.apache.myfaces.config.element.NamedEvent> namedEvents = new ArrayList<org.apache.myfaces.config.element.NamedEvent>();
+    private List<org.apache.myfaces.config.element.FacesConfigExtension> facesConfigExtensions = new ArrayList<org.apache.myfaces.config.element.FacesConfigExtension>();
     
     private String metadataComplete;
     private String version;
@@ -226,4 +227,16 @@ public class FacesConfig extends org.apa
     {
         this.version = version;
     }
+
+    @Override
+    public List<org.apache.myfaces.config.element.FacesConfigExtension> getFacesConfigExtensions()
+    {
+        return facesConfigExtensions;
+    }
+    
+    public void addFacesConfigExtension(org.apache.myfaces.config.element.FacesConfigExtension elem)
+    {
+        facesConfigExtensions.add(elem);
+    }
+    
 }

Added: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FacesConfigExtension.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FacesConfigExtension.java?rev=1087575&view=auto
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FacesConfigExtension.java (added)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/FacesConfigExtension.java Fri Apr  1 03:59:34 2011
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.config.impl.digester.elements;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 
+ * @author Leonardo Uribe
+ * @since 2.1.0
+ */
+public class FacesConfigExtension extends org.apache.myfaces.config.element.FacesConfigExtension
+{
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 7624583794474223864L;
+    
+    private List<org.apache.myfaces.config.element.FaceletsProcessing> _faceletsProcessingList = 
+        new ArrayList<org.apache.myfaces.config.element.FaceletsProcessing>();
+
+    @Override
+    public List<org.apache.myfaces.config.element.FaceletsProcessing> getFaceletsProcessingList()
+    {
+        return _faceletsProcessingList;
+    }
+    
+    public void addFaceletsProcessing(org.apache.myfaces.config.element.FaceletsProcessing elem)
+    {
+        _faceletsProcessingList.add(elem);
+    }
+}

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java Fri Apr  1 03:59:34 2011
@@ -1636,6 +1636,10 @@ public class FaceletViewDeclarationLangu
         loadLibraries(context, compiler);
         loadDecorators(context, compiler);
         loadOptions(context, compiler);
+        
+        compiler.setFaceletsProcessingConfigurations(
+                RuntimeConfig.getCurrentInstance(
+                        context.getExternalContext()).getFaceletProcessingConfigurations()); 
 
         return compiler;
     }
@@ -1767,6 +1771,9 @@ public class FaceletViewDeclarationLangu
     @Deprecated
     protected String getRenderedViewId(FacesContext context, String actionId)
     {
+        // The previous code comes from Facelets 1.1.x but now it becomes invalid. In JSF 2.1, it is possible
+        // to have multiple file extensions, and to make work correctly viewExists(), it is necessary to return
+        // the viewId without changes
         return actionId;
     }
 

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/CompilationManager.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/CompilationManager.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/CompilationManager.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/CompilationManager.java Fri Apr  1 03:59:34 2011
@@ -71,8 +71,10 @@ final class CompilationManager
     private final String alias;
     
     private CompilationUnit interfaceCompilationUnit;
+    
+    private final FaceletsProcessingInstructions faceletsProcessingInstructions;
 
-    public CompilationManager(String alias, Compiler compiler)
+    public CompilationManager(String alias, Compiler compiler, FaceletsProcessingInstructions instructions)
     {
 
         // this is our alias
@@ -97,6 +99,7 @@ final class CompilationManager
         this.units.push(new CompilationUnit());
         
         this.interfaceCompilationUnit = null; 
+        this.faceletsProcessingInstructions = instructions;
     }
 
     public void writeInstruction(String value)
@@ -119,7 +122,7 @@ final class CompilationManager
         }
         else
         {
-            unit = new TextUnit(this.alias, this.nextTagId());
+            unit = new TextUnit(this.alias, this.nextTagId(), faceletsProcessingInstructions.isEscapeInlineText());
             this.startUnit(unit);
         }
         unit.writeInstruction(value);
@@ -146,7 +149,7 @@ final class CompilationManager
         }
         else
         {
-            unit = new TextUnit(this.alias, this.nextTagId());
+            unit = new TextUnit(this.alias, this.nextTagId(), faceletsProcessingInstructions.isEscapeInlineText());
             this.startUnit(unit);
         }
         unit.write(value);
@@ -175,7 +178,7 @@ final class CompilationManager
         }
         else
         {
-            unit = new TextUnit(this.alias, this.nextTagId());
+            unit = new TextUnit(this.alias, this.nextTagId(), faceletsProcessingInstructions.isEscapeInlineText());
             this.startUnit(unit);
         }
 
@@ -285,7 +288,7 @@ final class CompilationManager
             }
             else
             {
-                unit = new TextUnit(this.alias, this.nextTagId());
+                unit = new TextUnit(this.alias, this.nextTagId(), faceletsProcessingInstructions.isEscapeInlineText());
                 this.startUnit(unit);
             }
             unit.startTag(t);
@@ -522,4 +525,14 @@ final class CompilationManager
                            new TagAttributesImpl(attr));
         }
     }
+
+    /**
+     * 
+     * @since 2.1.0
+     * @return
+     */
+    public FaceletsProcessingInstructions getFaceletsProcessingInstructions()
+    {
+        return faceletsProcessingInstructions;
+    }
 }

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/Compiler.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/Compiler.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/Compiler.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/Compiler.java Fri Apr  1 03:59:34 2011
@@ -21,6 +21,7 @@ package org.apache.myfaces.view.facelets
 import java.io.IOException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -35,6 +36,7 @@ import javax.faces.view.facelets.Facelet
 import javax.faces.view.facelets.FaceletHandler;
 import javax.faces.view.facelets.TagDecorator;
 
+import org.apache.myfaces.config.element.FaceletsProcessing;
 import org.apache.myfaces.view.facelets.tag.CompositeTagDecorator;
 import org.apache.myfaces.view.facelets.tag.CompositeTagLibrary;
 import org.apache.myfaces.view.facelets.tag.TagLibrary;
@@ -73,6 +75,8 @@ public abstract class Compiler
     private final Map<String, String> features = new HashMap<String, String>();
 
     private boolean initialized = false;
+    
+    private Collection<FaceletsProcessing> faceletsProcessingConfigurations;
 
     /**
      * 
@@ -259,4 +263,25 @@ public abstract class Compiler
     {
         this.validating = validating;
     }
+
+    /**
+     * 
+     * @since 2.1.0
+     * @return
+     */
+    public Collection<FaceletsProcessing> getFaceletsProcessingConfigurations()
+    {
+        return faceletsProcessingConfigurations;
+    }
+
+    /**
+     * 
+     * @since 2.1.0
+     * @return
+     */
+    public void setFaceletsProcessingConfigurations(
+            Collection<FaceletsProcessing> faceletsProcessingConfigurations)
+    {
+        this.faceletsProcessingConfigurations = faceletsProcessingConfigurations;
+    }
 }

Added: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/FaceletsProcessingInstructions.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/FaceletsProcessingInstructions.java?rev=1087575&view=auto
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/FaceletsProcessingInstructions.java (added)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/FaceletsProcessingInstructions.java Fri Apr  1 03:59:34 2011
@@ -0,0 +1,127 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.view.facelets.compiler;
+
+/**
+ * 
+ * @author Leonardo Uribe
+ * @since 2.1.0
+ */
+public final class FaceletsProcessingInstructions
+{
+    public static final String PROCESS_AS_JSPX = "jspx";
+    public static final String PROCESS_AS_XHTML = "xhtml";
+    public static final String PROCESS_AS_XML = "xml";
+    
+    private static final FaceletsProcessingInstructions processAsXHTML= 
+        new FaceletsProcessingInstructions(
+                false, false, false, false, true, false);
+
+    private static final FaceletsProcessingInstructions processAsXML= 
+        new FaceletsProcessingInstructions(
+                true, true, true, true, true, true);
+
+    private static final FaceletsProcessingInstructions processAsJSPX= 
+        new FaceletsProcessingInstructions(
+                true, true, true, true, false, true);
+
+    private final boolean consumeXmlDocType;
+    
+    private final boolean consumeXmlDeclaration;
+    
+    private final boolean consumeProcessingInstructions;
+    
+    private final boolean consumeCDataSections;
+    
+    private final boolean escapeInlineText;
+    
+    private final boolean consumeXMLComments;
+    
+    public final static FaceletsProcessingInstructions getProcessingInstructions(String processAs)
+    {
+        if (processAs == null)
+        {
+            return processAsXHTML;
+        }
+        else if (PROCESS_AS_XHTML.equals(processAs))
+        {
+            return processAsXHTML;
+        }
+        else if (PROCESS_AS_XML.equals(processAs))
+        {
+            return processAsXML;
+        }
+        else if (PROCESS_AS_JSPX.equals(processAs))
+        {
+            return processAsJSPX;
+        }
+        else
+        {
+            return processAsXHTML;
+        }
+    }
+    
+    public FaceletsProcessingInstructions(
+            boolean consumeXmlDocType,
+            boolean consumeXmlDeclaration,
+            boolean consumeProcessingInstructions,
+            boolean consumeCDataSections, 
+            boolean escapeInlineText,
+            boolean consumeXMLComments)
+    {
+        super();
+        this.consumeXmlDocType = consumeXmlDocType;
+        this.consumeXmlDeclaration = consumeXmlDeclaration;
+        this.consumeProcessingInstructions = consumeProcessingInstructions;
+        this.consumeCDataSections = consumeCDataSections;
+        this.escapeInlineText = escapeInlineText;
+        this.consumeXMLComments = consumeXMLComments;
+    }
+
+    public boolean isConsumeXmlDocType()
+    {
+        return consumeXmlDocType;
+    }
+
+    public boolean isConsumeXmlDeclaration()
+    {
+        return consumeXmlDeclaration;
+    }
+
+    public boolean isConsumeProcessingInstructions()
+    {
+        return consumeProcessingInstructions;
+    }
+
+    public boolean isConsumeCDataSections()
+    {
+        return consumeCDataSections;
+    }
+
+    public boolean isEscapeInlineText()
+    {
+        return escapeInlineText;
+    }
+
+    public boolean isConsumeXMLComments()
+    {
+        return consumeXMLComments;
+    }
+
+}

Added: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/LiteralNonExcapedTextInstruction.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/LiteralNonExcapedTextInstruction.java?rev=1087575&view=auto
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/LiteralNonExcapedTextInstruction.java (added)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/LiteralNonExcapedTextInstruction.java Fri Apr  1 03:59:34 2011
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.view.facelets.compiler;
+
+import java.io.IOException;
+
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+
+/**
+ * 
+ * @author Leonardo Uribe
+ * @since 2.1.0
+ */
+final class LiteralNonExcapedTextInstruction implements Instruction
+{
+    private final String text;
+
+    public LiteralNonExcapedTextInstruction(String text)
+    {
+        this.text = text;
+    }
+
+    public void write(FacesContext context) throws IOException
+    {
+        context.getResponseWriter().write(this.text);
+    }
+
+    public Instruction apply(ExpressionFactory factory, ELContext ctx)
+    {
+        return this;
+    }
+
+    public boolean isLiteral()
+    {
+        return true;
+    }
+}

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java Fri Apr  1 03:59:34 2011
@@ -22,11 +22,13 @@ import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import javax.el.ELException;
 import javax.faces.FacesException;
+import javax.faces.context.FacesContext;
 import javax.faces.view.Location;
 import javax.faces.view.facelets.FaceletException;
 import javax.faces.view.facelets.FaceletHandler;
@@ -37,6 +39,8 @@ import javax.xml.parsers.ParserConfigura
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
+import org.apache.myfaces.config.RuntimeConfig;
+import org.apache.myfaces.config.element.FaceletsProcessing;
 import org.apache.myfaces.shared_impl.util.ClassUtils;
 import org.apache.myfaces.view.facelets.tag.TagAttributeImpl;
 import org.apache.myfaces.view.facelets.tag.TagAttributesImpl;
@@ -77,6 +81,8 @@ public final class SAXCompiler extends C
         private Locator locator;
 
         private final CompilationManager unit;
+        
+        private boolean consumingCDATA = false;
 
         public CompilationHandler(CompilationManager unit, String alias)
         {
@@ -86,7 +92,7 @@ public final class SAXCompiler extends C
 
         public void characters(char[] ch, int start, int length) throws SAXException
         {
-            if (this.inDocument)
+            if (this.inDocument && !consumingCDATA)
             {
                 this.unit.writeText(new String(ch, start, length));
             }
@@ -94,7 +100,7 @@ public final class SAXCompiler extends C
 
         public void comment(char[] ch, int start, int length) throws SAXException
         {
-            if (this.inDocument)
+            if (this.inDocument && !unit.getFaceletsProcessingInstructions().isConsumeXMLComments())
             {
                 this.unit.writeComment(new String(ch, start, length));
             }
@@ -121,7 +127,14 @@ public final class SAXCompiler extends C
         {
             if (this.inDocument)
             {
-                this.unit.writeInstruction("]]>");
+                if (!this.unit.getFaceletsProcessingInstructions().isConsumeCDataSections())
+                {
+                    this.unit.writeInstruction("]]>");
+                }
+                else
+                {
+                    this.consumingCDATA = false;
+                }
             }
         }
 
@@ -189,7 +202,14 @@ public final class SAXCompiler extends C
         {
             if (this.inDocument)
             {
-                this.unit.writeInstruction("<![CDATA[");
+                if (!this.unit.getFaceletsProcessingInstructions().isConsumeCDataSections())
+                {
+                    this.unit.writeInstruction("<![CDATA[");
+                }
+                else
+                {
+                    this.consumingCDATA = true;
+                }
             }
         }
 
@@ -200,7 +220,7 @@ public final class SAXCompiler extends C
 
         public void startDTD(String name, String publicId, String systemId) throws SAXException
         {
-            if (this.inDocument)
+            if (this.inDocument && !unit.getFaceletsProcessingInstructions().isConsumeXmlDocType())
             {
                 StringBuffer sb = new StringBuffer(64);
                 sb.append("<!DOCTYPE ").append(name);
@@ -238,7 +258,7 @@ public final class SAXCompiler extends C
 
         public void processingInstruction(String target, String data) throws SAXException
         {
-            if (this.inDocument)
+            if (this.inDocument && !this.unit.getFaceletsProcessingInstructions().isConsumeProcessingInstructions())
             {
                 StringBuffer sb = new StringBuffer(64);
                 sb.append("<?").append(target).append(' ').append(data).append("?>\n");
@@ -264,6 +284,8 @@ public final class SAXCompiler extends C
         private final CompilationManager unit;
         
         private boolean inMetadata = false;
+        
+        private boolean consumingCDATA = false;
 
         public ViewMetadataHandler(CompilationManager unit, String alias)
         {
@@ -273,7 +295,7 @@ public final class SAXCompiler extends C
 
         public void characters(char[] ch, int start, int length) throws SAXException
         {
-            if (this.inDocument && inMetadata)
+            if (this.inDocument && inMetadata && !consumingCDATA)
             {
                 this.unit.writeText(new String(ch, start, length));
             }
@@ -281,7 +303,7 @@ public final class SAXCompiler extends C
 
         public void comment(char[] ch, int start, int length) throws SAXException
         {
-            if (this.inDocument && inMetadata)
+            if (this.inDocument && inMetadata && !unit.getFaceletsProcessingInstructions().isConsumeXMLComments())
             {
                 this.unit.writeComment(new String(ch, start, length));
             }
@@ -308,7 +330,14 @@ public final class SAXCompiler extends C
         {
             if (this.inDocument && inMetadata)
             {
-                this.unit.writeInstruction("]]>");
+                if (!this.unit.getFaceletsProcessingInstructions().isConsumeCDataSections())
+                {
+                    this.unit.writeInstruction("]]>");
+                }
+                else
+                {
+                    this.consumingCDATA = false;
+                }
             }
         }
 
@@ -383,7 +412,14 @@ public final class SAXCompiler extends C
         {
             if (this.inDocument && inMetadata)
             {
-                this.unit.writeInstruction("<![CDATA[");
+                if (!this.unit.getFaceletsProcessingInstructions().isConsumeCDataSections())
+                {
+                    this.unit.writeInstruction("<![CDATA[");
+                }
+                else
+                {
+                    this.consumingCDATA = true;
+                }
             }
         }
 
@@ -421,7 +457,7 @@ public final class SAXCompiler extends C
 
         public void processingInstruction(String target, String data) throws SAXException
         {
-            if (this.inDocument && inMetadata)
+            if (this.inDocument && inMetadata && !this.unit.getFaceletsProcessingInstructions().isConsumeProcessingInstructions())
             {
                 StringBuffer sb = new StringBuffer(64);
                 sb.append("<?").append(target).append(' ').append(data).append("?>\n");
@@ -453,6 +489,8 @@ public final class SAXCompiler extends C
         
         private boolean inCompositeImplementation = false;
 
+        private boolean consumingCDATA = false;
+
         public CompositeComponentMetadataHandler(CompilationManager unit, String alias)
         {
             this.unit = unit;
@@ -461,7 +499,7 @@ public final class SAXCompiler extends C
 
         public void characters(char[] ch, int start, int length) throws SAXException
         {
-            if (this.inDocument && inCompositeInterface)
+            if (this.inDocument && inCompositeInterface && !consumingCDATA)
             {
                 this.unit.writeText(new String(ch, start, length));
             }
@@ -469,7 +507,7 @@ public final class SAXCompiler extends C
 
         public void comment(char[] ch, int start, int length) throws SAXException
         {
-            if (this.inDocument && inCompositeInterface)
+            if (this.inDocument && inCompositeInterface && !unit.getFaceletsProcessingInstructions().isConsumeXMLComments())
             {
                 this.unit.writeComment(new String(ch, start, length));
             }
@@ -496,7 +534,14 @@ public final class SAXCompiler extends C
         {
             if (this.inDocument && inCompositeInterface)
             {
-                this.unit.writeInstruction("]]>");
+                if (!this.unit.getFaceletsProcessingInstructions().isConsumeCDataSections())
+                {
+                    this.unit.writeInstruction("]]>");
+                }
+                else
+                {
+                    this.consumingCDATA = false;
+                }
             }
         }
 
@@ -589,7 +634,14 @@ public final class SAXCompiler extends C
         {
             if (this.inDocument && inCompositeInterface)
             {
-                this.unit.writeInstruction("<![CDATA[");
+                if (!this.unit.getFaceletsProcessingInstructions().isConsumeCDataSections())
+                {
+                    this.unit.writeInstruction("<![CDATA[");
+                }
+                else
+                {
+                    this.consumingCDATA = true;
+                }
             }
         }
 
@@ -645,7 +697,7 @@ public final class SAXCompiler extends C
 
         public void processingInstruction(String target, String data) throws SAXException
         {
-            if (this.inDocument && inCompositeInterface)
+            if (this.inDocument && inCompositeInterface && !this.unit.getFaceletsProcessingInstructions().isConsumeProcessingInstructions())
             {
                 StringBuffer sb = new StringBuffer(64);
                 sb.append("<?").append(target).append(' ').append(data).append("?>\n");
@@ -668,7 +720,7 @@ public final class SAXCompiler extends C
         try
         {
             is = new BufferedInputStream(src.openStream(), 1024);
-            mngr = new CompilationManager(alias, this);
+            mngr = new CompilationManager(alias, this, getFaceletsProcessingInstructions(src, alias));
             encoding = writeXmlDecl(is, mngr);
             CompilationHandler handler = new CompilationHandler(mngr, alias);
             SAXParser parser = this.createSAXParser(handler);
@@ -705,7 +757,7 @@ public final class SAXCompiler extends C
         try
         {
             is = new BufferedInputStream(src.openStream(), 1024);
-            mngr = new CompilationManager(alias, this);
+            mngr = new CompilationManager(alias, this, getFaceletsProcessingInstructions(src, alias));
             encoding = getXmlDecl(is, mngr);
             ViewMetadataHandler handler = new ViewMetadataHandler(mngr, alias);
             SAXParser parser = this.createSAXParser(handler);
@@ -742,7 +794,7 @@ public final class SAXCompiler extends C
         try
         {
             is = new BufferedInputStream(src.openStream(), 1024);
-            mngr = new CompilationManager(alias, this);
+            mngr = new CompilationManager(alias, this, getFaceletsProcessingInstructions(src, alias));
             encoding = getXmlDecl(is, mngr);
             CompositeComponentMetadataHandler handler = new CompositeComponentMetadataHandler(mngr, alias);
             SAXParser parser = this.createSAXParser(handler);
@@ -765,6 +817,20 @@ public final class SAXCompiler extends C
         }
         return new EncodingHandler(mngr.createFaceletHandler(), encoding);
     }
+    
+    protected FaceletsProcessingInstructions getFaceletsProcessingInstructions(URL src, String alias)
+    {
+        String processAs = null;
+        for (FaceletsProcessing entry : getFaceletsProcessingConfigurations())
+        {
+            if (src.getPath().endsWith(entry.getFileExtension()))
+            {
+                processAs = entry.getProcessAs();
+                break;
+            }
+        }
+        return FaceletsProcessingInstructions.getProcessingInstructions(processAs);
+    }
 
     protected static final String writeXmlDecl(InputStream is, CompilationManager mngr) throws IOException
     {
@@ -779,7 +845,10 @@ public final class SAXCompiler extends C
                 Matcher m = XmlDeclaration.matcher(r);
                 if (m.find())
                 {
-                    mngr.writeInstruction(m.group(0) + "\n");
+                    if (!mngr.getFaceletsProcessingInstructions().isConsumeXmlDeclaration())
+                    {
+                        mngr.writeInstruction(m.group(0) + "\n");
+                    }
                     if (m.group(3) != null)
                     {
                         encoding = m.group(3);

Modified: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/TextUnit.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/TextUnit.java?rev=1087575&r1=1087574&r2=1087575&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/TextUnit.java (original)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/TextUnit.java Fri Apr  1 03:59:34 2011
@@ -56,8 +56,15 @@ final class TextUnit extends Compilation
 
     private final String id;
 
+    private final boolean escapeInlineText;
+
     public TextUnit(String alias, String id)
     {
+        this(alias,id,true);
+    }
+    
+    public TextUnit(String alias, String id, boolean escapeInlineText)
+    {
         this.alias = alias;
         this.id = id;
         this.buffer = new StringBuffer();
@@ -66,6 +73,7 @@ final class TextUnit extends Compilation
         this.tags = new Stack<Tag>();
         this.children = new ArrayList<Object>();
         this.startTagOpen = false;
+        this.escapeInlineText = escapeInlineText;
     }
 
     public FaceletHandler createFaceletHandler()
@@ -121,7 +129,14 @@ final class TextUnit extends Compilation
                 {
                     if (txt.isLiteral())
                     {
-                        this.instructionBuffer.add(new LiteralTextInstruction(txt.toString()));
+                        if (escapeInlineText)
+                        {
+                            this.instructionBuffer.add(new LiteralTextInstruction(txt.toString()));
+                        }
+                        else
+                        {
+                            this.instructionBuffer.add(new LiteralNonExcapedTextInstruction(txt.toString()));
+                        }
                     }
                     else
                     {