@@ -16,10 +16,10 @@ package parsing
16
16
17
17
import scala .collection .Seq
18
18
import org .xml .sax .Attributes
19
- import org .xml .sax .helpers . DefaultHandler
19
+ import org .xml .sax .ext . DefaultHandler2
20
20
21
21
// can be mixed into FactoryAdapter if desired
22
- trait ConsoleErrorHandler extends DefaultHandler {
22
+ trait ConsoleErrorHandler extends DefaultHandler2 {
23
23
// ignore warning, crimson warns even for entity resolution!
24
24
override def warning (ex : SAXParseException ): Unit = {}
25
25
override def error (ex : SAXParseException ): Unit = printError(" Error" , ex)
@@ -39,8 +39,8 @@ trait ConsoleErrorHandler extends DefaultHandler {
39
39
* namespace bindings, without relying on namespace handling of the
40
40
* underlying SAX parser.
41
41
*/
42
- abstract class FactoryAdapter extends DefaultHandler with factory.XMLLoader [Node ] {
43
- var rootElem : Node = null
42
+ abstract class FactoryAdapter extends DefaultHandler2 with factory.XMLLoader [Node ] {
43
+ var rootElem : Node = _
44
44
45
45
val buffer = new StringBuilder ()
46
46
/** List of attributes
@@ -72,7 +72,7 @@ abstract class FactoryAdapter extends DefaultHandler with factory.XMLLoader[Node
72
72
*/
73
73
var scopeStack = List .empty[NamespaceBinding ]
74
74
75
- var curTag : String = null
75
+ var curTag : String = _
76
76
var capture : Boolean = false
77
77
78
78
// abstract methods
@@ -105,6 +105,11 @@ abstract class FactoryAdapter extends DefaultHandler with factory.XMLLoader[Node
105
105
*/
106
106
def createProcInstr (target : String , data : String ): Seq [ProcInstr ]
107
107
108
+ /**
109
+ * creates a new comment node.
110
+ */
111
+ def createComment (characters : String ): Seq [Comment ]
112
+
108
113
//
109
114
// ContentHandler methods
110
115
//
@@ -118,7 +123,7 @@ abstract class FactoryAdapter extends DefaultHandler with factory.XMLLoader[Node
118
123
* @param length
119
124
*/
120
125
override def characters (ch : Array [Char ], offset : Int , length : Int ): Unit = {
121
- if (! capture) return
126
+ if (! capture) ()
122
127
// compliant: report every character
123
128
else if (! normalizeWhitespace) buffer.appendAll(ch, offset, length)
124
129
// normalizing whitespace is not compliant, but useful
@@ -170,7 +175,7 @@ abstract class FactoryAdapter extends DefaultHandler with factory.XMLLoader[Node
170
175
171
176
if (pre == " xmlns" || (pre == null && qname == " xmlns" )) {
172
177
val arg = if (pre == null ) null else key
173
- scpe = new NamespaceBinding (arg, nullIfEmpty(value), scpe)
178
+ scpe = NamespaceBinding (arg, nullIfEmpty(value), scpe)
174
179
} else
175
180
m = Attribute (Option (pre), key, Text (value), m)
176
181
}
@@ -183,7 +188,7 @@ abstract class FactoryAdapter extends DefaultHandler with factory.XMLLoader[Node
183
188
* captures text, possibly normalizing whitespace
184
189
*/
185
190
def captureText (): Unit = {
186
- if (capture && buffer.length > 0 )
191
+ if (capture && buffer.nonEmpty )
187
192
hStack = createText(buffer.toString) :: hStack
188
193
189
194
buffer.clear()
@@ -226,4 +231,10 @@ abstract class FactoryAdapter extends DefaultHandler with factory.XMLLoader[Node
226
231
captureText()
227
232
hStack = hStack.reverse_::: (createProcInstr(target, data).toList)
228
233
}
234
+
235
+ override def comment (ch : Array [Char ], start : Int , length : Int ): Unit = {
236
+ captureText()
237
+ val commentText : String = String .valueOf(ch.slice(start, start + length))
238
+ hStack = hStack.reverse_::: (createComment(commentText).toList)
239
+ }
229
240
}
0 commit comments