|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| XHTMLWhitespaceXMLFilter | Line # 59 | 158 | 0% | 75 | 11 | 95.9% |
0.9586466
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
| XHTMLWhitespaceXMLFilter.Event | Line # 585 | 11 | 0% | 3 | 0 | 100% |
1.0
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
| XHTMLWhitespaceXMLFilter.Event.Type | Line # 587 | 0 | - | 0 | 0 | - |
-1.0
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
| (219) | |||
| Result | |||
|
0.73571426
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.73571426
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.73571426
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.7
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.6857143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.6857143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.62142855
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.62142855
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.61785716
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.61785716
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.6142857
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.6
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.57857144
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.57857144
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5714286
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5714286
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.56785715
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.56785715
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.56785715
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.56785715
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5535714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.55
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.54642856
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.54642856
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.54642856
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.54642856
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.54642856
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.54642856
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.54642856
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.54642856
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.54642856
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.54642856
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5285714
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.525
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.525
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51785713
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51428574
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51428574
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51428574
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51428574
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51428574
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51428574
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51428574
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51428574
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51428574
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51428574
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.51428574
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.5107143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.50714284
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.50714284
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.50714284
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.49642858
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.47857141
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.47142857
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.47142857
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.47142857
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.46071428
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.43928573
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.43214285
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.43214285
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.43214285
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.43214285
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.43214285
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.43214285
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.42857143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.42857143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.42857143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.42857143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.42857143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.42142856
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3642857
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.3607143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.325
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.325
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.325
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.325
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.325
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.325
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.325
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.28928572
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.28928572
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.28928572
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.28928572
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.2857143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.2857143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.2857143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.27857143
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.19642857
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.19642857
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.19642857
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.19642857
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.19642857
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
|
0.19642857
|
org.xwiki.rendering.test.integration.RenderingTest.execute
org.xwiki.rendering.test.integration.RenderingTest.execute
|
1 PASS | |
| 1 | /* | |
| 2 | * See the NOTICE file distributed with this work for additional | |
| 3 | * information regarding copyright ownership. | |
| 4 | * | |
| 5 | * This is free software; you can redistribute it and/or modify it | |
| 6 | * under the terms of the GNU Lesser General Public License as | |
| 7 | * published by the Free Software Foundation; either version 2.1 of | |
| 8 | * the License, or (at your option) any later version. | |
| 9 | * | |
| 10 | * This software is distributed in the hope that it will be useful, | |
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | * Lesser General Public License for more details. | |
| 14 | * | |
| 15 | * You should have received a copy of the GNU Lesser General Public | |
| 16 | * License along with this software; if not, write to the Free | |
| 17 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | |
| 18 | * 02110-1301 USA, or see the FSF site: http://www.fsf.org. | |
| 19 | */ | |
| 20 | package org.xwiki.rendering.wikimodel.xhtml.filter; | |
| 21 | ||
| 22 | import java.util.ArrayList; | |
| 23 | import java.util.Arrays; | |
| 24 | import java.util.HashSet; | |
| 25 | import java.util.List; | |
| 26 | import java.util.Set; | |
| 27 | import java.util.Stack; | |
| 28 | import java.util.regex.Matcher; | |
| 29 | import java.util.regex.Pattern; | |
| 30 | ||
| 31 | import org.xml.sax.Attributes; | |
| 32 | import org.xml.sax.SAXException; | |
| 33 | import org.xml.sax.XMLReader; | |
| 34 | import org.xml.sax.helpers.AttributesImpl; | |
| 35 | ||
| 36 | /** | |
| 37 | * Removes non-semantic whitespaces in XML elements. See | |
| 38 | * http://www.w3.org/TR/html4/struct/text.html#h-9.1 for more details. Possible | |
| 39 | * use cases: | |
| 40 | * <p/> | |
| 41 | * <ul> | |
| 42 | * <li><b>UC1</b>: Any white spaces group is removed if it's before a non inline | |
| 43 | * (see INLINE_ELEMENTS) element or at the begining of the document.</li> | |
| 44 | * <li><b>UC2</b>: Any white spaces group is removed if it's after a non inline | |
| 45 | * (see INLINE_ELEMENTS) element or at the end of the document.</li> | |
| 46 | * <li><b>UC3</b>: Inside inline content any white spaces group become a single | |
| 47 | * space.</li> | |
| 48 | * <li><b>UC5</b>: Non visible element (comments, CDATA and NONVISIBLE_ELEMENTS) | |
| 49 | * are invisibles and does not cut a white space group. | |
| 50 | * <code>text(sp)<!--comment-->(sp)text</code> becomes | |
| 51 | * <code>text(sp)<!--comment-->text</code></li> | |
| 52 | * <li><b>UC5</b>: Visible empty element like img count as text when grouping | |
| 53 | * white spaces</li> | |
| 54 | * <li><b>UC6</b>: Semantic comment count as text when grouping white spaces</li> | |
| 55 | * | |
| 56 | * @version $Id: 939c4bc79e172d79c8a2d7aae0a71b5bfa663316 $ | |
| 57 | * @since 4.0M1 | |
| 58 | */ | |
| 59 | public class XHTMLWhitespaceXMLFilter extends DefaultXMLFilter | |
| 60 | { | |
| 61 | private static final Pattern HTML_WHITESPACE_DUPLICATES_PATTERN = Pattern | |
| 62 | .compile("\\s{2,}|[\\t\\n\\x0B\\f\\r]+"); | |
| 63 | ||
| 64 | private static final Pattern HTML_WHITESPACE_HEAD_PATTERN = Pattern | |
| 65 | .compile("^\\s+"); | |
| 66 | ||
| 67 | private static final Pattern HTML_WHITESPACE_TAIL_PATTERN = Pattern | |
| 68 | .compile("\\s+$"); | |
| 69 | ||
| 70 | private static final Set<String> NONINLINE_ELEMENTS = new HashSet<String>( | |
| 71 | Arrays.asList("address", "blockquote", "div", "dl", "dt", "dd", | |
| 72 | "fieldset", "form", "h1", "h2", "h3", "h4", "h5", "h6", "hr", | |
| 73 | "noscript", "ol", "p", "pre", "script", "table", "ul", "html", | |
| 74 | "body", "td", "tr", "th", "tbody", "head", "li", "thead", "tfoot", | |
| 75 | "caption", "col", "colgroup", "legend", "base", "link", "meta", | |
| 76 | "style", "title")); | |
| 77 | ||
| 78 | /** | |
| 79 | * Non visible elements behave like CDATA and comments: it's part of the | |
| 80 | * white space group. | |
| 81 | */ | |
| 82 | private static final Set<String> NONVISIBLE_ELEMENTS = new HashSet<String>( | |
| 83 | Arrays.asList("script")); | |
| 84 | ||
| 85 | /** | |
| 86 | * Visible elements like images count in the inline text to clean white | |
| 87 | * spaces. | |
| 88 | */ | |
| 89 | private static final Set<String> EMPTYVISIBLE_ELEMENTS = new HashSet<String>( | |
| 90 | Arrays.asList("img")); | |
| 91 | ||
| 92 | /** | |
| 93 | * State indicating if the white spaces has to be cleaned. It's an int to | |
| 94 | * support <pre>pre</pre> inside <tt | |
| 95 | * class="wikimodel-verbatim">pre</tt>. | |
| 96 | */ | |
| 97 | private int fNoCleanUpLevel = 0; | |
| 98 | ||
| 99 | /** | |
| 100 | * Content to clean. | |
| 101 | */ | |
| 102 | private StringBuffer fContent = new StringBuffer(); | |
| 103 | ||
| 104 | /** | |
| 105 | * Bufferized current inline text. It contains only text (and no inline | |
| 106 | * start/end element, comment or CDATA) to be able know if a leading space | |
| 107 | * has to be remove because the previous text ends with it or if there is no | |
| 108 | * previous text. | |
| 109 | */ | |
| 110 | private StringBuffer fPreviousInlineText = new StringBuffer(); | |
| 111 | ||
| 112 | /** | |
| 113 | * The previous content to send. Buffurized waiting to know if its trailing | |
| 114 | * space has to be removed when it's the last text of inline content. | |
| 115 | */ | |
| 116 | private String fPreviousContent = null; | |
| 117 | ||
| 118 | /** | |
| 119 | * Previous inline elements. These are the elements before the previous | |
| 120 | * content. It's buffurized to support space group cleaning betwen different | |
| 121 | * inline elements. | |
| 122 | */ | |
| 123 | private List<Event> fPreviousElements = new ArrayList<Event>(); | |
| 124 | ||
| 125 | private Stack<Attributes> fAttributes = new Stack<Attributes>(); | |
| 126 | ||
| 127 | 0 |
public XHTMLWhitespaceXMLFilter() |
| 128 | { | |
| 129 | ||
| 130 | } | |
| 131 | ||
| 132 | 311 |
public XHTMLWhitespaceXMLFilter(XMLReader reader) |
| 133 | { | |
| 134 | 311 | super(reader); |
| 135 | } | |
| 136 | ||
| 137 | 935 |
@Override |
| 138 | public void characters(char[] ch, int start, int length) | |
| 139 | throws SAXException | |
| 140 | { | |
| 141 | 935 | getContent().append(ch, start, length); |
| 142 | } | |
| 143 | ||
| 144 | 1774 |
@Override |
| 145 | public void startElement(String uri, String localName, String qName, | |
| 146 | Attributes atts) throws SAXException | |
| 147 | { | |
| 148 | 1774 | Attributes clonedAtts = fAttributes.push(new AttributesImpl(atts)); |
| 149 | ||
| 150 | 1774 | if (NONVISIBLE_ELEMENTS.contains(localName)) { |
| 151 | 3 | startNonVisibleElement(); |
| 152 | ||
| 153 | // send start element event | |
| 154 | 3 | super.startElement(uri, localName, qName, atts); |
| 155 | } else { | |
| 156 | 1771 | if (NONINLINE_ELEMENTS.contains(localName)) { |
| 157 | // Flush previous content and print current one | |
| 158 | 1289 | flushContent(); |
| 159 | ||
| 160 | // white spaces inside pre element are not cleaned | |
| 161 | 1289 | if ("pre".equalsIgnoreCase(localName)) { |
| 162 | 15 | ++fNoCleanUpLevel; |
| 163 | } | |
| 164 | ||
| 165 | // send start element event | |
| 166 | 1289 | super.startElement(uri, localName, qName, atts); |
| 167 | 482 | } else if (EMPTYVISIBLE_ELEMENTS.contains(localName)) { |
| 168 | 35 | startEmptyVisibleElement(); |
| 169 | ||
| 170 | 35 | super.startElement(uri, localName, qName, atts); |
| 171 | 447 | } else if (preservedInlineContent(localName, atts)) { |
| 172 | // Flush previous content and print current one | |
| 173 | 14 | flushContent(false); |
| 174 | ||
| 175 | 14 | ++fNoCleanUpLevel; |
| 176 | ||
| 177 | // send start element event | |
| 178 | 14 | super.startElement(uri, localName, qName, atts); |
| 179 | } else { | |
| 180 | 433 | appendInlineEvent(new Event(uri, localName, qName, clonedAtts)); |
| 181 | } | |
| 182 | } | |
| 183 | } | |
| 184 | ||
| 185 | 1774 |
@Override |
| 186 | public void endElement(String uri, String localName, String qName) | |
| 187 | throws SAXException | |
| 188 | { | |
| 189 | 1774 | if (NONVISIBLE_ELEMENTS.contains(localName)) { |
| 190 | 3 | endNonVisibleElement(); |
| 191 | ||
| 192 | 3 | super.endElement(uri, localName, qName); |
| 193 | ||
| 194 | 3 | --fNoCleanUpLevel; |
| 195 | } else { | |
| 196 | 1771 | if (NONINLINE_ELEMENTS.contains(localName)) { |
| 197 | // Flush previous content and print current one | |
| 198 | 1289 | flushContent(); |
| 199 | ||
| 200 | // white spaces inside pre element are not cleaned | |
| 201 | 1289 | if ("pre".equalsIgnoreCase(localName)) { |
| 202 | 15 | --fNoCleanUpLevel; |
| 203 | } | |
| 204 | ||
| 205 | 1289 | super.endElement(uri, localName, qName); |
| 206 | 482 | } else if (EMPTYVISIBLE_ELEMENTS.contains(localName)) { |
| 207 | 35 | endEmptyVisibleElement(); |
| 208 | ||
| 209 | 35 | super.endElement(uri, localName, qName); |
| 210 | 447 | } else if (preservedInlineContent(localName, fAttributes.peek())) { |
| 211 | // Flush previous content and print current one | |
| 212 | 14 | flushContent(); |
| 213 | ||
| 214 | 14 | --fNoCleanUpLevel; |
| 215 | ||
| 216 | 14 | super.endElement(uri, localName, qName); |
| 217 | } else { | |
| 218 | 433 | appendInlineEvent(new Event(uri, localName, qName)); |
| 219 | } | |
| 220 | } | |
| 221 | ||
| 222 | 1774 | fAttributes.pop(); |
| 223 | } | |
| 224 | ||
| 225 | 894 |
private boolean preservedInlineContent(String localName, Attributes atts) |
| 226 | { | |
| 227 | 894 | boolean preserved = false; |
| 228 | ||
| 229 | 894 | if ("tt".equalsIgnoreCase(localName)) { |
| 230 | 40 | String value = atts.getValue("class"); |
| 231 | ||
| 232 | 40 | if (value != null) { |
| 233 | 28 | preserved = Arrays.asList(value.split(" ")).contains( |
| 234 | "wikimodel-verbatim"); | |
| 235 | } | |
| 236 | } | |
| 237 | ||
| 238 | 894 | return preserved; |
| 239 | } | |
| 240 | ||
| 241 | 9 |
@Override |
| 242 | public void startCDATA() throws SAXException | |
| 243 | { | |
| 244 | 9 | startNonVisibleElement(); |
| 245 | ||
| 246 | 9 | super.startCDATA(); |
| 247 | } | |
| 248 | ||
| 249 | 9 |
@Override |
| 250 | public void endCDATA() throws SAXException | |
| 251 | { | |
| 252 | 9 | endNonVisibleElement(); |
| 253 | ||
| 254 | 9 | super.endCDATA(); |
| 255 | ||
| 256 | 9 | --fNoCleanUpLevel; |
| 257 | } | |
| 258 | ||
| 259 | 218 |
@Override |
| 260 | public void comment(char[] ch, int start, int length) throws SAXException | |
| 261 | { | |
| 262 | 218 | if (shouldRemoveWhiteSpaces()) { |
| 263 | 218 | String comment = new String(ch, start, length); |
| 264 | ||
| 265 | 218 | if (isSemanticComment(comment)) { |
| 266 | // UC6: Semantic comment count as text when grouping white | |
| 267 | // spaces | |
| 268 | 208 | startEmptyVisibleElement(); |
| 269 | ||
| 270 | 208 | super.comment(ch, start, length); |
| 271 | } else { | |
| 272 | 10 | appendInlineEvent(new Event(comment)); |
| 273 | } | |
| 274 | } else { | |
| 275 | 0 | super.comment(ch, start, length); |
| 276 | } | |
| 277 | } | |
| 278 | ||
| 279 | 345 |
@Override |
| 280 | public void endDocument() throws SAXException | |
| 281 | { | |
| 282 | // Flush previous content and print current one | |
| 283 | 345 | flushContent(); |
| 284 | ||
| 285 | 345 | super.endDocument(); |
| 286 | } | |
| 287 | ||
| 288 | 5812 |
protected boolean shouldRemoveWhiteSpaces() |
| 289 | { | |
| 290 | 5812 | return fNoCleanUpLevel == 0; |
| 291 | } | |
| 292 | ||
| 293 | 3548 |
protected void sendPreviousContent(boolean trimTrailing) |
| 294 | throws SAXException | |
| 295 | { | |
| 296 | 3548 | if (fPreviousContent != null && fPreviousContent.length() > 0) { |
| 297 | 54 | if (trimTrailing) { |
| 298 | 9 | fPreviousContent = trimTrailingWhiteSpaces(fPreviousContent); |
| 299 | } | |
| 300 | ||
| 301 | 54 | sendCharacters(fPreviousContent.toCharArray()); |
| 302 | 54 | fPreviousContent = null; |
| 303 | } | |
| 304 | ||
| 305 | 3548 | for (Event event : fPreviousElements) { |
| 306 | 418 | sendInlineEvent(event); |
| 307 | } | |
| 308 | 3548 | fPreviousElements.clear(); |
| 309 | } | |
| 310 | ||
| 311 | 876 |
protected void sendInlineEvent(Event event) throws SAXException |
| 312 | { | |
| 313 | 876 | if (event.type == Event.Type.BEGIN_ELEMENT) { |
| 314 | 433 | super.startElement(event.uri, event.localName, event.qName, |
| 315 | event.atts); | |
| 316 | 443 | } else if (event.type == Event.Type.END_ELEMENT) { |
| 317 | 433 | super.endElement(event.uri, event.localName, event.qName); |
| 318 | 10 | } else if (event.type == Event.Type.COMMENT) { |
| 319 | 10 | super.comment(event.content.toCharArray(), 0, event.content |
| 320 | .length()); | |
| 321 | } | |
| 322 | } | |
| 323 | ||
| 324 | /** | |
| 325 | * Flush previous content and print current one. | |
| 326 | */ | |
| 327 | 2937 |
protected void flushContent() throws SAXException |
| 328 | { | |
| 329 | 2937 | flushContent(true); |
| 330 | } | |
| 331 | ||
| 332 | /** | |
| 333 | * Flush previous content and print current one. | |
| 334 | */ | |
| 335 | 2951 |
protected void flushContent(boolean trimTrailing) throws SAXException |
| 336 | { | |
| 337 | 2951 | cleanContentLeadingSpaces(); |
| 338 | 2951 | cleanContentExtraWhiteSpaces(); |
| 339 | ||
| 340 | 2951 | if (trimTrailing) { |
| 341 | // UC2: Any white spaces group is removed if it's after a non inline | |
| 342 | // (see INLINE_ELEMENTS) element. | |
| 343 | 2937 | trimTrailingWhiteSpaces(); |
| 344 | } | |
| 345 | ||
| 346 | // Send previous content | |
| 347 | 2951 | sendPreviousContent(getContent().length() == 0); |
| 348 | ||
| 349 | // Send current content | |
| 350 | 2951 | if (getContent().length() > 0) { |
| 351 | 414 | sendCharacters(getContent().toString().toCharArray()); |
| 352 | 414 | getContent().setLength(0); |
| 353 | } | |
| 354 | ||
| 355 | // Reinit inline text buffer | |
| 356 | 2951 | fPreviousInlineText.setLength(0); |
| 357 | } | |
| 358 | ||
| 359 | /** | |
| 360 | * Append an inline element. Inline elements ending with a space are stacked | |
| 361 | * waiting for a non space character or the end of the inline content. | |
| 362 | */ | |
| 363 | 876 |
protected void appendInlineEvent(Event event) throws SAXException |
| 364 | { | |
| 365 | 876 | cleanContentLeadingSpaces(); |
| 366 | 876 | cleanContentExtraWhiteSpaces(); |
| 367 | ||
| 368 | 876 | if (getContent().length() > 0) { |
| 369 | 344 | sendPreviousContent(false); |
| 370 | ||
| 371 | 344 | fPreviousInlineText.append(getContent()); |
| 372 | ||
| 373 | 344 | if (getContent().charAt(getContent().length() - 1) == ' ') { |
| 374 | 47 | fPreviousContent = getContent().toString(); |
| 375 | 47 | fPreviousElements.add(event); |
| 376 | } else { | |
| 377 | 297 | sendCharacters(getContent().toString().toCharArray()); |
| 378 | 297 | sendInlineEvent(event); |
| 379 | } | |
| 380 | ||
| 381 | 344 | getContent().setLength(0); |
| 382 | } else { | |
| 383 | 532 | if (fPreviousInlineText.length() == 0) { |
| 384 | // There is no inline text before this inline element | |
| 385 | 161 | sendInlineEvent(event); |
| 386 | } else { | |
| 387 | // The last inline text ends with a space | |
| 388 | 371 | fPreviousElements.add(event); |
| 389 | } | |
| 390 | } | |
| 391 | } | |
| 392 | ||
| 393 | 243 |
protected void startEmptyVisibleElement() throws SAXException |
| 394 | { | |
| 395 | 243 | cleanContentLeadingSpaces(); |
| 396 | 243 | cleanContentExtraWhiteSpaces(); |
| 397 | ||
| 398 | // Send previous content | |
| 399 | 243 | sendPreviousContent(false); |
| 400 | ||
| 401 | // Send content | |
| 402 | 243 | sendCharacters(getContent().toString().toCharArray()); |
| 403 | 243 | fPreviousInlineText.append(getContent()); |
| 404 | ||
| 405 | // Add visible element as part of the inline text | |
| 406 | 243 | fPreviousInlineText.append("EmptyVisibleElement"); |
| 407 | ||
| 408 | 243 | getContent().setLength(0); |
| 409 | } | |
| 410 | ||
| 411 | 35 |
protected void endEmptyVisibleElement() throws SAXException |
| 412 | { | |
| 413 | // Send current content | |
| 414 | 35 | if (getContent().length() > 0) { |
| 415 | 0 | sendCharacters(getContent().toString().toCharArray()); |
| 416 | 0 | getContent().setLength(0); |
| 417 | } | |
| 418 | } | |
| 419 | ||
| 420 | /** | |
| 421 | * Append an non visible element. | |
| 422 | */ | |
| 423 | 12 |
protected void startNonVisibleElement() throws SAXException |
| 424 | { | |
| 425 | 12 | if (shouldRemoveWhiteSpaces()) { |
| 426 | 11 | cleanContentLeadingSpaces(); |
| 427 | 11 | cleanContentExtraWhiteSpaces(); |
| 428 | ||
| 429 | 11 | if (getContent().length() > 0) { |
| 430 | 10 | sendPreviousContent(false); |
| 431 | ||
| 432 | 10 | fPreviousInlineText.append(getContent()); |
| 433 | ||
| 434 | 10 | if (getContent().charAt(getContent().length() - 1) == ' ') { |
| 435 | 7 | fPreviousContent = getContent().toString(); |
| 436 | } else { | |
| 437 | 3 | sendCharacters(getContent().toString().toCharArray()); |
| 438 | } | |
| 439 | } | |
| 440 | ||
| 441 | // The is some text ending with a space before the non visible | |
| 442 | // element. The space will move after the element if it's needed (if | |
| 443 | // the element is followed by inline text); | |
| 444 | 11 | if (fPreviousContent != null) { |
| 445 | 7 | sendCharacters(fPreviousContent.toCharArray(), 0, |
| 446 | fPreviousContent.length() - 1); | |
| 447 | 7 | fPreviousContent = " "; |
| 448 | } | |
| 449 | } else { | |
| 450 | // Send current content | |
| 451 | 1 | sendCharacters(getContent().toString().toCharArray()); |
| 452 | } | |
| 453 | ||
| 454 | 12 | getContent().setLength(0); |
| 455 | ||
| 456 | // Do not clean white spaces when in non visible element | |
| 457 | 12 | ++fNoCleanUpLevel; |
| 458 | } | |
| 459 | ||
| 460 | /** | |
| 461 | * Flush previous content and print current one. | |
| 462 | */ | |
| 463 | 12 |
protected void endNonVisibleElement() throws SAXException |
| 464 | { | |
| 465 | // Send current content | |
| 466 | 12 | if (getContent().length() > 0) { |
| 467 | 11 | sendCharacters(getContent().toString().toCharArray()); |
| 468 | 11 | getContent().setLength(0); |
| 469 | } | |
| 470 | } | |
| 471 | ||
| 472 | 1023 |
protected void sendCharacters(char ch[]) throws SAXException |
| 473 | { | |
| 474 | 1023 | sendCharacters(ch, 0, ch.length); |
| 475 | } | |
| 476 | ||
| 477 | 1030 |
protected void sendCharacters(char ch[], int start, int length) |
| 478 | throws SAXException | |
| 479 | { | |
| 480 | 1030 | if (length > 0) { |
| 481 | 812 | super.characters(ch, start, length); |
| 482 | } | |
| 483 | } | |
| 484 | ||
| 485 | /** | |
| 486 | * UC1: Any white spaces group is removed if it's before a non inline | |
| 487 | * element or at the begining of the document. | |
| 488 | * <p> | |
| 489 | * UC3: Remove leading spaces of content if previous inline text already | |
| 490 | * ends with a space. | |
| 491 | */ | |
| 492 | 4081 |
private void cleanContentLeadingSpaces() |
| 493 | { | |
| 494 | 4081 | if (getContent().length() > 0) { |
| 495 | 922 | if (fPreviousInlineText.length() == 0 |
| 496 | || fPreviousInlineText | |
| 497 | .charAt(fPreviousInlineText.length() - 1) == ' ') | |
| 498 | { | |
| 499 | 740 | trimLeadingWhiteSpaces(); |
| 500 | } | |
| 501 | } | |
| 502 | } | |
| 503 | ||
| 504 | /** | |
| 505 | * UC3: Replace group of white spaces by a single space. | |
| 506 | */ | |
| 507 | 4081 |
protected void cleanContentExtraWhiteSpaces() |
| 508 | { | |
| 509 | 4081 | if (getContent().length() > 0) { |
| 510 | 801 | if (shouldRemoveWhiteSpaces()) { |
| 511 | 768 | Matcher matcher = HTML_WHITESPACE_DUPLICATES_PATTERN |
| 512 | .matcher(getContent()); | |
| 513 | 768 | String result = matcher.replaceAll(" "); |
| 514 | 768 | getContent().setLength(0); |
| 515 | 768 | getContent().append(result); |
| 516 | } | |
| 517 | } | |
| 518 | } | |
| 519 | ||
| 520 | // Trim white spaces and new lines since they are ignored in XHTML (except | |
| 521 | // when in CDATA or PRE elements). | |
| 522 | 740 |
protected void trimLeadingWhiteSpaces() |
| 523 | { | |
| 524 | 740 | if (shouldRemoveWhiteSpaces() && getContent().length() > 0) { |
| 525 | 711 | String result = trimLeadingWhiteSpaces(getContent()); |
| 526 | 711 | getContent().setLength(0); |
| 527 | 711 | getContent().append(result); |
| 528 | } | |
| 529 | } | |
| 530 | ||
| 531 | 711 |
protected String trimLeadingWhiteSpaces(CharSequence content) |
| 532 | { | |
| 533 | 711 | String trimedContent; |
| 534 | ||
| 535 | 711 | if (shouldRemoveWhiteSpaces() && content.length() > 0) { |
| 536 | 711 | Matcher matcher = HTML_WHITESPACE_HEAD_PATTERN.matcher(content); |
| 537 | 711 | trimedContent = matcher.replaceAll(""); |
| 538 | } else { | |
| 539 | 0 | trimedContent = content.toString(); |
| 540 | } | |
| 541 | ||
| 542 | 711 | return trimedContent; |
| 543 | } | |
| 544 | ||
| 545 | 2937 |
protected void trimTrailingWhiteSpaces() |
| 546 | { | |
| 547 | 2937 | if (shouldRemoveWhiteSpaces() && getContent().length() > 0) { |
| 548 | 384 | String result = trimTrailingWhiteSpaces(getContent()); |
| 549 | 384 | getContent().setLength(0); |
| 550 | 384 | getContent().append(result); |
| 551 | } | |
| 552 | } | |
| 553 | ||
| 554 | 393 |
protected String trimTrailingWhiteSpaces(CharSequence content) |
| 555 | { | |
| 556 | 393 | String trimedContent; |
| 557 | ||
| 558 | 393 | if (shouldRemoveWhiteSpaces() && content.length() > 0) { |
| 559 | 393 | Matcher matcher = HTML_WHITESPACE_TAIL_PATTERN.matcher(content); |
| 560 | 393 | trimedContent = matcher.replaceAll(""); |
| 561 | } else { | |
| 562 | 0 | trimedContent = content.toString(); |
| 563 | } | |
| 564 | ||
| 565 | 393 | return trimedContent; |
| 566 | } | |
| 567 | ||
| 568 | 28496 |
protected StringBuffer getContent() |
| 569 | { | |
| 570 | 28496 | return fContent; |
| 571 | } | |
| 572 | ||
| 573 | /** | |
| 574 | * We remove spaces around non semantic comments. | |
| 575 | * | |
| 576 | * @param comment the comment to evaluate | |
| 577 | * @return true if the comment is a semantic one | |
| 578 | */ | |
| 579 | 218 |
protected boolean isSemanticComment(String comment) |
| 580 | { | |
| 581 | 218 | return comment.startsWith("startmacro:") |
| 582 | || comment.startsWith("stopmacro"); | |
| 583 | } | |
| 584 | ||
| 585 | private static class Event | |
| 586 | { | |
| 587 | public enum Type | |
| 588 | { | |
| 589 | BEGIN_ELEMENT, END_ELEMENT, COMMENT | |
| 590 | } | |
| 591 | ||
| 592 | public Type type; | |
| 593 | ||
| 594 | public String uri; | |
| 595 | ||
| 596 | public String localName; | |
| 597 | ||
| 598 | public String qName; | |
| 599 | ||
| 600 | public Attributes atts; | |
| 601 | ||
| 602 | String content; | |
| 603 | ||
| 604 | 433 |
public Event(String uri, String localName, String qName, Attributes atts) |
| 605 | { | |
| 606 | 433 | this.type = Type.BEGIN_ELEMENT; |
| 607 | 433 | this.uri = uri; |
| 608 | 433 | this.localName = localName; |
| 609 | 433 | this.qName = qName; |
| 610 | 433 | this.atts = atts; |
| 611 | } | |
| 612 | ||
| 613 | 433 |
public Event(String uri, String localName, String qName) |
| 614 | { | |
| 615 | 433 | this.type = Type.END_ELEMENT; |
| 616 | 433 | this.uri = uri; |
| 617 | 433 | this.localName = localName; |
| 618 | 433 | this.qName = qName; |
| 619 | } | |
| 620 | ||
| 621 | 10 |
public Event(String content) |
| 622 | { | |
| 623 | 10 | this.type = Type.COMMENT; |
| 624 | 10 | this.content = content; |
| 625 | } | |
| 626 | } | |
| 627 | } | |
|
||||||||||||