@@ -7,31 +7,31 @@ import 'package:xml/xml/utils/entities.dart';
7
7
/// XML grammar definition with [TNode] and [TName] .
8
8
abstract class XmlGrammarDefinition <TNode , TName > extends GrammarDefinition {
9
9
// name patterns
10
- static const NAME_START_CHARS = ':A-Z_a-z\u 00C0-\u 00D6\u 00D8-\u 00F6\u 00F8-\u 02FF'
10
+ static const String NAME_START_CHARS = ':A-Z_a-z\u 00C0-\u 00D6\u 00D8-\u 00F6\u 00F8-\u 02FF'
11
11
'\u 0370-\u 037D\u 037F-\u 1FFF\u 200C-\u 200D\u 2070-\u 218F\u 2C00-\u 2FEF\u 3001\u D7FF'
12
12
'\u F900-\u FDCF\u FDF0-\u FFFD' ;
13
- static const NAME_CHARS = '-.0-9\u 00B7\u 0300-\u 036F\u 203F-\u 2040$NAME_START_CHARS ' ;
14
- static const CHAR_DATA = '^<' ;
13
+ static const String NAME_CHARS = '-.0-9\u 00B7\u 0300-\u 036F\u 203F-\u 2040$NAME_START_CHARS ' ;
14
+ static const String CHAR_DATA = '^<' ;
15
15
16
16
// basic tokens
17
- static const DOUBLE_QUOTE = '"' ;
18
- static const SINGLE_QUOTE = "'" ;
19
- static const EQUALS = '=' ;
20
- static const WHITESPACE = ' ' ;
21
- static const OPEN_COMMENT = '<!--' ;
22
- static const CLOSE_COMMENT = '-->' ;
23
- static const OPEN_CDATA = '<![CDATA[' ;
24
- static const CLOSE_CDATA = ']]>' ;
25
- static const OPEN_ELEMENT = '<' ;
26
- static const CLOSE_ELEMENT = '>' ;
27
- static const OPEN_END_ELEMENT = '</' ;
28
- static const CLOSE_END_ELEMENT = '/>' ;
29
- static const OPEN_DOCTYPE = '<!DOCTYPE' ;
30
- static const CLOSE_DOCTYPE = '>' ;
31
- static const OPEN_DOCTYPE_BLOCK = '[' ;
32
- static const CLOSE_DOCTYPE_BLOCK = ']' ;
33
- static const OPEN_PROCESSING = '<?' ;
34
- static const CLOSE_PROCESSING = '?>' ;
17
+ static const String DOUBLE_QUOTE = '"' ;
18
+ static const String SINGLE_QUOTE = "'" ;
19
+ static const String EQUALS = '=' ;
20
+ static const String WHITESPACE = ' ' ;
21
+ static const String OPEN_COMMENT = '<!--' ;
22
+ static const String CLOSE_COMMENT = '-->' ;
23
+ static const String OPEN_CDATA = '<![CDATA[' ;
24
+ static const String CLOSE_CDATA = ']]>' ;
25
+ static const String OPEN_ELEMENT = '<' ;
26
+ static const String CLOSE_ELEMENT = '>' ;
27
+ static const String OPEN_END_ELEMENT = '</' ;
28
+ static const String CLOSE_END_ELEMENT = '/>' ;
29
+ static const String OPEN_DOCTYPE = '<!DOCTYPE' ;
30
+ static const String CLOSE_DOCTYPE = '>' ;
31
+ static const String OPEN_DOCTYPE_BLOCK = '[' ;
32
+ static const String CLOSE_DOCTYPE_BLOCK = ']' ;
33
+ static const String OPEN_PROCESSING = '<?' ;
34
+ static const String CLOSE_PROCESSING = '?>' ;
35
35
36
36
// parser callbacks
37
37
TNode createAttribute (TName name, String text, XmlAttributeType type);
@@ -45,39 +45,40 @@ abstract class XmlGrammarDefinition<TNode, TName> extends GrammarDefinition {
45
45
TNode createText (String text);
46
46
47
47
// productions
48
- start () => ref (document).end ();
48
+ @override
49
+ Parser start () => ref (document).end ();
49
50
50
- attribute () => ref (qualified)
51
+ Parser attribute () => ref (qualified)
51
52
.seq (ref (spaceOptional))
52
53
.seq (char (EQUALS ))
53
54
.seq (ref (spaceOptional))
54
55
.seq (ref (attributeValue))
55
56
.map ((each) => createAttribute (each[0 ] as TName , each[4 ][0 ], each[4 ][1 ]));
56
- attributeValue () => ref (attributeValueDouble).or (ref (attributeValueSingle));
57
- attributeValueDouble () => char (DOUBLE_QUOTE )
57
+ Parser attributeValue () => ref (attributeValueDouble).or (ref (attributeValueSingle));
58
+ Parser attributeValueDouble () => char (DOUBLE_QUOTE )
58
59
.seq (new XmlCharacterDataParser (DOUBLE_QUOTE , 0 ))
59
60
.seq (char (DOUBLE_QUOTE ))
60
61
.map ((each) => [each[1 ], XmlAttributeType .DOUBLE_QUOTE ]);
61
- attributeValueSingle () => char (SINGLE_QUOTE )
62
+ Parser attributeValueSingle () => char (SINGLE_QUOTE )
62
63
.seq (new XmlCharacterDataParser (SINGLE_QUOTE , 0 ))
63
64
.seq (char (SINGLE_QUOTE ))
64
65
.map ((each) => [each[1 ], XmlAttributeType .SINGLE_QUOTE ]);
65
- attributes () => ref (space).seq (ref (attribute)).pick (1 ).star ();
66
- comment () => string (OPEN_COMMENT )
66
+ Parser attributes () => ref (space).seq (ref (attribute)).pick (1 ).star ();
67
+ Parser comment () => string (OPEN_COMMENT )
67
68
.seq (any ().starLazy (string (CLOSE_COMMENT )).flatten ())
68
69
.seq (string (CLOSE_COMMENT ))
69
70
.map ((each) => createComment (each[1 ]));
70
- cdata () => string (OPEN_CDATA )
71
+ Parser cdata () => string (OPEN_CDATA )
71
72
.seq (any ().starLazy (string (CLOSE_CDATA )).flatten ())
72
73
.seq (string (CLOSE_CDATA ))
73
74
.map ((each) => createCDATA (each[1 ]));
74
- content () => ref (characterData)
75
+ Parser content () => ref (characterData)
75
76
.or (ref (element))
76
77
.or (ref (processing))
77
78
.or (ref (comment))
78
79
.or (ref (cdata))
79
80
.star ();
80
- doctype () => string (OPEN_DOCTYPE )
81
+ Parser doctype () => string (OPEN_DOCTYPE )
81
82
.seq (ref (space))
82
83
.seq (ref (nameToken)
83
84
.or (ref (attributeValue))
@@ -91,7 +92,7 @@ abstract class XmlGrammarDefinition<TNode, TName> extends GrammarDefinition {
91
92
.seq (ref (spaceOptional))
92
93
.seq (char (CLOSE_DOCTYPE ))
93
94
.map ((each) => createDoctype (each[2 ]));
94
- document () => ref (misc)
95
+ Parser document () => ref (misc)
95
96
.seq (ref (doctype).optional ())
96
97
.seq (ref (misc))
97
98
.seq (ref (element))
@@ -107,7 +108,7 @@ abstract class XmlGrammarDefinition<TNode, TName> extends GrammarDefinition {
107
108
nodes.addAll (each[4 ] as Iterable <TNode >);
108
109
return createDocument (nodes);
109
110
});
110
- element () => char (OPEN_ELEMENT )
111
+ Parser element () => char (OPEN_ELEMENT )
111
112
.seq (ref (qualified))
112
113
.seq (ref (attributes))
113
114
.seq (ref (spaceOptional))
@@ -129,20 +130,20 @@ abstract class XmlGrammarDefinition<TNode, TName> extends GrammarDefinition {
129
130
}
130
131
}
131
132
});
132
- processing () => string (OPEN_PROCESSING )
133
+ Parser processing () => string (OPEN_PROCESSING )
133
134
.seq (ref (nameToken))
134
135
.seq (ref (space).seq (any ().starLazy (string (CLOSE_PROCESSING )).flatten ()).pick (1 ).optional ('' ))
135
136
.seq (string (CLOSE_PROCESSING ))
136
137
.map ((each) => createProcessing (each[1 ], each[2 ]));
137
- qualified () => ref (nameToken).map (createQualified);
138
+ Parser qualified () => ref (nameToken).map (createQualified);
138
139
139
- characterData () => new XmlCharacterDataParser (OPEN_ELEMENT , 1 ).map (createText);
140
- misc () => ref (spaceText).or (ref (comment)).or (ref (processing)).star ();
141
- space () => whitespace ().plus ();
142
- spaceText () => ref (space).flatten ().map (createText);
143
- spaceOptional () => whitespace ().star ();
140
+ Parser characterData () => new XmlCharacterDataParser (OPEN_ELEMENT , 1 ).map (createText);
141
+ Parser misc () => ref (spaceText).or (ref (comment)).or (ref (processing)).star ();
142
+ Parser space () => whitespace ().plus ();
143
+ Parser spaceText () => ref (space).flatten ().map (createText);
144
+ Parser spaceOptional () => whitespace ().star ();
144
145
145
- nameToken () => ref (nameStartChar).seq (ref (nameChar).star ()).flatten ();
146
- nameStartChar () => pattern (NAME_START_CHARS , 'Expected name' );
147
- nameChar () => pattern (NAME_CHARS );
146
+ Parser nameToken () => ref (nameStartChar).seq (ref (nameChar).star ()).flatten ();
147
+ Parser nameStartChar () => pattern (NAME_START_CHARS , 'Expected name' );
148
+ Parser nameChar () => pattern (NAME_CHARS );
148
149
}
0 commit comments