import javax.swing.text.*; import javax.swing.text.html.*; import javax.swing.text.html.parser.*; import java.io.*; import java.net.*; public class LineBreakingTagStripper extends HTMLEditorKit.ParserCallback { private Writer out; private String lineSeparator; public LineBreakingTagStripper(Writer out) { this(out, System.getProperty("line.separator", "\r\n")); } public LineBreakingTagStripper(Writer out, String lineSeparator) { this.out = out; this.lineSeparator = lineSeparator; } public void handleText(char[] text, int position) { try { out.write(text); out.flush(); } catch (IOException ex) { System.err.println(ex); } } public void handleEndTag(HTML.Tag tag, int position) { try { if (tag.isBlock()) { out.write(lineSeparator); out.write(lineSeparator); } else if (tag.breaksFlow()) { out.write(lineSeparator); } } catch (IOException ex) { System.err.println(ex); } } public void handleSimpleTag(HTML.Tag tag, MutableAttributeSet attributes, int position) { try { if (tag.isBlock()) { out.write(lineSeparator); out.write(lineSeparator); } else if (tag.breaksFlow()) { out.write(lineSeparator); } else { out.write(' '); } } catch (IOException ex) { System.err.println(ex); } } }