You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2007/06/18 01:12:15 UTC

svn commit: r548134 - in /incubator/abdera/java/trunk: core/src/main/java/org/apache/abdera/model/ core/src/main/java/org/apache/abdera/parser/ core/src/main/java/org/apache/abdera/util/ parser/src/main/java/org/apache/abdera/parser/stax/

Author: jmsnell
Date: Sun Jun 17 16:12:12 2007
New Revision: 548134

URL: http://svn.apache.org/viewvc?view=rev&rev=548134
Log:
Support for xml:space="preserve".  By default, the parser will preserve whitespace in elements.  This adds a new option to ParserOptions to trim leading and trailing
whitespace off element text and attribute values.  This option will only have an effect if there is not an in-scope xml:space="preserve".

For instance,

  ParserOptions options = parser.getDefaultParserOptions();
  options.setMustPreserveWhitespace(false);

  Document<Entry> doc = parser.parse(in, null, options);
  Entry entry = doc.getRoot();
  System.out.println(entry.getTitle()); 
 
   // unless xml:space is specified, leading and trailing whitespace will be trimmed from the title
 

Modified:
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Document.java
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Element.java
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/ElementWrapper.java
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/ExtensibleElementWrapper.java
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/ParserOptions.java
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractParserOptions.java
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/Constants.java
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMElement.java
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMParser.java

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Document.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Document.java?view=diff&rev=548134&r1=548133&r2=548134
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Document.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Document.java Sun Jun 17 16:12:12 2007
@@ -161,4 +161,8 @@
    */
   void setSlug(String slug);
   
+  boolean getMustPreserveWhitespace();
+  
+  void setMustPreserveWhitespace(boolean preserve);
+  
 }

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Element.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Element.java?view=diff&rev=548134&r1=548133&r2=548134
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Element.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Element.java Sun Jun 17 16:12:12 2007
@@ -220,4 +220,7 @@
   
   <T extends Element>List<T> getElements();
   
+  boolean getMustPreserveWhitespace();
+  
+  void setMustPreserveWhitespace(boolean preserve);
 }

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/ElementWrapper.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/ElementWrapper.java?view=diff&rev=548134&r1=548133&r2=548134
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/ElementWrapper.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/ElementWrapper.java Sun Jun 17 16:12:12 2007
@@ -214,5 +214,14 @@
   public Map<String, String> getNamespaces() {
     return internal.getNamespaces();
   }
+
+  public boolean getMustPreserveWhitespace() {
+    return internal.getMustPreserveWhitespace();
+  }
+
+  public void setMustPreserveWhitespace(boolean preserve) {
+    internal.setMustPreserveWhitespace(preserve);
+  }
+  
   
 }

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/ExtensibleElementWrapper.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/ExtensibleElementWrapper.java?view=diff&rev=548134&r1=548133&r2=548134
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/ExtensibleElementWrapper.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/ExtensibleElementWrapper.java Sun Jun 17 16:12:12 2007
@@ -86,5 +86,13 @@
   public String getSimpleExtension(String namespace, String localPart, String prefix) {
     return getExtInternal().getSimpleExtension(namespace, localPart, prefix);
   }
+
+  public boolean getMustPreserveWhitespace() {
+    return getExtInternal().getMustPreserveWhitespace();
+  }
+
+  public void setMustPreserveWhitespace(boolean preserve) {
+    getExtInternal().setMustPreserveWhitespace(preserve);
+  }
   
 }

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/ParserOptions.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/ParserOptions.java?view=diff&rev=548134&r1=548133&r2=548134
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/ParserOptions.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/ParserOptions.java Sun Jun 17 16:12:12 2007
@@ -76,4 +76,15 @@
    */
   void setAutodetectCharset(boolean detect);
   
+  /**
+   * If false, the parser will trim leading and trailing whitespace in element
+   * and attribute values unless there is an in-scope xml:space="preserve".
+   */
+  boolean getMustPreserveWhitespace();
+  
+  /**
+   * If false, the parser will trim leading and trailing whitespace in element
+   * and attribute values unless there is an in-scope xml:space="preserve".
+   */
+  void setMustPreserveWhitespace(boolean preserve);
 }

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractParserOptions.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractParserOptions.java?view=diff&rev=548134&r1=548133&r2=548134
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractParserOptions.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractParserOptions.java Sun Jun 17 16:12:12 2007
@@ -31,6 +31,7 @@
   protected String charset = null;
   protected ParseFilter parseFilter = null;
   protected boolean detect = false;
+  protected boolean preserve = true;
 
   protected abstract void initFactory();
   protected abstract void checkFactory(Factory factory);
@@ -80,4 +81,13 @@
   public void setAutodetectCharset(boolean detect) {
     this.detect = detect;
   }
