You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2008/01/24 21:29:28 UTC
svn commit: r614981 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry/
main/java/org/apache/tapestry/internal/services/
main/java/org/apache/tapestry/services/ site/apt/ site/apt/guide/
test/java/org/apache/tapestry/integr...
Author: hlship
Date: Thu Jan 24 12:29:24 2008
New Revision: 614981
URL: http://svn.apache.org/viewvc?rev=614981&view=rev
Log:
TAPESTRY-2084: Add control over whether whitespace is stripped from templates by default
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/TapestryConstants.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/TemplateParserImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/conf.apt
tapestry/tapestry5/trunk/tapestry-core/src/site/apt/index.apt
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/services/AppModule.java
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/log4j.properties
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/TapestryConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/TapestryConstants.java?rev=614981&r1=614980&r2=614981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/TapestryConstants.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/TapestryConstants.java Thu Jan 24 12:29:24 2008
@@ -66,8 +66,8 @@
public static final String RESPONSE_ENCODING = "tapestry.response-encoding";
/**
- * Indicates whether Tapestry is running in production mode or developer mode. The primary difference is
- * how exceptions are reported.
+ * Indicates whether Tapestry is running in production mode or developer mode. The primary difference is how
+ * exceptions are reported.
*/
public static final String PRODUCTION_MODE_SYMBOL = "tapestry.production-mode";
@@ -98,6 +98,12 @@
* one of these values.
*/
public static final String SUPPORTED_LOCALES_SYMBOL = "tapestry.supported-locales";
+
+ /**
+ * Controls whether whitespace is compressed by default in templates, or left as is. The factory default is to
+ * compress whitespace. This can be overridden using the xml:space attribute inside template elements.
+ */
+ public static final String COMPRESS_WHITESPACE_SYMBOL = "tapestry.compress-whitespace";
private TapestryConstants()
{
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/TemplateParserImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/TemplateParserImpl.java?rev=614981&r1=614980&r2=614981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/TemplateParserImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/TemplateParserImpl.java Thu Jan 24 12:29:24 2008
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007 The Apache Software Foundation
+// Copyright 2006, 2007, 2008 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -14,11 +14,13 @@
package org.apache.tapestry.internal.services;
+import org.apache.tapestry.TapestryConstants;
import org.apache.tapestry.internal.parser.*;
import static org.apache.tapestry.ioc.IOCConstants.PERTHREAD_SCOPE;
import org.apache.tapestry.ioc.Location;
import org.apache.tapestry.ioc.Resource;
import org.apache.tapestry.ioc.annotations.Scope;
+import org.apache.tapestry.ioc.annotations.Symbol;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newList;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newSet;
import org.apache.tapestry.ioc.internal.util.InternalUtils;
@@ -60,15 +62,15 @@
private static final Pattern ID_PATTERN = Pattern.compile("^[a-z]\\w*$", Pattern.CASE_INSENSITIVE);
/**
- * Any amount of mixed simple whitespace (space, tab, form feed) mixed with at least one carriage return or line feed,
- * followed by any amount of whitespace. Will be reduced to a single linefeed.
+ * Any amount of mixed simple whitespace (space, tab, form feed) mixed with at least one carriage return or line
+ * feed, followed by any amount of whitespace. Will be reduced to a single linefeed.
*/
private static final Pattern REDUCE_LINEBREAKS_PATTERN = Pattern.compile("[ \\t\\f]*[\\r\\n]\\s*",
Pattern.MULTILINE);
/**
- * Used when compressing whitespace, matches any sequence of simple whitespace (space, tab, formfeed). Applied
- * after REDUCE_LINEBREAKS_PATTERN.
+ * Used when compressing whitespace, matches any sequence of simple whitespace (space, tab, formfeed). Applied after
+ * REDUCE_LINEBREAKS_PATTERN.
*/
private static final Pattern REDUCE_WHITESPACE_PATTERN = Pattern.compile("[ \\t\\f]+", Pattern.MULTILINE);
@@ -90,11 +92,13 @@
private final List<TemplateToken> _tokens = newList();
+ private final boolean _compressWhitespaceDefault;
+
/**
* Because {@link org.xml.sax.ContentHandler#startPrefixMapping(String, String)} events arrive before the
* corresponding {@link org.xml.sax.ContentHandler#startElement(String, String, String, org.xml.sax.Attributes)}
- * events, we need to accumlate the {@link org.apache.tapestry.internal.parser.DefineNamespacePrefixToken}s
- * ahead of time to get the correct ordering in the output tokens list.
+ * events, we need to accumlate the {@link org.apache.tapestry.internal.parser.DefineNamespacePrefixToken}s ahead of
+ * time to get the correct ordering in the output tokens list.
*/
private final List<DefineNamespacePrefixToken> _defineNamespaceTokens = newList();
@@ -149,10 +153,14 @@
};
- public TemplateParserImpl(Logger logger, Map<String, URL> configuration)
+ public TemplateParserImpl(Logger logger, Map<String, URL> configuration,
+
+ @Symbol(TapestryConstants.COMPRESS_WHITESPACE_SYMBOL)
+ boolean compressWhitespaceDefault)
{
_logger = logger;
_configuration = configuration;
+ _compressWhitespaceDefault = compressWhitespaceDefault;
reset();
}
@@ -177,7 +185,7 @@
public ComponentTemplate parseTemplate(Resource templateResource)
{
- _compressWhitespace = true;
+ _compressWhitespace = _compressWhitespaceDefault;
if (_reader == null)
{
@@ -250,8 +258,8 @@
/**
- * Adds tokens corresponding to the content in the text buffer. For a non-CDATA section, we also
- * search for expansions (thus we may add more than one token). Clears the text buffer.
+ * Adds tokens corresponding to the content in the text buffer. For a non-CDATA section, we also search for
+ * expansions (thus we may add more than one token). Clears the text buffer.
*/
private void processTextBuffer()
{
@@ -287,11 +295,11 @@
}
/**
- * Scans the text, using a regular expression pattern, for expansion patterns, and adds
- * appropriate tokens for what it finds.
+ * Scans the text, using a regular expression pattern, for expansion patterns, and adds appropriate tokens for what
+ * it finds.
*
- * @param text to add as {@link org.apache.tapestry.internal.parser.TextToken}s
- * and {@link org.apache.tapestry.internal.parser.ExpansionToken}s
+ * @param text to add as {@link org.apache.tapestry.internal.parser.TextToken}s and {@link
+ * org.apache.tapestry.internal.parser.ExpansionToken}s
*/
private void addTokensForText(String text)
{
@@ -352,9 +360,8 @@
}
/**
- * Checks to see if currently inside a t:body element (which should always be empty). Content is
- * ignored inside a body. If inside a body, then a warning is logged (but only one warning per
- * body element).
+ * Checks to see if currently inside a t:body element (which should always be empty). Content is ignored inside a
+ * body. If inside a body, then a warning is logged (but only one warning per body element).
*
* @return true if inside t:body, false otherwise
*/
@@ -526,8 +533,8 @@
/**
* @param attributes the attributes for the element
* @param namespaceURI the namespace URI for the element (or the empty string)
- * @param elementName the name of the element (to be assigned to the new token), may be null for a
- * component in the Tapestry namespace
+ * @param elementName the name of the element (to be assigned to the new token), may be null for a component in
+ * the Tapestry namespace
* @param identifiedType the type of the element, usually null, but may be the component type derived from
*/
private void startPossibleComponent(Attributes attributes, String namespaceURI, String elementName,
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java?rev=614981&r1=614980&r2=614981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java Thu Jan 24 12:29:24 2008
@@ -1691,6 +1691,8 @@
configuration.add(TapestryConstants.PRODUCTION_MODE_SYMBOL, "true");
+ configuration.add(TapestryConstants.COMPRESS_WHITESPACE_SYMBOL, "true");
+
// This is designed to make it easy to keep synchronized with script.aculo.ous. As we
// support a new version, we create a new folder, and update the path entry. We can then
// delete the old version folder (or keep it around). This should be more manageable than
Modified: tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/conf.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/conf.apt?rev=614981&r1=614980&r2=614981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/conf.apt (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/conf.apt Thu Jan 24 12:29:24 2008
@@ -82,7 +82,14 @@
These symbols are always defined in terms of strings, that are coerced to the appropriate type (a number,
a boolean, etc.). Of special note are <time intervals>, which are specified in a
{{{../../apidocs/org/apache/tapestry/ioc/util/TimeInterval.html}particular format}}.
-
+
+
+ [tapestry.compress-whitespace]
+
+ A flag (true or false). When true (the default) whitespace in component templates is compressed by default
+ (this can be fine-tuned using the standard xml:space attribute on an element in the template).
+ When this flag is false, then whitespace is retained by default (but can still be overridden).
+
[tapestry.default-cookie-max-age]
The default time interval that cookies created by Tapestry will be kept in the client web browser.
The dfault value is equal to one week.
Modified: tapestry/tapestry5/trunk/tapestry-core/src/site/apt/index.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/site/apt/index.apt?rev=614981&r1=614980&r2=614981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/site/apt/index.apt (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/site/apt/index.apt Thu Jan 24 12:29:24 2008
@@ -23,6 +23,8 @@
* Page instances are now cached more efficiently, with Tapestry attempting to control how many instances
are created, and culling unused instances periodically.
+ * Component templates are stripped of unnecessary whitespace.
+
* New Unless component (like an If component, but inverted).
* Support for "password" and "longtext" data types (for use with the BeanEditor), and a new
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java?rev=614981&r1=614980&r2=614981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java Thu Jan 24 12:29:24 2008
@@ -1449,8 +1449,12 @@
{
start("Override Validation Decorator");
+ // This is sub-optimal, as it doesn't esnure that the before/after field values really do wrap around
+ // the field (they do, but that's hard to prove!).
+
assertSourcePresent(
- "[Before label for Value]<label for=\"value\" id=\"value:label\">Value</label>[After label for Value][Before field Value]");
+ "[Before label for Value]<label for=\"value\" id=\"value:label\">Value</label>[After label for Value]",
+ "[Before field Value]", "[After field Value]");
}
/**
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/services/AppModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/services/AppModule.java?rev=614981&r1=614980&r2=614981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/services/AppModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/services/AppModule.java Thu Jan 24 12:29:24 2008
@@ -104,7 +104,8 @@
{
configuration.add(TapestryConstants.SUPPORTED_LOCALES_SYMBOL, "en,fr");
configuration.add(TapestryConstants.PRODUCTION_MODE_SYMBOL, "false");
-
+ configuration.add(TapestryConstants.COMPRESS_WHITESPACE_SYMBOL, "false");
+
configuration.add("app.injected-symbol", "Symbol contributed to ApplicationDefaults");
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/resources/log4j.properties?rev=614981&r1=614980&r2=614981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/resources/log4j.properties (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/resources/log4j.properties Thu Jan 24 12:29:24 2008
@@ -21,7 +21,7 @@
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern= %d{HH:mm:ss,SSS} [%p] %c{1} %m%n
-log4j.category.org.apache.tapestry.corelib.pages=debug
+# log4j.category.org.apache.tapestry.corelib.pages=debug