Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
HTMLSerializingContentHandler |
|
| 1.0;1 |
1 | /** | |
2 | * Distribution License: | |
3 | * JSword is free software; you can redistribute it and/or modify it under | |
4 | * the terms of the GNU Lesser General Public License, version 2.1 or later | |
5 | * as published by the Free Software Foundation. This program is distributed | |
6 | * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even | |
7 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
8 | * See the GNU Lesser General Public License for more details. | |
9 | * | |
10 | * The License is available on the internet at: | |
11 | * http://www.gnu.org/copyleft/lgpl.html | |
12 | * or by writing to: | |
13 | * Free Software Foundation, Inc. | |
14 | * 59 Temple Place - Suite 330 | |
15 | * Boston, MA 02111-1307, USA | |
16 | * | |
17 | * © CrossWire Bible Society, 2005 - 2016 | |
18 | * | |
19 | */ | |
20 | package org.crosswire.common.xml; | |
21 | ||
22 | import java.io.Writer; | |
23 | ||
24 | /** | |
25 | * This class provides for the formatted and syntax highlighted serialization of | |
26 | * a SAX stream to a <code>Writer</code>. | |
27 | * | |
28 | * @see gnu.lgpl.License The GNU Lesser General Public License for details. | |
29 | * @author DM Smith | |
30 | */ | |
31 | public class HTMLSerializingContentHandler extends PrettySerializingContentHandler { | |
32 | /** | |
33 | * A formatting serializer that does not add whitespace to the document. | |
34 | * This uses a StringWriter and the toString method will return its content. | |
35 | */ | |
36 | public HTMLSerializingContentHandler() { | |
37 | 0 | super(); |
38 | 0 | } |
39 | ||
40 | /** | |
41 | * A formatting serializer that adds whitespace to the document according to | |
42 | * the specified <code>FormatType</code>. This uses a StringWriter and the | |
43 | * toString method will return its content. | |
44 | * | |
45 | * @param theFormat | |
46 | * the formatting to use | |
47 | */ | |
48 | public HTMLSerializingContentHandler(FormatType theFormat) { | |
49 | 0 | super(theFormat); |
50 | 0 | } |
51 | ||
52 | /** | |
53 | * A formatting serializer that adds whitespace to the document according to | |
54 | * the specified <code>FormatType</code>. As the document is serialized it | |
55 | * is written to the provided <code>Writer</code>. | |
56 | * | |
57 | * @param theFormat | |
58 | * the formatting to use | |
59 | * @param theWriter | |
60 | * the writer to use | |
61 | */ | |
62 | public HTMLSerializingContentHandler(FormatType theFormat, Writer theWriter) { | |
63 | 0 | super(theFormat, theWriter); |
64 | 0 | } |
65 | ||
66 | @Override | |
67 | protected String decorateTagName(String tagName) { | |
68 | 0 | StringBuilder buf = new StringBuilder(50); |
69 | 0 | buf.append("<font class='tag'>"); |
70 | 0 | buf.append(super.decorateTagName(tagName)); |
71 | 0 | buf.append("</font>"); |
72 | 0 | return buf.toString(); |
73 | } | |
74 | ||
75 | /* | |
76 | * (non-Javadoc) | |
77 | * | |
78 | * @seeorg.crosswire.common.xml.PrettySerializingContentHandler# | |
79 | * decorateAttributeName(java.lang.String) | |
80 | */ | |
81 | @Override | |
82 | protected String decorateAttributeName(String attrName) { | |
83 | 0 | StringBuilder buf = new StringBuilder(50); |
84 | 0 | buf.append("<font class='attr'>"); |
85 | 0 | buf.append(super.decorateAttributeName(attrName)); |
86 | 0 | buf.append("</font>"); |
87 | 0 | return buf.toString(); |
88 | } | |
89 | ||
90 | /* | |
91 | * (non-Javadoc) | |
92 | * | |
93 | * @seeorg.crosswire.common.xml.PrettySerializingContentHandler# | |
94 | * decorateAttributeValue(java.lang.String) | |
95 | */ | |
96 | @Override | |
97 | protected String decorateAttributeValue(String attrValue) { | |
98 | 0 | StringBuilder buf = new StringBuilder(50); |
99 | 0 | buf.append("<font class='value'>"); |
100 | 0 | buf.append(super.decorateAttributeValue(attrValue)); |
101 | 0 | buf.append("</font>"); |
102 | 0 | return buf.toString(); |
103 | } | |
104 | ||
105 | /* | |
106 | * (non-Javadoc) | |
107 | * | |
108 | * @see | |
109 | * org.crosswire.common.xml.PrettySerializingContentHandler#decorateCharacters | |
110 | * (java.lang.String) | |
111 | */ | |
112 | @Override | |
113 | protected String decorateCharacters(String characters) { | |
114 | 0 | StringBuilder buf = new StringBuilder(50); |
115 | 0 | buf.append("<font class='text'>"); |
116 | 0 | buf.append(XMLUtil.escape(super.decorateCharacters(characters)).replaceAll("\n", "<br>")); |
117 | 0 | buf.append("</font>"); |
118 | 0 | return buf.toString(); |
119 | } | |
120 | ||
121 | /* | |
122 | * (non-Javadoc) | |
123 | * | |
124 | * @see | |
125 | * org.crosswire.common.xml.PrettySerializingContentHandler#decorateIndent | |
126 | * (int) | |
127 | */ | |
128 | @Override | |
129 | protected String decorateIndent(int indentLevel) { | |
130 | 0 | StringBuilder buf = new StringBuilder(100); |
131 | 0 | buf.append("<font class='indent'>"); |
132 | 0 | buf.append(super.decorateIndent(indentLevel).replaceAll("\t", " ")); |
133 | 0 | buf.append("</font>"); |
134 | 0 | return buf.toString(); |
135 | } | |
136 | ||
137 | /* | |
138 | * (non-Javadoc) | |
139 | * | |
140 | * @see org.xml.sax.ContentHandler#startDocument() | |
141 | */ | |
142 | @Override | |
143 | public void startDocument() { | |
144 | // Note: we should be using SPAN here but Sun's Java does not support | |
145 | // styling it. | |
146 | // Also, it introduces whitespace between the span and the text. | |
147 | 0 | write("<html><head><style type='text/css'>\nFONT.tag { font-family:courier new, monospaced; color:#666699; font-weight:bold; }\nFONT.attr { font-family:courier new, monospaced; color:#669966; font-weight:bold; }\nFONT.value { font-family:courier new, monospaced; color:#669966; font-style:italic; }\nFONT.indent { }\nFONT.text { font-family:courier new, monospaced; background:#FFFF99; }\n</style></head><body>\n"); |
148 | 0 | } |
149 | ||
150 | /* | |
151 | * (non-Javadoc) | |
152 | * | |
153 | * @see org.xml.sax.ContentHandler#endDocument() | |
154 | */ | |
155 | @Override | |
156 | public void endDocument() { | |
157 | 0 | write("</body></head>"); |
158 | 0 | } |
159 | ||
160 | /* | |
161 | * (non-Javadoc) | |
162 | * | |
163 | * @see | |
164 | * org.crosswire.common.xml.PrettySerializingContentHandler#getEmptyTagEnd() | |
165 | */ | |
166 | @Override | |
167 | protected String getEmptyTagEnd() { | |
168 | 0 | return XMLUtil.escape(super.getEmptyTagEnd()); |
169 | } | |
170 | ||
171 | /* | |
172 | * (non-Javadoc) | |
173 | * | |
174 | * @see | |
175 | * org.crosswire.common.xml.PrettySerializingContentHandler#getEndTagStart() | |
176 | */ | |
177 | @Override | |
178 | protected String getEndTagStart() { | |
179 | 0 | return XMLUtil.escape(super.getEndTagStart()); |
180 | } | |
181 | ||
182 | /* | |
183 | * (non-Javadoc) | |
184 | * | |
185 | * @see org.crosswire.common.xml.PrettySerializingContentHandler#getPIEnd() | |
186 | */ | |
187 | @Override | |
188 | protected String getPIEnd() { | |
189 | 0 | return XMLUtil.escape(super.getPIEnd()); |
190 | } | |
191 | ||
192 | /* | |
193 | * (non-Javadoc) | |
194 | * | |
195 | * @see | |
196 | * org.crosswire.common.xml.PrettySerializingContentHandler#getPIStart() | |
197 | */ | |
198 | @Override | |
199 | protected String getPIStart() { | |
200 | 0 | return XMLUtil.escape(super.getPIStart()); |
201 | } | |
202 | ||
203 | /* | |
204 | * (non-Javadoc) | |
205 | * | |
206 | * @see org.crosswire.common.xml.PrettySerializingContentHandler#getTagEnd() | |
207 | */ | |
208 | @Override | |
209 | protected String getTagEnd() { | |
210 | 0 | return XMLUtil.escape(super.getTagEnd()); |
211 | } | |
212 | ||
213 | /* | |
214 | * (non-Javadoc) | |
215 | * | |
216 | * @see | |
217 | * org.crosswire.common.xml.PrettySerializingContentHandler#getTagStart() | |
218 | */ | |
219 | @Override | |
220 | protected String getTagStart() { | |
221 | 0 | return XMLUtil.escape(super.getTagStart()); |
222 | } | |
223 | ||
224 | /* | |
225 | * (non-Javadoc) | |
226 | * | |
227 | * @see | |
228 | * org.crosswire.common.xml.PrettySerializingContentHandler#getNewline() | |
229 | */ | |
230 | @Override | |
231 | protected String getNewline() { | |
232 | 0 | return "<br>"; |
233 | } | |
234 | } |