[jdom-interest] PATCH: XMLOutputter: padText, outputElementContentSubject
Alex Chaffee
guru at edamame.stinky.com
Sat Oct 14 12:19:02 PDT 2000
Oops again. The original patch bounced (I misspelled ".org" :-) so I
didn't need to correct it. Below is a perfectly good patch.
---
Another patch for XMLOutputter.
Changes (please add these to the CVS log):
- renamed public printElementContent to outputElementContent (for consistency)
- added "padText" property, to avoid trimText changing
The quick <b>brown</b> fox
into
The quick<b>brown</b>fox
which allows you to output browser-friendly HTML even when using trimText
- misc doc fix
--
Alex Chaffee mailto:alex at jguru.com
jGuru - Java News and FAQs http://www.jguru.com/alex/
Creator of Gamelan http://www.gamelan.com/
Founder of Purple Technology http://www.purpletech.com/
Curator of Stinky Art Collective http://www.stinky.com/
cvs diff -u XMLOutputter.java
Index: XMLOutputter.java
===================================================================
RCS file: /home/cvspublic/jdom/src/java/org/jdom/output/XMLOutputter.java,v
retrieving revision 1.25
diff -u -r1.25 XMLOutputter.java
--- XMLOutputter.java 2000/10/13 23:33:10 1.25
+++ XMLOutputter.java 2000/10/14 18:28:43
@@ -155,6 +155,11 @@
/** should we preserve whitespace or not in text nodes? */
private boolean trimText = false;
+ /** pad string-element boundaries with whitespace **/
+ private boolean padText = false;
+
+ protected String padTextString = " ";
+
/**
* <p>
* This will create an <code>XMLOutputter</code> with
@@ -232,13 +237,17 @@
this.newlines = that.newlines;
this.encoding = that.encoding;
this.lineSeparator = that.lineSeparator;
- this.trimText = that.trimText;
+ this.trimText = that.trimText;
+ this.padText = that.padText;
}
/**
* <p>This will set the new-line separator. The default is
* <code>\r\n</code>. Note that if the "newlines" property is
- * false, this value is irrelevant. </p>
+ * false, this value is irrelevant. To make it output the system
+ * default line ending string, call
+ * <code>setLineSeparator(System.getProperty("line.separator"))</code>
+ * </p>
*
* <blockquote>
* We could change this to the System default,
@@ -329,6 +338,26 @@
}
/**
+ * <p> Ensure that text immediately preceded by or followed by an
+ * element will be "padded" with a single space. This is used to
+ * allow make browser-friendly HTML, avoiding trimText's
+ * transformation of, e.g.,
+ * <code>The quick <b>brown</b> fox</code> into
+ * <code>The quick<b>brown</b>fox</code> (the latter
+ * will run the three separate words together into a single word).
+ *
+ * This setting is not too useful if you haven't also called
+ * {@link setTrimText()}.</p>
+ *
+ * <p>Default: false </p>
+ *
+ * @param padText <code>boolean</code> if true, pad string-element boundaries
+ **/
+ public void setPadText(boolean padText) {
+ this.padText = padText;
+ }
+
+ /**
* <p> This will set the indent <code>String</code> to use; this
* is usually a <code>String</code> of empty spaces. If you pass
* null, or the empty string (""), then no indentation will
@@ -541,6 +570,25 @@
writer.flush(); // Flush the output to the underlying stream
}
+ /**
+ * <p> This will handle printing out an <code>{@link
+ * Element}</code>'s content only, not including its tag, and
+ * attributes. This can be useful for printing the content of an
+ * element that contains HTML, like "<description>JDOM is
+ * <b>fun>!</description>". </p>
+ *
+ * @param element <code>Element</code> to output.
+ * @param out <code>Writer</code> to write to.
+ * @param indent <code>int</code> level of indention. */
+ public void outputElementContent(Element element, Writer out)
+ throws IOException
+ {
+ List mixedContent = element.getMixedContent();
+ printElementContent(element, out, indentLevel,
+ new NamespaceStack(),
+ mixedContent);
+ }
+
// output cdata
/**
@@ -972,23 +1020,6 @@
* @param element <code>Element</code> to output.
* @param out <code>Writer</code> to write to.
* @param indent <code>int</code> level of indention. */
- public void printElementContent(Element element, Writer out)
- throws IOException
- {
- List mixedContent = element.getMixedContent();
- printElementContent(element, out, indentLevel,
- new NamespaceStack(),
- mixedContent);
- }
-
- /**
- * <p> This will handle printing out an <code>{@link
- * Element}</code>'s content only, not including its tag,
- * attributes, and namespace info. </p>
- *
- * @param element <code>Element</code> to output.
- * @param out <code>Writer</code> to write to.
- * @param indent <code>int</code> level of indention. */
protected void printElementContent(Element element, Writer out,
int indentLevel,
NamespaceStack namespaces,
@@ -1021,21 +1052,32 @@
*/
// Iterate through children
Object content = null;
+ Class justOutput = null;
for (int i=0, size=mixedContent.size(); i<size; i++) {
content = mixedContent.get(i);
// See if text, an element, a processing instruction or a comment
if (content instanceof Comment) {
printComment((Comment) content, out, indentLevel + 1);
+ justOutput = Comment.class;
} else if (content instanceof String) {
- printString((String)content, out);
+ if (padText && (justOutput == Element.class))
+ out.write(padTextString);
+ printString((String)content, out);
+ justOutput = String.class;
} else if (content instanceof Element) {
+ if (padText && (justOutput == String.class))
+ out.write(padTextString);
printElement((Element) content, out, indentLevel + 1, namespaces);
+ justOutput = Element.class;
} else if (content instanceof Entity) {
printEntity((Entity) content, out);
+ justOutput = Entity.class;
} else if (content instanceof ProcessingInstruction) {
printProcessingInstruction((ProcessingInstruction) content, out, indentLevel + 1);
+ justOutput = ProcessingInstruction.class;
} else if (content instanceof CDATA) {
printCDATASection((CDATA)content, out, indentLevel + 1);
+ justOutput = CDATA.class;
}
// Unsupported types are *not* printed
}
@@ -1275,6 +1317,9 @@
else if (args[i].equals("-trimText")) {
setTrimText(true);
}
+ else if (args[i].equals("-padText")) {
+ setPadText(true);
+ }
else {
return i;
}
@@ -1319,4 +1364,4 @@
}
}
*/
-}
\ No newline at end of file
+}
More information about the jdom-interest
mailing list