You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2017/06/06 12:10:04 UTC

svn commit: r1797782 - in /tomcat/trunk: conf/ java/org/apache/jasper/ java/org/apache/jasper/compiler/ java/org/apache/jasper/resources/ webapps/docs/

Author: markt
Date: Tue Jun  6 12:10:04 2017
New Revision: 1797782

URL: http://svn.apache.org/viewvc?rev=1797782&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=45931
Extend Jasper's timeSpaces option to add support for single which replaces template text that consists entirely of whitespace with a single space character.
Based on a patch by Meetesh Karia.

Added:
    tomcat/trunk/java/org/apache/jasper/TrimSpacesOption.java   (with props)
Modified:
    tomcat/trunk/conf/web.xml
    tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java
    tomcat/trunk/java/org/apache/jasper/JspC.java
    tomcat/trunk/java/org/apache/jasper/Options.java
    tomcat/trunk/java/org/apache/jasper/compiler/TextOptimizer.java
    tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties
    tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_es.properties
    tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_fr.properties
    tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_ja.properties
    tomcat/trunk/webapps/docs/changelog.xml
    tomcat/trunk/webapps/docs/jasper-howto.xml

Modified: tomcat/trunk/conf/web.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/conf/web.xml?rev=1797782&r1=1797781&r2=1797782&view=diff
==============================================================================
--- tomcat/trunk/conf/web.xml (original)
+++ tomcat/trunk/conf/web.xml Tue Jun  6 12:10:04 2017
@@ -233,7 +233,13 @@
   <!--                       debugging be suppressed?  [false]              -->
   <!--                                                                      -->
   <!--   trimSpaces          Should template text that consists entirely of -->
-  <!--                       whitespace be removed from the output? [false] -->
+  <!--                       whitespace be removed from the output (true),  -->
+  <!--                       replaced with a single space (single) or left  -->
+  <!--                       unchanged (false)? Note that if a JSP page or  -->
+  <!--                       tag file specifies a trimDirectiveWhitespaces  -->
+  <!--                       value of true, that will take precedence over  -->
+  <!--                       this configuration setting for that page/tag.  -->
+  <!--                       [false]                                        -->
   <!--                                                                      -->
   <!--   xpoweredBy          Determines whether X-Powered-By response       -->
   <!--                       header is added by generated servlet.  [false] -->

Modified: tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java?rev=1797782&r1=1797781&r2=1797782&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java (original)
+++ tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java Tue Jun  6 12:10:04 2017
@@ -63,9 +63,9 @@ public final class EmbeddedServletOption
     private boolean keepGenerated = true;
 
     /**
-     * Should template text that consists entirely of whitespace be removed?
+     * How should template text that consists entirely of whitespace be handled?
      */
-    private boolean trimSpaces = false;
+    private TrimSpacesOption trimSpaces = TrimSpacesOption.FALSE;
 
     /**
      * Determines whether tag handler pooling is enabled.
@@ -238,11 +238,8 @@ public final class EmbeddedServletOption
         return keepGenerated;
     }
 
-    /**
-     * Should template text that consists entirely of whitespace be removed?
-     */
     @Override
