1 | |
package org.apache.maven.doxia.module.docbook; |
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
|
17 | |
|
18 | |
|
19 | |
|
20 | |
|
21 | |
|
22 | |
import java.io.IOException; |
23 | |
import java.util.Collection; |
24 | |
import java.util.HashSet; |
25 | |
import java.util.Stack; |
26 | |
|
27 | |
import org.apache.maven.doxia.macro.MacroExecutionException; |
28 | |
import org.apache.maven.doxia.markup.HtmlMarkup; |
29 | |
import org.apache.maven.doxia.parser.AbstractXmlParser; |
30 | |
import org.apache.maven.doxia.sink.Sink; |
31 | |
import org.apache.maven.doxia.sink.SinkEventAttributeSet; |
32 | |
|
33 | |
import org.codehaus.plexus.util.xml.pull.XmlPullParser; |
34 | |
import org.codehaus.plexus.util.xml.pull.XmlPullParserException; |
35 | |
|
36 | |
|
37 | |
|
38 | |
|
39 | |
|
40 | |
|
41 | |
|
42 | |
|
43 | |
|
44 | |
|
45 | 24 | public class DocBookParser |
46 | |
extends AbstractXmlParser |
47 | |
implements DocbookMarkup, SimplifiedDocbookMarkup |
48 | |
{ |
49 | |
|
50 | |
|
51 | |
|
52 | |
private int level; |
53 | |
|
54 | |
|
55 | |
|
56 | |
|
57 | |
private boolean isBold; |
58 | |
|
59 | |
private boolean inHead; |
60 | |
|
61 | |
private boolean ignore; |
62 | |
|
63 | |
private boolean simpleTag; |
64 | |
|
65 | |
private char trademark; |
66 | |
|
67 | |
|
68 | |
|
69 | |
|
70 | 24 | private final Stack<String> parent = new Stack<String>(); |
71 | |
|
72 | |
|
73 | |
|
74 | |
|
75 | 2 | private static final Collection<String> HIER_ELEMENTS = new HashSet<String>(); |
76 | |
|
77 | |
|
78 | |
|
79 | |
|
80 | |
|
81 | 2 | private static final Collection<String> META_ELEMENTS = new HashSet<String>(); |
82 | |
|
83 | |
|
84 | |
|
85 | |
|
86 | |
|
87 | 2 | private static final Collection<String> ARTICLEINFO_ELEMENTS = new HashSet<String>(); |
88 | |
|
89 | |
|
90 | |
|
91 | |
|
92 | 2 | private static final Collection<String> VERBATIM_ELEMENTS = new HashSet<String>(); |
93 | |
|
94 | |
|
95 | |
|
96 | |
|
97 | 2 | private static final Collection<String> BOLD_ELEMENTS = new HashSet<String>(); |
98 | |
|
99 | |
|
100 | |
|
101 | |
|
102 | 2 | private static final Collection<String> ITALIC_ELEMENTS = new HashSet<String>(); |
103 | |
|
104 | |
|
105 | |
|
106 | |
|
107 | 2 | private static final Collection<String> MONOSPACE_ELEMENTS = new HashSet<String>(); |
108 | |
|
109 | |
|
110 | |
|
111 | |
|
112 | |
|
113 | 2 | private static final Collection<String> IGNORABLE_ELEMENTS = new HashSet<String>(); |
114 | |
static |
115 | |
{ |
116 | 2 | META_ELEMENTS.add( SimplifiedDocbookMarkup.ARTICLEINFO_TAG.toString() ); |
117 | 2 | META_ELEMENTS.add( SimplifiedDocbookMarkup.AUTHORBLURB_TAG.toString() ); |
118 | 2 | META_ELEMENTS.add( SimplifiedDocbookMarkup.SUBTITLE_TAG.toString() ); |
119 | 2 | META_ELEMENTS.add( SimplifiedDocbookMarkup.TITLE_TAG.toString() ); |
120 | 2 | META_ELEMENTS.add( SimplifiedDocbookMarkup.TITLEABBREV_TAG.toString() ); |
121 | |
|
122 | 2 | ARTICLEINFO_ELEMENTS.add( SimplifiedDocbookMarkup.TITLE_TAG.toString() ); |
123 | 2 | ARTICLEINFO_ELEMENTS.add( SimplifiedDocbookMarkup.CORPAUTHOR_TAG.toString() ); |
124 | 2 | ARTICLEINFO_ELEMENTS.add( SimplifiedDocbookMarkup.DATE_TAG.toString() ); |
125 | |
|
126 | 2 | HIER_ELEMENTS.add( SimplifiedDocbookMarkup.SECTION_TAG.toString() ); |
127 | 2 | HIER_ELEMENTS.add( SimplifiedDocbookMarkup.APPENDIX_TAG.toString() ); |
128 | 2 | HIER_ELEMENTS.add( SimplifiedDocbookMarkup.BIBLIOGRAPHY_TAG.toString() ); |
129 | 2 | HIER_ELEMENTS.add( SimplifiedDocbookMarkup.BIBLIODIV_TAG.toString() ); |
130 | |
|
131 | 2 | VERBATIM_ELEMENTS.add( SimplifiedDocbookMarkup.PROGRAMLISTING_TAG.toString() ); |
132 | 2 | VERBATIM_ELEMENTS.add( SimplifiedDocbookMarkup.LITERALLAYOUT_TAG.toString() ); |
133 | |
|
134 | 2 | BOLD_ELEMENTS.add( SimplifiedDocbookMarkup.COMMAND_TAG.toString() ); |
135 | 2 | BOLD_ELEMENTS.add( SimplifiedDocbookMarkup.USERINPUT_TAG.toString() ); |
136 | |
|
137 | 2 | ITALIC_ELEMENTS.add( SimplifiedDocbookMarkup.REPLACEABLE_TAG.toString() ); |
138 | 2 | ITALIC_ELEMENTS.add( SimplifiedDocbookMarkup.SYSTEMITEM_TAG.toString() ); |
139 | 2 | ITALIC_ELEMENTS.add( SimplifiedDocbookMarkup.CITETITLE_TAG.toString() ); |
140 | 2 | ITALIC_ELEMENTS.add( SimplifiedDocbookMarkup.EMPHASIS_TAG.toString() ); |
141 | 2 | ITALIC_ELEMENTS.add( SimplifiedDocbookMarkup.ATTRIBUTION_TAG.toString() ); |
142 | 2 | ITALIC_ELEMENTS.add( SimplifiedDocbookMarkup.LINEANNOTATION_TAG.toString() ); |
143 | |
|
144 | 2 | MONOSPACE_ELEMENTS.add( SimplifiedDocbookMarkup.COMPUTEROUTPUT_TAG.toString() ); |
145 | 2 | MONOSPACE_ELEMENTS.add( SimplifiedDocbookMarkup.REPLACEABLE_TAG.toString() ); |
146 | 2 | MONOSPACE_ELEMENTS.add( SimplifiedDocbookMarkup.LITERAL_TAG.toString() ); |
147 | 2 | MONOSPACE_ELEMENTS.add( SimplifiedDocbookMarkup.OPTION_TAG.toString() ); |
148 | 2 | MONOSPACE_ELEMENTS.add( SimplifiedDocbookMarkup.SYSTEMITEM_TAG.toString() ); |
149 | 2 | MONOSPACE_ELEMENTS.add( SimplifiedDocbookMarkup.USERINPUT_TAG.toString() ); |
150 | 2 | MONOSPACE_ELEMENTS.add( SimplifiedDocbookMarkup.FILENAME_TAG.toString() ); |
151 | |
|
152 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.ABBREV_TAG.toString() ); |
153 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.ABSTRACT_TAG.toString() ); |
154 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.BIBLIOMIXED_TAG.toString() ); |
155 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.BIBLIOMSET_TAG.toString() ); |
156 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.COLSPEC_TAG.toString() ); |
157 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.EPIGRAPH_TAG.toString() ); |
158 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.EXAMPLE_TAG.toString() ); |
159 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.FOOTNOTEREF_TAG.toString() ); |
160 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.IMAGEOBJECT_TAG.toString() ); |
161 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.INLINEMEDIAOBJECT_TAG.toString() ); |
162 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.ISSUENUM_TAG.toString() ); |
163 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.PHRASE_TAG.toString() ); |
164 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.PUBDATE_TAG.toString() ); |
165 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.PUBLISHERNAME_TAG.toString() ); |
166 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.SPANSPEC_TAG.toString() ); |
167 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.TEXTOBJECT_TAG.toString() ); |
168 | 2 | IGNORABLE_ELEMENTS.add( SimplifiedDocbookMarkup.VOLUMENUM_TAG.toString() ); |
169 | 2 | } |
170 | |
|
171 | |
|
172 | |
protected void init() |
173 | |
{ |
174 | 68 | super.init(); |
175 | |
|
176 | 68 | this.parent.clear(); |
177 | 68 | this.trademark = 0; |
178 | 68 | this.level = 0; |
179 | 68 | this.isBold = false; |
180 | 68 | this.inHead = false; |
181 | 68 | this.ignore = false; |
182 | 68 | this.simpleTag = false; |
183 | 68 | } |
184 | |
|
185 | |
|
186 | |
|
187 | |
|
188 | |
|
189 | |
|
190 | |
protected void handleStartTag( XmlPullParser parser, Sink sink ) |
191 | |
throws XmlPullParserException, MacroExecutionException |
192 | |
{ |
193 | 1972 | if ( inHead && !META_ELEMENTS.contains( parser.getName() ) |
194 | |
&& isParent( SimplifiedDocbookMarkup.ARTICLE_TAG.toString() ) ) |
195 | |
{ |
196 | 14 | sink.head_(); |
197 | 14 | inHead = false; |
198 | |
|
199 | |
|
200 | 14 | sink.body(); |
201 | |
} |
202 | |
|
203 | 1972 | final SinkEventAttributeSet attribs = getAttributesFromParser( parser ); |
204 | 1972 | simpleTag = parser.isEmptyElementTag(); |
205 | |
|
206 | 1972 | if ( parser.getName().equals( SimplifiedDocbookMarkup.ARTICLE_TAG.toString() ) ) |
207 | |
{ |
208 | 14 | handleArticleStart( sink, attribs ); |
209 | |
} |
210 | 1958 | else if ( isParent( SimplifiedDocbookMarkup.ARTICLEINFO_TAG.toString() ) ) |
211 | |
{ |
212 | 324 | handleArticleInfoStartTags( parser.getName(), sink, attribs ); |
213 | |
} |
214 | 1634 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.ARTICLEINFO_TAG.toString() ) ) |
215 | |
{ |
216 | 12 | parent.push( SimplifiedDocbookMarkup.ARTICLEINFO_TAG.toString() ); |
217 | |
} |
218 | 1622 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.FOOTNOTE_TAG.toString() ) |
219 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.SECTIONINFO_TAG.toString() ) |
220 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.VIDEOOBJECT_TAG.toString() ) |
221 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.AUDIOOBJECT_TAG.toString() ) ) |
222 | |
{ |
223 | 8 | parent.push( parser.getName() ); |
224 | 8 | ignore = true; |
225 | |
} |
226 | 1614 | else if ( isParent( ( SimplifiedDocbookMarkup.FOOTNOTE_TAG.toString() ) ) |
227 | |
|| isParent( SimplifiedDocbookMarkup.AUDIOOBJECT_TAG.toString() ) |
228 | |
|| isParent( SimplifiedDocbookMarkup.VIDEOOBJECT_TAG.toString() ) |
229 | |
|| isParent( SimplifiedDocbookMarkup.SECTIONINFO_TAG.toString() ) |
230 | |
|| isParent( SimplifiedDocbookMarkup.ENTRYTBL_TAG.toString() ) ) |
231 | |
{ |
232 | 40 | return; |
233 | |
} |
234 | 1574 | else if ( HIER_ELEMENTS.contains( parser.getName() ) ) |
235 | |
{ |
236 | 100 | handleSectionElements( sink, parser.getName(), attribs ); |
237 | |
} |
238 | 1474 | else if ( listStartTags ( parser.getName(), sink, attribs ) ) |
239 | |
{ |
240 | 372 | return; |
241 | |
} |
242 | 1102 | else if ( mediaStartTag( parser.getName(), sink, attribs ) ) |
243 | |
{ |
244 | 66 | return; |
245 | |
} |
246 | 1036 | else if ( tableStartTags( parser.getName(), sink, attribs ) ) |
247 | |
{ |
248 | 262 | return; |
249 | |
} |
250 | 774 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.PARA_TAG.toString() ) ) |
251 | |
{ |
252 | 432 | handleParaStart( sink, attribs ); |
253 | |
} |
254 | 342 | else if ( styleStartTags( parser.getName(), sink, attribs ) ) |
255 | |
{ |
256 | 70 | return; |
257 | |
} |
258 | 272 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.TITLE_TAG.toString() ) ) |
259 | |
{ |
260 | 124 | handleTitleStart( sink, attribs ); |
261 | |
} |
262 | 148 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.EMAIL_TAG.toString() ) ) |
263 | |
{ |
264 | 2 | handleEmailStart( parser, sink, attribs ); |
265 | |
} |
266 | 146 | else if ( linkStartTag( parser.getName(), sink, attribs ) ) |
267 | |
{ |
268 | 30 | return; |
269 | |
} |
270 | 116 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.QUOTE_TAG.toString() ) ) |
271 | |
{ |
272 | 2 | sink.text( "\"", null ); |
273 | |
} |
274 | 114 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.TRADEMARK_TAG.toString() ) ) |
275 | |
{ |
276 | 10 | trademark = '\u2122'; |
277 | 10 | final Object trade = attribs.getAttribute( "class" ); |
278 | |
|
279 | 10 | if ( trade != null ) |
280 | |
{ |
281 | 8 | trademark = DocbookUtils.trademarkFromClass( trade.toString() ); |
282 | |
} |
283 | 10 | } |
284 | |
else |
285 | |
{ |
286 | 104 | if ( !ignorable( parser.getName() ) ) |
287 | |
{ |
288 | 8 | if ( simpleTag ) |
289 | |
{ |
290 | 0 | handleUnknown( parser, sink, HtmlMarkup.TAG_TYPE_SIMPLE ); |
291 | |
} |
292 | |
else |
293 | |
{ |
294 | 8 | handleUnknown( parser, sink, HtmlMarkup.TAG_TYPE_START ); |
295 | |
} |
296 | |
} |
297 | |
} |
298 | 1132 | } |
299 | |
|
300 | |
|
301 | |
protected void handleEndTag( XmlPullParser parser, Sink sink ) |
302 | |
throws XmlPullParserException, MacroExecutionException |
303 | |
{ |
304 | 1970 | if ( parser.getName().equals( SimplifiedDocbookMarkup.ARTICLE_TAG.toString() ) ) |
305 | |
{ |
306 | 14 | sink.body_(); |
307 | |
} |
308 | 1956 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.ARTICLEINFO_TAG.toString() ) ) |
309 | |
{ |
310 | 12 | parent.pop(); |
311 | |
} |
312 | 1944 | else if ( isParent( SimplifiedDocbookMarkup.ARTICLEINFO_TAG.toString() ) ) |
313 | |
{ |
314 | 324 | handleArticleInfoEndTags( parser.getName(), sink ); |
315 | |
} |
316 | 1620 | else if ( HIER_ELEMENTS.contains( parser.getName() ) ) |
317 | |
{ |
318 | 100 | sink.section_( level ); |
319 | |
|
320 | |
|
321 | 100 | level--; |
322 | 100 | parent.pop(); |
323 | |
} |
324 | 1520 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.FOOTNOTE_TAG.toString() ) |
325 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.AUDIOOBJECT_TAG.toString() ) |
326 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.VIDEOOBJECT_TAG.toString() ) |
327 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.SECTIONINFO_TAG.toString() ) |
328 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.ENTRYTBL_TAG.toString() ) ) |
329 | |
{ |
330 | 10 | parent.pop(); |
331 | 10 | ignore = false; |
332 | |
} |
333 | 1510 | else if ( isParent( ( SimplifiedDocbookMarkup.FOOTNOTE_TAG.toString() ) ) |
334 | |
|| isParent( SimplifiedDocbookMarkup.AUDIOOBJECT_TAG.toString() ) |
335 | |
|| isParent( SimplifiedDocbookMarkup.VIDEOOBJECT_TAG.toString() ) |
336 | |
|| isParent( SimplifiedDocbookMarkup.SECTIONINFO_TAG.toString() ) |
337 | |
|| isParent( SimplifiedDocbookMarkup.ENTRYTBL_TAG.toString() ) ) |
338 | |
{ |
339 | 40 | return; |
340 | |
} |
341 | 1470 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.ITEMIZEDLIST_TAG.toString() ) ) |
342 | |
{ |
343 | 64 | sink.list_(); |
344 | 64 | parent.pop(); |
345 | |
} |
346 | 1406 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.ORDEREDLIST_TAG.toString() ) ) |
347 | |
{ |
348 | 10 | sink.numberedList_(); |
349 | 10 | parent.pop(); |
350 | |
} |
351 | 1396 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.LISTITEM_TAG.toString() ) ) |
352 | |
{ |
353 | 272 | parent.pop(); |
354 | |
|
355 | 272 | if ( isParent( SimplifiedDocbookMarkup.VARIABLELIST_TAG.toString() ) ) |
356 | |
{ |
357 | 10 | sink.definition_(); |
358 | |
} |
359 | 262 | else if ( isParent( SimplifiedDocbookMarkup.ORDEREDLIST_TAG.toString() ) ) |
360 | |
{ |
361 | 18 | sink.numberedListItem_(); |
362 | |
} |
363 | |
else |
364 | |
{ |
365 | 244 | sink.listItem_(); |
366 | |
} |
367 | |
} |
368 | 1124 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.VARIABLELIST_TAG.toString() ) ) |
369 | |
{ |
370 | 6 | sink.definitionList_(); |
371 | |
} |
372 | 1118 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.VARLISTENTRY_TAG.toString() ) ) |
373 | |
{ |
374 | 10 | sink.definitionListItem_(); |
375 | |
} |
376 | 1108 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.TERM_TAG.toString() ) ) |
377 | |
{ |
378 | 10 | sink.definedTerm_(); |
379 | |
} |
380 | 1098 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG.toString() ) ) |
381 | |
{ |
382 | 18 | sink.figure_(); |
383 | 18 | parent.pop(); |
384 | |
} |
385 | 1080 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.IMAGEOBJECT_TAG.toString() ) |
386 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.FIGURE_TAG.toString() ) |
387 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.THEAD_TAG.toString() ) |
388 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.TFOOT_TAG.toString() ) |
389 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.TBODY_TAG.toString() ) ) |
390 | |
{ |
391 | 54 | parent.pop(); |
392 | |
} |
393 | 1026 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.CAPTION_TAG.toString() ) ) |
394 | |
{ |
395 | 6 | handleCaptionEnd(sink); |
396 | |
} |
397 | 1020 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) |
398 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.INFORMALTABLE_TAG.toString() ) ) |
399 | |
{ |
400 | 20 | sink.table_(); |
401 | |
|
402 | 20 | parent.pop(); |
403 | |
} |
404 | 1000 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.TR_TAG.toString() ) |
405 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.ROW_TAG.toString() ) ) |
406 | |
{ |
407 | 50 | sink.tableRow_(); |
408 | |
} |
409 | 950 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.TGROUP_TAG.toString() ) ) |
410 | |
{ |
411 | 20 | sink.tableRows_(); |
412 | |
} |
413 | 930 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.ENTRY_TAG.toString() ) |
414 | |
&& isParent( SimplifiedDocbookMarkup.THEAD_TAG.toString() ) |
415 | |
|| parser.getName().equals( TH_TAG.toString() ) ) |
416 | |
{ |
417 | 16 | sink.tableHeaderCell_(); |
418 | |
} |
419 | 914 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.ENTRY_TAG.toString() ) ) |
420 | |
{ |
421 | 126 | sink.tableCell_(); |
422 | |
} |
423 | 788 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.PARA_TAG.toString() ) ) |
424 | |
{ |
425 | 432 | handleParaEnd( sink ); |
426 | |
} |
427 | 356 | else if ( VERBATIM_ELEMENTS.contains( parser.getName() ) ) |
428 | |
{ |
429 | 14 | sink.verbatim_(); |
430 | |
} |
431 | 342 | else if ( BOLD_ELEMENTS.contains( parser.getName() ) |
432 | |
&& MONOSPACE_ELEMENTS.contains( parser.getName() ) ) |
433 | |
{ |
434 | 2 | sink.monospaced_(); |
435 | 2 | sink.bold_(); |
436 | |
} |
437 | 340 | else if ( ITALIC_ELEMENTS.contains( parser.getName() ) |
438 | |
&& MONOSPACE_ELEMENTS.contains( parser.getName() ) ) |
439 | |
{ |
440 | 4 | sink.monospaced_(); |
441 | 4 | sink.italic_(); |
442 | |
} |
443 | 336 | else if ( BOLD_ELEMENTS.contains( parser.getName() ) ) |
444 | |
{ |
445 | 8 | sink.bold_(); |
446 | |
} |
447 | 328 | else if ( ITALIC_ELEMENTS.contains( parser.getName() ) ) |
448 | |
{ |
449 | 24 | if ( isBold ) |
450 | |
{ |
451 | 6 | sink.bold_(); |
452 | |
|
453 | 6 | isBold = false; |
454 | |
} |
455 | |
else |
456 | |
{ |
457 | 18 | sink.italic_(); |
458 | |
} |
459 | |
} |
460 | 304 | else if ( MONOSPACE_ELEMENTS.contains( parser.getName() ) ) |
461 | |
{ |
462 | 18 | sink.monospaced_(); |
463 | |
} |
464 | 286 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.TITLE_TAG.toString() ) ) |
465 | |
{ |
466 | 124 | handleTitleEnd( sink ); |
467 | |
} |
468 | 162 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.ULINK_TAG.toString() ) |
469 | |
|| parser.getName().equals( SimplifiedDocbookMarkup.LINK_TAG.toString() ) ) |
470 | |
{ |
471 | 20 | if ( isParent( parser.getName() ) ) |
472 | |
{ |
473 | 20 | parent.pop(); |
474 | 20 | sink.link_(); |
475 | |
} |
476 | |
} |
477 | 142 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.QUOTE_TAG.toString() ) ) |
478 | |
{ |
479 | 2 | sink.text( "\"", null ); |
480 | |
} |
481 | 140 | else if ( parser.getName().equals( SimplifiedDocbookMarkup.TRADEMARK_TAG.toString() ) ) |
482 | |
{ |
483 | 10 | sink.text( Character.toString( trademark ), null ); |
484 | |
} |
485 | 130 | else if ( !simpleTag && !ignorable( parser.getName() ) ) |
486 | |
{ |
487 | 8 | handleUnknown( parser, sink, HtmlMarkup.TAG_TYPE_END ); |
488 | |
} |
489 | 1930 | } |
490 | |
|
491 | |
|
492 | |
protected void handleComment( XmlPullParser parser, Sink sink ) |
493 | |
throws XmlPullParserException |
494 | |
{ |
495 | 84 | final String text = parser.getText(); |
496 | |
|
497 | 84 | if ( "PB".equals( text.trim() ) ) |
498 | |
{ |
499 | 2 | sink.pageBreak(); |
500 | |
} |
501 | 82 | else if ( "HR".equals( text.trim() ) ) |
502 | |
{ |
503 | 2 | sink.horizontalRule(); |
504 | |
} |
505 | 80 | else if ( "LB".equals( text.trim() ) ) |
506 | |
{ |
507 | 40 | sink.lineBreak(); |
508 | |
} |
509 | 40 | else if ( "anchor_end".equals( text.trim() ) ) |
510 | |
{ |
511 | 6 | sink.anchor_(); |
512 | |
} |
513 | |
else |
514 | |
{ |
515 | 34 | sink.comment( text.trim() ); |
516 | |
} |
517 | 84 | } |
518 | |
|
519 | |
|
520 | |
protected void handleCdsect( XmlPullParser parser, Sink sink ) |
521 | |
throws XmlPullParserException |
522 | |
{ |
523 | 0 | if ( !ignore ) |
524 | |
{ |
525 | 0 | super.handleCdsect( parser, sink ); |
526 | |
} |
527 | 0 | } |
528 | |
|
529 | |
|
530 | |
protected void handleEntity( XmlPullParser parser, Sink sink ) |
531 | |
throws XmlPullParserException |
532 | |
{ |
533 | 34 | if ( !ignore ) |
534 | |
{ |
535 | 34 | super.handleEntity( parser, sink ); |
536 | |
} |
537 | 34 | } |
538 | |
|
539 | |
|
540 | |
protected void handleText( XmlPullParser parser, Sink sink ) |
541 | |
throws XmlPullParserException |
542 | |
{ |
543 | 2412 | if ( !ignore ) |
544 | |
{ |
545 | 2060 | super.handleText( parser, sink ); |
546 | |
} |
547 | 2412 | } |
548 | |
|
549 | |
|
550 | |
|
551 | |
|
552 | |
|
553 | |
private void handleArticleInfoStartTags( String name, Sink sink, SinkEventAttributeSet attribs ) |
554 | |
{ |
555 | 324 | if ( !ARTICLEINFO_ELEMENTS.contains( name ) ) |
556 | |
{ |
557 | 272 | ignore = true; |
558 | 272 | return; |
559 | |
} |
560 | |
|
561 | 52 | if ( name.equals( SimplifiedDocbookMarkup.TITLE_TAG.toString() ) ) |
562 | |
{ |
563 | 28 | sink.title( attribs ); |
564 | |
} |
565 | 24 | else if ( name.equals( SimplifiedDocbookMarkup.CORPAUTHOR_TAG.toString() ) ) |
566 | |
{ |
567 | 8 | sink.author( attribs ); |
568 | |
} |
569 | 16 | else if ( name.equals( SimplifiedDocbookMarkup.DATE_TAG.toString() ) ) |
570 | |
{ |
571 | 16 | sink.date( attribs ); |
572 | |
} |
573 | 52 | } |
574 | |
|
575 | |
private void handleArticleInfoEndTags( String name, Sink sink ) |
576 | |
{ |
577 | 324 | if ( !ARTICLEINFO_ELEMENTS.contains( name ) ) |
578 | |
{ |
579 | 272 | ignore = false; |
580 | 272 | return; |
581 | |
} |
582 | |
|
583 | 52 | if ( name.equals( SimplifiedDocbookMarkup.TITLE_TAG.toString() ) ) |
584 | |
{ |
585 | 28 | sink.title_(); |
586 | |
} |
587 | 24 | else if ( name.equals( SimplifiedDocbookMarkup.CORPAUTHOR_TAG.toString() ) ) |
588 | |
{ |
589 | 8 | sink.author_(); |
590 | |
} |
591 | 16 | else if ( name.equals( SimplifiedDocbookMarkup.DATE_TAG.toString() ) ) |
592 | |
{ |
593 | 16 | sink.date_(); |
594 | |
} |
595 | 52 | } |
596 | |
|
597 | |
private void handleCaptionStart( Sink sink, SinkEventAttributeSet attribs ) |
598 | |
{ |
599 | 6 | if ( isParent( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG.toString() ) ) |
600 | |
{ |
601 | 6 | sink.figureCaption( attribs ); |
602 | |
} |
603 | 0 | else if ( isParent( SimplifiedDocbookMarkup.INFORMALTABLE_TAG.toString() ) |
604 | |
|| isParent( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) ) |
605 | |
{ |
606 | 0 | sink.tableCaption( attribs ); |
607 | |
} |
608 | |
|
609 | 6 | parent.push( SimplifiedDocbookMarkup.CAPTION_TAG.toString() ); |
610 | 6 | } |
611 | |
|
612 | |
private void handleCaptionEnd( Sink sink ) |
613 | |
{ |
614 | 6 | parent.pop(); |
615 | |
|
616 | 6 | if ( isParent( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG.toString() ) ) |
617 | |
{ |
618 | 6 | sink.figureCaption_(); |
619 | |
} |
620 | 0 | else if ( isParent( SimplifiedDocbookMarkup.INFORMALTABLE_TAG.toString() ) |
621 | |
|| isParent( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) ) |
622 | |
{ |
623 | 0 | sink.tableCaption_(); |
624 | |
} |
625 | 6 | } |
626 | |
|
627 | |
private void handleEmailStart( XmlPullParser parser, Sink sink, SinkEventAttributeSet attribs ) |
628 | |
throws XmlPullParserException |
629 | |
{ |
630 | |
try |
631 | |
{ |
632 | 2 | final String mailto = parser.nextText(); |
633 | 2 | sink.link( "mailto:" + mailto, attribs ); |
634 | 2 | sink.monospaced(); |
635 | 2 | sink.text( mailto, null ); |
636 | 2 | sink.monospaced_(); |
637 | 2 | sink.link_(); |
638 | |
} |
639 | 0 | catch ( IOException e ) |
640 | |
{ |
641 | 0 | throw new XmlPullParserException( "IOException: " + e.getMessage(), parser, e ); |
642 | 2 | } |
643 | 2 | } |
644 | |
|
645 | |
private void handleFigureStart( Sink sink, SinkEventAttributeSet attribs ) |
646 | |
{ |
647 | 18 | sink.figure( attribs ); |
648 | 18 | parent.push( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG.toString() ); |
649 | 18 | } |
650 | |
|
651 | |
private void handleArticleStart( Sink sink, SinkEventAttributeSet attribs ) |
652 | |
{ |
653 | 14 | sink.head( attribs ); |
654 | 14 | inHead = true; |
655 | |
|
656 | 14 | parent.push( SimplifiedDocbookMarkup.ARTICLE_TAG.toString() ); |
657 | 14 | } |
658 | |
|
659 | |
|
660 | |
private void handleSectionElements( Sink sink, String name, SinkEventAttributeSet attribs ) |
661 | |
{ |
662 | |
|
663 | 100 | level++; |
664 | |
|
665 | 100 | sink.section( level, attribs ); |
666 | |
|
667 | 100 | parent.push( name ); |
668 | 100 | } |
669 | |
|
670 | |
private void handleAnchorStart( Sink sink, SinkEventAttributeSet attribs ) |
671 | |
{ |
672 | 6 | final Object id = attribs.getAttribute( SimplifiedDocbookMarkup.ID_ATTRIBUTE ); |
673 | |
|
674 | 6 | if ( id != null ) |
675 | |
{ |
676 | 6 | sink.anchor( id.toString(), attribs ); |
677 | |
} |
678 | 6 | } |
679 | |
|
680 | |
private void handleImageDataStart( Sink sink, SinkEventAttributeSet attribs ) |
681 | |
throws XmlPullParserException |
682 | |
{ |
683 | 16 | final Object fileref = attribs.getAttribute( SimplifiedDocbookMarkup.FILEREF_ATTRIBUTE ); |
684 | |
|
685 | 16 | if ( fileref == null ) |
686 | |
{ |
687 | 0 | throw new XmlPullParserException( "Missing fileref attribute in imagedata!" ); |
688 | |
} |
689 | |
|
690 | 16 | sink.figureGraphics( fileref.toString(), attribs ); |
691 | 16 | } |
692 | |
|
693 | |
private void handleItemizedListStart( Sink sink, SinkEventAttributeSet attribs ) |
694 | |
{ |
695 | 64 | sink.list( attribs ); |
696 | |
|
697 | 64 | parent.push( SimplifiedDocbookMarkup.ITEMIZEDLIST_TAG.toString() ); |
698 | 64 | } |
699 | |
|
700 | |
private void handleLinkStart( Sink sink, SinkEventAttributeSet attribs ) |
701 | |
throws XmlPullParserException |
702 | |
{ |
703 | 10 | final Object linkend = attribs.getAttribute( SimplifiedDocbookMarkup.LINKEND_ATTRIBUTE ); |
704 | |
|
705 | 10 | if ( linkend == null ) |
706 | |
{ |
707 | 0 | throw new XmlPullParserException( "Missing linkend attribute in link!" ); |
708 | |
} |
709 | |
|
710 | 10 | parent.push( SimplifiedDocbookMarkup.LINK_TAG.toString() ); |
711 | 10 | sink.link( "#" + linkend.toString(), attribs ); |
712 | 10 | } |
713 | |
|
714 | |
private void handleListItemStart( Sink sink, SinkEventAttributeSet attribs ) |
715 | |
{ |
716 | 272 | if ( isParent( SimplifiedDocbookMarkup.VARIABLELIST_TAG.toString() ) ) |
717 | |
{ |
718 | 10 | sink.definition( attribs ); |
719 | |
} |
720 | 262 | else if ( isParent( SimplifiedDocbookMarkup.ORDEREDLIST_TAG.toString() ) ) |
721 | |
{ |
722 | 18 | sink.numberedListItem( attribs ); |
723 | |
} |
724 | |
else |
725 | |
{ |
726 | 244 | sink.listItem( attribs ); |
727 | |
} |
728 | |
|
729 | 272 | parent.push( SimplifiedDocbookMarkup.LISTITEM_TAG.toString() ); |
730 | 272 | } |
731 | |
|
732 | |
private void handleOrderedListStart( Sink sink, SinkEventAttributeSet attribs ) |
733 | |
{ |
734 | |
|
735 | 10 | int numeration = Sink.NUMBERING_DECIMAL; |
736 | |
|
737 | 10 | final Object num = attribs.getAttribute( SimplifiedDocbookMarkup.NUMERATION_ATTRIBUTE ); |
738 | |
|
739 | 10 | if ( num != null ) |
740 | |
{ |
741 | 10 | numeration = DocbookUtils.doxiaListNumbering( num.toString() ); |
742 | |
} |
743 | |
|
744 | 10 | sink.numberedList( numeration, attribs ); |
745 | 10 | parent.push( SimplifiedDocbookMarkup.ORDEREDLIST_TAG.toString() ); |
746 | 10 | } |
747 | |
|
748 | |
private void handleParaEnd( Sink sink ) |
749 | |
{ |
750 | 432 | if ( !isParent( SimplifiedDocbookMarkup.CAPTION_TAG.toString() ) |
751 | |
&& ! isParent( SimplifiedDocbookMarkup.LISTITEM_TAG.toString() ) ) |
752 | |
{ |
753 | 152 | sink.paragraph_(); |
754 | |
} |
755 | 432 | } |
756 | |
|
757 | |
private void handleParaStart( Sink sink, SinkEventAttributeSet attribs ) |
758 | |
{ |
759 | 432 | if ( !isParent( SimplifiedDocbookMarkup.CAPTION_TAG.toString() ) |
760 | |
&& ! isParent( SimplifiedDocbookMarkup.LISTITEM_TAG.toString() ) ) |
761 | |
{ |
762 | 152 | sink.paragraph( attribs ); |
763 | |
} |
764 | 432 | } |
765 | |
|
766 | |
private void handleTableStart( Sink sink, SinkEventAttributeSet attribs ) |
767 | |
{ |
768 | 20 | final Object frame = attribs.getAttribute( SimplifiedDocbookMarkup.FRAME_ATTRIBUTE ); |
769 | 20 | if ( frame != null ) |
770 | |
{ |
771 | 20 | attribs.addAttribute( SimplifiedDocbookMarkup.FRAME_ATTRIBUTE, |
772 | |
DocbookUtils.doxiaTableFrameAttribute( frame.toString() ) ); |
773 | |
} |
774 | |
|
775 | 20 | sink.table( attribs ); |
776 | |
|
777 | 20 | parent.push( SimplifiedDocbookMarkup.TABLE_TAG.toString() ); |
778 | 20 | } |
779 | |
|
780 | |
private void handleTitleStart( Sink sink, SinkEventAttributeSet attribs ) |
781 | |
{ |
782 | 124 | if ( isParent( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) |
783 | |
|| isParent( SimplifiedDocbookMarkup.INFORMALTABLE_TAG.toString() ) ) |
784 | |
{ |
785 | 4 | sink.tableCaption( attribs ); |
786 | |
} |
787 | 120 | else if ( isParent( SimplifiedDocbookMarkup.ARTICLE_TAG.toString() ) ) |
788 | |
{ |
789 | 2 | sink.title( attribs ); |
790 | |
} |
791 | 118 | else if ( isParent( SimplifiedDocbookMarkup.SECTION_TAG.toString() ) ) |
792 | |
{ |
793 | 98 | sink.sectionTitle( level, attribs ); |
794 | |
} |
795 | |
else |
796 | |
{ |
797 | 20 | sink.bold(); |
798 | |
} |
799 | 124 | } |
800 | |
|
801 | |
private void handleTitleEnd( Sink sink ) |
802 | |
{ |
803 | 124 | if ( isParent( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) |
804 | |
|| isParent( SimplifiedDocbookMarkup.INFORMALTABLE_TAG.toString() ) ) |
805 | |
{ |
806 | 4 | sink.tableCaption_(); |
807 | |
} |
808 | 120 | else if ( isParent( SimplifiedDocbookMarkup.SECTION_TAG.toString() ) ) |
809 | |
{ |
810 | 98 | sink.sectionTitle_( level ); |
811 | |
} |
812 | 22 | else if ( isParent( SimplifiedDocbookMarkup.ARTICLE_TAG.toString() ) ) |
813 | |
{ |
814 | 2 | sink.title_(); |
815 | |
} |
816 | |
else |
817 | |
{ |
818 | 20 | sink.bold_(); |
819 | |
} |
820 | 124 | } |
821 | |
|
822 | |
private void handleUlinkStart( Sink sink, SinkEventAttributeSet attribs ) |
823 | |
throws XmlPullParserException |
824 | |
{ |
825 | 10 | final Object url = attribs.getAttribute( SimplifiedDocbookMarkup.URL_ATTRIBUTE ); |
826 | |
|
827 | 10 | if ( url == null ) |
828 | |
{ |
829 | 0 | throw new XmlPullParserException( "Missing url attribute in ulink!" ); |
830 | |
} |
831 | |
|
832 | 10 | parent.push( SimplifiedDocbookMarkup.ULINK_TAG.toString() ); |
833 | 10 | sink.link( url.toString(), attribs ); |
834 | 10 | } |
835 | |
|
836 | |
private void handleVariableListStart( Sink sink, SinkEventAttributeSet attribs ) |
837 | |
{ |
838 | 6 | sink.definitionList( attribs ); |
839 | 6 | parent.push( SimplifiedDocbookMarkup.VARIABLELIST_TAG.toString() ); |
840 | 6 | } |
841 | |
|
842 | |
private void handleXrefStart( Sink sink, SinkEventAttributeSet attribs ) |
843 | |
throws XmlPullParserException |
844 | |
{ |
845 | 4 | final Object linkend = attribs.getAttribute( SimplifiedDocbookMarkup.LINKEND_ATTRIBUTE ); |
846 | |
|
847 | 4 | if ( linkend == null ) |
848 | |
{ |
849 | 0 | throw new XmlPullParserException( "Missing linkend attribute in xref!" ); |
850 | |
} |
851 | |
|
852 | 4 | sink.link( "#" + linkend.toString(), attribs ); |
853 | 4 | sink.text( "Link" ); |
854 | 4 | sink.link_(); |
855 | 4 | } |
856 | |
|
857 | |
private boolean ignorable( String name ) |
858 | |
{ |
859 | 152 | return IGNORABLE_ELEMENTS.contains( name ); |
860 | |
} |
861 | |
|
862 | |
|
863 | |
|
864 | |
|
865 | |
|
866 | |
|
867 | |
|
868 | |
private boolean isParent( String element ) |
869 | |
{ |
870 | 23714 | if ( parent.size() > 0 ) |
871 | |
{ |
872 | 23298 | return parent.peek().equals( element ); |
873 | |
} |
874 | |
|
875 | 416 | return false; |
876 | |
} |
877 | |
|
878 | |
private boolean linkStartTag( String name, Sink sink, SinkEventAttributeSet attribs ) |
879 | |
throws XmlPullParserException |
880 | |
{ |
881 | 146 | if ( name.equals( SimplifiedDocbookMarkup.ULINK_TAG.toString() ) ) |
882 | |
{ |
883 | 10 | handleUlinkStart( sink, attribs ); |
884 | |
} |
885 | 136 | else if ( name.equals( SimplifiedDocbookMarkup.LINK_TAG.toString() ) ) |
886 | |
{ |
887 | 10 | handleLinkStart( sink, attribs ); |
888 | |
} |
889 | 126 | else if ( name.equals( SimplifiedDocbookMarkup.XREF_TAG.toString() ) ) |
890 | |
{ |
891 | 4 | handleXrefStart( sink, attribs ); |
892 | |
} |
893 | 122 | else if ( name.equals( SimplifiedDocbookMarkup.ANCHOR_TAG.toString() ) ) |
894 | |
{ |
895 | 6 | handleAnchorStart( sink, attribs ); |
896 | |
} |
897 | |
else |
898 | |
{ |
899 | 116 | return false; |
900 | |
} |
901 | |
|
902 | 30 | return true; |
903 | |
} |
904 | |
|
905 | |
private boolean listStartTags( String name, Sink sink, SinkEventAttributeSet attribs ) |
906 | |
{ |
907 | 1474 | if ( name.equals( SimplifiedDocbookMarkup.ITEMIZEDLIST_TAG.toString() ) ) |
908 | |
{ |
909 | 64 | handleItemizedListStart( sink, attribs ); |
910 | |
} |
911 | 1410 | else if ( name.equals( SimplifiedDocbookMarkup.ORDEREDLIST_TAG.toString() ) ) |
912 | |
{ |
913 | 10 | handleOrderedListStart( sink, attribs ); |
914 | |
} |
915 | 1400 | else if ( name.equals( SimplifiedDocbookMarkup.LISTITEM_TAG.toString() ) ) |
916 | |
{ |
917 | 272 | handleListItemStart( sink, attribs ); |
918 | |
} |
919 | 1128 | else if ( name.equals( SimplifiedDocbookMarkup.VARIABLELIST_TAG.toString() ) ) |
920 | |
{ |
921 | 6 | handleVariableListStart( sink, attribs ); |
922 | |
} |
923 | 1122 | else if ( name.equals( SimplifiedDocbookMarkup.VARLISTENTRY_TAG.toString() ) ) |
924 | |
{ |
925 | 10 | sink.definitionListItem( attribs ); |
926 | |
} |
927 | 1112 | else if ( name.equals( SimplifiedDocbookMarkup.TERM_TAG.toString() ) ) |
928 | |
{ |
929 | 10 | sink.definedTerm( attribs ); |
930 | |
} |
931 | |
else |
932 | |
{ |
933 | 1102 | return false; |
934 | |
} |
935 | |
|
936 | 372 | return true; |
937 | |
} |
938 | |
|
939 | |
private boolean mediaStartTag( String name, Sink sink, SinkEventAttributeSet attribs ) |
940 | |
throws XmlPullParserException |
941 | |
{ |
942 | 1102 | if ( name.equals( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG.toString() ) ) |
943 | |
{ |
944 | 18 | handleFigureStart( sink, attribs ); |
945 | |
} |
946 | 1084 | else if ( name.equals( SimplifiedDocbookMarkup.IMAGEOBJECT_TAG.toString() ) |
947 | |
|| name.equals( SimplifiedDocbookMarkup.FIGURE_TAG.toString() ) ) |
948 | |
{ |
949 | 26 | parent.push( name ); |
950 | |
} |
951 | 1058 | else if ( name.equals( SimplifiedDocbookMarkup.IMAGEDATA_TAG.toString() ) ) |
952 | |
{ |
953 | 16 | handleImageDataStart( sink, attribs ); |
954 | |
} |
955 | 1042 | else if ( name.equals( SimplifiedDocbookMarkup.CAPTION_TAG.toString() ) ) |
956 | |
{ |
957 | 6 | handleCaptionStart( sink, attribs ); |
958 | |
} |
959 | |
else |
960 | |
{ |
961 | 1036 | return false; |
962 | |
} |
963 | |
|
964 | 66 | return true; |
965 | |
} |
966 | |
|
967 | |
private boolean styleStartTags( String name, Sink sink, SinkEventAttributeSet attribs ) |
968 | |
{ |
969 | 342 | if ( VERBATIM_ELEMENTS.contains( name ) ) |
970 | |
{ |
971 | 14 | sink.verbatim( SinkEventAttributeSet.BOXED ); |
972 | |
} |
973 | 328 | else if ( BOLD_ELEMENTS.contains( name ) && MONOSPACE_ELEMENTS.contains( name ) ) |
974 | |
{ |
975 | 2 | sink.bold(); |
976 | 2 | sink.monospaced(); |
977 | |
} |
978 | 326 | else if ( ITALIC_ELEMENTS.contains( name ) && MONOSPACE_ELEMENTS.contains( name ) ) |
979 | |
{ |
980 | 4 | sink.italic(); |
981 | 4 | sink.monospaced(); |
982 | |
} |
983 | 322 | else if ( BOLD_ELEMENTS.contains( name ) ) |
984 | |
{ |
985 | 8 | sink.bold(); |
986 | |
} |
987 | 314 | else if ( ITALIC_ELEMENTS.contains( name ) && "bold".equals( attribs.getAttribute( "role" ) ) ) |
988 | |
{ |
989 | 6 | sink.bold(); |
990 | 6 | isBold = true; |
991 | |
} |
992 | 308 | else if ( ITALIC_ELEMENTS.contains( name ) ) |
993 | |
{ |
994 | 18 | sink.italic(); |
995 | |
} |
996 | 290 | else if ( MONOSPACE_ELEMENTS.contains( name ) ) |
997 | |
{ |
998 | 18 | sink.monospaced(); |
999 | |
} |
1000 | |
else |
1001 | |
{ |
1002 | 272 | return false; |
1003 | |
} |
1004 | |
|
1005 | 70 | return true; |
1006 | |
} |
1007 | |
|
1008 | |
private boolean tableStartTags( String name, Sink sink, SinkEventAttributeSet attribs ) |
1009 | |
{ |
1010 | 1036 | if ( name.equals( SimplifiedDocbookMarkup.ENTRYTBL_TAG.toString() ) ) |
1011 | |
{ |
1012 | 2 | parent.push( name ); |
1013 | 2 | ignore = true; |
1014 | |
|
1015 | 2 | sink.tableCell( (SinkEventAttributeSet) null ); |
1016 | 2 | sink.tableCell_(); |
1017 | |
} |
1018 | 1034 | else if ( name.equals( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) |
1019 | |
|| name.equals( SimplifiedDocbookMarkup.INFORMALTABLE_TAG.toString() ) ) |
1020 | |
{ |
1021 | 20 | handleTableStart( sink, attribs ); |
1022 | |
} |
1023 | 1014 | else if ( name.equals( SimplifiedDocbookMarkup.THEAD_TAG.toString() ) |
1024 | |
|| name.equals( SimplifiedDocbookMarkup.TFOOT_TAG.toString() ) |
1025 | |
|| name.equals( SimplifiedDocbookMarkup.TBODY_TAG.toString() ) ) |
1026 | |
{ |
1027 | 28 | parent.push( name ); |
1028 | |
} |
1029 | 986 | else if ( name.equals( SimplifiedDocbookMarkup.TGROUP_TAG.toString() ) ) |
1030 | |
{ |
1031 | |
|
1032 | 20 | final int cols = Integer.parseInt( (String) attribs.getAttribute( "cols" ) ); |
1033 | 20 | int[] justification = new int[cols]; |
1034 | 20 | int justif = Sink.JUSTIFY_LEFT; |
1035 | |
|
1036 | 20 | final Object align = attribs.getAttribute( SinkEventAttributeSet.ALIGN ); |
1037 | |
|
1038 | 20 | if ( align != null ) |
1039 | |
{ |
1040 | 4 | final String al = align.toString(); |
1041 | |
|
1042 | 4 | if ( "right".equals( al ) ) |
1043 | |
{ |
1044 | 0 | justif = Sink.JUSTIFY_RIGHT; |
1045 | |
} |
1046 | 4 | else if ( "center".equals( al ) ) |
1047 | |
{ |
1048 | 0 | justif = Sink.JUSTIFY_CENTER; |
1049 | |
} |
1050 | |
} |
1051 | |
|
1052 | 78 | for ( int i = 0; i < justification.length; i++ ) |
1053 | |
{ |
1054 | 58 | justification[i] = justif; |
1055 | |
} |
1056 | |
|
1057 | 20 | boolean grid = false; |
1058 | 20 | final Object rowsep = attribs.getAttribute( "rowsep" ); |
1059 | |
|
1060 | 20 | if ( rowsep != null && Integer.parseInt( (String) rowsep ) == 1 ) |
1061 | |
{ |
1062 | 4 | grid = true; |
1063 | |
} |
1064 | |
|
1065 | 20 | final Object colsep = attribs.getAttribute( "colsep" ); |
1066 | |
|
1067 | 20 | if ( colsep != null && Integer.parseInt( (String) colsep ) == 1 ) |
1068 | |
{ |
1069 | 4 | grid = true; |
1070 | |
} |
1071 | |
|
1072 | 20 | sink.tableRows( justification, grid ); |
1073 | 20 | } |
1074 | 966 | else if ( name.equals( SimplifiedDocbookMarkup.TR_TAG.toString() ) |
1075 | |
|| name.equals( SimplifiedDocbookMarkup.ROW_TAG.toString() ) ) |
1076 | |
{ |
1077 | 50 | sink.tableRow( attribs ); |
1078 | |
} |
1079 | 916 | else if ( name.equals( SimplifiedDocbookMarkup.ENTRY_TAG.toString() ) |
1080 | |
&& isParent( SimplifiedDocbookMarkup.THEAD_TAG.toString() ) |
1081 | |
|| name.equals( SimplifiedDocbookMarkup.TH_TAG.toString() ) ) |
1082 | |
{ |
1083 | 16 | sink.tableHeaderCell( attribs ); |
1084 | |
} |
1085 | 900 | else if ( name.equals( SimplifiedDocbookMarkup.ENTRY_TAG.toString() ) ) |
1086 | |
{ |
1087 | 126 | sink.tableCell( attribs ); |
1088 | |
} |
1089 | |
else |
1090 | |
{ |
1091 | 774 | return false; |
1092 | |
} |
1093 | |
|
1094 | 262 | return true; |
1095 | |
} |
1096 | |
} |