+  
+  public boolean getMustPreserveWhitespace() {
+    return preserve;
+  }
+  
+  public void setMustPreserveWhitespace(boolean preserve) {
+    this.preserve = preserve;
+  }
+  
 }

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/Constants.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/Constants.java?view=diff&rev=548134&r1=548133&r2=548134
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/Constants.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/Constants.java Sun Jun 17 16:12:12 2007
@@ -85,6 +85,7 @@
   public static final String LN_HREF              = "href";
   public static final String LN_LANG              = "lang";
   public static final String LN_BASE              = "base";
+  public static final String LN_SPACE             = "space";
   public static final String LN_URI               = "uri";
   public static final String LN_VERSION           = "version";
   public static final String LN_REL               = "rel";
@@ -156,6 +157,7 @@
   public static final QName HREF                  = new QName(LN_HREF);
   public static final QName LANG                  = new QName(XML_NS, LN_LANG, "xml");
   public static final QName BASE                  = new QName(XML_NS, LN_BASE, "xml");
+  public static final QName SPACE                 = new QName(XML_NS, LN_SPACE, "xml");
   public static final QName AURI                  = new QName(LN_URI);
   public static final QName VERSION               = new QName(LN_VERSION);
   public static final QName REL                   = new QName(LN_REL);

Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java?view=diff&rev=548134&r1=548133&r2=548134
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java Sun Jun 17 16:12:12 2007
@@ -61,6 +61,7 @@
   protected EntityTag etag = null;
   protected String language = null;
   protected String slug = null;
+  protected boolean preserve = true;
 
   public FOMDocument() {
     super();
@@ -271,5 +272,13 @@
   
   public void setSlug(String slug) {
     this.slug = slug;
+  }
+  
+  public boolean getMustPreserveWhitespace() {
+    return preserve;
+  }
+  
+  public void setMustPreserveWhitespace(boolean preserve) {
+    this.preserve = preserve;
   }
 }

Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMElement.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMElement.java?view=diff&rev=548134&r1=548133&r2=548134
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMElement.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMElement.java Sun Jun 17 16:12:12 2007
@@ -269,7 +269,8 @@
   
   public String getAttributeValue(QName qname) {
     OMAttribute attr = getAttribute(qname);
-    return (attr != null) ? attr.getAttributeValue() : null;    
+    String value = (attr != null) ? attr.getAttributeValue() : null;
+    return getMustPreserveWhitespace() || value == null ? value : value.trim();
   }
   
   public void setAttributeValue(QName qname, String value) {
@@ -394,7 +395,7 @@
     OMElement element = this.getFirstChildWithName(qname);
     if (element != null)
       value = element.getText();
-    return value;
+    return getMustPreserveWhitespace() || value == null ? value : value.trim();
   }
 
   @SuppressWarnings("unchecked")
@@ -472,7 +473,8 @@
         // out all markup but leaving all text, even in child nodes
       }
     }
-    return buf.toString();
+    String value = buf.toString();
+    return getMustPreserveWhitespace() || value == null ? value : value.trim();
   }
   
   protected String getText(QName qname) {
@@ -717,5 +719,25 @@
     return new FOMList<T>(
         new FOMElementIteratorWrapper(
           (FOMFactory)factory,getChildElements()));
+  }
+  
+  public boolean getMustPreserveWhitespace() {
+    OMAttribute attr = getAttribute(SPACE);
+    String space = (attr != null) ? attr.getAttributeValue() : null;
+    Base parent = this.getParentElement();
+    
+    return space != null && space.equalsIgnoreCase("preserve") ? true :
+      (parent != null && parent instanceof Element) ? 
+        ((Element)parent).getMustPreserveWhitespace() : 
+      (parent != null && parent instanceof Document) ? 
+        ((Document)parent).getMustPreserveWhitespace() : true;
+  }
+  
+  public void setMustPreserveWhitespace(boolean preserve) {
+    if (preserve && !getMustPreserveWhitespace()) {
+      setAttributeValue(SPACE, "preserve");
+    } else if (!preserve && getMustPreserveWhitespace()) {
+      setAttributeValue(SPACE, "default");
+    }
   }
 }

Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMParser.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMParser.java?view=diff&rev=548134&r1=548133&r2=548134
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMParser.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMParser.java Sun Jun 17 16:12:12 2007
@@ -70,6 +70,7 @@
         document.setBaseUri(base.toString());
       if (options != null && options.getCharset() != null)
         ((OMDocument)document).setCharsetEncoding(options.getCharset());
+      if (options != null) document.setMustPreserveWhitespace(options.getMustPreserveWhitespace());
     } catch (Exception e) {
       if (!(e instanceof ParseException))
         e = new ParseException(e);