-    public boolean getTrimSpaces() {
+    public TrimSpacesOption getTrimSpaces() {
         return trimSpaces;
     }
 
@@ -499,13 +496,11 @@ public final class EmbeddedServletOption
 
         String trimsp = config.getInitParameter("trimSpaces");
         if (trimsp != null) {
-            if (trimsp.equalsIgnoreCase("true")) {
-                trimSpaces = true;
-            } else if (trimsp.equalsIgnoreCase("false")) {
-                trimSpaces = false;
-            } else {
+            try {
+                trimSpaces = TrimSpacesOption.valueOf(trimsp.toUpperCase());
+            } catch (IllegalArgumentException iae) {
                 if (log.isWarnEnabled()) {
-                    log.warn(Localizer.getMessage("jsp.warning.trimspaces"));
+                    log.warn(Localizer.getMessage("jsp.warning.trimspaces"), iae);
                 }
             }
         }

Modified: tomcat/trunk/java/org/apache/jasper/JspC.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/JspC.java?rev=1797782&r1=1797781&r2=1797782&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/JspC.java (original)
+++ tomcat/trunk/java/org/apache/jasper/JspC.java Tue Jun  6 12:10:04 2017
@@ -167,7 +167,7 @@ public class JspC extends Task implement
 
     protected String classPath = null;
     protected ClassLoader loader = null;
-    protected boolean trimSpaces = false;
+    protected TrimSpacesOption trimSpaces = TrimSpacesOption.FALSE;
     protected boolean genStringAsCharArray = false;
     protected boolean validateTld;
     protected boolean validateXml;
@@ -348,7 +348,13 @@ public class JspC extends Task implement
             } else if (tok.equals(SWITCH_XPOWERED_BY)) {
                 xpoweredBy = true;
             } else if (tok.equals(SWITCH_TRIM_SPACES)) {
-                setTrimSpaces(true);
+                tok = nextArg();
+                if (TrimSpacesOption.SINGLE.toString().equalsIgnoreCase(tok)) {
+                    setTrimSpaces(TrimSpacesOption.SINGLE);
+                } else {
+                    setTrimSpaces(TrimSpacesOption.TRUE);
+                    argPos--;
+                }
             } else if (tok.equals(SWITCH_CACHE)) {
                 tok = nextArg();
                 if ("false".equals(tok)) {
@@ -429,22 +435,23 @@ public class JspC extends Task implement
         return true;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
-    public boolean getTrimSpaces() {
+    public TrimSpacesOption getTrimSpaces() {
         return trimSpaces;
     }
 
+    public void setTrimSpaces(TrimSpacesOption trimSpaces) {
+        this.trimSpaces = trimSpaces;
+    }
+
     /**
-     * Sets the option to remove template text that consists entirely of
-     * whitespace.
+     * Sets the option to control handling of template text that consists
+     * entirely of whitespace.
      *
      * @param ts New value
      */
-    public void setTrimSpaces(boolean ts) {
-        this.trimSpaces = ts;
+    public void setTrimSpaces(String ts) {
+        this.trimSpaces = TrimSpacesOption.valueOf(ts);
     }
 
     /**

Modified: tomcat/trunk/java/org/apache/jasper/Options.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/Options.java?rev=1797782&r1=1797781&r2=1797782&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/Options.java (original)
+++ tomcat/trunk/java/org/apache/jasper/Options.java Tue Jun  6 12:10:04 2017
@@ -98,10 +98,13 @@ public interface Options {
     public boolean isSmapDumped();
 
     /**
-     * @return <code>true</code> to remove template text that consists entirely
-     *         of whitespace
+     * @return {@link TrimSpacesOption#TRUE} to remove template text that
+     *         consists only of whitespace from the output completely,
+     *         {@link TrimSpacesOption#SINGLE} to replace such template text
+     *         with a single space or {@link TrimSpacesOption#FALSE} to leave
+     *         such template text unchanged
      */
-    public boolean getTrimSpaces();
+    public TrimSpacesOption getTrimSpaces();
 
     /**
      * Gets the class-id value that is sent to Internet Explorer when using

Added: tomcat/trunk/java/org/apache/jasper/TrimSpacesOption.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/TrimSpacesOption.java?rev=1797782&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/TrimSpacesOption.java (added)
+++ tomcat/trunk/java/org/apache/jasper/TrimSpacesOption.java Tue Jun  6 12:10:04 2017
@@ -0,0 +1,23 @@
+/*
+ * 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.jasper;
+
+public enum TrimSpacesOption {
+    FALSE,
+    TRUE,
+    SINGLE
+}

Propchange: tomcat/trunk/java/org/apache/jasper/TrimSpacesOption.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: tomcat/trunk/java/org/apache/jasper/compiler/TextOptimizer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/TextOptimizer.java?rev=1797782&r1=1797781&r2=1797782&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/TextOptimizer.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/TextOptimizer.java Tue Jun  6 12:10:04 2017
@@ -18,6 +18,7 @@ package org.apache.jasper.compiler;
 
 import org.apache.jasper.JasperException;
 import org.apache.jasper.Options;
+import org.apache.jasper.TrimSpacesOption;
 
 /**
  */
@@ -29,6 +30,7 @@ public class TextOptimizer {
     private static class TextCatVisitor extends Node.Visitor {
 
         private static final String EMPTY_TEXT = "";
+        private static final String SINGLE_SPACE = " ";
 
         private final Options options;
         private final PageInfo pageInfo;
@@ -81,10 +83,15 @@ public class TextOptimizer {
 
         @Override
         public void visit(Node.TemplateText n) throws JasperException {
-            if ((options.getTrimSpaces() || pageInfo.isTrimDirectiveWhitespaces())
-                    && n.isAllSpace()) {
-                n.setText(EMPTY_TEXT);
-                return;
+            if (n.isAllSpace()) {
+                if ((options.getTrimSpaces() == TrimSpacesOption.TRUE ||
+                        pageInfo.isTrimDirectiveWhitespaces())) {
+                    n.setText(EMPTY_TEXT);
+                    return;
+                } else if (options.getTrimSpaces() == TrimSpacesOption.SINGLE) {
+                    n.setText(SINGLE_SPACE);
+                    return;
+                }
             }
 
             if (textNodeCount++ == 0) {

Modified: tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties?rev=1797782&r1=1797781&r2=1797782&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties Tue Jun  6 12:10:04 2017
@@ -185,7 +185,8 @@ where options include:\n\
 \    -ieplugin <clsid>     Java Plugin classid for Internet Explorer\n\
 \    -classpath <path>     Overrides java.class.path system property\n\
 \    -xpoweredBy           Add X-Powered-By response header\n\
-\    -trimSpaces           Remove template text that consists entirely of whitespace\n\
+\    -trimSpaces [single]  Remove template text that consists entirely of whitespace\n\
+\                          (if "single", replace such template text with a single space)\n
 \    -javaEncoding <enc>   Set the encoding charset for Java classes (default UTF-8)\n\
 \    -source <version>     Set the -source argument to the compiler (default 1.8)\n\
 \    -target <version>     Set the -target argument to the compiler (default 1.8)\n\

Modified: tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_es.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_es.properties?rev=1797782&r1=1797781&r2=1797782&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_es.properties (original)
+++ tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_es.properties Tue Jun  6 12:10:04 2017
@@ -181,7 +181,8 @@ y donde <opciones> incluyen:\n\
 \    -ieplugin <clsid>     Java Plugin classid para Internet Explorer\n\
 \    -classpath <path>     Pasa por alto la propiedad de sistema java.class.path\n\
 \    -xpoweredBy           A\u00F1ade cabecera de respuesta  X-Powered-By\n\
-\    -trimSpaces           Remove template text that consists entirely of whitespace\n\
+\    -trimSpaces [single]  Remove template text that consists entirely of whitespace\n\
+\                          (if "single", replace such template text with a single space)\n
 \    -javaEncoding <enc>   Set the encoding charset for Java classes (default UTF-8)\n\
 \    -source <version>     Set the -source argument to the compiler (default 1.8)\n\
 \    -target <version>     Set the -target argument to the compiler (default 1.8)\n\

Modified: tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_fr.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_fr.properties?rev=1797782&r1=1797781&r2=1797782&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_fr.properties (original)
+++ tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_fr.properties Tue Jun  6 12:10:04 2017
@@ -117,7 +117,8 @@ o\u00f9 les options comprennet:\n\
 \    -ieplugin <clsid>     Le classid du Plugin Java Plugin pour Internet Explorer\n\
 \    -classpath <path>     Overrides java.class.path system property\n\
 \    -xpoweredBy           Add X-Powered-By response header\n\
-\    -trimSpaces           Remove template text that consists entirely of whitespace\n\
+\    -trimSpaces [single]  Remove template text that consists entirely of whitespace\n\
+\                          (if "single", replace such template text with a single space)\n
 \    -javaEncoding <enc>   Set the encoding charset for Java classes (default UTF-8)\n\
 \    -source <version>     Set the -source argument to the compiler (default 1.8)\n\
 \    -target <version>     Set the -target argument to the compiler (default 1.8)\n\

Modified: tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_ja.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_ja.properties?rev=1797782&r1=1797781&r2=1797782&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_ja.properties (original)
+++ tomcat/trunk/java/org/apache/jasper/resources/LocalStrings_ja.properties Tue Jun  6 12:10:04 2017
@@ -157,7 +157,8 @@ JSP\u30d5\u30a1\u30a4\u30eb\u306e\u5834\
 \    -ieplugin <clsid>     Internet Explorer\u306eJava Plugin\u306eclassid\n\
 \    -classpath <path>     java.class.path\u30b7\u30b9\u30c6\u30e0\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u4e0a\u66f8\u304d\n\
 \    -xpoweredBy           X-Powered-By\u30ec\u30b9\u30dd\u30f3\u30b9\u30d8\u30c3\u30c0\u306e\u8ffd\u52a0\n\
-\    -trimSpaces           Remove template text that consists entirely of whitespace\n\
+\    -trimSpaces [single]  Remove template text that consists entirely of whitespace\n\
+\                          (if "single", replace such template text with a single space)\n
 \    -javaEncoding <enc>   Set the encoding charset for Java classes (default UTF-8)\n\
 \    -source <version>     Set the -source argument to the compiler (default 1.8)\n\
 \    -target <version>     Set the -target argument to the compiler (default 1.8)\n\

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1797782&r1=1797781&r2=1797782&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Tue Jun  6 12:10:04 2017
@@ -101,6 +101,12 @@
         <bug>44787</bug>: Improve error message when JSP compiler configuration
         options are not valid. (markt)
       </fix>
+      <add>
+        <bug>45931</bug>: Extend Jasper's <code>timeSpaces</code> option to add
+        support for <code>single</code> which replaces template text that
+        consists entirely of whitespace with a single space character. Based on
+        a patch by Meetesh Karia. (markt)
+      </add>
       <fix>
         <bug>53011</bug>: When pre-compiling with JspC, report all compilation
         errors rather than stopping after the first error. A new option

Modified: tomcat/trunk/webapps/docs/jasper-howto.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/jasper-howto.xml?rev=1797782&r1=1797781&r2=1797782&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/jasper-howto.xml (original)
+++ tomcat/trunk/webapps/docs/jasper-howto.xml Tue Jun  6 12:10:04 2017
@@ -192,8 +192,11 @@ debugging be suppressed? <code>true</cod
 <code>false</code>.</li>
 
 <li><strong>trimSpaces</strong> - Should template text that consists entirely of
-whitespace be removed? <code>true</code> or <code>false</code>, default
-<code>false</code>.</li>
+whitespace be removed from the output (<code>true</code>), replaced with a
+single space (<code>single</code>) or left unchanged (<code>false</code>)? Note
+that if a JSP page or tag file specifies a <code>trimDirectiveWhitespaces</code>
+value of <code>true</code>, that will take precedence over this configuration
+setting for that page/tag. Default <code>false</code>.</li>
 
 <li><strong>xpoweredBy</strong> - Determines whether X-Powered-By response
 header is added by generated servlet. <code>true</code> or <code>false</code>,



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org