/[suikacvs]/messaging/manakai/lib/Message/DOM/XMLParser.dis
Suika

Contents of /messaging/manakai/lib/Message/DOM/XMLParser.dis

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.34 - (hide annotations) (download)
Thu Mar 16 08:52:32 2006 UTC (18 years, 8 months ago) by wakaba
Branch: MAIN
Changes since 1.33: +432 -121 lines
++ manakai/bin/ChangeLog	16 Mar 2006 08:50:09 -0000
2006-03-16  Wakaba  <wakaba@suika.fam.cx>

	* daf.pl: In parser tests |c:anyDOMConfigurationParameter|
	properties are supported.

++ manakai/lib/Message/Util/DIS/ChangeLog	16 Mar 2006 08:52:18 -0000
2006-03-16  Wakaba  <wakaba@suika.fam.cx>

	* Value.dis (getPerlCode): A typo is fixed.

++ manakai/lib/Message/DOM/ChangeLog	16 Mar 2006 08:51:43 -0000
2006-03-16  Wakaba  <wakaba@suika.fam.cx>

	* XMLParser.dis (cfg:entity-replacement-tree): New configuration
	parameter.

	* DOMXML.dis (manakaiExpanded): Renamed from |isExpanded|.

	* DOMCore.dis, Tree.dis, DOMLS.dis, XMLParser.dis: Lexical
	data types added to configuration parameters.

1 wakaba 1.1 Module:
2     @QName: MDOM|XMLParser
3     @Namespace:
4     http://suika.fam.cx/~wakaba/archive/2004/dom/xml-parser#
5    
6     @FullName:
7     @@lang:en
8     @@@: XML Parser
9    
10     @DISCore:author: DISCore|Wakaba
11     @License: license|Perl+MPL
12     @Date:
13 wakaba 1.34 $Date: 2006/03/15 13:45:00 $
14 wakaba 1.1
15     @DefaultFor: ManakaiDOM|ManakaiDOMLatest
16    
17     @Require:
18     @@Module:
19     @@@QName: MDOM|DOMLS
20     @@@WithFor: ManakaiDOM|ManakaiDOMLatest
21 wakaba 1.6 @@Module:
22     @@@QName: MDOM|XDoctype
23     @@@WithFor: ManakaiDOM|ManakaiDOMLatest
24 wakaba 1.1
25     Namespace:
26 wakaba 1.8 @c:
27     http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#
28 wakaba 1.11 @cfg:
29     http://suika.fam.cx/www/2006/dom-config/
30 wakaba 1.6 @d:
31     http://suika.fam.cx/~wakaba/archive/2004/dom/xdt#
32 wakaba 1.1 @dis:
33     http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--
34 wakaba 1.5 @dtest:
35     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/DIS#Test/
36 wakaba 1.1 @dx:
37     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#
38     @ecore:
39     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/Core/
40     @f:
41     http://suika.fam.cx/~wakaba/archive/2004/dom/feature#
42 wakaba 1.11 @fe:
43     http://suika.fam.cx/www/2006/feature/
44     @gls:
45     http://suika.fam.cx/~wakaba/archive/2004/dom/gls#
46 wakaba 1.1 @idl:
47     http://suika.fam.cx/~wakaba/archive/2004/dis/IDL#
48     @infoset:
49     http://www.w3.org/2001/04/infoset#
50     @lang:
51     http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#
52     @license:
53     http://suika.fam.cx/~wakaba/archive/2004/8/18/license#
54     @LSEV:
55     http://www.w3.org/2002/DOMLS
56     @ManakaiDOM:
57     http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#
58     @ManakaiDOMLS:
59     http://suika.fam.cx/~wakaba/archive/2004/mdom-ls#
60     @MDOM:
61     http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#ManakaiDOM.
62     @MDOMX:
63     http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#
64 wakaba 1.11 @mn:
65     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/ManakaiNode#
66 wakaba 1.1 @rdf:
67     http://www.w3.org/1999/02/22-rdf-syntax-ns#
68     @rdfs:
69     http://www.w3.org/2000/01/rdf-schema#
70     @t:
71     http://suika.fam.cx/~wakaba/archive/2004/dom/tree#
72 wakaba 1.5 @test:
73     http://suika.fam.cx/~wakaba/archive/2004/dis/Test#
74 wakaba 1.29 @urigen:
75     http://suika.fam.cx/~wakaba/archive/2005/manakai/URI/Generic/
76 wakaba 1.8 @x:
77     http://suika.fam.cx/~wakaba/archive/2004/dom/xml#
78 wakaba 1.1 @xml:
79     http://www.w3.org/XML/1998/namespace
80 wakaba 1.9 @xml-dtd:
81     http://www.w3.org/TR/REC-xml
82 wakaba 1.1 @xmlns:
83     http://www.w3.org/2000/xmlns/
84     @xp:
85     http://suika.fam.cx/~wakaba/archive/2004/dom/xml-parser#
86    
87     ## -- Features
88    
89     ElementTypeBinding:
90     @Name: FeatureDef
91     @ElementType:
92     dis:ResourceDef
93     @ShadowContent:
94     @@rdf:type: f|Feature
95     @@For: =ManakaiDOM|all
96    
97     ElementTypeBinding:
98     @Name: FeatureVerDef
99     @ElementType:
100     dis:ResourceDef
101     @ShadowContent:
102     @@rdf:type: f|Feature
103    
104     ElementTypeBinding:
105     @Name: featureQName
106     @ElementType:
107     f:name
108     @ShadowContent:
109     @@ContentType: DISCore|QName
110    
111     ResourceDef:
112     @QName: DOMString
113     @AliasFor: DOMMain|DOMString
114     @For: ManakaiDOM|DOM
115    
116     ResourceDef:
117     @QName: Node
118     @AliasFor: t|Node
119     @For: ManakaiDOM|DOM
120    
121     ResourceDef:
122     @QName: Element
123     @AliasFor: t|Element
124     @For: ManakaiDOM|DOM
125    
126     ResourceDef:
127     @QName: Document
128     @AliasFor: t|Document
129     @For: ManakaiDOM|DOM
130    
131 wakaba 1.6 ResourceDef:
132     @QName: DocumentXDoctype
133     @AliasFor: d|DocumentXDoctype
134     @For: ManakaiDOM|DOM
135    
136 wakaba 1.8 ResourceDef:
137     @QName: DTDef
138     @AliasFor: d|DocumentTypeDefinition
139     @For: ManakaiDOM|DOM
140    
141     ResourceDef:
142     @QName: ETDef
143     @AliasFor: d|ElementTypeDefinition
144     @For: ManakaiDOM|DOM
145    
146     ResourceDef:
147     @QName: ATDef
148     @AliasFor: d|AttributeDefinition
149     @For: ManakaiDOM|DOM
150    
151 wakaba 1.1 ElementTypeBinding:
152     @Name: ClsDef
153     @ElementType:
154     dis:ResourceDef
155     @ShadowContent:
156     @@rdf:type:
157     @@@@: dis|MultipleResource
158     @@@ForCheck: !ManakaiDOM|ForIF !ManakaiDOM|ForClass
159     @@resourceFor:
160     @@@@: ManakaiDOM|ForClass
161     @@@ForCheck: ManakaiDOM|ManakaiDOM !=ManakaiDOM|ManakaiDOM
162     @@For: ManakaiDOM|DOM3
163     @@For: =ManakaiDOM|ManakaiDOM
164    
165     @@rdf:type:
166     @@@@: DISLang|Class
167     @@@ForCheck: ManakaiDOM|ForClass
168    
169     ElementTypeBinding:
170     @Name: ClsQName
171     @ElementType:
172     dis:QName
173     @ShadowContent:
174     @@ForCheck: ManakaiDOM|ForClass
175    
176     ElementTypeBinding:
177     @Name: ClsISA
178     @ElementType:
179     dis:ISA
180     @ShadowContent:
181     @@ForCheck: ManakaiDOM|ForClass
182    
183     ElementTypeBinding:
184     @Name: nullCase
185     @ElementType:
186     dis:ResourceDef
187     @ShadowContent:
188     @@rdf:type: ManakaiDOM|InCase
189     @@Value:
190     @@@is-null:1
191    
192 wakaba 1.27 ElementTypeBinding:
193     @Name: TrueCase
194     @ElementType:
195     dis:ResourceDef
196     @ShadowContent:
197     @@rdf:type:
198     ManakaiDOM:InCase
199     @@Value:
200     @@@@: 1
201     @@@ContentType: DISCore|Boolean
202     @@Type: idl|boolean||ManakaiDOM|all
203    
204     ElementTypeBinding:
205     @Name: FalseCase
206     @ElementType:
207     dis:ResourceDef
208     @ShadowContent:
209     @@rdf:type:
210     ManakaiDOM:InCase
211     @@Value:
212     @@@@: 0
213     @@@ContentType: DISCore|Boolean
214     @@Type: idl|boolean||ManakaiDOM|all
215    
216 wakaba 1.1 ResourceDef:
217     @QName: LSParser
218     @AliasFor: DOMLS|LSParser
219     @For: ManakaiDOM|DOM3
220    
221     ClsDef:
222     @ClsQName: ManakaiXMLParser
223    
224     @Implement: DOMLS|LSParser
225    
226 wakaba 1.28 @f:implements: DOMLS|LSFeature30
227     @f:implements: DOMLS|ParseString10
228     @enImplNote:
229     @@ddid: dtdfeature
230     @@@:
231     {TODO::
232     Once DTD validation is implemented, add <Q::f:implements>
233     for XML-DTD-feature.
234     }
235 wakaba 1.1
236 wakaba 1.11 @DISLang:role: gls|ParserRole
237 wakaba 1.1
238 wakaba 1.3 @enDesc:
239     Note that the <Class::ManakaiXMLParser> reports any XML errors
240     (syntax errors and / or well-formedness constraint errors)
241     via the <IF::DOMCore:error-handler> registered to
242     the <A::DOMLS:LSParser.domConfig> object. Each error has
243     its <A::DOMCore:DOMError.severity>, either <C::DOMCore:SEVERITY_ERROR>
244     or <C::DOMCore:SEVERITY_FATAL_ERROR>. However, their semantics
245     are slight different from the ones of <QUOTE::error> and
246     <QUOTE::fatal error> in XML; in this implemenetation,
247     <C::DOMCore:SEVERITY_ERROR> implies that the parsing process
248     can effectively be continued to detect more errors while
249     <C::DOMCore:SEVERITY_FATAL_ERROR> implies that the error
250     is serious so that the result document tree and any errors
251     might be far from the ones obtained when the error would not
252     be found.
253 wakaba 1.28
254     @Test:
255     @@QName: GLSImpl.createGLSParser.LS.test
256     @@enDesc:
257     Since there is at least one implementation of the feature (i.e.
258     this class), the <M::gls|GLSImplementation.createGLSParser>
259     must not throw an exception.
260     @@PerlDef:
261     my $impl;
262     __CODE{DOMLS|createImplForTest:: $impl => $impl}__;
263    
264     my $p = $impl-><M::gls|GLSImplementation.createGLSParser>
265     ({LS => '3.0'});
266    
267     $test->assert_isa ($p, <IFName::LSParser>);
268     @Test:
269     @@QName: GLSImpl.createGLSParser.ParseXMLString.test
270     @@enDesc:
271     Since there is at least one implementation of the feature (i.e.
272     this class), the <M::gls|GLSImplementation.createGLSParser>
273     must not throw an exception.
274     @@PerlDef:
275     my $impl;
276     __CODE{DOMLS|createImplForTest:: $impl => $impl}__;
277    
278     my $p = $impl-><M::gls|GLSImplementation.createGLSParser>
279     ({<Q::fe|ParseXMLString> => '1.0'});
280    
281     $test->assert_not_null ($p);
282     @Test:
283     @@QName: GLSImpl.createGLSParser.LS.ParseXMLString.test
284     @@enDesc:
285     Since there is at least one implementation of the feature (i.e.
286     this class), the <M::gls|GLSImplementation.createGLSParser>
287     must not throw an exception.
288     @@PerlDef:
289     my $impl;
290     __CODE{DOMLS|createImplForTest:: $impl => $impl}__;
291    
292     my $p = $impl-><M::gls|GLSImplementation.createGLSParser>
293     ({LS => '3.0', <Q::fe|ParseXMLString> => '1.0'});
294    
295     $test->assert_isa ($p, <IFName::LSParser>);
296    
297     @Test:
298     @@QName: DOMImplLS.createLSParser.1.test
299     @@enDesc:
300     Since there is at least one implementation of the feature (i.e.
301     this class), the <M::gls|GLSImplementation.createGLSParser>
302     must not throw an exception.
303     @@PerlDef:
304     my $impl;
305     __CODE{DOMLS|createImplForTest:: $impl => $impl}__;
306    
307     my $p = $impl-><M::DOMLS|DOMImplementationLS.createLSParser>
308     (<C::DOMLS|DOMImplementationLS.MODE_SYNCHRONOUS>);
309     $test->assert_isa ($p, <IFName::LSParser>);
310     @enImplNote:
311     @@ddid: lsparsertext
312     @@@:
313     Future version should add test:
314     @@QName: DOMImplLS.createLSParser.2.test
315     @@enDesc:
316     Since there is at least one implementation of the feature (i.e.
317     this class), the <M::gls|GLSImplementation.createGLSParser>
318     must not throw an exception.
319     @@PerlDef:
320     my $impl;
321     __CODE{DOMLS|createImplForTest:: $impl => $impl}__;
322    
323     my $p = $impl-><M::DOMLS|DOMImplementationLS.createLSParser>
324     (<C::DOMLS|DOMImplementationLS.MODE_SYNCHRONOUS>,
325     <Q::xml-dtd:>);
326     $test->assert_isa ($p, <IFName::LSParser>);
327 wakaba 1.3
328 wakaba 1.27 @Test:
329     @@QName: Perl.open.utf8.strref.1.test
330     @@enDesc:
331     Does PerlIO works as intended?
332     @@PerlDef:
333     my $s = qq<\x{3001}\x0A\x{10001}>;
334     #open my $a, '<'.':utf8', \$s;
335     require IO::String;
336     my $a = IO::String->new ($s);
337     $test->assert_num_equals
338     (actual_value => ord getc $a,
339     expected_value => 0x3001);
340     $test->assert_num_equals
341     (actual_value => ord getc $a,
342     expected_value => 0x000A);
343     $test->assert_num_equals
344     (actual_value => ord getc $a,
345     expected_value => 0x10001);
346     $a->ungetc (0x10001);
347     $test->assert_num_equals
348     (actual_value => ord getc $a,
349     expected_value => 0x10001);
350     $test->assert_null (getc $a);
351     close $a;
352     @Test:
353     @@QName: Perl.open.8859.strref.2.test
354     @@enDesc:
355     Does PerlIO works as intended?
356     @@PerlDef:
357     my $s = qq<\x{0080}\x0A\x{00A9}>;
358     #open my $a, '<', \$s;
359     require IO::String;
360     my $a = IO::String->new ($s);
361     $test->assert_num_equals
362     (actual_value => ord getc $a,
363     expected_value => 0x0080);
364     $test->assert_num_equals
365     (actual_value => ord getc $a,
366     expected_value => 0x000A);
367     $test->assert_num_equals
368     (actual_value => ord getc $a,
369     expected_value => 0x00A9);
370     $a->ungetc (0x00A9);
371     $test->assert_num_equals
372     (actual_value => ord getc $a,
373     expected_value => 0x00A9);
374     $test->assert_null (getc $a);
375     close $a;
376    
377 wakaba 1.1 @Attr:
378     @@Name: domConfig
379     @@enDesc:
380     The configuration of the parser.
381    
382     @@Get:
383     @@@Type: DOMCore|DOMConfiguration
384     @@@enDesc: The DOM configuration object.
385     @@@PerlDef:
386     __CODE{DOMCore|getConfigObject::
387     $target => $self,
388     $targetHash => $self,
389 wakaba 1.27 $targetType => {<ClassName::xp|ManakaiXMLParser>},
390 wakaba 1.1 $result => $r,
391     }__;
392    
393 wakaba 1.27 @Attr:
394     @@ForCheck: ManakaiDOM|ForClass
395     @@Name: async
396     @@enDesc:
397     Whether the parser is asynchronous or not.
398     @@Type: idl|boolean||ManakaiDOM|all
399     @@Get:
400     @@@FalseCase:
401     @@@@enDesc:
402     The parser does not in asynchronous mode.
403     @@@PerlDef: \
404     @@Test:
405     @@@QName: XMLParser.async.test
406     @@@PerlDef:
407     my $xp;
408     __CODE{createParserForTest:: $xp => $xp}__;
409    
410     $test->assert_false ($xp-><AG::DOMLS|LSParser.async>);
411    
412     @Attr:
413     @@ForCheck: ManakaiDOM|ForClass
414     @@Name: busy
415     @@enDesc:
416     Whether the parser is currently busy loading a document or not.
417     @@Type: idl|boolean||ManakaiDOM|all
418     @@Get:
419     @@@TrueCase:
420     @@@@enDesc:
421     The parser is currently busy.
422     @@@FalseCase:
423     @@@@enDesc:
424     The parser is not busy.
425     @@@PerlDef:
426     $r = $self->{<H::DOMLS|busy>};
427    
428     @enImplNote:
429     @@ddid: abort
430     @@@:
431     {ISSUE::
432     LSParser.abort:
433    
434     Is it required to support even in synchronous mode?
435     }
436    
437     {TODO::
438     LSParser.filter
439     }
440    
441     @ResourceDef:
442     @@QName: createParserForTest
443     @@ForCheck: ManakaiDOM|ForClass
444     @@rdf:type: DISPerl|BlockCode
445     @@PerlDef:
446     require Message::DOM::GenericLS;
447     $xp = <Class::ManakaiXMLParser>
448     ->new (<Class::gls|ManakaiGLSImplementation>->_new, '');
449    
450 wakaba 1.1 @Method:
451     @@ManakaiDOM:isForInternal:1
452     @@ForCheck: ManakaiDOM|ForClass
453     @@Operator: DISPerl|NewMethod
454     @@enDesc:
455     Creates a new instance of the object.
456     @@Param:
457     @@@Name: impl
458 wakaba 1.11 @@@Type: gls|GLSImplementation
459 wakaba 1.1 @@@enDesc:
460     The implementation from which the parser is created.
461     @@Param:
462     @@@Name: features
463     @@@Type: DOMString
464     @@@dis:actualType: f|FeaturesString
465     @@@enDesc:
466     The set of features requested for the parser.
467     @@Return:
468     @@@Type: DOMMain|DOMObject
469     @@@dis:actualType: LSParser
470     @@@enDesc:
471     The newly created parser.
472     @@@PerlDef:
473     $r = bless {
474     <H::DOMCore:implementation> => $impl,
475     }, $self;
476    
477     @Method:
478 wakaba 1.27 @@Name: parseURI
479     @@enDesc:
480     Parses an XML document identified by a DOM URI.
481 wakaba 1.1
482 wakaba 1.27 It is equivalent to <M::.parse> method with its <P::input>
483     parameter set to a <IF::LSInput> object whose
484     <A::LSInput.systemId> set to <P::uri>.
485 wakaba 1.1 @@Param:
486 wakaba 1.27 @@@Name: uri
487 wakaba 1.1 @@@Type: DOMString
488 wakaba 1.27 @@@enDesc:
489     The DOM URI of the XML document to be read.
490 wakaba 1.1 @@Return:
491     @@@Type: Document
492 wakaba 1.27 @@@enDesc:
493     The newly created and populated <IF::Document> node.
494     @@@dx:raises:
495     @@@@@: ManakaiDOMLS|MDOMLS_BUSY
496     @@@@enDesc:
497     If <A::LSParser.busy> is <DOM::true>.
498     @@@dx:raises:
499     @@@@@: DOMLS|PARSE_ERR
500     @@@@enDesc:
501     If the <IF::LSParser> was unable to load the document.
502     @@@PerlDef:
503     __DEEP{
504     $r = $self-><M::LSParser.parse> ({system_id => $uri});
505     }__;
506    
507     @Method:
508     @@Name: parse
509     @@enDesc:
510     Parses an XML document from a resource identified
511     by a <IF::LSInput>.
512     @@Param:
513     @@@Name: input
514     @@@Type: LSInput
515     @@@enDesc:
516     The <IF::LSInput> from which the source of the document
517     is to be read.
518     @@Return:
519     @@@Type: Document
520     @@@enDesc:
521     The newly created and populated <IF::Document> node.
522     @@@dx:raises:
523     @@@@@: ManakaiDOMLS|MDOMLS_BUSY
524     @@@@enDesc:
525     If the <A::LSParser.busy> is <DOM::true>.
526     @@@dx:raises:
527     @@@@@: DOMLS|PARSE_ERR
528     @@@@enDesc:
529     If the <IF::LSParser> was unable to load the document.
530 wakaba 1.1 @@@PerlDef:
531 wakaba 1.27 if ($self->{<H::DOMLS|busy>}) {
532     __EXCEPTION{ManakaiDOMLS|MDOMLS_BUSY}__;
533     }
534     local $self->{<H::DOMLS|busy>} = true;
535    
536     my $in;
537     __DEEP{
538     $self->{parser_cfg} = $self-><AG::LSParser.domConfig>;
539     ## Parser's |domConfig| object.
540     $self->{in_in} = $self->{parser_cfg}
541     -><M::c|DOMConfiguration.getParameter>
542     (<Q::xp|ls-input-to-input-file>);
543     $in = $self->{in_in}-><M::ManakaiDOMLSInputToInputFile.resolveLSInput>
544     ($input,
545     $self->{parser_cfg}
546     -><M::c|DOMConfiguration.getParameter>
547     ('error-handler'));
548     }__;
549     unless (defined $in) {
550     __c|ERROR{DOMLS|no-input-specified::
551     MDOMX:param-name => 'input',
552     }__;
553     __CODE{ParseError}__;
554     }
555    
556     require IO::Handle;
557 wakaba 1.1
558     $self->{char} = [];
559     $self->{token} = [];
560 wakaba 1.6 $self->{entity} = [{
561 wakaba 1.27 fh => $in-><AG::ManakaiDOMInputFile.filehandle>,
562     base_uri => $in-><AG::ManakaiDOMInputFile.baseURI>,
563     doc_uri => $in-><AG::ManakaiDOMInputFile.documentURI>,
564 wakaba 1.6 line => 1,
565     column => 1,
566     pos => 0,
567 wakaba 1.27 close_file => sub { $in-><M::ManakaiDOMInputFile.close> },
568     reptxt => \'',
569     is_external_entity => true,
570 wakaba 1.6 }];
571 wakaba 1.27 ## Entity stack.
572 wakaba 1.14 $self->{location} = $self->{entity}->[-1];
573 wakaba 1.27 ## Parsing location object as required by DPG.
574     ## It must always be equal to |{entity}->[-1]|.
575 wakaba 1.6 $self->{entity_char} = [];
576 wakaba 1.27 ## Stack for |{char}| stacks analog to |{entity}| stack.
577 wakaba 1.6 $self->{entity_token} = [];
578 wakaba 1.27 ## Stack for |{token}| stacks analog to |{entity}| stack.
579 wakaba 1.3 $self->{xml_version} = '1.0';
580 wakaba 1.27 ## Document XML version: either |1.0| or |1.1|.
581 wakaba 1.3 $self->{standalone} = false;
582 wakaba 1.27 ## True iff |standalone=yes| is explicitly specified.
583 wakaba 1.19 $self->{has_xref} = false;
584 wakaba 1.27 ## There is an unread external entity.
585     $self->{dont_process} = false;
586     ## So, don't process |ENTITY| and |ATTLIST| declarations.
587 wakaba 1.11 $self->{general_entity} = {
588     lt => {is_predefined => true},
589     gt => {is_predefined => true},
590     amp => {is_predefined => true},
591     quot => {is_predefined => true},
592     apos => {is_predefined => true},
593     };
594 wakaba 1.27 ## Declared general entities.
595 wakaba 1.6 $self->{param_entity} = {};
596 wakaba 1.27 ## Declared parameter entities.
597 wakaba 1.9 $self->{attr} = {};
598     # $self->{attr}->{$element_type_name}->{$attr_name} = $attr_def
599 wakaba 1.27 ## Declared attributes.
600 wakaba 1.1
601     __DEEP{
602 wakaba 1.11 $r = $self->{<H::c|implementation>}-><M::DOMImpl.createDocument>;
603     $self->{doc} = $r;
604 wakaba 1.27 ## |Document| object.
605     CORE::delete $self->{docx};
606     ## |DocumentXDoctype| object (if necessary).
607 wakaba 1.21 $self->{doc_cfg} = $r-><AG::Document.domConfig>;
608 wakaba 1.27 ## |Document|'s configuration.
609 wakaba 1.11 CORE::delete $self->{dtdef};
610 wakaba 1.27 ## |DocumentTypeDefinition| object (if created).
611 wakaba 1.17 CORE::delete $self->{dtdecl};
612 wakaba 1.27 ## |DocumentTypeDeclaration| object (if created).
613 wakaba 1.21
614     $r-><AS::Document.strictErrorChecking> (false);
615     ## NOTE: Any checks such as |Name| validity done by
616     ## methods on DOM nodes are disabled. It might result
617     ## in creating an ill-formed DOM tree when parser
618     ## errors are traped by |error-handler|.
619     $self->{doc_cfg}-><M::c|DOMConfiguration.setParameter>
620     (<Q::cfg|entity-reference-read-only> => false);
621     ## NOTE: Turn this configuration parameter off is required
622     ## because entity reference subtree is created by
623     ## the parser rather than |createEntityReference|'s
624     ## cloning. Parser's |cfg:entity-reference-read-only|
625     ## configuration parameter controls whether generated
626     ## subtree is then marked as read-only or not.
627     $self->{doc_cfg}-><M::c|DOMConfiguration.setParameter>
628     (<Q::cfg|clone-entity-reference-subtree> => true);
629     ## NOTE: Turn this configuration parameter on makes
630     ## entity reference subtrees in attribute default values
631     ## cloned as is into default attribute node subtrees.
632 wakaba 1.26 $self->{doc_cfg}-><M::c|DOMConfiguration.setParameter>
633     (<Q::cfg|dtd-default-attributes> => false);
634     ## NOTE: Don't create DTD default attributes by
635     ## |createElementNS| method.
636     $self->{doc_cfg}-><M::c|DOMConfiguration.setParameter>
637 wakaba 1.30 (<Q::cfg|xml-id> => $self->{parser_cfg}
638     -><M::c|DOMConfiguration.getParameter>
639     (<Q::cfg|xml-id>));
640     $self->{doc_cfg}-><M::c|DOMConfiguration.setParameter>
641 wakaba 1.26 ('error-handler' => sub {
642     my (undef, $err) = @_;
643     return ($err-><AG::c|DOMError.severity> !=
644     <C::c|DOMError.SEVERITY_FATAL_ERROR>);
645     })
646     unless $Message::DOM::XMLParser::DEBUG;
647 wakaba 1.29 ## NOTE: The default error handler in manakai |warn|s error
648 wakaba 1.26 ## description.
649 wakaba 1.11
650 wakaba 1.29 ## Document entity's URI and base URI
651     $r-><AS::Document.documentURI> ($self->{entity}->[0]->{doc_uri});
652     $r-><AS::Document.manakaiEntityBaseURI>
653     ($self->{entity}->[0]->{base_uri});
654    
655 wakaba 1.11 ## Document entity -> |Document| node
656     $self->_parse_DocumentEntity;
657    
658 wakaba 1.27 for (@{$self->{entity}}) {
659     $_->{close_file}->();
660     ## NOTE: There should be only the document entity.
661     }
662    
663 wakaba 1.11 ## Replacement tree for general |Entity| nodes
664 wakaba 1.34 if ($self->{parser_cfg}-><M::c|DOMConfiguration.getParameter>
665     (<Q::cfg|entity-replacement-tree>)) {
666     my @ent = values %{$self->{general_entity}};
667     for my $ent (@ent) {
668     if (exists $ent->{has_replacement_text}) {
669 wakaba 1.11 my $ent_name = $ent->{name};
670     $self->{entity} = [<Code::getCopyOfEntityState::
671     $entity_type = 'general_entity',
672     $entity_name = $ent_name>];
673 wakaba 1.14 $self->{location} = $self->{entity}->[-1];
674 wakaba 1.11 $self->{token} = [];
675     $self->{char} = [];
676 wakaba 1.23 local $ent->{is_opened} = true;
677 wakaba 1.11 ## TODO: External entity support
678     $self->_parse_InternalGeneralParsedEntity ($ent->{node});
679     $ent->{node}-><AS::x|Entity.hasReplacementTree> (true);
680 wakaba 1.27 $self->{entity}->[-1]->{close_file}->();
681 wakaba 1.21 ## ISSUE: Should errors detected by this phase result
682     ## in |DOMLS:PARSE_ERR| exception thrown?
683 wakaba 1.20 }
684 wakaba 1.11 ## TODO: Read-only if configuration (for all entities)
685 wakaba 1.34 }
686     } # cfg|entity-replacement-tree
687 wakaba 1.11
688 wakaba 1.21 ## Turns flags to their default value
689     $self->{doc_cfg}-><M::c|DOMConfiguration.setParameter>
690     (<Q::cfg|entity-reference-read-only> => null);
691     $self->{doc_cfg}-><M::c|DOMConfiguration.setParameter>
692     (<Q::cfg|clone-entity-reference-subtree> => null);
693 wakaba 1.26 $self->{doc_cfg}-><M::c|DOMConfiguration.setParameter>
694     (<Q::cfg|dtd-default-attributes> => null);
695     $self->{doc_cfg}-><M::c|DOMConfiguration.setParameter>
696 wakaba 1.30 (<Q::cfg|xml-id> => null);
697     $self->{doc_cfg}-><M::c|DOMConfiguration.setParameter>
698 wakaba 1.26 ('error-handler' => null);
699 wakaba 1.11 $r-><AS::Document.strictErrorChecking> (true);
700 wakaba 1.1 }__;
701    
702     @Method:
703     @@Name: shiftChar
704     @@ManakaiDOM:isForInternal:1
705     @@ForCheck: ManakaiDOM|ForClass
706     @@enDesc:
707     Returns the next character.
708     @@Return:
709     @@@Type: idl|long||ManakaiDOM|all
710     @@@enDesc:
711     The code position number of the next character, if any,
712 wakaba 1.6 or <CODE::-1>.
713 wakaba 1.1 @@@PerlDef:
714     if (@{$self->{char}}) {
715     $r = shift @{$self->{char}};
716     } else {
717 wakaba 1.6 GETCHAR: {
718 wakaba 1.27 no warnings 'closed'; # getc() on closed filehandle warning
719     my $ent = $self->{entity}->[-1];
720 wakaba 1.32 my $char = $ent->{fh}->getc;
721 wakaba 1.6
722 wakaba 1.7 if (defined $char and length $char) {
723 wakaba 1.27 $ent->{pos}++;
724 wakaba 1.6 $r = ord $char;
725     if ($r == 0x000A) {
726 wakaba 1.27 $ent->{line}++;
727     $ent->{column} = 1;
728 wakaba 1.6 } elsif ($r == 0x000D) {
729 wakaba 1.32 my $next_char = $ent->{fh}->getc;
730 wakaba 1.6 if ($next_char eq "\x0A") {
731 wakaba 1.27 if ($ent->{is_external_entity}) {
732     $ent->{pos}++;
733     $ent->{line}++;
734     $ent->{column} = 1;
735     $r = 0x000A; # ^ U+000D U+000A -> U+000A ^
736     } else { # Internal entity
737     $ent->{column}++;
738     ## Line number will be increased by next |shiftChar|.
739     $ent->{fh}->ungetc (0x000A);
740     #$r = 0x000D; # ^ U+000D U+000A -> U+000D ^ U+000A
741     # no change
742     }
743 wakaba 1.6 } elsif ($next_char eq "\x85") {
744     if ($self->{xml_version} eq '1.1') {
745 wakaba 1.27 if ($ent->{is_external_entity}) {
746     if ($ent->{no_xml11_eol}) {
747     my $location = {
748     utf32_offset => $ent->{pos} - 1,
749     line_number => $ent->{line},
750     column_number => $ent->{column},
751     };
752     my $continue = __c|ERROR{
753     xp|fatal-xml11-end-of-line-in-xml-declaration::
754     c|location => {$location},
755     xp|character-number => {$r},
756     }__;
757     unless ($continue) {
758     __CODE{ParseError}__;
759     }
760     } # no_xml11_eol
761     $ent->{pos}++;
762     $ent->{line}++;
763     $ent->{column} = 1;
764     $r = 0x000A; # ^ U+000D U+0085 -> U+000A ^
765     } else { # internal entity
766     $ent->{column}++;
767     ## Line number will be increased by next |shiftChar|.
768     $ent->{fh}->ungetc (0x0085);
769     #$r = 0x000D; # ^ U+000D U+0085 -> U+000D ^ U+0085
770     # no change
771     }
772     } else { # XML 1.0
773 wakaba 1.16 ## |no_xml11_eol| will be tested later.
774 wakaba 1.27 $ent->{column}++;
775     ## Line number will be increased by next |shiftChar|.
776     $ent->{fh}->ungetc (0x0085);
777     $r = 0x000A if $ent->{is_external_entity};
778     # external: ^ U+000D U+0085 -> U+000A ^ U+0085
779     # internal: ^ U+000D U+0085 -> U+000D ^ U+0085 (as is)
780 wakaba 1.6 }
781 wakaba 1.27 } else { # neither U+000A nor U+0085
782     $ent->{line}++;
783     $ent->{column} = 1;
784     $ent->{fh}->ungetc (ord $next_char);
785     $r = 0x000A if $ent->{is_external_entity};
786     # external: ^ U+000D _ -> U+000A ^ _
787     # internal: ^ U+000D _ -> U+000D ^ _ (as is)
788 wakaba 1.6 }
789 wakaba 1.27 } elsif ($r == 0x0085 or $r == 0x2028) {
790     if ($ent->{no_xml11_eol}) {
791     my $location = {
792     utf32_offset => $ent->{pos} - 1,
793     line_number => $ent->{line},
794     column_number => $ent->{column},
795     };
796     my $continue = __c|ERROR{
797     xp|fatal-xml11-end-of-line-in-xml-declaration::
798     c|location => {$location},
799     xp|character-number => {$r},
800     }__;
801     unless ($continue) {
802     __CODE{ParseError}__;
803     }
804     } # no_xml11_eol
805     $r = 0x000A if $self->{xml_version} eq '1.1' and
806     $ent->{is_external_entity};
807     ## Even in XML 1.0 it increases the line number.
808     $ent->{line}++;
809     $ent->{column} = 1;
810 wakaba 1.6 } elsif (
811     not ((0x0020 <= $r and $r <= 0x007E) or
812     (0x00A0 <= $r and $r <= 0xD7FF) or
813     (0xE000 <= $r and $r <= 0xFFFD) or
814     (0x10000 <= $r and $r <= 0x10FFFF)) and
815 wakaba 1.27 $r != 0x0009 and
816     not (($self->{xml_version} eq '1.0' or
817     not $ent->{is_external_entity}) and
818     (0x007F <= $r and $r <= 0x009F)) and
819     not ($self->{xml_version} eq '1.1' and
820     not $ent->{is_external_entity} and
821     0x0001 <= $r and $r <= 0x001F)
822 wakaba 1.6 ) {
823     my $location = {
824 wakaba 1.27 utf32_offset => $ent->{pos} - 1,
825     line_number => $ent->{line},
826     column_number => $ent->{column},
827 wakaba 1.6 };
828 wakaba 1.27 my $continue = __c|ERROR{xp|wf-legal-literal-character::
829     c|location => {$location},
830 wakaba 1.6 xp|character-number => {$r},
831     }__;
832     unless ($continue) {
833 wakaba 1.27 __CODE{ParseError}__;
834 wakaba 1.3 }
835 wakaba 1.27 $ent->{column}++;
836     } else { # XML |Char|
837     $ent->{column}++;
838 wakaba 1.3 }
839     } else {
840 wakaba 1.6 $r = -1;
841 wakaba 1.3 }
842 wakaba 1.6 } # GETCHAR
843 wakaba 1.1 }
844    
845     @Method:
846     @@ManakaiDOM:isForInternal: 1
847     @@Operator: ManakaiDOM|MUErrorHandler
848     @@enDesc:
849     When a <IF::ecore|ErrorInterface||ManakaiDOM|Perl> is <Perl::report>ed,
850     then this method is invoked.
851    
852     The method calls the <cfg::DOMCore|error-handler> if the error is of
853     <IF::DOMCore|DOMError>. Otherwise, the error is re-thrown so that
854     corresponding <Perl::catch> clause, if any, can catch the error.
855     @@Param:
856     @@@Name: err
857     @@@Type: ecore|ErrorInterface||ManakaiDOM|Perl
858     @@@enDesc:
859     The reported error object.
860     @@Return:
861     @@@Type: DISPerl|Any
862     @@@enDesc:
863     If the <P::err> is a <IF::DOMCore|DOMError>, then the return value
864     of the error handler.
865    
866     {NOTE:: If the error is thrown, the method never returns.
867     }
868     @@@nullCase:
869     @@@@enDesc:
870     No error handler.
871     @@@PerlDef:
872     if ($err->isa (<IFName::DOMCore|DOMError||ManakaiDOM|ManakaiDOM>)) {
873     __DEEP{
874     A: {
875     my $cfg = $self-><AG::LSParser.domConfig>;
876     my $h = $cfg-><M::DOMCore|DOMConfiguration.getParameter>
877     ('error-handler');
878     $r = $h-><M::DOMCore|DOMErrorHandler.handleError> ($err);
879     } # A
880     }__;
881     } else {
882     $err-><M::ecore|ErrorInterface||ManakaiDOM|Perl.throw>;
883     }
884    
885     @DISPerl:dpgDef:
886    
887     /*
888     XML Document Entity
889    
890     document := prolog element *Misc
891     - *Char RestrictedChar *Char ;; [1]
892     */
893 wakaba 1.11 rule DocumentEntity : standalone {
894 wakaba 1.1 /*
895     prolog := XMLDecl? *Misc [doctypedecl *Misc] ;; [22]
896     */
897 wakaba 1.16 ?lexmode DocumentStart;
898 wakaba 1.11
899     my $doc;
900     lang:Perl {
901     $doc = $self->{doc};
902     }
903 wakaba 1.1
904 wakaba 1.3 ~? (XDO) {
905 wakaba 1.16 ?lexmode XMLDeclarationOrPI;
906     lang:Perl {
907     $self->{entity}->[-1]->{no_xml11_eol} = true;
908     }
909     ~ (S) { // XML declaration
910     &_XMLDeclaration_ ($doc => $doc);
911     ~ (PIC2) {
912     ?lexmode DocumentProlog;
913     } else {
914     ?lexmode DocumentProlog;
915     }
916     } (NameChar) { // Processing instruction whose target begins with |xml|
917     my $target_token;
918     lang:Perl ($v => $token.value) {
919     $target_token = $token;
920     $target_token->{value} = 'xml'.$target_token->{value};
921     $self->{entity}->[-1]->{no_xml11_eol} = false;
922     }
923     ?lexmode PINmtoken;
924     ~? (Nmtoken) {
925     lang:Perl ($v => $token.value) {
926     $target_token->{value} .= $v;
927     }
928     ?lexmode PIName;
929     }
930     lang:Perl {
931     $target_token->{type} = 'Name';
932     $target_token->{location_d} += 3; # 'xml'
933     unshift @{$self->{token}}, $token;
934     $token = $target_token;
935     }
936     &_ProcessingInstruction_ ($doc => $doc, $parent => $doc);
937     ~ (PIC) {
938     ?lexmode DocumentProlog;
939     } else {
940     ?lexmode DocumentProlog;
941     }
942 wakaba 1.3 } else {
943 wakaba 1.16 lang:Perl {
944     $self->{entity}->[-1]->{no_xml11_eol} = false;
945     }
946 wakaba 1.3 }
947     } else {
948     ?lexmode 'DocumentProlog';
949     }
950 wakaba 1.1
951     // *Misc
952 wakaba 1.2 ~* (CDO) {
953 wakaba 1.1 &_CommentDeclaration_ ($doc => $doc, $parent => $doc);
954    
955     ~ (MDC) {
956     ?lexmode DocumentProlog;
957     } else {
958     ?lexmode DocumentProlog;
959     }
960     } (PIO) {
961     &_ProcessingInstruction_ ($doc => $doc, $parent => $doc);
962    
963     ~ (PIC) {
964     ?lexmode 'DocumentProlog';
965     } else {
966     ?lexmode DocumentProlog;
967     }
968     } (S) {
969     //
970     }
971    
972     // doctypedecl
973     ~? (MDO) {
974     &_DocumentTypeDeclaration_ ($doc => $doc);
975    
976 wakaba 1.3 ~ (MDC) {
977     ?lexmode DocumentMisc;
978     } else {
979     ?lexmode DocumentMisc;
980     }
981     } else {
982     ?lexmode DocumentMisc;
983 wakaba 1.1 }
984 wakaba 1.25
985     lang:Perl {
986     $self->{doc}-><AS::Document.allDeclarationsProcessed> (true)
987     unless $self->{dont_process};
988     }
989 wakaba 1.1
990     // *Misc
991 wakaba 1.2 ~* (CDO) {
992 wakaba 1.1 &_CommentDeclaration_ ($doc => $doc, $parent => $doc);
993    
994     ~ (MDC) {
995     ?lexmode DocumentMisc;
996     } else {
997     ?lexmode DocumentMisc;
998     }
999     } (PIO) {
1000     &_ProcessingInstruction_ ($doc => $doc, $parent => $doc);
1001    
1002     ~ (PIC) {
1003     ?lexmode 'DocumentMisc';
1004     } else {
1005     ?lexmode DocumentMisc;
1006     }
1007     } (S) {
1008     //
1009     }
1010    
1011     // Document element
1012     ~ (STAGO) {
1013     &Element_ ($doc => $doc, $parent => $doc)
1014     : unshift-current-token;
1015     ~ (TAGC) {
1016     ?lexmode DocumentEnd;
1017     } else {
1018     ?lexmode DocumentEnd;
1019     }
1020     } else {
1021     ?lexmode 'DocumentEnd';
1022     }
1023    
1024     // *Misc
1025 wakaba 1.2 ~* (CDO) {
1026 wakaba 1.1 &_CommentDeclaration_ ($doc => $doc, $parent => $doc);
1027    
1028     ~ (MDC) {
1029     ?lexmode DocumentEnd;
1030     } else {
1031     ?lexmode DocumentEnd;
1032     }
1033     } (PIO) {
1034     &_ProcessingInstruction_ ($doc => $doc, $parent => $doc);
1035     ~ (PIC) {
1036     ?lexmode 'DocumentEnd';
1037     } else {
1038     ?lexmode DocumentEnd;
1039     }
1040     } (S) {
1041     //
1042     }
1043    
1044     ~ (#EOF) { }
1045     } // DocumentEntity
1046 wakaba 1.11
1047     /*
1048     Internal General Parsed Entity
1049    
1050     An internal general parsed entity is well-formed if its
1051     replacement text matches the production labeled |content|.
1052     */
1053     rule InternalGeneralParsedEntity ($ent) : standalone {
1054     ?lexmode ElementContent;
1055    
1056     my $ns;
1057     lang:Perl {
1058     $ns = {
1059     xml => <Q::xml:>,
1060     xmlns => <Q::xmlns:>,
1061     };
1062     }
1063    
1064     &content ($parent => $ent, $ns => $ns);
1065    
1066     ~ (#EOF) { }
1067     } // InternalGeneralParsedEntity
1068    
1069 wakaba 1.1 /*
1070     XML Declaration
1071    
1072     XMLDecl := '<?xml' VersionInfo
1073     [EncodingDecl]
1074     [SDDecl]
1075     [S] '?>' ;; [23]
1076    
1077     NOTE: XML declaration is optional in XML 1.0
1078     while it is required in XML 1.1.
1079     */
1080 wakaba 1.16 rule _XMLDeclaration_ {
1081     // ~ (XDO) { }
1082 wakaba 1.3 ?lexmode XMLDeclaration;
1083 wakaba 1.16 //lang:Perl {
1084     // $self->{entity}->[-1]->{no_xml11_eol} = true;
1085     //}
1086     //~ (S) { }
1087 wakaba 1.3
1088     ~ (Name == 'version') {
1089     ~? (S) { }
1090     ~ (VI) { }
1091     ~? (S) { }
1092 wakaba 1.1
1093 wakaba 1.3 my $ver;
1094     my $bad_token;
1095    
1096     ~ (LIT) {
1097     ?lexmode AttributeValueLiteral;
1098    
1099     ~ (STRING) {
1100     lang:Perl ($version => $token.value) {
1101     $ver = $version;
1102     $bad_token = $token;
1103     }
1104     }
1105    
1106     ~ (LIT) {
1107     ?lexmode XMLDeclaration;
1108     }
1109     } (LITA) {
1110     ?lexmode AttributeValueLiteralA;
1111    
1112     ~ (STRING) {
1113     lang:Perl ($version => $token.value) {
1114     $ver = $version;
1115     $bad_token = $token;
1116     }
1117     }
1118    
1119     ~ (LITA) {
1120     ?lexmode XMLDeclaration;
1121     }
1122     }
1123    
1124     lang:Perl : has-error {
1125     unless ($ver eq '1.0' or $ver eq '1.1') {
1126     my $location;
1127     __CODE{xp|get-location-from-token::
1128     $token => {$bad_token},
1129     $result => {$location},
1130     }__;
1131     my $continue = __DOMCore:ERROR{xp|wf-unsupported-xml-version::
1132     DOMCore|location => {$location},
1133 wakaba 1.16 xp|parent => {$self->{doc}},
1134 wakaba 1.3 infoset|version => {$ver},
1135     xp|error-token => {$bad_token},
1136     }__;
1137     unless ($continue) {
1138 wakaba 1.27 __CODE{ParseError}__;
1139 wakaba 1.3 }
1140     }
1141 wakaba 1.16 $self->{doc}-><AS::Document.xmlVersion> ($ver);
1142 wakaba 1.3 $self->{xml_version} = $ver;
1143     }
1144    
1145     ~? (S) { }
1146 wakaba 1.1 }
1147    
1148 wakaba 1.3 ~? (Name == 'encoding') {
1149     ~? (S) { }
1150     ~ (VI) { }
1151     ~? (S) { }
1152    
1153     my $ver;
1154     my $bad_token;
1155    
1156     ~ (LIT) {
1157     ?lexmode AttributeValueLiteral;
1158    
1159     ~ (STRING) {
1160     lang:Perl ($version => $token.value) {
1161     $ver = $version;
1162     $bad_token = $token;
1163     }
1164     }
1165    
1166     ~ (LIT) {
1167     ?lexmode XMLDeclaration;
1168     }
1169     } (LITA) {
1170     ?lexmode AttributeValueLiteralA;
1171    
1172     ~ (STRING) {
1173     lang:Perl ($version => $token.value) {
1174     $ver = $version;
1175     $bad_token = $token;
1176     }
1177     }
1178    
1179     ~ (LITA) {
1180     ?lexmode XMLDeclaration;
1181     }
1182     }
1183    
1184     lang:Perl : has-error {
1185     unless ($ver =~ /\A[A-Za-z][A-Za-z0-9._-]*\z/) {
1186     my $location;
1187     __CODE{xp|get-location-from-token::
1188     $token => {$bad_token},
1189     $result => {$location},
1190     }__;
1191     my $continue = __DOMCore:ERROR{xp|wf-malformed-enc-name::
1192     DOMCore|location => {$location},
1193 wakaba 1.16 xp|parent => {$self->{doc}},
1194 wakaba 1.3 xp|name => {$ver},
1195     xp|error-token => {$bad_token},
1196     }__;
1197     unless ($continue) {
1198 wakaba 1.27 __CODE{ParseError}__;
1199 wakaba 1.3 }
1200     }
1201 wakaba 1.16 $self->{doc}-><AS::Document.xmlEncoding> ($ver);
1202 wakaba 1.3 }
1203    
1204     ~? (S) { }
1205 wakaba 1.1 }
1206 wakaba 1.3
1207     ~? (Name == 'standalone') {
1208     ~? (S) { }
1209     ~ (VI) { }
1210     ~? (S) { }
1211    
1212     my $ver;
1213     my $bad_token;
1214    
1215     ~ (LIT) {
1216     ?lexmode AttributeValueLiteral;
1217    
1218     ~ (STRING) {
1219     lang:Perl ($version => $token.value) {
1220     $ver = $version;
1221     $bad_token = $token;
1222     }
1223     }
1224    
1225     ~ (LIT) {
1226     ?lexmode XMLDeclaration;
1227     }
1228     } (LITA) {
1229     ?lexmode AttributeValueLiteralA;
1230    
1231     ~ (STRING) {
1232     lang:Perl ($version => $token.value) {
1233     $ver = $version;
1234     $bad_token = $token;
1235     }
1236     }
1237 wakaba 1.1
1238 wakaba 1.3 ~ (LITA) {
1239     ?lexmode XMLDeclaration;
1240     }
1241     }
1242    
1243     lang:Perl : has-error {
1244     unless ($ver eq 'yes' or $ver eq 'no') {
1245     my $location;
1246     __CODE{xp|get-location-from-token::
1247     $token => {$bad_token},
1248     $result => {$location},
1249     }__;
1250     my $continue = __DOMCore:ERROR{xp|wf-malformed-xml-standalone::
1251     DOMCore|location => {$location},
1252 wakaba 1.16 xp|parent => {$self->{doc}},
1253 wakaba 1.3 xp|name => {$ver},
1254     xp|error-token => {$bad_token},
1255     }__;
1256     unless ($continue) {
1257 wakaba 1.27 __CODE{ParseError}__;
1258 wakaba 1.3 }
1259     }
1260 wakaba 1.13 if ($ver eq 'yes') {
1261 wakaba 1.16 $self->{doc}-><AS::Document.xmlStandalone> (true);
1262 wakaba 1.13 $self->{standalone} = true;
1263     }
1264 wakaba 1.3 }
1265    
1266     ~? (S) { }
1267     }
1268    
1269 wakaba 1.16 ~ (PIC1) {
1270     lang:Perl {
1271     $self->{entity}->[-1]->{no_xml11_eol} = false;
1272     }
1273     } else {
1274     lang:Perl {
1275     $self->{entity}->[-1]->{no_xml11_eol} = false;
1276     }
1277     }
1278    
1279     // ~ (PIC2) { }
1280 wakaba 1.3 } // _XMLDeclaration_
1281 wakaba 1.1
1282     /*
1283     Comment Declaration
1284    
1285     Comment := '<!--' *(Char - '-' / '-' (Char - '-'))
1286     '-->' ;; [15]
1287 wakaba 1.4 */
1288 wakaba 1.1 rule _CommentDeclaration_ ($doc, $parent) {
1289     ?lexmode 'CommentDeclaration';
1290    
1291     ~? (STRING) {
1292     lang:Perl ($data => $token.value) {
1293     my $com = $doc-><M::Document.createComment> ($data);
1294     $parent-><M::Node.appendChild> ($com);
1295     }
1296     } else {
1297     lang:Perl {
1298     my $com = $doc-><M::Document.createComment> ('');
1299     $parent-><M::Node.appendChild> ($com);
1300     }
1301     }
1302    
1303     ~ (COM) {
1304     ?lexmode MarkupDeclaration;
1305     } else {
1306     ?lexmode MarkupDeclaration;
1307     }
1308    
1309     // ~ (MDC) { }
1310 wakaba 1.4 } // _CommentDeclaration
1311 wakaba 1.15
1312     rule _CommentDeclarationDTD {
1313     ?lexmode CommentDeclaration;
1314 wakaba 1.4
1315     ~? (STRING) {
1316     //
1317     }
1318    
1319     ~ (COM) {
1320     ?lexmode MarkupDeclaration;
1321     } else {
1322     ?lexmode MarkupDeclaration;
1323     }
1324    
1325     ~ (MDC) {
1326     ?lexmode DTD;
1327     } else {
1328     ?lexmode DTD;
1329     }
1330     } // _CommentDeclarationDTD
1331    
1332 wakaba 1.1 /*
1333     Processing Instruction
1334    
1335     PI := '<?' PITarget [S *Char - *Char '?>' *Char]
1336     '?>' ;; [16]
1337     */
1338     rule _ProcessingInstruction_ ($doc, $parent) {
1339     ?lexmode 'PIName';
1340    
1341     my $pi;
1342    
1343     ~ (Name) {
1344 wakaba 1.3 lang:Perl ($name => $token.value) : has-error {
1345 wakaba 1.1 if (lc $name eq 'xml') {
1346 wakaba 1.3 my $location;
1347     __CODE{xp|get-location-from-token::
1348     $token => {$token},
1349     $result => {$location},
1350     }__;
1351     my $continue = __DOMCore:ERROR{xp|wf-pi-target-is-xml::
1352     xp|name => {$name},
1353     DOMCore|location => {$location},
1354     xp|parent => {$parent},
1355     }__;
1356     unless ($continue) {
1357 wakaba 1.27 __CODE{ParseError}__;
1358 wakaba 1.3 }
1359 wakaba 1.1 }
1360 wakaba 1.26 __CODE{checkNCName:: $name => $name}__;
1361    
1362 wakaba 1.1 $pi = $doc-><M::Document.createProcessingInstruction>
1363     ($name);
1364     }
1365 wakaba 1.14 } else {
1366     lang:Perl {
1367     $pi = $doc-><M::Document.createProcessingInstruction> ('#INVALID');
1368     }
1369 wakaba 1.1 }
1370    
1371 wakaba 1.14 ~? (S) {
1372 wakaba 1.1 ?lexmode 'PIData';
1373    
1374     my $tdata;
1375    
1376     ~? (DATA) {
1377     lang:Perl ($data => $token.value) {
1378     $tdata = $data;
1379     }
1380     } else {
1381     lang:Perl {
1382     $tdata = '';
1383     }
1384     }
1385    
1386     lang:Perl {
1387     $pi-><AS::Node.nodeValue> ($tdata);
1388     }
1389     }
1390    
1391     lang:Perl {
1392     $parent-><M::Node.appendChild> ($pi);
1393     }
1394    
1395     // ~ (PIC) { }
1396     } // _ProcessingInstruction_
1397 wakaba 1.4
1398 wakaba 1.6 /*
1399     Processing instruction in DTD
1400     */
1401     rule _ProcessingInstructionDTD ($doc, $doctype) {
1402 wakaba 1.4 ?lexmode 'PIName';
1403 wakaba 1.6
1404     my $pi;
1405 wakaba 1.4
1406     ~ (Name) {
1407 wakaba 1.6 lang:Perl ($name => $token.value) : has-error {
1408     if (lc $name eq 'xml') {
1409     my $location;
1410     __CODE{xp|get-location-from-token::
1411     $token => {$token},
1412     $result => {$location},
1413     }__;
1414     my $continue = __DOMCore:ERROR{xp|wf-pi-target-is-xml::
1415     xp|name => {$name},
1416     DOMCore|location => {$location},
1417     xp|parent => {$doctype},
1418     }__;
1419     unless ($continue) {
1420 wakaba 1.27 __CODE{ParseError}__;
1421 wakaba 1.6 }
1422     }
1423 wakaba 1.26 __CODE{checkNCName:: $name => $name}__;
1424    
1425 wakaba 1.6 $pi = $doc-><M::Document.createProcessingInstruction>
1426     ($name);
1427 wakaba 1.29 $pi-><AS::x|ProcessingInstruction.manakaiBaseURI>
1428     ($self->{location}->{base_uri});
1429 wakaba 1.6 }
1430 wakaba 1.14 } else {
1431     lang:Perl {
1432     $pi = $doc-><M::Document.createProcessingInstruction> ('#INVALID');
1433     }
1434 wakaba 1.4 }
1435    
1436 wakaba 1.14 ~? (S) {
1437 wakaba 1.4 ?lexmode 'PIData';
1438    
1439 wakaba 1.6 my $tdata;
1440    
1441 wakaba 1.4 ~? (DATA) {
1442 wakaba 1.6 lang:Perl ($data => $token.value) {
1443     $tdata = $data;
1444     }
1445     } else {
1446     lang:Perl {
1447     $tdata = '';
1448     }
1449     }
1450    
1451     lang:Perl {
1452     $pi-><AS::Node.nodeValue> ($tdata);
1453 wakaba 1.4 }
1454     }
1455    
1456 wakaba 1.6 lang:Perl {
1457     $doctype-><M::Node.appendChild> ($pi);
1458     }
1459    
1460 wakaba 1.4 ~ (PIC) {
1461     ?lexmode DTD;
1462     } else {
1463     ?lexmode DTD;
1464     }
1465     } // _ProcessingInstructionDTD
1466 wakaba 1.1
1467     /*
1468     Element content parsing mode
1469    
1470     element := EmptyElemTag /
1471     STag content ETag ;; [39]
1472     content := (CharData / element / Reference / CDSect /
1473     PI / Comment) ;; [43]
1474     */
1475 wakaba 1.6 rule Element_ ($doc, $parent, $ns) : standalone {
1476 wakaba 1.1 ?lexmode 'ElementContent';
1477    
1478     my $node; // Current "parent" node
1479     my $nodes; // Node stack (w/o $current_node)
1480     my $type; // Current "parent" element type QName
1481     my $types; // Element type stack (w/o $current_type)
1482 wakaba 1.6 //my $ns; // Current in-scope namespace bindings
1483 wakaba 1.1 my $nses; // Namespace binding stack (w/o $current_ns)
1484    
1485     lang:Perl {
1486     $node = $parent;
1487     $nodes = [];
1488     $type = '';
1489     $types = [];
1490 wakaba 1.6 $ns ||= {
1491 wakaba 1.1 xml => <Q::xml:>,
1492     xmlns => <Q::xmlns:>,
1493     };
1494     $nses = [];
1495     }
1496    
1497     ~* : name => CONTENT
1498     (CharData) {
1499     // Character data
1500     lang:Perl ($data => $token.value) {
1501 wakaba 1.31 $node-><M::Node.manakaiAppendText> (\($data));
1502 wakaba 1.1 }
1503     } (STAGO) {
1504     // Start tag or empty element tag
1505    
1506     ?lexmode 'StartTag';
1507    
1508     ~ (Name) {
1509     my $attrs;
1510 wakaba 1.26 lang:Perl ($name => $token.value) : has-error {
1511     __CODE{checkQName:: $name => $name}__;
1512 wakaba 1.1 push @{$types}, $type;
1513     $type = $name;
1514     $attrs = {};
1515     }
1516    
1517     ~? (S) {
1518     &AttributeSpecificationList
1519     ($doc => $doc, $attrs => $attrs);
1520     }
1521    
1522     my $el;
1523 wakaba 1.9
1524     /*
1525     Note that this implementation does not perform
1526     attribute value tokenization (but does white space
1527     normalization common to attribute types) and
1528     construct the tree as is. DOM Level 3 Core spec
1529     is unclear on this point. With tokenization,
1530     entity references cannot be preserved.
1531    
1532     The manakai Node.nodeValue and Attr.value attributes
1533     do tokenization according to attribute types.
1534     */
1535    
1536     /*
1537     ISSUE: Should |xml:id| attribute be typed?
1538     */
1539 wakaba 1.1
1540     lang:Perl {
1541     push @{$nses}, $ns;
1542     $ns = {%$ns};
1543 wakaba 1.26
1544     ## Default attributes
1545     DA: for my $atqname (%{$self->{attr}->{$type}}) {
1546     next DA unless $self->{attr}->{$type}->{$atqname};
1547     next DA if exists $attrs->{$atqname}; # specified
1548     my $dtype = $self->{attr}->{$type}->{$atqname}
1549     -><AG::ATDef.defaultType>;
1550     next DA unless $dtype == <C::ATDef.EXPLICIT_DEFAULT> or
1551     $dtype == <C::ATDef.FIXED_DEFAULT>;
1552     $attrs->{$atqname} = {is_default => true, nodes => []};
1553     for (@{$self->{attr}->{$type}->{$atqname}
1554     -><AG::Node.childNodes>}) {
1555     push @{$attrs->{$atqname}->{nodes}},
1556     $_-><M::Node.cloneNode> (true);
1557     }
1558     }
1559 wakaba 1.1
1560     my %gattr;
1561     my %lattr;
1562     for my $atqname (keys %$attrs) {
1563     my ($pfx, $lname) = split /:/, $atqname;
1564 wakaba 1.9 $attrs->{$atqname}->{def} = $self->{attr}->{$type}->{$atqname};
1565 wakaba 1.1 if (defined $lname) { ## Global attribute
1566     if ($pfx eq 'xmlns') {
1567 wakaba 1.26 my $nsuri = $attrs->{$atqname}->{is_default}
1568     ? $attrs->{$atqname}->{def}-><AG::Node.nodeValue>
1569     : $attrs->{$atqname}->{value};
1570     if (not $attrs->{$atqname}->{is_default} and
1571     $attrs->{$atqname}->{def}) {
1572 wakaba 1.9 my $dt = $attrs->{$atqname}->{def}-><AG::ATDef.declaredType>;
1573     if ({
1574     <C::ATDef.ID_ATTR> => true,
1575     <C::ATDef.IDREF_ATTR> => true,
1576     <C::ATDef.IDREFS_ATTR> => true,
1577     <C::ATDef.ENTITY_ATTR> => true,
1578     <C::ATDef.ENTITIES_ATTR> => true,
1579     <C::ATDef.NMTOKEN_ATTR> => true,
1580     <C::ATDef.NMTOKENS_ATTR> => true,
1581     <C::ATDef.NOTATION_ATTR> => true,
1582     <C::ATDef.ENUMERATION_ATTR> => true,
1583     }->{$dt}) {
1584     ## Tokenization (XML 1 3.3.3)
1585 wakaba 1.26 for ($nsuri) {
1586 wakaba 1.9 s/^\x20+//;
1587     s/\x20+\z//;
1588     s/\x20+/ /g;
1589     }
1590     }
1591     }
1592 wakaba 1.26 if ($lname eq 'xml' and
1593     $nsuri ne <Q::xml:>) {
1594     my $location;
1595     __CODE{xp|get-location-from-token::
1596     $token => $token,
1597     $result => $location,
1598     }__;
1599     my $continue = __c|ERROR{xp|nsc-reserved-prefix-xml::
1600     c|location => {$location},
1601     xp|token => {$token},
1602     infoset|prefix => {$lname},
1603     infoset|namespaceName => {$nsuri},
1604     }__;
1605     unless ($continue) {
1606 wakaba 1.27 __CODE{ParseError}__;
1607 wakaba 1.26 }
1608     } elsif ($lname eq 'xmlns') {
1609     my $location;
1610     __CODE{xp|get-location-from-token::
1611     $token => $token,
1612     $result => $location,
1613     }__;
1614     my $continue = __c|ERROR{xp|nsc-reserved-prefix-xmlns::
1615     c|location => {$location},
1616     xp|token => {$token},
1617     infoset|prefix => {$lname},
1618     infoset|namespaceName => {$nsuri},
1619     }__;
1620     unless ($continue) {
1621 wakaba 1.27 __CODE{ParseError}__;
1622 wakaba 1.26 }
1623     }
1624     if ($nsuri eq '') {
1625     if ($self->{xml_version} eq '1.0') {
1626     my $location;
1627     __CODE{xp|get-location-from-token::
1628     $token => $token,
1629     $result => $location,
1630     }__;
1631     my $continue = __c|ERROR{xp|nswf-empty-namespace-name::
1632     c|location => {$location},
1633     xp|token => {$token},
1634     infoset|namespaceName => {$nsuri},
1635     infoset|prefix => {$lname},
1636     }__;
1637     unless ($continue) {
1638 wakaba 1.27 __CODE{ParseError}__;
1639 wakaba 1.26 }
1640     }
1641     } elsif ($nsuri eq <Q::xml:> and
1642     $lname ne 'xml') {
1643     my $location;
1644     __CODE{xp|get-location-from-token::
1645     $token => $token,
1646     $result => $location,
1647     }__;
1648     my $continue = __c|ERROR{
1649     xp|nsc-reserved-namespace-name-xml::
1650     c|location => {$location},
1651     xp|token => {$token},
1652     infoset|prefix => {$lname},
1653     infoset|namespaceName => {$nsuri},
1654     }__;
1655     unless ($continue) {
1656 wakaba 1.27 __CODE{ParseError}__;
1657 wakaba 1.26 }
1658     } elsif ($nsuri eq <Q::xmlns:>) {
1659     my $location;
1660     __CODE{xp|get-location-from-token::
1661     $token => $token,
1662     $result => $location,
1663     }__;
1664     my $continue = __c|ERROR{
1665     xp|nsc-reserved-namespace-name-xmlns::
1666     c|location => {$location},
1667     xp|token => {$token},
1668     infoset|prefix => {$lname},
1669     infoset|namespaceName => {$nsuri},
1670     }__;
1671     unless ($continue) {
1672 wakaba 1.27 __CODE{ParseError}__;
1673 wakaba 1.26 }
1674     }
1675     $ns->{$lname} = $nsuri;
1676 wakaba 1.1 delete $ns->{$lname} unless length $ns->{$lname};
1677     }
1678     $gattr{$pfx}->{$lname} = $attrs->{$atqname};
1679     } else { ## Local attribute
1680     if ($pfx eq 'xmlns') {
1681 wakaba 1.26 $ns->{''} = $attrs->{xmlns}->{is_default}
1682     ? $attrs->{xmlns}->{def}-><AG::Node.nodeValue>
1683     : $attrs->{xmlns}->{value};
1684     if (not $attrs->{$atqname}->{is_default} and
1685     $attrs->{$atqname}->{def}) {
1686 wakaba 1.9 my $dt = $attrs->{$atqname}->{def}-><AG::ATDef.declaredType>;
1687     if ({
1688     <C::ATDef.ID_ATTR> => true,
1689     <C::ATDef.IDREF_ATTR> => true,
1690     <C::ATDef.IDREFS_ATTR> => true,
1691     <C::ATDef.ENTITY_ATTR> => true,
1692     <C::ATDef.ENTITIES_ATTR> => true,
1693     <C::ATDef.NMTOKEN_ATTR> => true,
1694     <C::ATDef.NMTOKENS_ATTR> => true,
1695     <C::ATDef.NOTATION_ATTR> => true,
1696     <C::ATDef.ENUMERATION_ATTR> => true,
1697     }->{$dt}) {
1698     ## Tokenization (XML 1 3.3.3)
1699     for ($ns->{''}) {
1700     s/^\x20+//;
1701     s/\x20+\z//;
1702     s/\x20+/ /g;
1703     }
1704     }
1705     }
1706 wakaba 1.26 unless ($ns->{''}) {
1707     delete $ns->{''};
1708     } elsif ($ns->{''} eq <Q::xml:>) {
1709     my $location;
1710     __CODE{xp|get-location-from-token::
1711     $token => $token,
1712     $result => $location,
1713     }__;
1714     my $continue = __c|ERROR{
1715     xp|nsc-reserved-namespace-name-xml::
1716     c|location => {$location},
1717     xp|token => {$token},
1718     infoset|prefix => {null},
1719     infoset|namespaceName => {<Q::xml:>},
1720     }__;
1721     unless ($continue) {
1722 wakaba 1.27 __CODE{ParseError}__;
1723 wakaba 1.26 }
1724     } elsif ($ns->{''} eq <Q::xmlns:>) {
1725     my $location;
1726     __CODE{xp|get-location-from-token::
1727     $token => $token,
1728     $result => $location,
1729     }__;
1730     my $continue = __c|ERROR{
1731     xp|nsc-reserved-namespace-name-xmlns::
1732     c|location => {$location},
1733     xp|token => {$token},
1734     infoset|prefix => {null},
1735     infoset|namespaceName => {<Q::xmlns:>},
1736     }__;
1737     unless ($continue) {
1738 wakaba 1.27 __CODE{ParseError}__;
1739 wakaba 1.26 }
1740     }
1741 wakaba 1.1 } else {
1742     $lattr{$pfx} = $attrs->{$atqname};
1743     }
1744     }
1745     }
1746    
1747     my ($pfx, $lname) = split /:/, $type;
1748     my $nsuri;
1749     if (defined $lname) { ## Prefixed namespace
1750     if (defined $ns->{$pfx}) {
1751     $nsuri = $ns->{$pfx};
1752     } else {
1753 wakaba 1.26 my $location;
1754     __CODE{xp|get-location-from-token::
1755     $token => $token,
1756     $result => $location,
1757     }__;
1758     my $continue = __c|ERROR{xp|nsc-prefix-declared::
1759     c|location => {$location},
1760     xp|token => {$token},
1761     infoset|prefix => {$pfx},
1762     xp|name => {$type},
1763     }__;
1764     unless ($continue) {
1765 wakaba 1.27 __CODE{ParseError}__;
1766 wakaba 1.26 }
1767 wakaba 1.1 }
1768     } else { ## Default namespace
1769     $nsuri = $ns->{''};
1770     }
1771    
1772     $el = $doc-><M::Document.createElementNS>
1773     ($nsuri, $type);
1774    
1775     if ($attrs->{xmlns}) {
1776     my $attr = $doc-><M::Document.createAttributeNS>
1777     (<Q::xmlns:>, 'xmlns');
1778     for (@{$attrs->{xmlns}->{nodes}}) {
1779 wakaba 1.31 if ($_-><AG::Node.nodeType> == <C::Node.TEXT_NODE>) {
1780     $attr-><M::Node.manakaiAppendText>
1781     (\($_-><AG::Node.textContent>));
1782     } else {
1783     $attr-><M::Node.appendChild> ($_);
1784     }
1785 wakaba 1.1 }
1786 wakaba 1.9 if ($attrs->{xmlns}->{def}) {
1787     __CODE{t|setAttrType::
1788     $attr => $attr,
1789     $type => {$attrs->{xmlns}->{def}-><AG::ATDef.declaredType>},
1790     }__;
1791     }
1792 wakaba 1.1 $el-><M::Element.setAttributeNodeNS> ($attr);
1793 wakaba 1.26 $attr-><AS::t|Attr.specified> (false)
1794     if $attrs->{xmlns}->{is_default};
1795 wakaba 1.1 }
1796    
1797     for my $lname (keys %lattr) {
1798     my $attr = $doc-><M::Document.createAttributeNS>
1799     (null, $lname);
1800     for (@{$lattr{$lname}->{nodes}}) {
1801 wakaba 1.31 if ($_-><AG::Node.nodeType> == <C::Node.TEXT_NODE>) {
1802     $attr-><M::Node.manakaiAppendText>
1803     (\($_-><AG::Node.textContent>));
1804     } else {
1805     $attr-><M::Node.appendChild> ($_);
1806     }
1807 wakaba 1.1 }
1808 wakaba 1.9 if ($attrs->{$lname}->{def}) {
1809     __CODE{t|setAttrType::
1810     $attr => $attr,
1811     $type => {$attrs->{$lname}->{def}-><AG::ATDef.declaredType>},
1812     }__;
1813     }
1814 wakaba 1.1 $el-><M::Element.setAttributeNodeNS> ($attr);
1815 wakaba 1.26 $attr-><AS::t|Attr.specified> (false)
1816     if $attrs->{$lname}->{is_default};
1817 wakaba 1.1 }
1818    
1819     for my $pfx (keys %gattr) {
1820 wakaba 1.26 LN: for my $lname (keys %{$gattr{$pfx}}) {
1821     my $name = $pfx.':'.$lname;
1822     unless (defined $ns->{$pfx}) {
1823     my $location;
1824     __CODE{xp|get-location-from-token::
1825     $token => $token,
1826     $result => $location,
1827     }__;
1828     my $continue = __c|ERROR{xp|nsc-prefix-declared::
1829     c|location => {$location},
1830     xp|token => {$token},
1831     xp|name => {$name},
1832     infoset|prefix => {$pfx},
1833     }__;
1834     unless ($continue) {
1835 wakaba 1.27 __CODE{ParseError}__;
1836 wakaba 1.26 }
1837     }
1838     my $attr = $el-><M::Element.getAttributeNodeNS>
1839     ($ns->{$pfx}, $lname);
1840     if ($attr) {
1841     my $another_name = $attr-><AG::Node.nodeName>;
1842     if ($name ne $another_name) {
1843     my $location;
1844     __CODE{xp|get-location-from-token::
1845     $token => $token,
1846     $result => $location,
1847     }__;
1848     my $continue = __c|ERROR{
1849     xp|nswf-unique-att-spec-expanded-name::
1850     c|location => {$location},
1851     xp|token => {$token},
1852     xp|another-attribute-name => {$another_name},
1853     xp|name => {$name},
1854     infoset|namespaceName => {$ns->{$pfx}},
1855     infoset|localName => {$lname},
1856     }__;
1857     unless ($continue) {
1858 wakaba 1.27 __CODE{ParseError}__;
1859 wakaba 1.26 }
1860     unless ($attr-><AG::t|Attr.specified>) {
1861     ## It is a default attribute
1862     $attr = $doc-><M::Document.createAttributeNS>
1863     ($ns->{$pfx}, $name);
1864     } else {
1865     ## It is a specified attribute
1866     next LN;
1867     }
1868     } else { ## There is default attribute
1869     $attr = $doc-><M::Document.createAttributeNS>
1870     ($ns->{$pfx}, $name);
1871     }
1872     } else {
1873     $attr = $doc-><M::Document.createAttributeNS>
1874     ($ns->{$pfx}, $name);
1875     }
1876 wakaba 1.1 for (@{$gattr{$pfx}->{$lname}->{nodes}}) {
1877 wakaba 1.31 if ($_-><AG::Node.nodeType> == <C::Node.TEXT_NODE>) {
1878     $attr-><M::Node.manakaiAppendText>
1879     (\($_-><AG::Node.textContent>));
1880     } else {
1881     $attr-><M::Node.appendChild> ($_);
1882     }
1883 wakaba 1.1 }
1884 wakaba 1.26 if ($gattr{$pfx}->{$lname}->{def}) {
1885 wakaba 1.9 __CODE{t|setAttrType::
1886     $attr => $attr,
1887 wakaba 1.26 $type => {$gattr{$pfx}->{$lname}
1888 wakaba 1.9 ->{def}-><AG::ATDef.declaredType>},
1889     }__;
1890     }
1891 wakaba 1.1 $el-><M::Element.setAttributeNodeNS> ($attr);
1892 wakaba 1.26 $attr-><AS::t|Attr.specified> (false)
1893     if $gattr{$pfx}->{$lname}->{is_default};
1894     } # PFX
1895 wakaba 1.1 }
1896    
1897     $node-><M::Node.appendChild> ($el);
1898     }
1899    
1900     ~ (TAGC) {
1901     lang:Perl {
1902     push @{$nodes}, $node;
1903     $node = $el;
1904     }
1905     ?lexmode ElementContent;
1906 wakaba 1.6 } (NESTC) {
1907     my $is_docel;
1908 wakaba 1.1 lang:Perl {
1909     $ns = pop @{$nses};
1910     $type = pop @{$types};
1911 wakaba 1.6 $is_docel = (@{$types} == 0);
1912     }
1913    
1914     if-true ($is_docel) {
1915     return;
1916     }
1917    
1918     ~ (TAGC) {
1919     ?lexmode ElementContent;
1920     } else {
1921     ?lexmode ElementContent;
1922 wakaba 1.1 }
1923     } else {
1924     ?lexmode ElementContent;
1925     }
1926     } else {
1927     ?lexmode ElementContent;
1928     }
1929    
1930     } (ETAGO) {
1931     // End tag
1932    
1933     ?lexmode 'EndTag';
1934    
1935     my $is_docel;
1936    
1937     ~ (Name) {
1938 wakaba 1.26 // No NCName & QName check (it must match to start-tag)
1939 wakaba 1.3 lang:Perl ($name => $token.value) : has-error {
1940 wakaba 1.1 if ($name eq $type) {
1941     $type = pop @{$types};
1942     if ($type eq '') {
1943     $is_docel = true;
1944     }
1945     $node = pop @{$nodes};
1946     $ns = pop @{$nses};
1947     } else {
1948 wakaba 1.3 my $location;
1949     __CODE{xp|get-location-from-token::
1950     $token => $token,
1951     $result => $location,
1952     }__;
1953     my $continue = __DOMCore:ERROR{xp|wf-element-type-match::
1954     DOMCore:location => {$location},
1955     xp|token => {$token},
1956     xp|expected-element-type => {$type},
1957     xp|actual-element-type => {$name},
1958     xp|node => {$node},
1959     }__;
1960     unless ($continue) {
1961 wakaba 1.27 __CODE{ParseError}__;
1962 wakaba 1.3 }
1963 wakaba 1.1 }
1964     }
1965     }
1966    
1967     ~? (S) { }
1968    
1969     if-true ($is_docel) {
1970 wakaba 1.3 lang:Perl : has-error {
1971 wakaba 1.1 if (@{$types}) {
1972 wakaba 1.3 my $location;
1973     __CODE{xp|get-location-from-token::
1974     $token => $token,
1975     $result => $location,
1976     }__;
1977     for my $type (reverse @{$types}) {
1978     my $continue = __DOMCore:ERROR{xp|wf-no-end-tag::
1979     DOMCore:location => {$location},
1980     xp|token => {$token},
1981     xp|expected-element-type => {$type},
1982     xp|node => {$node},
1983     }__;
1984     unless ($continue) {
1985 wakaba 1.27 __CODE{ParseError}__;
1986 wakaba 1.3 }
1987     $node = shift @{$nodes};
1988     }
1989 wakaba 1.1 }
1990     }
1991     return;
1992     }
1993    
1994     ~ (TAGC) {
1995     ?lexmode ElementContent;
1996     } else {
1997     ?lexmode 'ElementContent';
1998     }
1999    
2000     } (HCRO) {
2001     &_HexadecimalCharacterReference_
2002     ($doc => $doc, $parent => $node);
2003    
2004     ~ (REFC) {
2005     ?lexmode 'ElementContent';
2006     } else {
2007     ?lexmode ElementContent;
2008     }
2009     } (CRO) {
2010     &_NumericCharacterReference_
2011     ($doc => $doc, $parent => $node);
2012    
2013     ~ (REFC) {
2014     ?lexmode 'ElementContent';
2015     } else {
2016     ?lexmode ElementContent;
2017     }
2018     } (ERO) {
2019 wakaba 1.6 &_GeneralEntityReferenceEC
2020     ($doc => $doc, $parent => $node, $ns => $ns);
2021 wakaba 1.1 } (CDO) {
2022     &_CommentDeclaration_ ($doc => $doc, $parent => $node);
2023    
2024     ~ (MDC) {
2025     ?lexmode ElementContent;
2026     } else {
2027     ?lexmode ElementContent;
2028     }
2029     } (CDSO) {
2030     &_CDATASection_ ($doc => $doc, $parent => $node);
2031    
2032     ~ (MSE) {
2033     ?lexmode 'ElementContent';
2034     } else {
2035     ?lexmode ElementContent;
2036     }
2037     } (PIO) {
2038     &_ProcessingInstruction_ ($doc => $doc, $parent => $node);
2039    
2040     ~ (PIC) {
2041     ?lexmode 'ElementContent';
2042     } else {
2043     ?lexmode ElementContent;
2044     }
2045     }
2046 wakaba 1.3
2047     ~ (#NONE) { }
2048 wakaba 1.1 } // Element_
2049 wakaba 1.11
2050     /*
2051     content := [CharData]
2052     *((element / Reference / CDSect / PI / Comment) [CharData])
2053     */
2054     rule content ($parent, $ns) {
2055     // ?lexmode ElementContent;
2056    
2057     my $doc;
2058     lang:Perl {
2059     $doc = $self->{doc};
2060     }
2061    
2062     ~* (CharData) {
2063     lang:Perl ($data => $token.value) {
2064 wakaba 1.31 $parent-><M::Node.manakaiAppendText> (\($data));
2065 wakaba 1.11 }
2066     } (STAGO) {
2067     &Element_ ($doc => $doc, $parent => $parent, $ns => $ns)
2068     : unshift-current-token;
2069     ~ (TAGC) {
2070     ?lexmode ElementContent;
2071     } else {
2072     ?lexmode ElementContent;
2073     }
2074     } (HCRO) {
2075 wakaba 1.31 &_HexadecimalCharacterReference_ ($parent => $parent);
2076 wakaba 1.11
2077     ~ (REFC) {
2078     ?lexmode 'ElementContent';
2079     } else {
2080     ?lexmode ElementContent;
2081     }
2082     } (CRO) {
2083 wakaba 1.31 &_NumericCharacterReference_ ($parent => $parent);
2084 wakaba 1.11
2085     ~ (REFC) {
2086     ?lexmode 'ElementContent';
2087     } else {
2088     ?lexmode ElementContent;
2089     }
2090     } (ERO) {
2091     &_GeneralEntityReferenceEC
2092     ($doc => $doc, $parent => $parent, $ns => $ns);
2093     } (CDO) {
2094     &_CommentDeclaration_ ($doc => $doc, $parent => $parent);
2095    
2096     ~ (MDC) {
2097     ?lexmode ElementContent;
2098     } else {
2099     ?lexmode ElementContent;
2100     }
2101     } (CDSO) {
2102     &_CDATASection_ ($doc => $doc, $parent => $parent);
2103    
2104     ~ (MSE) {
2105     ?lexmode 'ElementContent';
2106     } else {
2107     ?lexmode ElementContent;
2108     }
2109     } (PIO) {
2110     &_ProcessingInstruction_ ($doc => $doc, $parent => $parent);
2111    
2112     ~ (PIC) {
2113     ?lexmode 'ElementContent';
2114     } else {
2115     ?lexmode ElementContent;
2116     }
2117     }
2118     } // content
2119 wakaba 1.1
2120     rule AttributeSpecificationList ($doc, $attrs)
2121     : standalone
2122     {
2123     ?lexmode 'StartTag';
2124    
2125     my $i;
2126     lang:Perl {
2127     $i = 0;
2128     }
2129    
2130     ~* (Name) {
2131     my $atqname;
2132 wakaba 1.26 lang:Perl ($name => $token.value) : has-error {
2133     __CODE{checkQName:: $name => $name}__;
2134 wakaba 1.1 $atqname = $name;
2135     }
2136    
2137     my $vals;
2138 wakaba 1.18 lang:Perl : has-error {
2139 wakaba 1.1 if ($attrs->{$atqname}) {
2140 wakaba 1.3 my $location;
2141     __CODE{xp|get-location-from-token::
2142     $token => $token,
2143     $result => $location,
2144     }__;
2145     my $continue = __DOMCore:ERROR{xp|wf-unique-att-spec::
2146     DOMCore:location => {$location},
2147     xp|token => {$token},
2148     xp|name => {$atqname},
2149     }__;
2150     unless ($continue) {
2151 wakaba 1.27 __CODE{ParseError}__;
2152 wakaba 1.3 }
2153 wakaba 1.1 }
2154    
2155     $vals = $attrs->{$atqname} = {
2156     nodes => [],
2157     value => '',
2158     index => $i++,
2159     };
2160     }
2161 wakaba 1.3
2162     ~? (S) { }
2163     ~ (VI) { }
2164     ~? (S) { }
2165 wakaba 1.1
2166     ~ (LIT) {
2167     &_AttributeValueSpecification_
2168     ($doc => $doc, $vals => $vals);
2169    
2170     ~ (LIT) {
2171     ?lexmode StartTag;
2172     } else {
2173     ?lexmode StartTag;
2174     }
2175     } (LITA) {
2176     &_AttributeValueSpecificationA_
2177     ($doc => $doc, $vals => $vals);
2178    
2179     ~ (LITA) {
2180     ?lexmode StartTag;
2181     } else {
2182     ?lexmode StartTag;
2183     }
2184     }
2185     } (S) : separator : terminator? { }
2186     } // AttributeSpecificationList
2187    
2188     rule _AttributeValueSpecification_ ($doc, $vals) {
2189     // ~ (LIT) { }
2190     ?lexmode 'AttributeValueLiteral';
2191    
2192     ~* (STRING) {
2193     lang:Perl ($value => $token.value) {
2194     $value =~ s/[\x09\x0A\x0D]/ /g;
2195     my $text = $doc-><M::Document.createTextNode> ($value);
2196     push @{$vals->{nodes}}, $text;
2197     $vals->{value} .= $value;
2198     }
2199     } (HCRO) {
2200     &_HexadecimalCharacterReferenceV_
2201     ($doc => $doc, $vals => $vals);
2202    
2203     ~ (REFC) {
2204     ?lexmode AttributeValueLiteral;
2205     } else {
2206     ?lexmode AttributeValueLiteral;
2207     }
2208     } (CRO) {
2209     &_NumericCharacterReferenceV_
2210     ($doc => $doc, $vals => $vals);
2211    
2212     ~ (REFC) {
2213     ?lexmode AttributeValueLiteral;
2214     } else {
2215     ?lexmode AttributeValueLiteral;
2216     }
2217     } (ERO) {
2218     // TODO: Attribute value normalization
2219     &_GeneralEntityReferenceV_
2220     ($doc => $doc, $vals => $vals);
2221    
2222     ~ (REFC) {
2223     ?lexmode AttributeValueLiteral;
2224     } else {
2225     ?lexmode AttributeValueLiteral;
2226     }
2227     }
2228    
2229     // ~ (LIT) { } (LITA) { }
2230     } // _AttributeValueSpecification_
2231    
2232     rule _AttributeValueSpecificationA_ ($doc, $vals) {
2233     // ~ (LITA) { }
2234     ?lexmode 'AttributeValueLiteralA';
2235    
2236     ~* (STRING) {
2237     lang:Perl ($value => $token.value) {
2238     $value =~ s/[\x09\x0A\x0D]/ /g;
2239     my $text = $doc-><M::Document.createTextNode> ($value);
2240     push @{$vals->{nodes}}, $text;
2241     $vals->{value} .= $value;
2242     }
2243     } (HCRO) {
2244     &_HexadecimalCharacterReferenceV_
2245     ($doc => $doc, $vals => $vals);
2246    
2247     ~ (REFC) {
2248     ?lexmode AttributeValueLiteralA;
2249     } else {
2250     ?lexmode AttributeValueLiteralA;
2251     }
2252     } (CRO) {
2253     &_NumericCharacterReferenceV_
2254     ($doc => $doc, $vals => $vals);
2255    
2256     ~ (REFC) {
2257     ?lexmode AttributeValueLiteralA;
2258     } else {
2259     ?lexmode AttributeValueLiteralA;
2260     }
2261     } (ERO) {
2262     // TODO: Attribute value normalization
2263     &_GeneralEntityReferenceV_
2264     ($doc => $doc, $vals => $vals);
2265    
2266     ~ (REFC) {
2267     ?lexmode AttributeValueLiteralA;
2268     } else {
2269     ?lexmode AttributeValueLiteralA;
2270     }
2271     }
2272    
2273     // ~ (LITA) { }
2274     } // _AttributeValueSpecificationA_
2275    
2276     /*
2277 wakaba 1.11 Parsing replacement text of an entity referenced in
2278     an attribute value specification.
2279     */
2280     rule AttributeValueLiteralE_ ($parent, $vals)
2281     : recursive
2282     {
2283     // ?lexmode AttributeValueLiteralE;
2284    
2285     ~* (STRING) {
2286     lang:Perl ($value => $token.value) {
2287     $value =~ s/[\x09\x0A\x0D]/ /g;
2288 wakaba 1.31 $parent-><M::Node.manakaiAppendText> (\($value));
2289 wakaba 1.11 $vals->{value} .= $value;
2290     }
2291     } (HCRO) {
2292     &_HexadecimalCharacterReferenceAE_
2293     ($parent => $parent, $vals => $vals);
2294    
2295     ~ (REFC) {
2296     ?lexmode AttributeValueLiteralE;
2297     } else {
2298     ?lexmode AttributeValueLiteralE;
2299     }
2300     } (CRO) {
2301     &_NumericCharacterReferenceAE_
2302     ($parent => $parent, $vals => $vals);
2303    
2304     ~ (REFC) {
2305     ?lexmode AttributeValueLiteralE;
2306     } else {
2307     ?lexmode AttributeValueLiteralE;
2308     }
2309     } (ERO) {
2310     &_GeneralEntityReferenceAE_ ($parent => $parent, $vals => $vals);
2311    
2312     ~ (REFC) {
2313     ?lexmode AttributeValueLiteralE;
2314     } else {
2315     ?lexmode AttributeValueLiteralE;
2316     }
2317 wakaba 1.18 } (#INVALID == '<') {
2318     lang:Perl : has-error {
2319     my $location;
2320     __CODE{xp|get-location-from-token::
2321     $token => $token,
2322     $result => $location,
2323     }__;
2324     my $continue = __DOMCore:ERROR{xp|wf-no-lt-in-attribute-values::
2325     c|location => {$location},
2326     xp|token => {$token},
2327     }__;
2328     unless ($continue) {
2329 wakaba 1.27 __CODE{ParseError}__;
2330 wakaba 1.18 }
2331    
2332 wakaba 1.31 $parent-><M::Node.manakaiAppendText> ('<');
2333 wakaba 1.18 $vals->{value} .= '<';
2334     }
2335 wakaba 1.11 }
2336    
2337     // ~ (#EOF) { }
2338     } // AttributeValueLiteralE_
2339    
2340     /*
2341 wakaba 1.1 CDATA Section Content Parsing Mode
2342     */
2343     rule _CDATASection_ ($doc, $parent) {
2344     ?lexmode 'CDATASectionContent';
2345    
2346     my $cdata;
2347    
2348 wakaba 1.2 ~? (CData) {
2349 wakaba 1.1 lang:Perl ($data => $token.value) {
2350     $cdata = $data;
2351     }
2352     } else {
2353     lang:Perl {
2354     $cdata = '';
2355     }
2356     }
2357    
2358     lang:Perl {
2359     my $cdsect = $doc-><M::Document.createCDATASection>
2360     ($cdata);
2361     $parent-><M::Node.appendChild> ($cdsect);
2362     }
2363    
2364     // ~ (MSE) { }
2365     } // _CDATASection_
2366    
2367 wakaba 1.31 rule _NumericCharacterReference_ ($parent) {
2368 wakaba 1.1 ?lexmode 'NumericCharacterReference';
2369    
2370     ~ (NUMBER) {
2371 wakaba 1.3 lang:Perl ($num => $token.value) : has-error {
2372     $num += 0;
2373     unless (
2374     ($self->{xml_version} eq '1.0' and
2375     ((0x0020 <= $num and $num <= 0xD7FF) or
2376     (0xE000 <= $num and $num <= 0xFFFD) or
2377     (0x10000 <= $num and $num <= 0x10FFFF) or
2378     $num == 0x9 or $num == 0xA or $num == 0xD)) or
2379     ($self->{xml_version} eq '1.1' and
2380     ((0x0001 <= $num and $num <= 0xD7FF) or
2381     (0xE000 <= $num and $num <= 0xFFFD) or
2382     (0x10000 <= $num and $num <= 0x10FFFF)))
2383     ) {
2384     my $location;
2385     __CODE{xp|get-location-from-token::
2386     $token => $token,
2387     $result => $location,
2388     }__;
2389     my $continue = __DOMCore:ERROR{xp|wf-legal-character::
2390     DOMCore:location => {$location},
2391     xp|token => {$token},
2392     xp|character-number => {$num},
2393     xp|parent => {$parent},
2394     }__;
2395     unless ($continue) {
2396 wakaba 1.27 __CODE{ParseError}__;
2397 wakaba 1.3 }
2398     }
2399 wakaba 1.31 $parent-><M::Node.manakaiAppendText> (chr $num);
2400 wakaba 1.1 }
2401     }
2402    
2403     // ~ (REFC) { }
2404     } // _NumericCharacterReference_
2405    
2406     rule _NumericCharacterReferenceV_ ($doc, $vals) {
2407     ?lexmode 'NumericCharacterReference';
2408    
2409     ~ (NUMBER) {
2410 wakaba 1.3 lang:Perl ($num => $token.value) : has-error {
2411     $num += 0;
2412     unless (
2413     ($self->{xml_version} eq '1.0' and
2414     ((0x0020 <= $num and $num <= 0xD7FF) or
2415     (0xE000 <= $num and $num <= 0xFFFD) or
2416     (0x10000 <= $num and $num <= 0x10FFFF) or
2417     $num == 0x9 or $num == 0xA or $num == 0xD)) or
2418     ($self->{xml_version} eq '1.1' and
2419     ((0x0001 <= $num and $num <= 0xD7FF) or
2420     (0xE000 <= $num and $num <= 0xFFFD) or
2421     (0x10000 <= $num and $num <= 0x10FFFF)))
2422     ) {
2423     my $location;
2424     __CODE{xp|get-location-from-token::
2425     $token => $token,
2426     $result => $location,
2427     }__;
2428     my $continue = __DOMCore:ERROR{xp|wf-legal-character::
2429     DOMCore:location => {$location},
2430     xp|token => {$token},
2431     xp|character-number => {$num},
2432     }__;
2433     unless ($continue) {
2434 wakaba 1.27 __CODE{ParseError}__;
2435 wakaba 1.3 }
2436     }
2437 wakaba 1.1 my $ncr = $doc-><M::Document.createTextNode>
2438 wakaba 1.9 (my $char = chr $num);
2439 wakaba 1.1 push @{$vals->{nodes}}, $ncr;
2440     $vals->{value} .= $char;
2441     }
2442     }
2443    
2444     // ~ (REFC) { }
2445     } // _NumericCharacterReferenceV_
2446    
2447 wakaba 1.11 /*
2448     Numeric character reference in the replacement text
2449     of the entity referenced in an attribute value specification
2450     */
2451     rule _NumericCharacterReferenceAE_ ($parent, $vals)
2452     {
2453     ?lexmode NumericCharacterReference;
2454    
2455     ~ (NUMBER) {
2456     lang:Perl ($num => $token.value) : has-error {
2457     $num += 0;
2458     unless (
2459     ($self->{xml_version} eq '1.0' and
2460     ((0x0020 <= $num and $num <= 0xD7FF) or
2461     (0xE000 <= $num and $num <= 0xFFFD) or
2462     (0x10000 <= $num and $num <= 0x10FFFF) or
2463     $num == 0x9 or $num == 0xA or $num == 0xD)) or
2464     ($self->{xml_version} eq '1.1' and
2465     ((0x0001 <= $num and $num <= 0xD7FF) or
2466     (0xE000 <= $num and $num <= 0xFFFD) or
2467     (0x10000 <= $num and $num <= 0x10FFFF)))
2468     ) {
2469     my $location;
2470     __CODE{xp|get-location-from-token::
2471     $token => $token,
2472     $result => $location,
2473     }__;
2474     my $continue = __DOMCore:ERROR{xp|wf-legal-character::
2475     DOMCore:location => {$location},
2476     xp|token => {$token},
2477     xp|character-number => {$num},
2478     }__;
2479     unless ($continue) {
2480 wakaba 1.27 __CODE{ParseError}__;
2481 wakaba 1.11 }
2482     }
2483 wakaba 1.31 my $char = chr $num;
2484     $parent-><M::Node.manakaiAppendText> (\$char);
2485 wakaba 1.11 $vals->{value} .= $char;
2486     }
2487     }
2488    
2489     // ~ (REFC) { }
2490     } // _NumericCharacterReferenceAE_
2491    
2492     rule _NumericCharacterReferenceEV_ ($vals)
2493     {
2494     ?lexmode 'NumericCharacterReference';
2495    
2496     ~ (NUMBER) {
2497     lang:Perl ($num => $token.value) : has-error {
2498     $num += 0;
2499     unless (
2500     ($self->{xml_version} eq '1.0' and
2501     ((0x0020 <= $num and $num <= 0xD7FF) or
2502     (0xE000 <= $num and $num <= 0xFFFD) or
2503     (0x10000 <= $num and $num <= 0x10FFFF) or
2504     $num == 0x9 or $num == 0xA or $num == 0xD)) or
2505     ($self->{xml_version} eq '1.1' and
2506     ((0x0001 <= $num and $num <= 0xD7FF) or
2507     (0xE000 <= $num and $num <= 0xFFFD) or
2508     (0x10000 <= $num and $num <= 0x10FFFF)))
2509     ) {
2510     my $location;
2511     __CODE{xp|get-location-from-token::
2512     $token => $token,
2513     $result => $location,
2514     }__;
2515     my $continue = __DOMCore:ERROR{xp|wf-legal-character::
2516     DOMCore:location => {$location},
2517     xp|token => {$token},
2518     xp|character-number => {$num},
2519     }__;
2520     unless ($continue) {
2521 wakaba 1.27 __CODE{ParseError}__;
2522 wakaba 1.11 }
2523     }
2524     push @{$vals}, chr $num;
2525     }
2526     }
2527    
2528     // ~ (REFC) { }
2529     } // _NumericCharacterReferenceEV_
2530    
2531 wakaba 1.31 rule _HexadecimalCharacterReference_ ($parent) {
2532 wakaba 1.1 ?lexmode 'HexadecimalCharacterReference';
2533    
2534     ~ (Hex) {
2535 wakaba 1.9 lang:Perl ($v => $token.value) : has-error {
2536     my $num = hex $v;
2537 wakaba 1.3 unless (
2538     ($self->{xml_version} eq '1.0' and
2539     ((0x0020 <= $num and $num <= 0xD7FF) or
2540     (0xE000 <= $num and $num <= 0xFFFD) or
2541     (0x10000 <= $num and $num <= 0x10FFFF) or
2542     $num == 0x9 or $num == 0xA or $num == 0xD)) or
2543     ($self->{xml_version} eq '1.1' and
2544     ((0x0001 <= $num and $num <= 0xD7FF) or
2545     (0xE000 <= $num and $num <= 0xFFFD) or
2546     (0x10000 <= $num and $num <= 0x10FFFF)))
2547     ) {
2548     my $location;
2549     __CODE{xp|get-location-from-token::
2550     $token => $token,
2551     $result => $location,
2552     }__;
2553     my $continue = __DOMCore:ERROR{xp|wf-legal-character::
2554     DOMCore:location => {$location},
2555     xp|token => {$token},
2556     xp|character-number => {$num},
2557     xp|parent => {$parent},
2558     }__;
2559     unless ($continue) {
2560 wakaba 1.27 __CODE{ParseError}__;
2561 wakaba 1.3 }
2562     }
2563 wakaba 1.31 $parent-><M::Node.manakaiAppendText> (chr $num);
2564 wakaba 1.1 }
2565     }
2566    
2567     // ~ (REFC) { }
2568     } // _HexadecimalCharacterReference_
2569    
2570 wakaba 1.3 rule _HexadecimalCharacterReferenceV_ ($doc, $vals) {
2571 wakaba 1.1 ?lexmode 'HexadecimalCharacterReference';
2572    
2573     ~ (Hex) {
2574 wakaba 1.9 lang:Perl ($v => $token.value) : has-error {
2575     my $num = hex $v;
2576 wakaba 1.3 unless (
2577     ($self->{xml_version} eq '1.0' and
2578     ((0x0020 <= $num and $num <= 0xD7FF) or
2579     (0xE000 <= $num and $num <= 0xFFFD) or
2580     (0x10000 <= $num and $num <= 0x10FFFF) or
2581     $num == 0x9 or $num == 0xA or $num == 0xD)) or
2582     ($self->{xml_version} eq '1.1' and
2583     ((0x0001 <= $num and $num <= 0xD7FF) or
2584     (0xE000 <= $num and $num <= 0xFFFD) or
2585     (0x10000 <= $num and $num <= 0x10FFFF)))
2586     ) {
2587     my $location;
2588     __CODE{xp|get-location-from-token::
2589     $token => $token,
2590     $result => $location,
2591     }__;
2592     my $continue = __DOMCore:ERROR{xp|wf-legal-character::
2593     DOMCore:location => {$location},
2594     xp|token => {$token},
2595     xp|character-number => {$num},
2596     }__;
2597     unless ($continue) {
2598 wakaba 1.27 __CODE{ParseError}__;
2599 wakaba 1.3 }
2600     }
2601 wakaba 1.1 my $ncr = $doc-><M::Document.createTextNode>
2602 wakaba 1.9 (my $char = chr $num);
2603 wakaba 1.1 push @{$vals->{nodes}}, $ncr;
2604     $vals->{value} .= $char;
2605     }
2606     }
2607    
2608     // ~ (REFC) { }
2609 wakaba 1.11 } // _HexadecimalCharacterReferenceV_
2610    
2611     /*
2612     Hexadecimal character reference in the replacement text
2613     of the entity referenced in an attribute value literal
2614     */
2615     rule _HexadecimalCharacterReferenceAE_ ($parent, $vals)
2616     {
2617     ?lexmode HexadecimalCharacterReference;
2618    
2619     ~ (Hex) {
2620     lang:Perl ($v => $token.value) : has-error {
2621     my $num = hex $v;
2622     unless (
2623     ($self->{xml_version} eq '1.0' and
2624     ((0x0020 <= $num and $num <= 0xD7FF) or
2625     (0xE000 <= $num and $num <= 0xFFFD) or
2626     (0x10000 <= $num and $num <= 0x10FFFF) or
2627     $num == 0x9 or $num == 0xA or $num == 0xD)) or
2628     ($self->{xml_version} eq '1.1' and
2629     ((0x0001 <= $num and $num <= 0xD7FF) or
2630     (0xE000 <= $num and $num <= 0xFFFD) or
2631     (0x10000 <= $num and $num <= 0x10FFFF)))
2632     ) {
2633     my $location;
2634     __CODE{xp|get-location-from-token::
2635     $token => $token,
2636     $result => $location,
2637     }__;
2638     my $continue = __DOMCore:ERROR{xp|wf-legal-character::
2639     DOMCore:location => {$location},
2640     xp|token => {$token},
2641     xp|character-number => {$num},
2642     }__;
2643     unless ($continue) {
2644 wakaba 1.27 __CODE{ParseError}__;
2645 wakaba 1.11 }
2646     }
2647 wakaba 1.31 my $char = chr $num;
2648     $parent-><M::Node.manakaiAppendText> (\$char);
2649 wakaba 1.11 $vals->{value} .= $char;
2650     }
2651     }
2652    
2653     // ~ (REFC) { }
2654     } // _HexadecimalCharacterReferenceAE_
2655    
2656     rule _HexadecimalCharacterReferenceEV_ ($vals) {
2657     ?lexmode HexadecimalCharacterReference;
2658    
2659     ~ (Hex) {
2660     lang:Perl ($v => $token.value) : has-error {
2661     my $num = hex $v;
2662     unless (
2663     ($self->{xml_version} eq '1.0' and
2664     ((0x0020 <= $num and $num <= 0xD7FF) or
2665     (0xE000 <= $num and $num <= 0xFFFD) or
2666     (0x10000 <= $num and $num <= 0x10FFFF) or
2667     $num == 0x9 or $num == 0xA or $num == 0xD)) or
2668     ($self->{xml_version} eq '1.1' and
2669     ((0x0001 <= $num and $num <= 0xD7FF) or
2670     (0xE000 <= $num and $num <= 0xFFFD) or
2671     (0x10000 <= $num and $num <= 0x10FFFF)))
2672     ) {
2673     my $location;
2674     __CODE{xp|get-location-from-token::
2675     $token => $token,
2676     $result => $location,
2677     }__;
2678     my $continue = __DOMCore:ERROR{xp|wf-legal-character::
2679     DOMCore:location => {$location},
2680     xp|token => {$token},
2681     xp|character-number => {$num},
2682     }__;
2683     unless ($continue) {
2684 wakaba 1.27 __CODE{ParseError}__;
2685 wakaba 1.11 }
2686     }
2687     push @{$vals}, chr $num;
2688     }
2689     }
2690    
2691     // ~ (REFC) { }
2692     } // _HexadecimalCharacterReferenceEV_
2693    
2694     /*
2695     General entity reference in element's content
2696     */
2697     rule _GeneralEntityReferenceEC ($doc, $parent, $ns)
2698     : recursive
2699     {
2700     ?lexmode 'EntityReference';
2701    
2702     ~ (Name == 'lt') {
2703     lang:Perl {
2704 wakaba 1.31 $parent-><M::Node.manakaiAppendText> ('<');
2705 wakaba 1.11 }
2706     } (Name == 'gt') {
2707     lang:Perl {
2708 wakaba 1.31 $parent-><M::Node.manakaiAppendText> ('>');
2709 wakaba 1.11 }
2710     } (Name == 'amp') {
2711     lang:Perl {
2712 wakaba 1.31 $parent-><M::Node.manakaiAppendText> ('&');
2713 wakaba 1.11 }
2714     } (Name == 'quot') {
2715     lang:Perl {
2716 wakaba 1.31 $parent-><M::Node.manakaiAppendText> ('"');
2717 wakaba 1.11 }
2718     } (Name == 'apos') {
2719     lang:Perl {
2720 wakaba 1.31 $parent-><M::Node.manakaiAppendText> ("'");
2721 wakaba 1.11 }
2722     } (Name) {
2723     my $er;
2724 wakaba 1.19 lang:Perl ($name => $token.value) : has-error {
2725 wakaba 1.26 __CODE{checkNCName:: $name => $name}__;
2726    
2727 wakaba 1.11 $er = $doc-><M::Document.createEntityReference>
2728     ($name);
2729 wakaba 1.20 $er-><AS::Node.textContent> ('');
2730     ## NOTE: When document entity (and entities referenced directly
2731     ## or indirectly from it) is parsed, no general entity
2732     ## node have its replacement tree. During general
2733     ## entity node collection construction, however,
2734     ## some entity node has replacement tree.
2735 wakaba 1.11 $parent-><M::Node.appendChild> ($er);
2736 wakaba 1.19
2737     my $ent = $self->{general_entity}->{$name};
2738     if (not $ent) { # no entity declaration
2739     if ($self->{standalone} or not $self->{has_xref}) { # WFC error
2740     my $location;
2741     __CODE{xp|get-location-from-token::
2742     $token => {$token},
2743     $result => {$location},
2744     }__;
2745     my $continue = __DOMCore:ERROR{xp|wf-entity-declared::
2746     xp|error-token => {$token},
2747     c|location => {$location},
2748     xp|name => {$name},
2749     }__;
2750     unless ($continue) {
2751 wakaba 1.27 __CODE{ParseError}__;
2752 wakaba 1.19 }
2753     } # Otherwise VC error
2754 wakaba 1.23 push @{$self->{entity}}, <Code::getEmptyEntityState::
2755     $name = $name>;
2756 wakaba 1.34 $er-><AS::x|EntityReference.manakaiExpanded> (false);
2757 wakaba 1.19
2758     } else { # there IS entity declaration
2759     if (($self->{standalone} or not $self->{has_xref}) and
2760     $ent->{is_externally_declared} and
2761     not $self->{entity}->[-1]->{is_externally_declared}) {
2762     my $location;
2763     __CODE{xp|get-location-from-token::
2764     $token => {$token},
2765     $result => {$location},
2766     }__;
2767     my $continue = __DOMCore:ERROR{xp|wf-entity-declared::
2768     xp|error-token => {$token},
2769     c|location => {$location},
2770     xp|name => {$name},
2771     }__;
2772     unless ($continue) {
2773 wakaba 1.27 __CODE{ParseError}__;
2774 wakaba 1.19 }
2775     }
2776 wakaba 1.34 $er-><AS::x|EntityReference.manakaiExpanded>
2777 wakaba 1.19 ($ent->{has_replacement_text});
2778     push @{$self->{entity}}, <Code::getCopyOfEntityState::
2779 wakaba 1.11 $entity_type = 'general_entity',
2780     $entity_name = $name>;
2781 wakaba 1.23
2782     if (defined $ent->{notation}) {
2783     my $location;
2784     __CODE{xp|get-location-from-token::
2785     $token => {$token},
2786     $result => {$location},
2787     }__;
2788     my $continue = __c|ERROR{xp|wf-parsed-entity::
2789     xp|error-token => {$token},
2790     c|location => {$location},
2791     xp|name => {$name},
2792     }__;
2793     unless ($continue) {
2794 wakaba 1.27 __CODE{ParseError}__;
2795 wakaba 1.23 }
2796     } # if unparsed entity
2797    
2798     if ($ent->{is_opened}) {
2799     my $location;
2800     __CODE{xp|get-location-from-token::
2801     $token => {$token},
2802     $result => {$location},
2803     }__;
2804     my $continue = __c|ERROR{xp|wf-no-recursion::
2805     xp|error-token => {$token},
2806     c|location => {$location},
2807     xp|name => {$name},
2808     }__;
2809     unless ($continue) {
2810 wakaba 1.27 __CODE{ParseError}__;
2811 wakaba 1.23 }
2812 wakaba 1.27 open my $empty, '<', \'';
2813     $self->{entity}->[-1]->{fh} = $empty;
2814 wakaba 1.34 $er-><AS::x|EntityReference.manakaiExpanded> (false);
2815 wakaba 1.23 } # recursive
2816     $ent->{is_opened} = true;
2817     } # entity declared
2818 wakaba 1.14 $self->{location} = $self->{entity}->[-1];
2819 wakaba 1.11 push @{$self->{entity_token}}, $self->{token};
2820     $self->{token} = [];
2821     push @{$self->{entity_char}}, $self->{char};
2822     $self->{char} = [];
2823     }
2824    
2825     ?lexmode ElementContent;
2826     &content ($doc => $doc, $parent => $er, $ns => $ns);
2827     ~ (#EOF) { }
2828     lang:Perl {
2829 wakaba 1.23 $self->{general_entity}->{$self->{entity}->[-1]->{name}}
2830     ->{is_opened} = false
2831     if $self->{general_entity}->{$self->{entity}->[-1]->{name}};
2832 wakaba 1.11 $self->{token} = pop @{$self->{entity_token}};
2833     $self->{char} = pop @{$self->{entity_char}};
2834 wakaba 1.27 pop (@{$self->{entity}})->{close_file}->();
2835 wakaba 1.14 $self->{location} = $self->{entity}->[-1];
2836 wakaba 1.11 }
2837    
2838     // TODO: Set read-only flag
2839    
2840     ?lexmode EntityReference;
2841     ?requires-next-token;
2842     }
2843    
2844     ~ (REFC) {
2845     ?lexmode ElementContent;
2846     } else {
2847     ?lexmode ElementContent;
2848     }
2849     } // _GeneralEntityReferenceEC
2850    
2851     /*
2852     General entity reference in an attribute value literal
2853     */
2854     rule _GeneralEntityReferenceV_ ($vals) {
2855     ?lexmode EntityReference;
2856    
2857     ~ (Name == 'lt') {
2858     lang:Perl {
2859     push @{$vals->{nodes}}, $self->{doc}-><M::Document.createTextNode>
2860     ('<');
2861     $vals->{value} .= '<';
2862     }
2863     } (Name == 'gt') {
2864     lang:Perl {
2865     push @{$vals->{nodes}}, $self->{doc}-><M::Document.createTextNode>
2866     ('>');
2867     $vals->{value} .= '>';
2868     }
2869     } (Name == 'amp') {
2870     lang:Perl {
2871     push @{$vals->{nodes}}, $self->{doc}-><M::Document.createTextNode>
2872     ('&');
2873     $vals->{value} .= '&';
2874     }
2875     } (Name == 'quot') {
2876     lang:Perl {
2877     push @{$vals->{nodes}}, $self->{doc}-><M::Document.createTextNode>
2878     ('"');
2879     $vals->{value} .= '"';
2880     }
2881     } (Name == 'apos') {
2882     lang:Perl {
2883     push @{$vals->{nodes}}, $self->{doc}-><M::Document.createTextNode>
2884     ("'");
2885     $vals->{value} .= "'";
2886     }
2887     } (Name) {
2888     my $er;
2889 wakaba 1.18 lang:Perl ($name => $token.value) : has-error {
2890 wakaba 1.26 __CODE{checkNCName:: $name => $name}__;
2891 wakaba 1.18
2892 wakaba 1.11 $er = $self->{doc}-><M::Document.createEntityReference> ($name);
2893 wakaba 1.20 $er-><AS::Node.textContent> ('');
2894     ## NOTE: When document entity (and entities referenced directly
2895     ## or indirectly from it) is parsed, no general entity
2896     ## node have its replacement tree. During general
2897     ## entity node collection construction, however,
2898     ## some entity node has replacement tree.
2899 wakaba 1.19 my $ent = $self->{general_entity}->{$name};
2900 wakaba 1.20 if (not $ent) { # no entity declaration
2901     if ($self->{standalone} or not $self->{has_xref}) { # WFC error
2902     my $location;
2903     __CODE{xp|get-location-from-token::
2904     $token => {$token},
2905     $result => {$location},
2906     }__;
2907     my $continue = __DOMCore:ERROR{xp|wf-entity-declared::
2908     xp|error-token => {$token},
2909     c|location => {$location},
2910     xp|name => {$name},
2911     }__;
2912     unless ($continue) {
2913 wakaba 1.27 __CODE{ParseError}__;
2914 wakaba 1.20 }
2915     } # Otherwise VC error
2916 wakaba 1.23 push @{$self->{entity}}, <Code::getEmptyEntityState::
2917     $name = $name>;
2918 wakaba 1.34 $er-><AS::x|EntityReference.manakaiExpanded> (false);
2919 wakaba 1.20
2920     } else { # there IS entity declaration
2921     if (($self->{standalone} or not $self->{has_xref}) and
2922     $ent->{is_externally_declared} and
2923     not $self->{entity}->[-1]->{is_externally_declared}) {
2924     my $location;
2925     __CODE{xp|get-location-from-token::
2926     $token => {$token},
2927     $result => {$location},
2928     }__;
2929     my $continue = __DOMCore:ERROR{xp|wf-entity-declared::
2930     xp|error-token => {$token},
2931     c|location => {$location},
2932     xp|name => {$name},
2933     }__;
2934     unless ($continue) {
2935 wakaba 1.27 __CODE{ParseError}__;
2936 wakaba 1.20 }
2937     }
2938    
2939     if ($ent->{is_external_entity}) {
2940     my $location;
2941     __CODE{xp|get-location-from-token::
2942     $token => {$token},
2943     $result => {$location},
2944     }__;
2945     my $continue = __c|ERROR{xp|wf-no-external-entity-references::
2946     xp|error-token => {$token},
2947     c|location => {$location},
2948     xp|name => {$name},
2949     }__;
2950     unless ($continue) {
2951 wakaba 1.27 __CODE{ParseError}__;
2952 wakaba 1.20 }
2953 wakaba 1.23 ## NOTE: |xp:wf-parsed-entity| is not checked
2954 wakaba 1.20 } # if external entity
2955    
2956 wakaba 1.34 $er-><AS::x|EntityReference.manakaiExpanded>
2957 wakaba 1.19 ($ent->{has_replacement_text});
2958 wakaba 1.20 push @{$self->{entity}}, <Code::getCopyOfEntityState::
2959 wakaba 1.11 $entity_type = 'general_entity',
2960     $entity_name = $name>;
2961 wakaba 1.23
2962     if ($ent->{is_opened}) {
2963     my $location;
2964     __CODE{xp|get-location-from-token::
2965     $token => {$token},
2966     $result => {$location},
2967     }__;
2968     my $continue = __c|ERROR{xp|wf-no-recursion::
2969     xp|error-token => {$token},
2970     c|location => {$location},
2971     xp|name => {$name},
2972     }__;
2973     unless ($continue) {
2974 wakaba 1.27 __CODE{ParseError}__;
2975 wakaba 1.23 }
2976 wakaba 1.27 open my $empty, '<', \'';
2977     $self->{entity}->[-1]->{fh} = $empty;
2978 wakaba 1.34 $er-><AS::x|EntityReference.manakaiExpanded> (false);
2979 wakaba 1.23 } # recursive
2980     $ent->{is_opened} = true;
2981 wakaba 1.20 }
2982     push @{$vals->{nodes}}, $er;
2983 wakaba 1.14 $self->{location} = $self->{entity}->[-1];
2984 wakaba 1.11 push @{$self->{entity_token}}, $self->{token};
2985     $self->{token} = [];
2986     push @{$self->{entity_char}}, $self->{char};
2987     $self->{char} = [];
2988     }
2989    
2990     ?lexmode AttributeValueLiteralE;
2991     &AttributeValueLiteralE_ ($parent => $er, $vals => $vals);
2992     ~ (#EOF) { }
2993     lang:Perl {
2994 wakaba 1.23 $self->{general_entity}->{$self->{entity}->[-1]->{name}}
2995     ->{is_opened} = false
2996     if $self->{general_entity}->{$self->{entity}->[-1]->{name}};
2997 wakaba 1.11 $self->{token} = pop @{$self->{entity_token}};
2998     $self->{char} = pop @{$self->{entity_char}};
2999 wakaba 1.27 pop (@{$self->{entity}})->{close_file}->();
3000 wakaba 1.14 $self->{location} = $self->{entity}->[-1];
3001 wakaba 1.11 }
3002    
3003     // TODO: Set read-only flag
3004    
3005     ?lexmode EntityReference;
3006     ?requires-next-token;
3007     }
3008    
3009     // ~ (REFC) { }
3010     } // _GeneralEntityReferenceV_
3011 wakaba 1.1
3012 wakaba 1.6 /*
3013 wakaba 1.11 General entity reference in the replacement text
3014     of the entity referenced in an attribute value literal
3015 wakaba 1.6 */
3016 wakaba 1.11 rule _GeneralEntityReferenceAE_ ($parent, $vals)
3017 wakaba 1.6 {
3018 wakaba 1.11 ?lexmode EntityReference;
3019 wakaba 1.1
3020 wakaba 1.11 ~ (Name == 'lt') {
3021     lang:Perl {
3022 wakaba 1.31 $parent-><M::Node.manakaiAppendText> ('<');
3023 wakaba 1.11 $vals->{value} .= '<';
3024     }
3025     } (Name == 'gt') {
3026     lang:Perl {
3027 wakaba 1.31 $parent-><M::Node.manakaiAppendText> ('>');
3028 wakaba 1.11 $vals->{value} .= '>';
3029     }
3030     } (Name == 'amp') {
3031     lang:Perl {
3032 wakaba 1.31 $parent-><M::Node.manakaiAppendText> ('&');
3033 wakaba 1.11 $vals->{value} .= '&';
3034     }
3035     } (Name == 'quot') {
3036     lang:Perl {
3037 wakaba 1.31 $parent-><M::Node.manakaiAppendText> ('"');
3038 wakaba 1.11 $vals->{value} .= '"';
3039     }
3040     } (Name == 'apos') {
3041     lang:Perl {
3042 wakaba 1.31 $parent-><M::Node.manakaiAppendText> ("'");
3043 wakaba 1.11 $vals->{value} .= "'";
3044     }
3045     } (Name) {
3046 wakaba 1.6 my $er;
3047 wakaba 1.26 lang:Perl ($name => $token.value) : has-error {
3048     __CODE{checkNCName:: $name => $name}__;
3049 wakaba 1.18
3050 wakaba 1.11 $er = $self->{doc}-><M::Document.createEntityReference> ($name);
3051 wakaba 1.20 $er-><AS::Node.textContent> ('');
3052     ## NOTE: When document entity (and entities referenced directly
3053     ## or indirectly from it) is parsed, no general entity
3054     ## node have its replacement tree. During general
3055     ## entity node collection construction, however,
3056     ## some entity node has replacement tree.
3057 wakaba 1.19 my $ent = $self->{general_entity}->{$name};
3058 wakaba 1.22 if (not $ent) { # no entity declaration
3059     if ($self->{standalone} or not $self->{has_xref}) { # WFC error
3060     my $location;
3061     __CODE{xp|get-location-from-token::
3062     $token => {$token},
3063     $result => {$location},
3064     }__;
3065     my $continue = __DOMCore:ERROR{xp|wf-entity-declared::
3066     xp|error-token => {$token},
3067     c|location => {$location},
3068     xp|name => {$name},
3069     }__;
3070     unless ($continue) {
3071 wakaba 1.27 __CODE{ParseError}__;
3072 wakaba 1.22 }
3073     } # Otherwise VC error
3074 wakaba 1.23 push @{$self->{entity}}, <Code::getEmptyEntityState::
3075     $name = $name>;
3076 wakaba 1.34 $er-><AS::x|EntityReference.manakaiExpanded> (false);
3077 wakaba 1.22
3078     } else { # there IS entity declaration
3079     if (($self->{standalone} or not $self->{has_xref}) and
3080     $ent->{is_externally_declared} and
3081     not $self->{entity}->[-1]->{is_externally_declared}) {
3082     my $location;
3083     __CODE{xp|get-location-from-token::
3084     $token => {$token},
3085     $result => {$location},
3086     }__;
3087     my $continue = __DOMCore:ERROR{xp|wf-entity-declared::
3088     xp|error-token => {$token},
3089     c|location => {$location},
3090     xp|name => {$name},
3091     }__;
3092     unless ($continue) {
3093 wakaba 1.27 __CODE{ParseError}__;
3094 wakaba 1.22 }
3095     }
3096    
3097     if ($ent->{is_external_entity}) {
3098     my $location;
3099     __CODE{xp|get-location-from-token::
3100     $token => {$token},
3101     $result => {$location},
3102     }__;
3103     my $continue = __c|ERROR{xp|wf-no-external-entity-references::
3104     xp|error-token => {$token},
3105     c|location => {$location},
3106     xp|name => {$name},
3107     }__;
3108     unless ($continue) {
3109 wakaba 1.27 __CODE{ParseError}__;
3110 wakaba 1.22 }
3111 wakaba 1.23 ## NOTE: |xp:wf-parsed-entity| is not checked
3112 wakaba 1.22 } # if external entity
3113    
3114 wakaba 1.34 $er-><AS::x|EntityReference.manakaiExpanded>
3115 wakaba 1.19 ($ent->{has_replacement_text});
3116 wakaba 1.22 push @{$self->{entity}}, <Code::getCopyOfEntityState::
3117 wakaba 1.6 $entity_type = 'general_entity',
3118     $entity_name = $name>;
3119 wakaba 1.23
3120     if ($ent->{is_opened}) {
3121     my $location;
3122     __CODE{xp|get-location-from-token::
3123     $token => {$token},
3124     $result => {$location},
3125     }__;
3126     my $continue = __c|ERROR{xp|wf-no-recursion::
3127     xp|error-token => {$token},
3128     c|location => {$location},
3129     xp|name => {$name},
3130     }__;
3131     unless ($continue) {
3132 wakaba 1.27 __CODE{ParseError}__;
3133 wakaba 1.23 }
3134 wakaba 1.27 open my $empty, '<', \'';
3135     $self->{entity}->[-1]->{fh} = $empty;
3136 wakaba 1.34 $er-><AS::x|EntityReference.manakaiExpanded> (false);
3137 wakaba 1.23 } # recursive
3138     $ent->{is_opened} = true;
3139 wakaba 1.22 }
3140     $parent-><M::Node.appendChild> ($er);
3141 wakaba 1.14 $self->{location} = $self->{entity}->[-1];
3142 wakaba 1.6 push @{$self->{entity_token}}, $self->{token};
3143     $self->{token} = [];
3144     push @{$self->{entity_char}}, $self->{char};
3145     $self->{char} = [];
3146     }
3147    
3148 wakaba 1.11 ?lexmode AttributeValueLiteralE;
3149     &AttributeValueLiteralE_ ($parent => $er, $vals => $vals);
3150 wakaba 1.6 ~ (#EOF) { }
3151     lang:Perl {
3152 wakaba 1.23 $self->{general_entity}->{$self->{entity}->[-1]->{name}}
3153     ->{is_opened} = false
3154     if $self->{general_entity}->{$self->{entity}->[-1]->{name}};
3155 wakaba 1.6 $self->{token} = pop @{$self->{entity_token}};
3156     $self->{char} = pop @{$self->{entity_char}};
3157 wakaba 1.27 pop (@{$self->{entity}})->{close_file}->();
3158 wakaba 1.14 $self->{location} = $self->{entity}->[-1];
3159 wakaba 1.6 }
3160    
3161 wakaba 1.11 // TODO: Set read-only flag
3162    
3163 wakaba 1.6 ?lexmode EntityReference;
3164     ?requires-next-token;
3165 wakaba 1.1 }
3166    
3167     // ~ (REFC) { }
3168 wakaba 1.11 } // _GeneralEntityReferenceAE_
3169 wakaba 1.6
3170     /*
3171 wakaba 1.24 General Entity Reference in Literal Entity Value in Entity Declaration
3172 wakaba 1.6 */
3173 wakaba 1.11 rule _GeneralEntityReferenceEV_ ($vals) {
3174 wakaba 1.6 ?lexmode 'EntityReference';
3175    
3176     ~ (Name) {
3177     lang:Perl ($name => $token.value) {
3178 wakaba 1.26 __CODE{checkNCName:: $name => $name}__;
3179 wakaba 1.6 push @$vals, $name;
3180     }
3181 wakaba 1.24 /*
3182     WFCs such as Entity Declared are not checked
3183     <http://www.w3.org/TR/xml11/#bypass>
3184    
3185     Note that violation to the Parsed Entity WFC is an error
3186     rather than fatal error here.
3187     */
3188 wakaba 1.6 }
3189 wakaba 1.11
3190     // No expansion
3191 wakaba 1.6
3192     // ~ (REFC) { }
3193     } // _GeneralEntityReferenceEV_
3194 wakaba 1.1
3195     /*
3196 wakaba 1.4 Document Type Declaration
3197 wakaba 1.1 */
3198 wakaba 1.4 rule _DocumentTypeDeclaration_ ($doc) {
3199     ?lexmode MarkupDeclaration;
3200    
3201     ~ (Name == 'DOCTYPE') { }
3202    
3203     ~ (S) { }
3204    
3205     // Document type name
3206 wakaba 1.6 my $name;
3207 wakaba 1.4 ~ (Name) {
3208 wakaba 1.6 lang:Perl ($v => $token.value) {
3209 wakaba 1.26 __CODE{checkQName:: $name => $v}__;
3210 wakaba 1.6 $name = $v;
3211     }
3212     }
3213 wakaba 1.17
3214     my $node;
3215     my $decl;
3216 wakaba 1.6 lang:Perl {
3217 wakaba 1.11 $self->{docx} = $self->{doc}
3218     -><M::Node.getFeature> (<Q::fe:XDoctype>, '3.0');
3219     $node = $self->{docx}-><M::DocumentXDoctype.createDocumentTypeDefinition>
3220     ($name);
3221 wakaba 1.17 $decl = $self->{dtdecl} = $node-><M::Node.getFeature>
3222     (<Q::fe:XDoctypeDeclaration>, '3.0');
3223 wakaba 1.4 }
3224    
3225 wakaba 1.25 my $has_extid;
3226 wakaba 1.4 ~? (S) {
3227     ~? (Name == 'PUBLIC') {
3228     ~ (S) { }
3229    
3230 wakaba 1.17 &PubidLiteral ($decl => $decl);
3231 wakaba 1.4
3232     ~ (S) { }
3233    
3234 wakaba 1.17 &SystemLiteral ($decl => $decl);
3235 wakaba 1.4
3236     ~? (S) { }
3237 wakaba 1.19
3238     lang:Perl {
3239     $self->{has_xref} = true;
3240 wakaba 1.25 $has_extid = true;
3241 wakaba 1.19 }
3242 wakaba 1.4 } (Name == 'SYSTEM') {
3243     ~ (S) { }
3244    
3245 wakaba 1.17 &SystemLiteral ($decl => $decl);
3246 wakaba 1.4
3247     ~? (S) { }
3248 wakaba 1.19
3249     lang:Perl {
3250     $self->{has_xref} = true;
3251 wakaba 1.25 $has_extid = true;
3252 wakaba 1.19 }
3253 wakaba 1.4 }
3254     }
3255 wakaba 1.17
3256 wakaba 1.11 lang:Perl {
3257     $self->{dtdef} = $node;
3258 wakaba 1.21 $self->{doc}-><M::Node.appendChild> ($node);
3259     $self->{doc_cfg}-><M::c|DOMConfiguration.setParameter>
3260     ('schema-type' => <Q::xml-dtd:>);
3261     ## ISSUE: Should default schema language information be
3262     ## preserved by some other flag?
3263 wakaba 1.11 }
3264    
3265 wakaba 1.4 ~? (DSO) {
3266 wakaba 1.6 &InternalSubset ($doc => $doc, $doctype => $node);
3267 wakaba 1.4
3268     ~ (DSC) {
3269     ?lexmode MarkupDeclaration;
3270     } else {
3271     ?lexmode MarkupDeclaration;
3272     }
3273    
3274     ~? (S) { }
3275     }
3276    
3277 wakaba 1.25 // TODO: Read and process external subset if any.
3278     lang:Perl {
3279     $self->{dont_process} = true if $has_extid;
3280     }
3281    
3282 wakaba 1.4 // ~ (MDC) { }
3283     } // _DocumentTypeDeclaration_
3284    
3285 wakaba 1.17 /*
3286     Public Identifier Literal
3287     */
3288     rule PubidLiteral ($decl) {
3289     my $pubid;
3290     my $pubid_token;
3291 wakaba 1.4 ~ (LIT) {
3292     ?lexmode SystemLiteral;
3293    
3294     ~? (STRING) {
3295 wakaba 1.17 lang:Perl ($v => $token.value) {
3296     $pubid = $v;
3297     $pubid_token = $token;
3298     }
3299 wakaba 1.4 }
3300    
3301     ~ (LIT) {
3302     ?lexmode MarkupDeclaration;
3303     } else {
3304     ?lexmode MarkupDeclaration;
3305     }
3306     } (LITA) {
3307     ?lexmode SystemLiteralA;
3308    
3309     ~? (STRING) {
3310 wakaba 1.17 lang:Perl ($v => $token.value) {
3311     $pubid = $v;
3312     $pubid_token = $token;
3313     }
3314 wakaba 1.4 }
3315    
3316     ~ (LITA) {
3317     ?lexmode MarkupDeclaration;
3318     } else {
3319     ?lexmode MarkupDeclaration;
3320     }
3321     }
3322 wakaba 1.17
3323     if-true ($pubid_token) {
3324     lang:Perl : has-error {
3325     if ($pubid =~ m{[^\x20\x0D\x0Aa-zA-Z0-9'()+,./:=?;!*#\@\$_%-]}s) {
3326     my $location;
3327     __CODE{xp|get-location-from-token::
3328     $token => {$pubid_token},
3329     $result => {$location},
3330     }__;
3331     ## Should this be other (new) error type?
3332     my $continue = __DOMCore:ERROR{xp|wf-syntax-error::
3333     xp|error-token => {$token},
3334     c|location => {$location},
3335     }__;
3336     unless ($continue) {
3337 wakaba 1.27 __CODE{ParseError}__;
3338 wakaba 1.17 }
3339     }
3340    
3341     ## NOTE: U+0009 is syntactically illegal.
3342 wakaba 1.23 $pubid =~ s/[\x09\x0A\x0D\x20]+/\x20/gs;
3343 wakaba 1.17 $pubid =~ s/\A\x20//s;
3344     $pubid =~ s/\x20\z//s;
3345     ## NOTE: Bare attribute name is written.
3346     $decl->public_id ($pubid);
3347     }
3348     }
3349 wakaba 1.4 } // PubidLiteral
3350    
3351 wakaba 1.17 /*
3352     System Identifier Literal
3353     */
3354     rule SystemLiteral ($decl) {
3355 wakaba 1.4 ~ (LIT) {
3356     ?lexmode SystemLiteral;
3357 wakaba 1.17 &_SystemLiteral ($decl => $decl);
3358 wakaba 1.4 } (LITA) {
3359     ?lexmode SystemLiteralA;
3360 wakaba 1.17 &_SystemLiteral ($decl => $decl);
3361 wakaba 1.4 }
3362     } // SystemLiteral
3363    
3364 wakaba 1.17 /*
3365     System Identifier Literal Content
3366 wakaba 1.29
3367     Used in document type declaration, entity declaration,
3368     and notation declaration.
3369 wakaba 1.17 */
3370     rule _SystemLiteral ($decl) {
3371     // LIT or LITA
3372    
3373 wakaba 1.4 ~? (STRING) {
3374 wakaba 1.17 lang:Perl ($v => $token.value) {
3375 wakaba 1.29 $decl-><AS::x|Entity.systemId> ($v);
3376     $decl-><AS::x|Entity.manakaiDeclarationBaseURI>
3377     ($self->{location}->{base_uri});
3378 wakaba 1.17 }
3379 wakaba 1.4 }
3380    
3381     ~ (LIT) {
3382     ?lexmode MarkupDeclaration;
3383     } (LITA) {
3384     ?lexmode MarkupDeclaration;
3385     } else {
3386     ?lexmode MarkupDeclaration;
3387     }
3388     } // _SystemLiteral
3389    
3390     /*
3391     DTD Internal Subset
3392    
3393     intSubset := *(markupdecl / DeclSep) ;; [28b]
3394     */
3395 wakaba 1.6 rule InternalSubset ($doc, $doctype) {
3396 wakaba 1.4 ?lexmode DTD;
3397    
3398     ~* (MDO) {
3399     ?lexmode MarkupDeclaration;
3400    
3401     ~ (Name == 'ELEMENT') {
3402     &_ElementDeclaration ($doc => $doc);
3403     } (Name == 'ATTLIST') {
3404 wakaba 1.8 &_AttlistDeclaration ($doc => $doc, $doctype => $doctype);
3405 wakaba 1.4 } (Name == 'ENTITY') {
3406     &_EntityDeclaration ($doc => $doc);
3407     } (Name == 'NOTATION') {
3408     &_NotationDeclaration ($doc => $doc);
3409     }
3410     } (S) {
3411     //
3412     } (CDO) {
3413     &_CommentDeclarationDTD ($doc => $doc);
3414     } (PIO) {
3415 wakaba 1.6 &_ProcessingInstructionDTD ($doc => $doc, $doctype => $doctype);
3416 wakaba 1.4 } (PERO) {
3417     ?lexmode EntityReference;
3418    
3419 wakaba 1.19 lang:Perl {
3420     $self->{has_xref} = true;
3421 wakaba 1.25 $self->{dont_process} = true;
3422 wakaba 1.19 }
3423    
3424 wakaba 1.4 ~ (Name) {
3425 wakaba 1.26 // TODO: __CODE{checkNCName:: $name => $name}__;
3426 wakaba 1.4
3427     }
3428    
3429     ~ (REFC) {
3430     ?lexmode DTD;
3431     } else {
3432     ?lexmode DTD;
3433     }
3434     }
3435     } // InternalSubset
3436    
3437     rule _ElementDeclaration ($doc) {
3438     // ~ (MDO) { }
3439     // ?lexmode MarkupDeclaration
3440     // ~ (Name == 'Element') { }
3441    
3442     ~ (S) { }
3443    
3444     ~ (Name) {
3445 wakaba 1.26 // TODO: __CODE{checkQName:: $name => $name}__;
3446 wakaba 1.4
3447     }
3448    
3449     ?lexmode ElementDeclaration;
3450    
3451     ~ (S) { }
3452    
3453     // contentspec
3454     ~ (MGO) {
3455     &_ContentModel ($doc => $doc);
3456     } (Name == 'EMPTY') {
3457    
3458     } (Name == 'ANY') {
3459    
3460     }
3461    
3462     ~? (S) { }
3463    
3464     ~ (MDC) {
3465     ?lexmode DTD;
3466     } else {
3467     ?lexmode DTD;
3468     }
3469     } // _ElementDeclaration
3470    
3471     rule _ContentModel ($doc) {
3472     // ~ (MGO) { }
3473    
3474     ~? (S) { }
3475    
3476     ~ (Name) {
3477     // Element content model
3478     &_ModelGroup ($doc => $doc)
3479     : unshift-current-token;
3480    
3481     ~? (OPT) {
3482    
3483     } (REP) {
3484    
3485     } (PLUS) {
3486    
3487     }
3488    
3489     } (MDO) {
3490     &_ModelGroup ($doc => $doc)
3491     : unshift-current-token;
3492    
3493     ~? (OPT) {
3494    
3495     } (REP) {
3496    
3497     } (PLUS) {
3498    
3499     }
3500    
3501     } (PCDATA) {
3502     // Mixed content declaration
3503     ~? (S) { }
3504    
3505     ~* (OR) {
3506     ~? (S) { }
3507    
3508     ~ (Name) {
3509 wakaba 1.26 // TODO: Name & QName check
3510 wakaba 1.4
3511     }
3512    
3513     ~? (S) { }
3514     }
3515    
3516     ~ (MGC) { }
3517    
3518     ~? (REP) {
3519    
3520     } else {
3521     // TODO: error if |Name|
3522     }
3523    
3524    
3525     }
3526     } // _ContentModel
3527    
3528     rule _ModelGroup ($doc)
3529     : standalone
3530     : recursive
3531     {
3532     // ~ (MGO) { }
3533     // ~? (S) { }
3534    
3535     &ContentParticle ($doc => $doc);
3536    
3537     ~? (S) { }
3538    
3539     ~? (OR) {
3540     ~? (S) { }
3541    
3542     &ContentParticle ($doc => $doc);
3543    
3544     ~? (S) { }
3545    
3546     ~* (OR) {
3547     ~? (S) { }
3548    
3549     &ContentParticle ($doc => $doc);
3550    
3551     ~? (S) { }
3552     }
3553    
3554     } (SEQ) {
3555     ~? (S) { }
3556    
3557     &ContentParticle ($doc => $doc);
3558    
3559     ~? (S) { }
3560    
3561     ~* (SEQ) {
3562     ~? (S) { }
3563    
3564     &ContentParticle ($doc => $doc);
3565    
3566     ~? (S) { }
3567     }
3568    
3569     }
3570    
3571     ~ (MGC) { }
3572     } // _ModelGroup
3573    
3574     rule ContentParticle ($doc) {
3575     ~ (Name) {
3576 wakaba 1.26 // TODO: Name & QName check
3577 wakaba 1.4
3578     } (MGO) {
3579     ~? (S) { }
3580    
3581     &_ModelGroup ($doc => $doc);
3582     }
3583    
3584     ~? (OPT) {
3585    
3586     } (REP) {
3587    
3588     } (PLUS) {
3589    
3590     }
3591     } // ContentParticle
3592    
3593 wakaba 1.8 /*
3594     Attribute list declaration
3595     */
3596     rule _AttlistDeclaration ($doc, $doctype) {
3597 wakaba 1.4 // ~ (MDO) { }
3598     // ~ (Name == 'ATTLIST') { }
3599    
3600     ?lexmode AttlistDeclaration;
3601    
3602     ~ (S) { }
3603    
3604 wakaba 1.8 my $name;
3605 wakaba 1.4 ~ (Name) {
3606 wakaba 1.8 lang:Perl ($v => $token.value) {
3607 wakaba 1.26 __CODE{checkQName:: $name => $v}__;
3608 wakaba 1.8 $name = $v;
3609     }
3610     } else {
3611     lang:Perl { $name = '#ILLEGAL' }
3612     }
3613 wakaba 1.4
3614 wakaba 1.8 my $docxd;
3615     my $et;
3616     lang:Perl {
3617     $et = $doctype-><M::DTDef.getElementTypeDefinitionNode> ($name);
3618     unless ($et) {
3619 wakaba 1.11 $docxd = $doc-><M::Node.getFeature> (<Q::fe:XDoctype>, '3.0');
3620 wakaba 1.8 $et = $docxd-><M::DocumentXDoctype.createElementTypeDefinition>
3621     ($name);
3622     $doctype-><M::DTDef.setElementTypeDefinitionNode> ($et)
3623     unless $name eq '#ILLEGAL';
3624     }
3625 wakaba 1.4 }
3626    
3627     ~? (S) { }
3628    
3629     ~* (Name) {
3630 wakaba 1.8 my $at;
3631 wakaba 1.25 lang:Perl ($v => $token.value) : has-error {
3632 wakaba 1.26 __CODE{checkQName:: $name => $v}__;
3633 wakaba 1.8 $docxd ||= $doc-><M::Node.getFeature>
3634 wakaba 1.11 (<Q::fe:XDoctype>, '3.0');
3635 wakaba 1.8 $at = $docxd-><M::DocumentXDoctype.createAttributeDefinition> ($v);
3636 wakaba 1.25 if (exists $et-><AG::ETDef.attributeDefinitions>->{$v}) {
3637     my $location;
3638     __CODE{xp|get-location-from-token::
3639     $token => {$token},
3640     $result => {$location},
3641     }__;
3642     my $continue = __c|ERROR{xp|warning-attribute-definition-ignored::
3643     xp|error-token => {$token},
3644     c|location => {$location},
3645     xp|name => {$v},
3646     }__;
3647     unless ($continue) {
3648 wakaba 1.27 __CODE{ParseError}__;
3649 wakaba 1.25 }
3650     } elsif ($self->{dont_process} and not $self->{standalone}) {
3651     my $location;
3652     __CODE{xp|get-location-from-token::
3653     $token => {$token},
3654     $result => {$location},
3655     }__;
3656     my $continue = __c|ERROR{
3657     xp|warning-attribute-definition-not-processed::
3658     xp|error-token => {$token},
3659     c|location => {$location},
3660     xp|name => {$v},
3661     }__;
3662     unless ($continue) {
3663 wakaba 1.27 __CODE{ParseError}__;
3664 wakaba 1.25 }
3665     } else {
3666 wakaba 1.9 $et-><M::ETDef.setAttributeDefinitionNode> ($at);
3667     $self->{attr}->{$name}->{$v} = $at;
3668     }
3669 wakaba 1.8 }
3670 wakaba 1.4
3671     ~ (S) { }
3672    
3673     // AttType
3674     ~ (Name == 'NOTATION') {
3675     ~ (S) { }
3676    
3677 wakaba 1.8 my $kwd;
3678     lang:Perl {
3679     $at-><AS::ATDef.declaredType> (<C::ATDef.NOTATION_ATTR>);
3680     $kwd = $at-><AG::ATDef.allowedTokens>;
3681     }
3682    
3683 wakaba 1.4 ~ (EGO) {
3684     ~? (S) { }
3685    
3686 wakaba 1.8 ~+ (Name) {
3687 wakaba 1.26 lang:Perl ($v => $token.value) : has-error {
3688     __CODE{checkNCName:: $name => $v}__;
3689 wakaba 1.8 push @$kwd, $v;
3690     }
3691 wakaba 1.4
3692     ~? (S) { }
3693     } (OR) : separator {
3694     ~? (S) { }
3695     }
3696    
3697     ~ (EGC) { }
3698     }
3699 wakaba 1.8
3700 wakaba 1.4 } (Name) {
3701 wakaba 1.8 my $type;
3702     lang:Perl ($v => $token.value) : has-error {
3703     my $map = {
3704     CDATA => <C::ATDef.CDATA_ATTR>,
3705     ID => <C::ATDef.ID_ATTR>,
3706     IDREF => <C::ATDef.IDREF_ATTR>,
3707     IDREFS => <C::ATDef.IDREFS_ATTR>,
3708     ENTITY => <C::ATDef.ENTITY_ATTR>,
3709     ENTITIES => <C::ATDef.ENTITIES_ATTR>,
3710     NMTOKEN => <C::ATDef.NMTOKEN_ATTR>,
3711     NMTOKENS => <C::ATDef.NMTOKENS_ATTR>,
3712     };
3713     if ($map->{$v}) {
3714     $at-><AS::ATDef.declaredType> ($map->{$v});
3715     } else {
3716     ## TODO: Exception
3717     }
3718     }
3719 wakaba 1.4
3720     } (EGO) {
3721     ?lexmode Enumeration;
3722    
3723     ~? (S) { }
3724    
3725 wakaba 1.8 my $kwd;
3726     lang:Perl {
3727     $at-><AS::ATDef.declaredType> (<C::ATDef.ENUMERATION_ATTR>);
3728     $kwd = $at-><AG::ATDef.allowedTokens>;
3729     }
3730    
3731     ~+ (Nmtoken) {
3732     lang:Perl ($v => $token.value) {
3733     push @$kwd, $v;
3734     }
3735 wakaba 1.4
3736     ~? (S) { }
3737     } (OR) : separator {
3738     ~? (S) { }
3739     }
3740    
3741     ~ (EGC) {
3742     ?lexmode AttlistDeclaration;
3743     } else {
3744     ?lexmode AttlistDeclaration;
3745     }
3746    
3747     }
3748    
3749     ~ (S) { }
3750    
3751     // DefaultDecl
3752     ~ (RNI) {
3753     ~ (Name == 'REQUIRED') {
3754 wakaba 1.8 lang:Perl {
3755     $at-><AS::ATDef.defaultType> (<C::ATDef.REQUIRED_DEFAULT>);
3756     }
3757 wakaba 1.4 } (Name == 'IMPLIED') {
3758 wakaba 1.8 lang:Perl {
3759     $at-><AS::ATDef.defaultType> (<C::ATDef.IMPLIED_DEFAULT>);
3760     }
3761 wakaba 1.4 } (Name == 'FIXED') {
3762     ~ (S) { }
3763 wakaba 1.8
3764     lang:Perl {
3765     $at-><AS::ATDef.defaultType> (<C::ATDef.FIXED_DEFAULT>);
3766     }
3767 wakaba 1.4
3768     ~ (LIT) {
3769     my $vals;
3770     lang:Perl {
3771 wakaba 1.8 $vals = {nodes => [], value => ''};
3772 wakaba 1.4 }
3773    
3774     &_AttributeValueSpecification_ ($doc => $doc, $vals => $vals);
3775    
3776 wakaba 1.8 lang:Perl {
3777     for (@{$vals->{nodes}}) {
3778     $at-><M::Node.appendChild> ($_);
3779     }
3780     }
3781    
3782 wakaba 1.4 ~ (LIT) {
3783     ?lexmode AttlistDeclaration;
3784     } else {
3785     ?lexmode AttlistDeclaration;
3786     }
3787     } (LITA) {
3788     my $vals;
3789     lang:Perl {
3790 wakaba 1.8 $vals = {nodes => [], value => ''};
3791 wakaba 1.4 }
3792    
3793     &_AttributeValueSpecificationA_ ($doc => $doc, $vals => $vals);
3794    
3795 wakaba 1.8 lang:Perl {
3796     for (@{$vals->{nodes}}) {
3797     $at-><M::Node.appendChild> ($_);
3798     }
3799     }
3800    
3801     ~ (LITA) {
3802 wakaba 1.4 ?lexmode AttlistDeclaration;
3803     } else {
3804     ?lexmode AttlistDeclaration;
3805     }
3806     }
3807     }
3808    
3809     } (LIT) {
3810     my $vals;
3811     lang:Perl {
3812 wakaba 1.8 $at-><AS::ATDef.defaultType> (<C::ATDef.EXPLICIT_DEFAULT>);
3813     $vals = {nodes => [], value => ''};
3814 wakaba 1.4 }
3815    
3816     &_AttributeValueSpecification_ ($doc => $doc, $vals => $vals);
3817    
3818 wakaba 1.8 lang:Perl {
3819     for (@{$vals->{nodes}}) {
3820     $at-><M::Node.appendChild> ($_);
3821     }
3822     }
3823    
3824 wakaba 1.4 ~ (LIT) {
3825     ?lexmode AttlistDeclaration;
3826     } else {
3827     ?lexmode AttlistDeclaration;
3828     }
3829     } (LITA) {
3830     my $vals;
3831     lang:Perl {
3832 wakaba 1.8 $at-><AS::ATDef.defaultType> (<C::ATDef.EXPLICIT_DEFAULT>);
3833     $vals = {nodes => [], value => ''};
3834 wakaba 1.4 }
3835    
3836     &_AttributeValueSpecificationA_ ($doc => $doc, $vals => $vals);
3837    
3838 wakaba 1.8 lang:Perl {
3839     for (@{$vals->{nodes}}) {
3840     $at-><M::Node.appendChild> ($_);
3841     }
3842     }
3843    
3844 wakaba 1.4 ~ (LITA) {
3845     ?lexmode AttlistDeclaration;
3846     } else {
3847     ?lexmode AttlistDeclaration;
3848     }
3849     }
3850    
3851     } (S) : separator : terminator? {
3852     //
3853     }
3854    
3855     ~ (MDC) {
3856     ?lexmode DTD;
3857     } else {
3858     ?lexmode DTD;
3859     }
3860     } // _AttlistDeclaration
3861    
3862 wakaba 1.11 /*
3863 wakaba 1.26 Entity Declaration
3864 wakaba 1.11 */
3865 wakaba 1.4 rule _EntityDeclaration ($doc) {
3866     // ~ (MDO) { }
3867     // ~ (Name == ENTITY) { }
3868    
3869     ~ (S) { }
3870    
3871 wakaba 1.23 my $is_param_entity;
3872 wakaba 1.6 my $decl;
3873 wakaba 1.27 lang:Perl {
3874     $decl = {
3875     name => '#ILLEGAL',
3876     reptxt => \'',
3877     is_external_entity => false,
3878     document_uri => $self->{location}->{document_uri},
3879     base_uri => $self->{location}->{base_uri},
3880     };
3881     }
3882 wakaba 1.6
3883 wakaba 1.4 ~? (PERO) {
3884     ~ (S) { }
3885 wakaba 1.6 lang:Perl {
3886 wakaba 1.23 $is_param_entity = $decl->{is_param_entity} = true;
3887 wakaba 1.6 }
3888 wakaba 1.4 }
3889    
3890 wakaba 1.19 /*
3891     TODO: Set |$decl->{is_externally_declared}| flag
3892     and |Entity.isExternallyDeclared| attribute
3893     for entity declarations in external subset or
3894     in parameter entity.
3895     */
3896    
3897 wakaba 1.4 ~ (Name) {
3898 wakaba 1.6 lang:Perl ($v => $token.value) {
3899 wakaba 1.26 __CODE{checkNCName:: $name => $v}__;
3900 wakaba 1.6 $decl->{name} = $v;
3901     }
3902 wakaba 1.4 }
3903    
3904 wakaba 1.18 my $node;
3905 wakaba 1.11 lang:Perl {
3906 wakaba 1.18 $node =
3907 wakaba 1.11 $decl->{node} = $self->{docx}-><M::DocumentXDoctype.createGeneralEntity>
3908     ($decl->{name});
3909     ## TODO: Parameter entity...
3910     }
3911    
3912 wakaba 1.4 ~ (S) { }
3913    
3914     ~ (LIT) {
3915 wakaba 1.6 &_EntityValue ($doc => $doc, $decl => $decl);
3916 wakaba 1.4 } (LITA) {
3917 wakaba 1.6 &_EntityValueA ($doc => $doc, $decl => $decl);
3918 wakaba 1.4 } (Name == 'PUBLIC') {
3919     ~ (S) { }
3920    
3921 wakaba 1.18 &PubidLiteral ($decl => $node);
3922 wakaba 1.4
3923     ~ (S) { }
3924    
3925 wakaba 1.18 &SystemLiteral ($decl => $node);
3926    
3927     lang:Perl {
3928     $decl->{is_external_entity} = true;
3929     }
3930 wakaba 1.4 } (Name == 'SYSTEM') {
3931     ~ (S) { }
3932    
3933 wakaba 1.18 &SystemLiteral ($decl => $node);
3934    
3935     lang:Perl {
3936     $decl->{is_external_entity} = true;
3937     }
3938 wakaba 1.4 }
3939    
3940     ~? (S) {
3941     ~? (Name == 'NDATA') {
3942 wakaba 1.23 if-true ($is_param_entity) {
3943     lang:Perl : has-error {
3944     my $location;
3945     __CODE{xp|get-location-from-token::
3946     $token => {$token},
3947     $result => {$location},
3948     }__;
3949     my $continue = __DOMCore:ERROR{xp|wf-syntax-error::
3950     xp|error-token => {$token},
3951     c|location => {$location},
3952     }__;
3953     unless ($continue) {
3954 wakaba 1.27 __CODE{ParseError}__;
3955 wakaba 1.23 }
3956     }
3957     }
3958 wakaba 1.4
3959     ~ (S) { }
3960    
3961     ~ (Name) {
3962 wakaba 1.26 lang:Perl ($v => $token.value) : has-error {
3963     __CODE{checkNCName:: $name => $v}__;
3964 wakaba 1.6 $decl->{notation} = $v;
3965 wakaba 1.11 $decl->{node}-><AG::x|Entity.notationName> ($v);
3966 wakaba 1.6 }
3967 wakaba 1.4 }
3968    
3969     ~? (S) { }
3970     }
3971     }
3972    
3973 wakaba 1.24 lang:Perl : has-error {
3974 wakaba 1.6 if ($self->{$decl->{is_param_entity} ? 'param_entity' : 'general_entity'}
3975     ->{$decl->{name}}) {
3976 wakaba 1.24 ## Predefined entity
3977     if (not $decl->{is_param_entity} and
3978     {lt => true, gt => true, amp => true,
3979     quot => true, apos => true}->{$decl->{name}}) {
3980     if ($decl->{is_external_entity}) {
3981     my $location;
3982     __CODE{xp|get-location-from-token::
3983     $token => {$token},
3984     $result => {$location},
3985     }__;
3986     my $continue = __c|ERROR{xp|error-internal-predefined-entity::
3987     xp|error-token => {$token},
3988     c|location => {$location},
3989     xp|name => {$decl->{name}},
3990     }__;
3991     unless ($continue) {
3992 wakaba 1.27 __CODE{ParseError}__;
3993 wakaba 1.24 }
3994     } elsif (
3995     not ({gt => true, apos => true, quot => true}->{$decl->{name}} and
3996     ${$decl->{reptxt}} eq {
3997     gt => '>', apos => "'", quot => '"',
3998     }->{$decl->{name}}) and
3999     not (${$decl->{reptxt}} =~ /\A&#0*@{[{
4000     lt => '60', gt => '62', amp => '38',
4001     apos => '39', quot => '34',
4002     }->{$decl->{name}}]};\z/) and
4003     not (${$decl->{reptxt}} =~ /\A&#x0*(?:(?i)@{[{
4004     lt => '3C', gt => '3E', amp => '26',
4005     apos => '27', quot => '22',
4006     }->{$decl->{name}}]});\z/)
4007     ) {
4008     ## NOTE: See "SuikaWiki - Predefined Entities"
4009     ## "http://suika.fam.cx/gate/2005/sw/%E5%AE%9A%E7%BE%A9%E6%B8%88%E5%AE%9F%E4%BD%93".
4010     my $location;
4011     __CODE{xp|get-location-from-token::
4012     $token => {$token},
4013     $result => {$location},
4014     }__;
4015     my $continue = __c|ERROR{xp|error-malformed-predefined-entity::
4016     xp|error-token => {$token},
4017     c|location => {$location},
4018     xp|name => {$decl->{name}},
4019     xp|replacement-text => {${$decl->{reptxt}}},
4020     }__;
4021     unless ($continue) {
4022 wakaba 1.27 __CODE{ParseError}__;
4023 wakaba 1.24 }
4024     }
4025 wakaba 1.25 $self->{dtdecl}->{<H::mn:node>}->{{
4026     lt => <H::d|hasLtDeclaration>,
4027     gt => <H::d|hasGtDeclaration>,
4028     amp => <H::d|hasAmpDeclaration>,
4029     apos => <H::d|hasAposDeclaration>,
4030     quot => <H::d|hasQuotDeclaration>,
4031     }->{$decl->{name}}} = true;
4032 wakaba 1.24 } else { ## Dupulicating declaration
4033     my $location;
4034     __CODE{xp|get-location-from-token::
4035     $token => {$token},
4036     $result => {$location},
4037     }__;
4038     my $continue = __c|ERROR{xp|warning-entity-declaration-ignored::
4039     xp|error-token => {$token},
4040     c|location => {$location},
4041     xp|name => {$decl->{name}},
4042     }__;
4043     unless ($continue) {
4044 wakaba 1.27 __CODE{ParseError}__;
4045 wakaba 1.24 }
4046     }
4047 wakaba 1.25 } elsif ($self->{dont_process} and not $self->{standalone}) {
4048     ## TODO: |standalone| and parameter entities??
4049     my $location;
4050     __CODE{xp|get-location-from-token::
4051     $token => {$token},
4052     $result => {$location},
4053     }__;
4054     my $continue = __c|ERROR{xp|warning-entity-declaration-not-processed::
4055     xp|error-token => {$token},
4056     c|location => {$location},
4057     xp|name => {$decl->{name}},
4058     }__;
4059     unless ($continue) {
4060 wakaba 1.27 __CODE{ParseError}__;
4061 wakaba 1.25 }
4062 wakaba 1.6 } else {
4063     $self->{$decl->{is_param_entity} ? 'param_entity' : 'general_entity'}
4064     ->{$decl->{name}} = $decl;
4065 wakaba 1.11 $self->{dtdef}-><M::DTDef.setGeneralEntityNode> ($decl->{node})
4066     unless $decl->{is_param_entity};
4067 wakaba 1.6 }
4068     }
4069    
4070 wakaba 1.4 ~ (MDC) {
4071     ?lexmode DTD;
4072     } else {
4073     ?lexmode DTD;
4074     }
4075     } // _EntityDeclaration
4076    
4077 wakaba 1.26 /*
4078     Notation Declaration
4079     */
4080     rule _NotationDeclaration {
4081 wakaba 1.4 // ~ (MDO) { }
4082     // ~ (Name == NOTATION) { }
4083    
4084     ~ (S) { }
4085    
4086 wakaba 1.26 my $name;
4087 wakaba 1.4 ~ (Name) {
4088 wakaba 1.26 lang:Perl ($v => $token.value) : has-error {
4089     __CODE{checkNCName:: $name => $v}__;
4090     $name = $v;
4091     }
4092     } else {
4093     lang:Perl {
4094     $name = '#INVALID';
4095     }
4096     }
4097 wakaba 1.4
4098     ~ (S) { }
4099    
4100 wakaba 1.17 lang:Perl {
4101 wakaba 1.26 $decl = $self->{docx}-><M::DocumentXDoctype.createNotation> ($name);
4102 wakaba 1.17 }
4103    
4104 wakaba 1.4 ~ (Name == 'PUBLIC') {
4105     ~ (S) { }
4106    
4107 wakaba 1.17 &PubidLiteral ($decl => $decl);
4108 wakaba 1.4
4109     ~? (S) {
4110     ~? (LIT) {
4111     ?lexmode SystemLiteral;
4112 wakaba 1.17 &_SystemLiteral ($decl => $decl);
4113 wakaba 1.4
4114     ~? (S) { }
4115     } (LITA) {
4116     ?lexmode SystemLiteralA;
4117 wakaba 1.17 &_SystemLiteral ($decl => $decl);
4118 wakaba 1.4
4119     ~? (S) { }
4120     }
4121     }
4122     } (Name == 'SYSTEM') {
4123     ~ (S) { }
4124    
4125 wakaba 1.17 &SystemLiteral ($decl => $decl);
4126 wakaba 1.4
4127     ~? (S) { }
4128     }
4129    
4130 wakaba 1.26 lang:Perl : has-error {
4131     if ($self->{dtdef}-><M::DTDef.getNotationNode> ($name)) {
4132     ## Dupulication
4133     my $location;
4134     __CODE{xp|get-location-from-token::
4135     $token => {$token},
4136     $result => {$location},
4137     }__;
4138     my $continue = __c|ERROR{xp|vc-unique-notation-name::
4139     xp|error-token => {$token},
4140     c|location => {$location},
4141     xp|name => {$name},
4142     }__;
4143     unless ($continue) {
4144 wakaba 1.27 __CODE{ParseError}__;
4145 wakaba 1.26 }
4146     } else {
4147     $self->{dtdef}-><M::DTDef.setNotationNode> ($decl);
4148     }
4149     }
4150    
4151 wakaba 1.4 ~ (MDC) {
4152     ?lexmode DTD;
4153     } else {
4154     ?lexmode DTD;
4155     }
4156     } // _NotationDeclaration
4157    
4158 wakaba 1.11 rule _EntityValue ($decl) {
4159 wakaba 1.4 ?lexmode EntityValue;
4160    
4161     my $vals;
4162 wakaba 1.6 my $reptxt;
4163 wakaba 1.4 lang:Perl {
4164     $vals = [];
4165 wakaba 1.6 $reptxt = '';
4166 wakaba 1.4 }
4167    
4168     ~* (STRING) {
4169 wakaba 1.6 lang:Perl ($v => $token.value) {
4170     $reptxt .= $v;
4171     }
4172 wakaba 1.4 } (PERO) {
4173 wakaba 1.25 ?lexmode EntityReference;
4174 wakaba 1.19
4175     lang:Perl {
4176     $self->{has_xref} = true;
4177 wakaba 1.25 $self->{dont_process} = true;
4178 wakaba 1.19 }
4179 wakaba 1.6
4180     // TODO: Expand or wferror if internal subset
4181 wakaba 1.4
4182     ~ (Name) {
4183    
4184 wakaba 1.25 // Note that external subset and parameter entities are not supported
4185     lang:Perl ($name => $token.value) : has-error {
4186 wakaba 1.26 __CODE{checkNCName:: $name => $name}__;
4187 wakaba 1.25 my $location;
4188     __CODE{xp|get-location-from-token::
4189     $token => {$token},
4190     $result => {$location},
4191     }__;
4192     my $continue = __c|ERROR{xp|wf-pes-in-internal-subset::
4193     xp|error-token => {$token},
4194     c|location => {$location},
4195     xp|name => {$name},
4196     }__;
4197     unless ($continue) {
4198 wakaba 1.27 __CODE{ParseError}__;
4199 wakaba 1.25 }
4200     }
4201 wakaba 1.4 }
4202    
4203     ~ (REFC) {
4204     ?lexmode EntityValue;
4205     } else {
4206     ?lexmode EntityValue;
4207     }
4208     } (HCRO) {
4209 wakaba 1.11 &_HexadecimalCharacterReferenceEV_ ($vals => $vals);
4210 wakaba 1.4
4211 wakaba 1.6 lang:Perl {
4212 wakaba 1.11 $reptxt .= $vals->[-1];
4213 wakaba 1.6 }
4214    
4215 wakaba 1.4 ~ (REFC) {
4216     ?lexmode EntityValue;
4217     } else {
4218     ?lexmode EntityValue;
4219     }
4220     } (CRO) {
4221 wakaba 1.11 &_NumericCharacterReferenceEV_ ($vals => $vals);
4222 wakaba 1.6
4223     lang:Perl {
4224 wakaba 1.11 $reptxt .= $vals->[-1];
4225 wakaba 1.6 }
4226 wakaba 1.4
4227     ~ (REFC) {
4228     ?lexmode EntityValue;
4229     } else {
4230     ?lexmode EntityValue;
4231     }
4232     } (ERO) {
4233 wakaba 1.11 &_GeneralEntityReferenceEV_ ($vals => $vals);
4234 wakaba 1.4
4235 wakaba 1.6 lang:Perl {
4236 wakaba 1.11 $reptxt .= '&' . $vals->[-1] . ';';
4237 wakaba 1.6 }
4238    
4239 wakaba 1.4 ~ (REFC) {
4240     ?lexmode EntityValue;
4241     } else {
4242     ?lexmode EntityValue;
4243     }
4244     }
4245    
4246     ~ (LIT) {
4247     ?lexmode MarkupDeclaration;
4248     } (LITA) {
4249     ?lexmode MarkupDeclaration;
4250     } else {
4251     ?lexmode MarkupDeclaration;
4252     }
4253 wakaba 1.6
4254     lang:Perl {
4255     $decl->{reptxt} = \$reptxt;
4256 wakaba 1.19 $decl->{has_replacement_text} = true;
4257 wakaba 1.6 }
4258 wakaba 1.4 } // _EntityValue
4259    
4260 wakaba 1.11 rule _EntityValueA ($decl) {
4261 wakaba 1.4 ?lexmode EntityValueA;
4262    
4263     my $vals;
4264 wakaba 1.6 my $reptxt;
4265 wakaba 1.4 lang:Perl {
4266     $vals = [];
4267 wakaba 1.6 $reptxt = '';
4268 wakaba 1.4 }
4269    
4270     ~* (STRING) {
4271 wakaba 1.6 lang:Perl ($v => $token.value) {
4272     $reptxt .= $v;
4273     }
4274 wakaba 1.4 } (PERO) {
4275 wakaba 1.25 ?lexmode EntityReference;
4276 wakaba 1.4
4277 wakaba 1.19 lang:Perl {
4278     $self->{has_xref} = true;
4279 wakaba 1.25 $self->{dont_process} = true;
4280 wakaba 1.19 }
4281    
4282 wakaba 1.6 // TODO: implement this
4283 wakaba 1.4 ~ (Name) {
4284    
4285 wakaba 1.25 // Note that external subset and parameter entities are not supported
4286     lang:Perl ($name => $token.value) : has-error {
4287 wakaba 1.26 __CODE{checkNCName:: $name => $name}__;
4288 wakaba 1.25 my $location;
4289     __CODE{xp|get-location-from-token::
4290     $token => {$token},
4291     $result => {$location},
4292     }__;
4293     my $continue = __c|ERROR{xp|wf-pes-in-internal-subset::
4294     xp|error-token => {$token},
4295     c|location => {$location},
4296     xp|name => {$name},
4297     }__;
4298     unless ($continue) {
4299 wakaba 1.27 __CODE{ParseError}__;
4300 wakaba 1.25 }
4301     }
4302 wakaba 1.4 }
4303    
4304     ~ (REFC) {
4305     ?lexmode EntityValueA;
4306     } else {
4307     ?lexmode EntityValueA;
4308     }
4309     } (HCRO) {
4310 wakaba 1.11 &_HexadecimalCharacterReferenceEV_ ($vals => $vals);
4311 wakaba 1.4
4312 wakaba 1.6 lang:Perl {
4313 wakaba 1.11 $reptxt .= $vals->[-1];
4314 wakaba 1.6 }
4315    
4316    
4317 wakaba 1.4 ~ (REFC) {
4318     ?lexmode EntityValueA;
4319     } else {
4320     ?lexmode EntityValueA;
4321     }
4322     } (CRO) {
4323 wakaba 1.11 &_NumericCharacterReferenceEV_ ($vals => $vals);
4324 wakaba 1.4
4325 wakaba 1.6 lang:Perl {
4326 wakaba 1.11 $reptxt .= $vals->[-1];
4327 wakaba 1.6 }
4328    
4329 wakaba 1.4 ~ (REFC) {
4330     ?lexmode EntityValueA;
4331     } else {
4332     ?lexmode EntityValueA;
4333     }
4334     } (ERO) {
4335 wakaba 1.11 &_GeneralEntityReferenceEV_ ($vals => $vals);
4336 wakaba 1.4
4337 wakaba 1.6 lang:Perl {
4338 wakaba 1.11 $reptxt .= '&' . $vals->[-1] . ';';
4339 wakaba 1.6 }
4340    
4341 wakaba 1.4 ~ (REFC) {
4342     ?lexmode EntityValueA;
4343     } else {
4344     ?lexmode EntityValueA;
4345     }
4346     }
4347    
4348     ~ (LITA) {
4349     ?lexmode MarkupDeclaration;
4350     } else {
4351     ?lexmode MarkupDeclaration;
4352     }
4353 wakaba 1.6
4354     lang:Perl {
4355     $decl->{reptxt} = \$reptxt;
4356 wakaba 1.19 $decl->{has_replacement_text} = true;
4357 wakaba 1.6 }
4358 wakaba 1.4 } // _EntityValueA
4359    
4360    
4361     /*
4362     XML Name
4363     */
4364     lexmode NameChar {
4365     $NameStartChar10 := [
4366     '_' ':'
4367     // Letter
4368     // BaseChar
4369     U+0041..U+005A U+0061..U+007A U+00C0..U+00D6
4370     U+00D8..U+00F6 U+00F8..U+00FF U+0100..U+0131
4371     U+0134..U+013E U+0141..U+0148 U+014A..U+017E
4372     U+0180..U+01C3 U+01CD..U+01F0 U+01F4..U+01F5
4373     U+01FA..U+0217 U+0250..U+02A8 U+02BB..U+02C1
4374     U+0386 U+0388..U+038A U+038C U+038E..U+03A1
4375     U+03A3..U+03CE U+03D0..U+03D6 U+03DA U+03DC
4376     U+03DE U+03E0 U+03E2..U+03F3 U+0401..U+040C
4377     U+040E..U+044F U+0451..U+045C U+045E..U+0481
4378     U+0490..U+04C4 U+04C7..U+04C8 U+04CB..U+04CC
4379     U+04D0..U+04EB U+04EE..U+04F5 U+04F8..U+04F9
4380     U+0531..U+0556 U+0559 U+0561..U+0586
4381     U+05D0..U+05EA U+05F0..U+05F2 U+0621..U+063A
4382     U+0641..U+064A U+0671..U+06B7 U+06BA..U+06BE
4383     U+06C0..U+06CE U+06D0..U+06D3 U+06D5
4384     U+06E5..U+06E6 U+0905..U+0939 U+093D
4385     U+0958..U+0961 U+0985..U+098C U+098F..U+0990
4386     U+0993..U+09A8 U+09AA..U+09B0 U+09B2
4387     U+09B6..U+09B9 U+09DC..U+09DD U+09DF..U+09E1
4388     U+09F0..U+09F1 U+0A05..U+0A0A U+0A0F..U+0A10
4389     U+0A13..U+0A28 U+0A2A..U+0A30 U+0A32..U+0A33
4390     U+0A35..U+0A36 U+0A38..U+0A39 U+0A59..U+0A5C
4391     U+0A5E U+0A72..U+0A74 U+0A85..U+0A8B U+0A8D
4392     U+0A8F..U+0A91 U+0A93..U+0AA8 U+0AAA..U+0AB0
4393     U+0AB2..U+0AB3 U+0AB5..U+0AB9 U+0ABD U+0AE0
4394     U+0B05..U+0B0C U+0B0F..U+0B10 U+0B13..U+0B28
4395     U+0B2A..U+0B30 U+0B32..U+0B33 U+0B36..U+0B39
4396     U+0B3D U+0B5C..U+0B5D U+0B5F..U+0B61
4397     U+0B85..U+0B8A U+0B8E..U+0B90 U+0B92..U+0B95
4398     U+0B99..U+0B9A U+0B9C U+0B9E..U+0B9F
4399     U+0BA3..U+0BA4 U+0BA8..U+0BAA U+0BAE..U+0BB5
4400     U+0BB7..U+0BB9 U+0C05..U+0C0C U+0C0E..U+0C10
4401     U+0C12..U+0C28 U+0C2A..U+0C33 U+0C35..U+0C39
4402     U+0C60..U+0C61 U+0C85..U+0C8C U+0C8E..U+0C90
4403     U+0C92..U+0CA8 U+0CAA..U+0CB3 U+0CB5..U+0CB9
4404     U+0CDE U+0CE0..U+0CE1 U+0D05..U+0D0C
4405     U+0D0E..U+0D10 U+0D12..U+0D28 U+0D2A..U+0D39
4406     U+0D60..U+0D61 U+0E01..U+0E2E U+0E30
4407     U+0E32..U+0E33 U+0E40..U+0E45 U+0E81..U+0E82
4408     U+0E84 U+0E87..U+0E88 U+0E8A U+0E8D
4409     U+0E94..U+0E97 U+0E99..U+0E9F U+0EA1..U+0EA3
4410     U+0EA5 U+0EA7 U+0EAA..U+0EAB U+0EAD..U+0EAE
4411     U+0EB0 U+0EB2..U+0EB3 U+0EBD U+0EC0..U+0EC4
4412     U+0F40..U+0F47 U+0F49..U+0F69 U+10A0..U+10C5
4413     U+10D0..U+10F6 U+1100 U+1102..U+1103
4414     U+1105..U+1107 U+1109 U+110B..U+110C
4415     U+110E..U+1112 U+113C U+113E U+1140 U+114C
4416     U+114E U+1150 U+1154..U+1155 U+1159
4417     U+115F..U+1161 U+1163 U+1165 U+1167 U+1169
4418     U+116D..U+116E U+1172..U+1173 U+1175 U+119E
4419     U+11A8 U+11AB U+11AE..U+11AF U+11B7..U+11B8
4420     U+11BA U+11BC..U+11C2 U+11EB U+11F0 U+11F9
4421     U+1E00..U+1E9B U+1EA0..U+1EF9 U+1F00..U+1F15
4422     U+1F18..U+1F1D U+1F20..U+1F45 U+1F48..U+1F4D
4423     U+1F50..U+1F57 U+1F59 U+1F5B U+1F5D
4424     U+1F5F..U+1F7D U+1F80..U+1FB4 U+1FB6..U+1FBC
4425     U+1FBE U+1FC2..U+1FC4 U+1FC6..U+1FCC
4426     U+1FD0..U+1FD3 U+1FD6..U+1FDB U+1FE0..U+1FEC
4427     U+1FF2..U+1FF4 U+1FF6..U+1FFC U+2126
4428     U+212A..U+212B U+212E U+2180..U+2182
4429     U+3041..U+3094 U+30A1..U+30FA U+3105..U+312C
4430     U+AC00..U+D7A3
4431     // Ideographic
4432     U+4E00..U+9FA5 U+3007 U+3021..U+3029
4433     ];
4434     $NameChar10 := [
4435     '.' '-' '_' ':'
4436     // Letter
4437     // BaseChar
4438     U+0041..U+005A U+0061..U+007A U+00C0..U+00D6
4439     U+00D8..U+00F6 U+00F8..U+00FF U+0100..U+0131
4440     U+0134..U+013E U+0141..U+0148 U+014A..U+017E
4441     U+0180..U+01C3 U+01CD..U+01F0 U+01F4..U+01F5
4442     U+01FA..U+0217 U+0250..U+02A8 U+02BB..U+02C1
4443     U+0386 U+0388..U+038A U+038C U+038E..U+03A1
4444     U+03A3..U+03CE U+03D0..U+03D6 U+03DA U+03DC
4445     U+03DE U+03E0 U+03E2..U+03F3 U+0401..U+040C
4446     U+040E..U+044F U+0451..U+045C U+045E..U+0481
4447     U+0490..U+04C4 U+04C7..U+04C8 U+04CB..U+04CC
4448     U+04D0..U+04EB U+04EE..U+04F5 U+04F8..U+04F9
4449     U+0531..U+0556 U+0559 U+0561..U+0586
4450     U+05D0..U+05EA U+05F0..U+05F2 U+0621..U+063A
4451     U+0641..U+064A U+0671..U+06B7 U+06BA..U+06BE
4452     U+06C0..U+06CE U+06D0..U+06D3 U+06D5
4453     U+06E5..U+06E6 U+0905..U+0939 U+093D
4454     U+0958..U+0961 U+0985..U+098C U+098F..U+0990
4455     U+0993..U+09A8 U+09AA..U+09B0 U+09B2
4456     U+09B6..U+09B9 U+09DC..U+09DD U+09DF..U+09E1
4457     U+09F0..U+09F1 U+0A05..U+0A0A U+0A0F..U+0A10
4458     U+0A13..U+0A28 U+0A2A..U+0A30 U+0A32..U+0A33
4459     U+0A35..U+0A36 U+0A38..U+0A39 U+0A59..U+0A5C
4460     U+0A5E U+0A72..U+0A74 U+0A85..U+0A8B U+0A8D
4461     U+0A8F..U+0A91 U+0A93..U+0AA8 U+0AAA..U+0AB0
4462     U+0AB2..U+0AB3 U+0AB5..U+0AB9 U+0ABD U+0AE0
4463     U+0B05..U+0B0C U+0B0F..U+0B10 U+0B13..U+0B28
4464     U+0B2A..U+0B30 U+0B32..U+0B33 U+0B36..U+0B39
4465     U+0B3D U+0B5C..U+0B5D U+0B5F..U+0B61
4466     U+0B85..U+0B8A U+0B8E..U+0B90 U+0B92..U+0B95
4467     U+0B99..U+0B9A U+0B9C U+0B9E..U+0B9F
4468     U+0BA3..U+0BA4 U+0BA8..U+0BAA U+0BAE..U+0BB5
4469     U+0BB7..U+0BB9 U+0C05..U+0C0C U+0C0E..U+0C10
4470     U+0C12..U+0C28 U+0C2A..U+0C33 U+0C35..U+0C39
4471     U+0C60..U+0C61 U+0C85..U+0C8C U+0C8E..U+0C90
4472     U+0C92..U+0CA8 U+0CAA..U+0CB3 U+0CB5..U+0CB9
4473     U+0CDE U+0CE0..U+0CE1 U+0D05..U+0D0C
4474     U+0D0E..U+0D10 U+0D12..U+0D28 U+0D2A..U+0D39
4475     U+0D60..U+0D61 U+0E01..U+0E2E U+0E30
4476     U+0E32..U+0E33 U+0E40..U+0E45 U+0E81..U+0E82
4477     U+0E84 U+0E87..U+0E88 U+0E8A U+0E8D
4478     U+0E94..U+0E97 U+0E99..U+0E9F U+0EA1..U+0EA3
4479     U+0EA5 U+0EA7 U+0EAA..U+0EAB U+0EAD..U+0EAE
4480     U+0EB0 U+0EB2..U+0EB3 U+0EBD U+0EC0..U+0EC4
4481     U+0F40..U+0F47 U+0F49..U+0F69 U+10A0..U+10C5
4482     U+10D0..U+10F6 U+1100 U+1102..U+1103
4483     U+1105..U+1107 U+1109 U+110B..U+110C
4484     U+110E..U+1112 U+113C U+113E U+1140 U+114C
4485     U+114E U+1150 U+1154..U+1155 U+1159
4486     U+115F..U+1161 U+1163 U+1165 U+1167 U+1169
4487     U+116D..U+116E U+1172..U+1173 U+1175 U+119E
4488     U+11A8 U+11AB U+11AE..U+11AF U+11B7..U+11B8
4489     U+11BA U+11BC..U+11C2 U+11EB U+11F0 U+11F9
4490     U+1E00..U+1E9B U+1EA0..U+1EF9 U+1F00..U+1F15
4491     U+1F18..U+1F1D U+1F20..U+1F45 U+1F48..U+1F4D
4492     U+1F50..U+1F57 U+1F59 U+1F5B U+1F5D
4493     U+1F5F..U+1F7D U+1F80..U+1FB4 U+1FB6..U+1FBC
4494     U+1FBE U+1FC2..U+1FC4 U+1FC6..U+1FCC
4495     U+1FD0..U+1FD3 U+1FD6..U+1FDB U+1FE0..U+1FEC
4496     U+1FF2..U+1FF4 U+1FF6..U+1FFC U+2126
4497     U+212A..U+212B U+212E U+2180..U+2182
4498     U+3041..U+3094 U+30A1..U+30FA U+3105..U+312C
4499     U+AC00..U+D7A3
4500     // Ideographic
4501     U+4E00..U+9FA5 U+3007 U+3021..U+3029
4502     // Digit
4503     U+0030..U+0039 U+0660..U+0669 U+06F0..U+06F9
4504     U+0966..U+096F U+09E6..U+09EF U+0A66..U+0A6F
4505     U+0AE6..U+0AEF U+0B66..U+0B6F U+0BE7..U+0BEF
4506     U+0C66..U+0C6F U+0CE6..U+0CEF U+0D66..U+0D6F
4507     U+0E50..U+0E59 U+0ED0..U+0ED9 U+0F20..U+0F29
4508     // CombiningChar
4509     U+0300..U+0345 U+0360..U+0361 U+0483..U+0486
4510     U+0591..U+05A1 U+05A3..U+05B9 U+05BB..U+05BD
4511     U+05BF U+05C1..U+05C2 U+05C4 U+064B..U+0652
4512     U+0670 U+06D6..U+06DC U+06DD..U+06DF
4513     U+06E0..U+06E4 U+06E7..U+06E8 U+06EA..U+06ED
4514     U+0901..U+0903 U+093C U+093E..U+094C U+094D
4515     U+0951..U+0954 U+0962..U+0963 U+0981..U+0983
4516     U+09BC U+09BE U+09BF U+09C0..U+09C4
4517     U+09C7..U+09C8 U+09CB..U+09CD U+09D7
4518     U+09E2..U+09E3 U+0A02 U+0A3C U+0A3E U+0A3F
4519     U+0A40..U+0A42 U+0A47..U+0A48 U+0A4B..U+0A4D
4520     U+0A70..U+0A71 U+0A81..U+0A83 U+0ABC
4521     U+0ABE..U+0AC5 U+0AC7..U+0AC9 U+0ACB..U+0ACD
4522     U+0B01..U+0B03 U+0B3C U+0B3E..U+0B43
4523     U+0B47..U+0B48 U+0B4B..U+0B4D U+0B56..U+0B57
4524     U+0B82..U+0B83 U+0BBE..U+0BC2 U+0BC6..U+0BC8
4525     U+0BCA..U+0BCD U+0BD7 U+0C01..U+0C03
4526     U+0C3E..U+0C44 U+0C46..U+0C48 U+0C4A..U+0C4D
4527     U+0C55..U+0C56 U+0C82..U+0C83 U+0CBE..U+0CC4
4528     U+0CC6..U+0CC8 U+0CCA..U+0CCD U+0CD5..U+0CD6
4529     U+0D02..U+0D03 U+0D3E..U+0D43 U+0D46..U+0D48
4530     U+0D4A..U+0D4D U+0D57 U+0E31 U+0E34..U+0E3A
4531     U+0E47..U+0E4E U+0EB1 U+0EB4..U+0EB9
4532     U+0EBB..U+0EBC U+0EC8..U+0ECD U+0F18..U+0F19
4533     U+0F35 U+0F37 U+0F39 U+0F3E U+0F3F
4534     U+0F71..U+0F84 U+0F86..U+0F8B U+0F90..U+0F95
4535     U+0F97 U+0F99..U+0FAD U+0FB1..U+0FB7 U+0FB9
4536     U+20D0..U+20DC U+20E1 U+302A..U+302F U+3099
4537     U+309A
4538     // Extender
4539     U+00B7 U+02D0 U+02D1 U+0387 U+0640 U+0E46
4540     U+0EC6 U+3005 U+3031..U+3035 U+309D..U+309E
4541     U+30FC..U+30FE
4542     ];
4543 wakaba 1.1
4544     $NameStartChar11 := [
4545     ':' '_'
4546     'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M'
4547     'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z'
4548     'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm'
4549     'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z'
4550     U+00C0..U+00D6 U+00D8..U+00F6 U+00F8..U+02FF
4551     U+0370..U+037D U+037F..U+1FFF U+200C..U+200D
4552     U+2070..U+218F U+2C00..U+2FEF U+3001..U+D7FF
4553     U+F900..U+FDCF U+FDF0..U+FFFD U+10000..U+EFFFF
4554     ];
4555     $NameChar11 := [
4556     '-' '.' '0' '1' '2' '3' '4' '5' '6' '7' '8' '9'
4557     U+00B7 U+0300..U+036F U+203F..U+2040
4558     // NameStartChar
4559     ':' '_'
4560     'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M'
4561     'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z'
4562     'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm'
4563     'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z'
4564     U+00C0..U+00D6 U+00D8..U+00F6 U+00F8..U+02FF
4565     U+0370..U+037D U+037F..U+1FFF U+200C..U+200D
4566     U+2070..U+218F U+2C00..U+2FEF U+3001..U+D7FF
4567     U+F900..U+FDCF U+FDF0..U+FFFD U+10000..U+EFFFF
4568     ];
4569 wakaba 1.4 } // NameChar
4570    
4571     lexmode Name
4572     : extends => 'NameChar'
4573     {
4574 wakaba 1.1 Name : value := $NameStartChar11 $NameChar11*;
4575     } // Name
4576 wakaba 1.4
4577     lexmode Nmtoken
4578     : extends => 'NameChar'
4579     {
4580     Nmtoken : value := $NameChar11*;
4581     } // Nmtoken
4582 wakaba 1.1
4583     /*
4584 wakaba 1.14 S
4585 wakaba 1.1 */
4586     lexmode S {
4587 wakaba 1.14 $s := [U+0009 U+000A U+000D U+0020];
4588     S := $s+;
4589 wakaba 1.1 } // S
4590    
4591     /*
4592     Document end scanning mode
4593     */
4594     lexmode DocumentEnd
4595     : standalone
4596     : extends => 'S'
4597     {
4598     /*
4599     Processing instruction
4600     */
4601     PIO := ['<'] ['?'];
4602    
4603     /*
4604     Comment declaration
4605     */
4606     CDO := ['<'] ['!'] ['-'] ['-'];
4607     } // DocumentEnd
4608    
4609     /*
4610     Document misc scanning mode
4611    
4612     This mode scans |Misc| constructions as well
4613     as document element's start tag.
4614     */
4615     lexmode DocumentMisc
4616     : standalone
4617     : extends => 'DocumentEnd'
4618     {
4619     /*
4620     Document element start tag
4621     */
4622     STAGO := ['<'];
4623     } // DocumentMisc
4624    
4625     /*
4626     Document prolog scanning mode
4627     */
4628     lexmode DocumentProlog
4629     : standalone
4630     : extends => 'DocumentMisc'
4631     {
4632     /*
4633     |DOCTYPE| declaration
4634     */
4635     MDO := ['<'] ['!'];
4636     } // DocumentProlog
4637 wakaba 1.16
4638 wakaba 1.1 /*
4639 wakaba 1.16 Document Start Scanning Mode
4640 wakaba 1.1 */
4641     lexmode DocumentStart
4642     : standalone
4643     : extends => 'DocumentProlog'
4644     {
4645     /*
4646     XML declaration
4647     */
4648 wakaba 1.16 XDO := ['<'] ['?'] ['x'] ['m'] ['l'];
4649 wakaba 1.1 } // DocumentStart
4650    
4651     /*
4652     Comment declaration scanning mode
4653     */
4654     lexmode CommentDeclaration
4655     : standalone
4656     {
4657     /*
4658     Comment close
4659     */
4660     COM := ['-'] ['-'];
4661    
4662     /*
4663     Comment data
4664     */
4665 wakaba 1.15 ?default-token STRING : value;
4666 wakaba 1.1 } // CommentDeclaration
4667    
4668     /*
4669     Processing instruction name and |S| scanning mode
4670     */
4671     lexmode PIName
4672     : standalone
4673     : extends => 'Name'
4674     : extends => 'S'
4675     {
4676     /*
4677     Processing instruction close
4678     */
4679     PIC := ['?'] ['>'];
4680     } // PIName
4681    
4682     /*
4683 wakaba 1.16 Processing instruction name and |S| scanning mode
4684     */
4685     lexmode PINmtoken
4686     : standalone
4687     : extends => 'Nmtoken'
4688     : extends => 'S'
4689     {
4690     /*
4691     Processing instruction close
4692     */
4693     PIC := ['?'] ['>'];
4694     } // PINmtoken
4695    
4696     /*
4697 wakaba 1.1 Processing instruction data scanning mode
4698     */
4699     lexmode PIData
4700     : standalone
4701     {
4702     /*
4703     Processing instruction close
4704     */
4705     PIC := ['?'] ['>'];
4706    
4707     /*
4708     Processing instruction target data
4709     */
4710 wakaba 1.2 ?default-token DATA : value;
4711 wakaba 1.1 } // PIData
4712    
4713     /*
4714     Content of element scanning mode
4715     */
4716     lexmode ElementContent
4717     : standalone
4718     {
4719     /*
4720     Start tag open
4721     */
4722     STAGO := ['<'];
4723    
4724     /*
4725     End tag open
4726     */
4727     ETAGO := ['<'] ['/'];
4728    
4729     /*
4730     Hexadecimal character reference open
4731     */
4732     HCRO := ['&'] ['#'] ['x'];
4733    
4734     /*
4735     Numeric character reference open
4736     */
4737     CRO := ['&'] ['#'];
4738    
4739     /*
4740     General entity reference open
4741     */
4742     ERO := ['&'];
4743    
4744     /*
4745     Comment declaration open
4746     */
4747     CDO := ['<'] ['!'] ['-'] ['-'];
4748    
4749     /*
4750     CDATA section open
4751     */
4752     CDSO := ['<'] ['!'] ['[']
4753     ['C'] ['D'] ['A'] ['T'] ['A'] ['['];
4754    
4755     /*
4756     Processing instruction open
4757     */
4758     PIO := ['<'] ['?'];
4759 wakaba 1.2
4760     /*
4761     Markup section end
4762     */
4763     MSE := [']'] [']'] ['>'];
4764    
4765     /*
4766     Character data
4767     */
4768     /*
4769     Character data and/or |MSE|
4770     */
4771     ?default-token CharData : value;
4772 wakaba 1.1 } // ElementContent
4773    
4774     /*
4775     CDATA section content scanning mode
4776     */
4777     lexmode CDATASectionContent
4778     : standalone
4779     {
4780     /*
4781     Markup section end
4782     */
4783     MSE := [']'] [']'] ['>'];
4784    
4785     /*
4786     Character data
4787 wakaba 1.2 */
4788     ?default-token CData : value;
4789 wakaba 1.1 } // CDATASectionContent
4790    
4791     lexmode EntityReference
4792     : standalone
4793     : extends => 'Name'
4794     {
4795     /*
4796     Reference close
4797     */
4798     REFC := [';'];
4799     } // EntityReference
4800    
4801     lexmode NumericCharacterReference
4802     : standalone
4803     {
4804     /*
4805     Decimal number
4806     */
4807     $digit := ['0' '1' '2' '3' '4' '5' '6' '7' '8' '9'];
4808     NUMBER : value := $digit+;
4809    
4810     /*
4811     Reference close
4812     */
4813     REFC := [';'];
4814     } // NumericCharacterReference
4815    
4816     lexmode HexadecimalCharacterReference
4817     : standalone
4818     {
4819     /*
4820     Hexadecimal number
4821     */
4822     $hexdigit := ['0' '1' '2' '3' '4' '5' '6' '7' '8' '9'
4823     'A' 'B' 'C' 'D' 'E' 'F'
4824     'a' 'b' 'c' 'd' 'e' 'f'];
4825     Hex : value := $hexdigit+;
4826    
4827     /*
4828     Reference close
4829     */
4830     REFC := [';'];
4831     } // HexadecimalCharacterReference
4832    
4833 wakaba 1.16 /*
4834     The XML Declaration and Text Declaration Scanning Mode
4835     */
4836 wakaba 1.3 lexmode XMLDeclaration
4837     : standalone
4838     : extends => 'Name'
4839     : extends => 'S'
4840     {
4841    
4842     /*
4843     Value indicator
4844     */
4845     VI := ['='];
4846    
4847     /*
4848     Literal open
4849     */
4850     LIT := ['"'];
4851     LITA := [U+0027];
4852    
4853     /*
4854     Processing instruction close
4855 wakaba 1.16
4856     The |PIC|, i.e. |?>|, is split into two tokens |PIC1| and |PIC2|
4857     in this scanning mode to set |no_xml11_eol| flag in the
4858     |_XMLDeclaration_| |rule|.
4859 wakaba 1.3 */
4860 wakaba 1.16 PIC1 := ['?'];
4861     PIC2 := ['>'];
4862 wakaba 1.3 } // XMLDeclaration
4863 wakaba 1.16
4864     /*
4865     The XML Declaration or Processing Instruction Scanning Mode
4866    
4867     '<?xml' S ...
4868     (DocumentStart) (XMLDeclarationOrPI) (XMLDeclaration)
4869     '<?xml' '1' S ...
4870     (DocumentStart) (XMLDeclarationOrPI) (PINmtoken)(PIName) (PITarget)
4871     '<?xml' '-' 'stylesheet' S ...
4872     (DocumentStart) (XMLDeclarationOrPI) (PINmtoken) (PIName) (PITarget)
4873     */
4874     lexmode XMLDeclarationOrPI
4875     : standalone
4876     : extends => 'NameChar'
4877     : extends => 'S'
4878     {
4879     NameChar : value := $NameChar11;
4880     } // XMLDeclarationOrPI
4881 wakaba 1.3
4882 wakaba 1.1 lexmode StartTag
4883     : standalone
4884     : extends => 'Name'
4885     : extends => 'S'
4886     {
4887    
4888     /*
4889     Value indicator
4890     */
4891     VI := ['='];
4892    
4893     /*
4894     Literal open
4895     */
4896     LIT := ['"'];
4897     LITA := [U+0027];
4898    
4899     /*
4900     Tag close
4901     */
4902     TAGC := ['>'];
4903    
4904     /*
4905 wakaba 1.6 Null end-tag enabled start-tag close
4906 wakaba 1.1 */
4907 wakaba 1.6 NESTC := ['/'];
4908 wakaba 1.1 } // StartTag
4909    
4910     lexmode EndTag
4911     : standalone
4912     : extends => 'Name'
4913     : extends => 'S'
4914     {
4915     /*
4916     Tag close
4917     */
4918     TAGC := ['>'];
4919     } // EndTag
4920    
4921     lexmode AttributeValueLiteral_ {
4922     ERO := ['&'];
4923     CRO := ['&'] ['#'];
4924     HCRO := ['&'] ['#'] ['x'];
4925     } // AttributeValueLiteral_
4926    
4927     lexmode AttributeValueLiteral
4928     : standalone
4929     : extends => 'AttributeValueLiteral_'
4930     {
4931     LIT := ['"'];
4932 wakaba 1.3 STRING : value := [^'"' '&' '<']+;
4933 wakaba 1.1 } // AttributeValueLiteral
4934    
4935     lexmode AttributeValueLiteralA
4936     : standalone
4937     : extends => 'AttributeValueLiteral_'
4938     {
4939 wakaba 1.4 LITA := [U+0027];
4940 wakaba 1.3 STRING : value := [^U+0027 '&' '<']+;
4941 wakaba 1.1 } // AttributeValueLiteralA
4942 wakaba 1.11
4943     lexmode AttributeValueLiteralE
4944     : standalone
4945     : extends => 'AttributeValueLiteral_'
4946     {
4947     STRING : value := [^'&' '<']+;
4948     } // AttributeValueLiteralE
4949 wakaba 1.4
4950     lexmode EntityValue_ {
4951     PERO := ['%'];
4952     ERO := ['&'];
4953     CRO := ['&'] ['#'];
4954     HCRO := ['&'] ['#'] ['x'];
4955     } // EntityValue_
4956    
4957     lexmode EntityValue
4958     : standalone
4959     : extends => 'EntityValue_'
4960     {
4961     LIT := ['"'];
4962     STRING : value := [^'"' '&' '%']+;
4963     } // EntityValue
4964    
4965     lexmode EntityValueA
4966     : standalone
4967     : extends => 'EntityValue_'
4968     {
4969     LITA := [U+0027];
4970     STRING : value := [^U+0027 '&' '%']+;
4971     } // EntityValueA
4972    
4973     lexmode SystemLiteral
4974     : standalone
4975     {
4976     LIT := ['"'];
4977     ?default-token STRING : value;
4978     } // SystemLiteral
4979    
4980     lexmode SystemLiteralA
4981     : standalone
4982     {
4983     LITA := [U+0027];
4984     ?default-token STRING : value;
4985     } // SystemLiteralA
4986    
4987     lexmode DTD
4988     : standalone
4989     : extends => 'S'
4990     {
4991     /*
4992     Markup declaration open
4993     */
4994     MDO := ['<'] ['!'];
4995    
4996     /*
4997     Comment declaration open
4998     */
4999     CDO := ['<'] ['!'] ['-'] ['-'];
5000    
5001     /*
5002     Processing instruction open
5003     */
5004     PIO := ['<'] ['?'];
5005    
5006     /*
5007     Parameter entity reference open
5008     */
5009     PERO := ['%'];
5010    
5011     /*
5012     Declaration subset close
5013     */
5014     DSC := [']'];
5015    
5016     /*
5017     Contition section open
5018     */
5019     CSO := ['<'] ['!'] ['['];
5020     } // DTD
5021    
5022     /*
5023     Markup declaration scanning mode
5024    
5025     This mode is used to recognize |MDC| that terminates
5026     a comment declaration as well as the base |lexmode|
5027     for e.g. document type declaration scanning mode.
5028     */
5029     lexmode MarkupDeclaration
5030     : standalone
5031     : extends => 'Name'
5032     : extends => 'S'
5033     {
5034     /*
5035     Markup declaration close
5036     */
5037     MDC := ['>'];
5038    
5039     /*
5040     Literal open
5041     */
5042     LIT := ['"'];
5043    
5044     /*
5045     Alternative literal open
5046     */
5047     LITA := [U+0027];
5048    
5049     /*
5050     Parameter entity reference open
5051     */
5052     PERO := ['%'];
5053    
5054     /*
5055     Declaration subset open
5056     */
5057     DSO := ['['];
5058     } // MarkupDeclaration
5059    
5060     lexmode ElementDeclaration
5061     : standalone
5062     : extends => 'MarkupDeclaration'
5063     {
5064     /*
5065     Model group open
5066     */
5067     MGO := ['('];
5068    
5069     /*
5070     Model group close
5071     */
5072     MGC := [')'];
5073    
5074     /*
5075     Reserved name indicator
5076     */
5077     RNI := ['#'];
5078    
5079     /*
5080     Occurence indicators
5081     */
5082     OPT := ['?'];
5083     REP := ['*'];
5084     PLUS := ['+'];
5085    
5086     /*
5087     Connectors
5088     */
5089     OR := ['|'];
5090     SEQ := [','];
5091     } // ElementDeclaration
5092    
5093     lexmode AttlistDeclaration
5094     : standalone
5095     : extends => 'MarkupDeclaration'
5096     {
5097     /*
5098     Enumeration group open
5099     */
5100     EGO := ['('];
5101    
5102     /*
5103     Enumeration group close
5104     */
5105     EGC := [')'];
5106    
5107     /*
5108     Enumeration choice delimiter
5109     */
5110     OR := ['|'];
5111    
5112     /*
5113     Reserved name indicator
5114     */
5115     RNI := ['#'];
5116     } // AttlistDeclaration
5117    
5118     lexmode Enumeration
5119     : standalone
5120     : extends => 'Nmtoken'
5121     : extends => 'S'
5122     {
5123     /*
5124     Enumeration group close
5125     */
5126     EGC := [')'];
5127    
5128     /*
5129     Enumeration choice delimiter
5130     */
5131     OR := ['|'];
5132     } // Enumeration
5133    
5134 wakaba 1.1
5135     token-error default : default {
5136     lang:Perl {
5137 wakaba 1.3 my $location;
5138     __CODE{xp|get-location-from-token::
5139     $token => {$token},
5140     $result => {$location},
5141     }__;
5142     my $continue = __DOMCore:ERROR{xp|wf-syntax-error::
5143 wakaba 1.1 xp|error-token => {$token},
5144     DOMCore|location => {$location},
5145     }__;
5146     unless ($continue) {
5147 wakaba 1.27 __CODE{ParseError}__;
5148 wakaba 1.1 }
5149     }
5150     } // default
5151 wakaba 1.5
5152 wakaba 1.26 @ResourceDef:
5153     @@ForCheck: ManakaiDOM|ForClass
5154 wakaba 1.27 @@QName: ParseError
5155     @@rdf:type: DISPerl|BlockCode
5156     @@PerlDef:
5157     __DEEP{
5158     for (@{$self->{entity}}) {
5159     $_->{close_file}->();
5160     }
5161     }__;
5162     __EXCEPTION{DOMLS|PARSE_ERR}__;
5163    
5164     @ResourceDef:
5165     @@ForCheck: ManakaiDOM|ForClass
5166 wakaba 1.26 @@QName: checkNCName
5167     @@rdf:type: DISPerl|BlockCode
5168     @@PerlDef:
5169     if (($self->{xml_version} eq '1.0' and
5170     not <Code::DOMMain|testXML10Name:: $INPUT = $name>) or
5171     ($self->{xml_version} eq '1.1' and
5172     not <Code::DOMMain|testXML11Name:: $INPUT = $name>)) {
5173     my $__location;
5174     __CODE{xp|get-location-from-token::
5175     $token => {$token},
5176     $result => {$__location},
5177     }__;
5178     my $__continue = __c|ERROR{xp|wf-invalid-character-in-node-name::
5179     xp|error-token => {$token},
5180     c|location => {$__location},
5181     xp|name => {$name},
5182     infoset|version => {$self->{xml_version}},
5183     }__;
5184     unless ($__continue) {
5185 wakaba 1.27 __CODE{ParseError}__;
5186 wakaba 1.26 }
5187     } elsif (index ($name, ':') > -1) {
5188     my $__location;
5189     __CODE{xp|get-location-from-token::
5190     $token => {$token},
5191     $result => {$__location},
5192     }__;
5193     my $__continue = __c|ERROR{xp|nswf-legal-ncname::
5194     xp|error-token => {$token},
5195     c|location => {$__location},
5196     xp|name => {$name},
5197     infoset|version => {$self->{xml_version}},
5198     }__;
5199     unless ($__continue) {
5200 wakaba 1.27 __CODE{ParseError}__;
5201 wakaba 1.26 }
5202     }
5203    
5204     @ResourceDef:
5205     @@ForCheck: ManakaiDOM|ForClass
5206     @@QName: checkQName
5207     @@rdf:type: DISPerl|BlockCode
5208     @@PerlDef:
5209     if (($self->{xml_version} eq '1.0' and
5210     not <Code::DOMMain|testXML10Name:: $INPUT = $name>) or
5211     ($self->{xml_version} eq '1.1' and
5212     not <Code::DOMMain|testXML11Name:: $INPUT = $name>)) {
5213     my $__location;
5214     __CODE{xp|get-location-from-token::
5215     $token => {$token},
5216     $result => {$__location},
5217     }__;
5218     my $__continue = __c|ERROR{xp|wf-invalid-character-in-node-name::
5219     xp|error-token => {$token},
5220     c|location => {$__location},
5221     xp|name => {$name},
5222     infoset|version => {$self->{xml_version}},
5223     }__;
5224     unless ($__continue) {
5225 wakaba 1.27 __CODE{ParseError}__;
5226 wakaba 1.26 }
5227     } elsif (($self->{xml_version} eq '1.0' and
5228     not <Code::DOMMain|testXML10QName:: $INPUT = $name>) or
5229     ($self->{xml_version} eq '1.1' and
5230     not <Code::DOMMain|testXML11QName:: $INPUT = $name>)) {
5231     my $__location;
5232     __CODE{xp|get-location-from-token::
5233     $token => {$token},
5234     $result => {$__location},
5235     }__;
5236     my $__continue = __c|ERROR{xp|nswf-legal-qname::
5237     xp|error-token => {$token},
5238     c|location => {$__location},
5239     xp|name => {$name},
5240     infoset|version => {$self->{xml_version}},
5241     }__;
5242     unless ($__continue) {
5243 wakaba 1.27 __CODE{ParseError}__;
5244 wakaba 1.26 }
5245     }
5246    
5247    
5248 wakaba 1.5 @XMLTests:
5249     @@XMLTest:
5250 wakaba 1.15 @@@QName: xp.char.xml10.test
5251     @@@DEnt:
5252     @@@@test:value:
5253     <?xml version="1.0"?>
5254     <p>$u0009$u000A$u000D$u0020$uD7FF$uE000$uFFFD$U00010000$U0010FFFF</p>
5255     @@@test:domTree:
5256     document {
5257     xml-version: '1.0';
5258     element {
5259     text-content: U+0009 U+000A U+000A U+0020 U+D7FF
5260     U+E000 U+FFFD U+10000 U+10FFFF;
5261     }
5262     }
5263     @@XMLTest:
5264     @@@QName: xp.char.xml11.test
5265     @@@DEnt:
5266     @@@@test:value:
5267     <?xml version="1.1"?>
5268     <p>$u0009$u000A$u000D$u0020$uD7FF$uE000$uFFFD$U00010000$U0010FFFF</p>
5269     @@@test:domTree:
5270     document {
5271     xml-version: '1.1';
5272     element {
5273     text-content: U+0009 U+000A U+000A U+0020 U+D7FF
5274     U+E000 U+FFFD U+10000 U+10FFFF;
5275     }
5276     }
5277     @@XMLTest:
5278     @@@QName: xp.char.xml10.c0.test
5279     @@@DEnt:
5280     @@@@test:value:
5281     <?xml version="1.0"?>
5282     <p>$u0000$u0001$u0002$u0003$u0004$u0005$u0006$u0007$u0008$u000B$
5283     $u000C$u000E$u000F$u0010$u0011$u0012$u0013$u0014$u0015$u0016$
5284     $u0017$u0018$u0019$u001A$u001B$u001C$u001D$u001E$u001F</p>
5285     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 4); } /* U+0000 */
5286     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 5); } /* U+0001 */
5287     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 6); } /* U+0002 */
5288     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 7); } /* U+0003 */
5289     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 8); } /* U+0004 */
5290     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 9); } /* U+0005 */
5291     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 10); } /* U+0006 */
5292     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 11); } /* U+0007 */
5293     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 12); } /* U+0008 */
5294     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 13); } /* U+000B */
5295     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 14); } /* U+000C */
5296     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 15); } /* U+000E */
5297     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 16); } /* U+000F */
5298     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 17); } /* U+0010 */
5299     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 18); } /* U+0011 */
5300     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 19); } /* U+0012 */
5301     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 20); } /* U+0013 */
5302     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 21); } /* U+0014 */
5303     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 22); } /* U+0015 */
5304     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 23); } /* U+0016 */
5305     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 24); } /* U+0017 */
5306     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 25); } /* U+0018 */
5307     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 26); } /* U+0019 */
5308     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 27); } /* U+001A */
5309     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 28); } /* U+001B */
5310     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 29); } /* U+001C */
5311     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 30); } /* U+001D */
5312     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 31); } /* U+001E */
5313     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 32); } /* U+001F */
5314     @@XMLTest:
5315     @@@QName: xp.char.xml11.c0.test
5316     @@@DEnt:
5317     @@@@test:value:
5318     <?xml version="1.1"?>
5319     <p>$u0000$u0001$u0002$u0003$u0004$u0005$u0006$u0007$u0008$u000B$
5320     $u000C$u000E$u000F$u0010$u0011$u0012$u0013$u0014$u0015$u0016$
5321     $u0017$u0018$u0019$u001A$u001B$u001C$u001D$u001E$u001F</p>
5322     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 4); } /* U+0000 */
5323     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 5); } /* U+0001 */
5324     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 6); } /* U+0002 */
5325     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 7); } /* U+0003 */
5326     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 8); } /* U+0004 */
5327     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 9); } /* U+0005 */
5328     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 10); } /* U+0006 */
5329     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 11); } /* U+0007 */
5330     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 12); } /* U+0008 */
5331     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 13); } /* U+000B */
5332     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 14); } /* U+000C */
5333     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 15); } /* U+000E */
5334     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 16); } /* U+000F */
5335     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 17); } /* U+0010 */
5336     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 18); } /* U+0011 */
5337     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 19); } /* U+0012 */
5338     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 20); } /* U+0013 */
5339     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 21); } /* U+0014 */
5340     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 22); } /* U+0015 */
5341     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 23); } /* U+0016 */
5342     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 24); } /* U+0017 */
5343     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 25); } /* U+0018 */
5344     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 26); } /* U+0019 */
5345     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 27); } /* U+001A */
5346     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 28); } /* U+001B */
5347     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 29); } /* U+001C */
5348     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 30); } /* U+001D */
5349     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 31); } /* U+001E */
5350     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 32); } /* U+001F */
5351     @@XMLTest:
5352     @@@QName: xp.char.xml10.c1.test
5353     @@@DEnt:
5354     @@@@test:value:
5355     <?xml version="1.0"?>
5356     <p>$u007F$u0080$u0081$u0082$u0083$u0084$u0086$u0087$u0088$
5357     $u0089$u008A$u008B$u008C$
5358     $u008D$u008E$u008F$u0090$u0091$u0092$u0093$u0094$u0095$u0096$
5359     $u0097$u0098$u0099$u009A$u009B$u009C$u009D$u009E$u009F$u0085</p>
5360     @@@test:domTree:
5361     document {
5362     xml-version: '1.0';
5363     element {
5364     text-content: U+007F U+0080 U+0081 U+0082 U+0083 U+0084 U+0086
5365     U+0087 U+0088 U+0089 U+008A U+008B U+008C U+008D
5366     U+008E U+008F U+0090 U+0091 U+0092 U+0093 U+0094
5367     U+0095 U+0096 U+0097 U+0098 U+0099 U+009A U+009B
5368     U+009C U+009D U+009E U+009F U+0085;
5369     }
5370     }
5371     @@XMLTest:
5372     @@@QName: xp.char.xml11.c1.test
5373     @@@DEnt:
5374     @@@@test:value:
5375     <?xml version="1.1"?>
5376     <p>$u007F$u0080$u0081$u0082$u0083$u0084$u0086$u0087$u0088$
5377     $u0089$u008A$u008B$u008C$
5378     $u008D$u008E$u008F$u0090$u0091$u0092$u0093$u0094$u0095$u0096$
5379     $u0097$u0098$u0099$u009A$u009B$u009C$u009D$u009E$u009F$u0085</p>
5380     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 4); } /* U+007F */
5381     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 5); } /* U+0080 */
5382     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 6); } /* U+0081 */
5383     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 7); } /* U+0082 */
5384     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 8); } /* U+0083 */
5385     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 9); } /* U+0084 */
5386     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 10); } /* U+0086 */
5387     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 11); } /* U+0087 */
5388     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 12); } /* U+0088 */
5389     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 13); } /* U+0089 */
5390     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 14); } /* U+008A */
5391     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 15); } /* U+008B */
5392     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 16); } /* U+008C */
5393     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 17); } /* U+008D */
5394     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 18); } /* U+008E */
5395     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 19); } /* U+008F */
5396     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 20); } /* U+0090 */
5397     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 21); } /* U+0091 */
5398     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 22); } /* U+0092 */
5399     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 23); } /* U+0093 */
5400     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 24); } /* U+0094 */
5401     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 25); } /* U+0095 */
5402     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 26); } /* U+0096 */
5403     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 27); } /* U+0097 */
5404     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 28); } /* U+0098 */
5405     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 29); } /* U+0099 */
5406     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 30); } /* U+009A */
5407     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 31); } /* U+009B */
5408     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 32); } /* U+009C */
5409     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 33); } /* U+009D */
5410     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 34); } /* U+009E */
5411     @@@c:erred: <[[xp|wf-legal-literal-character]]> { (2, 35); } /* U+009F */
5412    
5413     @@XMLTest:
5414 wakaba 1.27 @@@QName: xp.c0.internal.entity.xml11.1.test
5415     @@@DEnt:
5416     @@@@test:value:
5417     <?xml version="1.1"?>
5418     <!DOCTYPE a [
5419     <!ENTITY e "&#x01;&#x02;&#x03;&#x04;&#x05;&#x06;&#x07;$
5420     &#x08;&#x09;&#x0A;&#x0B;&#x0C;&#x0D;&#x0E;&#x0F;$
5421     &#x10;&#x11;&#x12;&#x13;&#x14;&#x15;&#x16;&#x17;$
5422     &#x18;&#x19;&#x1A;&#x1B;&#x1C;&#x1D;&#x1E;&#x1F;">
5423     ]><a/>
5424 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
5425 wakaba 1.27 @@@test:domTree:
5426     document {
5427     document-type {
5428     general-entity {
5429     node-name: 'e';
5430     text-content: U+0001 U+0002 U+0003 U+0004 U+0005
5431     U+0006 U+0007 U+0008 U+0009 U+000A U+000B
5432     U+000C U+000D U+000E U+000F
5433     U+0010 U+0011 U+0012 U+0013 U+0014 U+0015
5434     U+0016 U+0017 U+0018 U+0019 U+001A U+001B
5435     U+001C U+001D U+001E U+001F;
5436     }
5437     }
5438     element { }
5439     }
5440     @@XMLTest:
5441     @@@QName: xp.c1.internal.entity.xml11.1.test
5442     @@@DEnt:
5443     @@@@test:value:
5444     <?xml version="1.1"?>
5445     <!DOCTYPE a [
5446     <!ENTITY e "&#x80;&#x81;&#x82;&#x83;&#x84;&#x85;&#x86;&#x87;$
5447     &#x88;&#x89;&#x8A;&#x8B;&#x8C;&#x8D;&#x8E;&#x8F;$
5448     &#x90;&#x91;&#x92;&#x93;&#x94;&#x95;&#x96;&#x97;$
5449     &#x98;&#x99;&#x9A;&#x9B;&#x9C;&#x9D;&#x9E;&#x9F;&#x7F;">
5450     ]><a/>
5451 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
5452 wakaba 1.27 @@@test:domTree:
5453     document {
5454     document-type {
5455     general-entity {
5456     node-name: 'e';
5457     text-content: U+0080 U+0081 U+0082 U+0083 U+0084 U+0085
5458     U+0086 U+0087 U+0088 U+0089 U+008A U+008B
5459     U+008C U+008D U+008E U+008F
5460     U+0090 U+0091 U+0092 U+0093 U+0094 U+0095
5461     U+0096 U+0097 U+0098 U+0099 U+009A U+009B
5462     U+009C U+009D U+009E U+009F U+007F;
5463     }
5464     }
5465     element { }
5466     }
5467    
5468     @@XMLTest:
5469 wakaba 1.12 @@@QName: xp.syntax.empty.test
5470     @@@DEnt:
5471     @@@@test:value: \
5472     @@@c:erred:
5473     <[[xp:wf-syntax-error]]> { (1, 1); }
5474     @@XMLTest:
5475     @@@QName: xp.syntax.space.test
5476     @@@DEnt:
5477 wakaba 1.13 @@@@test:value: \
5478 wakaba 1.12 @@@c:erred:
5479     <[[xp:wf-syntax-error]]> { (1, 4); }
5480     @@XMLTest:
5481     @@@QName: xp.syntax.newlines.test
5482     @@@DEnt:
5483     @@@@test:value:
5484     \
5485     \
5486     \
5487     @@@c:erred:
5488     <[[xp:wf-syntax-error]]> { (3, 1); }
5489    
5490     @@XMLTest:
5491 wakaba 1.6 @@@QName: xp.only.docel.test
5492 wakaba 1.5 @@@DEnt:
5493     @@@@test:value:
5494     <p></p>
5495     @@@test:domTree:
5496     document {
5497     xml-version: '1.0';
5498 wakaba 1.6 xml-encoding: null;
5499     xml-standalone: false;
5500     element {
5501     namespace-uri: null;
5502     prefix: null;
5503     local-name: 'p';
5504     text-content: '';
5505     }
5506     }
5507     @@XMLTest:
5508     @@@QName: xp.only.docel.emptyelemtag.test
5509     @@@DEnt:
5510     @@@@test:value:
5511     <p/>
5512     @@@test:domTree:
5513     document {
5514     xml-version: '1.0';
5515     xml-encoding: null;
5516     xml-standalone: false;
5517 wakaba 1.5 element {
5518     namespace-uri: null;
5519     prefix: null;
5520     local-name: 'p';
5521     text-content: '';
5522     }
5523     }
5524 wakaba 1.15 @@XMLTest:
5525     @@@QName: xp.root.s.1.test
5526     @@@DEnt:
5527     @@@@test:value:
5528     <?xml version="1.0"?>$u0020$u000D$u000A$u0009
5529     <p></p>
5530     @@@test:domTree:
5531     document {
5532     element { }
5533     }
5534    
5535     @@XMLTest:
5536     @@@QName: xp.Name.1.test
5537     @@@DEnt:
5538     @@@@test:value: <name/>
5539     @@@test:domTree:
5540     document {
5541     element {
5542     node-name: 'name';
5543     }
5544     }
5545     @@XMLTest:
5546     @@@QName: xp.Name.2.test
5547     @@@DEnt:
5548     @@@@test:value: <name0/>
5549     @@@test:domTree:
5550     document {
5551     element {
5552     node-name: 'name0';
5553     }
5554     }
5555     @@enImplNote:
5556     @@@ddid: xml11name
5557     @@@@:
5558     {TODO:: XML 1.1 Name tests required
5559     }
5560    
5561     @@XMLTest:
5562     @@@QName: xp.content.mse.1.test
5563     @@@DEnt:
5564     @@@@test:value:
5565     <p>]]></p>
5566     @@@c:erred:
5567     <[[xp|wf-syntax-error]]> { (1, 4)..(1, 6); }
5568     @@XMLTest:
5569     @@@QName: xp.content.mse.2.test
5570     @@@DEnt:
5571     @@@@test:value:
5572     <p>aaa]]>bbb</p>
5573     @@@c:erred:
5574     <[[xp|wf-syntax-error]]> { (1, 7)..(1, 9); }
5575    
5576     @@XMLTest:
5577     @@@QName: xp.root.comment.1.test
5578     @@@DEnt:
5579     @@@@test:value:
5580     <!--comment data-->
5581     <p/>
5582     @@@test:domTree:
5583     document {
5584     comment {
5585     data: 'comment data';
5586     }
5587     element { }
5588     }
5589     @@XMLTest:
5590     @@@QName: xp.root.comment.2.test
5591     @@@DEnt:
5592     @@@@test:value:
5593     <!---->
5594     <p/>
5595     @@@test:domTree:
5596     document {
5597     comment {
5598     data: '';
5599     }
5600     element { }
5601     }
5602     @@XMLTest:
5603     @@@QName: xp.root.after.pi.comment.1.test
5604     @@@DEnt:
5605     @@@@test:value:
5606     <?pi?>
5607     <!--comment data-->
5608     <p/>
5609     @@@test:domTree:
5610     document {
5611     pi { }
5612     comment {
5613     data: 'comment data';
5614     }
5615     element { }
5616     }
5617     @@XMLTest:
5618     @@@QName: xp.root.after.pi.comment.2.test
5619     @@@DEnt:
5620     @@@@test:value:
5621     <?pi?>
5622     <!---->
5623     <p/>
5624     @@@test:domTree:
5625     document {
5626     pi { }
5627     comment {
5628     data: '';
5629     }
5630     element { }
5631     }
5632     @@XMLTest:
5633     @@@QName: xp.root.after.element.comment.1.test
5634     @@@DEnt:
5635     @@@@test:value:
5636     <p/>
5637     <!--comment data-->
5638     @@@test:domTree:
5639     document {
5640     element { }
5641     comment {
5642     data: 'comment data';
5643     }
5644     }
5645     @@XMLTest:
5646     @@@QName: xp.root.after.element.comment.2.test
5647     @@@DEnt:
5648     @@@@test:value:
5649     <p/>
5650     <!---->
5651     @@@test:domTree:
5652     document {
5653     element { }
5654     comment {
5655     data: '';
5656     }
5657     }
5658     @@XMLTest:
5659     @@@QName: xp.doctype.intsubset.comment.1.test
5660     @@@DEnt:
5661     @@@@test:value:
5662     <!DOCTYPE a [
5663     <!--comment data-->
5664     ]>
5665     <p/>
5666     @@@test:domTree:
5667     document {
5668     document-type { }
5669     element { }
5670     }
5671     @@XMLTest:
5672     @@@QName: xp.doctype.intsubset.comment.2.test
5673     @@@DEnt:
5674     @@@@test:value:
5675     <!DOCTYPE a [
5676     <!---->
5677     ]>
5678     <p/>
5679     @@@test:domTree:
5680     document {
5681     document-type { }
5682     element { }
5683     }
5684     @@XMLTest:
5685     @@@QName: xp.doctype.intsubset.comment.3.test
5686     @@@DEnt:
5687     @@@@test:value:
5688     <!DOCTYPE a [
5689     <?pi?>
5690     <!---->
5691     ]>
5692     <p/>
5693     @@@test:domTree:
5694     document {
5695     document-type {
5696     pi { }
5697     }
5698     element { }
5699     }
5700     @@XMLTest:
5701     @@@QName: xp.content.comment.1.test
5702     @@@DEnt:
5703     @@@@test:value:
5704     <p><!--comment data--></p>
5705     @@@test:domTree:
5706     document {
5707     element {
5708     comment {
5709     data: 'comment data';
5710     }
5711     }
5712     }
5713     @@XMLTest:
5714     @@@QName: xp.content.comment.2.test
5715     @@@DEnt:
5716     @@@@test:value:
5717     <p><!----></p>
5718     @@@test:domTree:
5719     document {
5720     element {
5721     comment {
5722     data: '';
5723     }
5724     }
5725     }
5726     @@XMLTest:
5727     @@@QName: xp.content.comment.3.test
5728     @@@DEnt:
5729     @@@@test:value:
5730     <p>aaaaa<!---->bbbbb</p>
5731     @@@test:domTree:
5732     document {
5733     element {
5734     text {
5735     data: 'aaaaa';
5736     }
5737     comment {
5738     data: '';
5739     }
5740     text {
5741     data: 'bbbbb';
5742     }
5743     }
5744     }
5745     @@XMLTest:
5746     @@@QName: xp.content.comment.--.1.test
5747     @@@DEnt:
5748     @@@@test:value:
5749     <p><!--data--data--></p>
5750     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 12)..(1, 17); }
5751     @@XMLTest:
5752     @@@QName: xp.content.comment.---gt.test
5753     @@@DEnt:
5754     @@@@test:value:
5755     <p><!--data---></p>
5756     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 12)..(1, 15); }
5757 wakaba 1.13
5758     @@XMLTest:
5759     @@@QName: xp.xmldecl.version.1.0.test
5760     @@@DEnt:
5761     @@@@test:value:
5762     <?xml version="1.0"?>
5763     <p></p>
5764     @@@test:domTree:
5765     document {
5766     xml-version: '1.0';
5767     xml-encoding: null;
5768     xml-standalone: false;
5769     element { }
5770     }
5771     @@XMLTest:
5772     @@@QName: xp.xmldecl.version.1.0.lita.test
5773     @@@DEnt:
5774     @@@@test:value:
5775     <?xml version='1.0'?>
5776     <p></p>
5777     @@@test:domTree:
5778     document {
5779     xml-version: '1.0';
5780     xml-encoding: null;
5781     xml-standalone: false;
5782     element { }
5783     }
5784     @@XMLTest:
5785     @@@QName: xp.xmldecl.version.1.0.s.test
5786     @@@DEnt:
5787     @@@@test:value:
5788     <?xml version = "1.0" ?>
5789     <p></p>
5790     @@@test:domTree:
5791     document {
5792     xml-version: '1.0';
5793     xml-encoding: null;
5794     xml-standalone: false;
5795     element { }
5796     }
5797     @@XMLTest:
5798     @@@QName: xp.xmldecl.version.1.1.test
5799     @@@DEnt:
5800     @@@@test:value:
5801     <?xml version="1.1"?>
5802     <p></p>
5803     @@@test:domTree:
5804     document {
5805     xml-version: '1.1';
5806     xml-encoding: null;
5807     xml-standalone: false;
5808     element { }
5809     }
5810    
5811     @@XMLTest:
5812     @@@QName: xp.xmldecl.version.1.0.encoding.usascii.test
5813     @@@DEnt:
5814     @@@@test:value:
5815     <?xml version="1.0" encoding="US-ascii"?>
5816     <p></p>
5817     @@@test:domTree:
5818     document {
5819     xml-version: '1.0';
5820     xml-encoding: 'US-ascii';
5821     xml-standalone: false;
5822     element { }
5823     }
5824     @@XMLTest:
5825     @@@QName: xp.xmldecl.version.1.0.encoding.usascii.lita.test
5826     @@@DEnt:
5827     @@@@test:value:
5828     <?xml version="1.0" encoding='US-ascii'?>
5829     <p></p>
5830     @@@test:domTree:
5831     document {
5832     xml-version: '1.0';
5833     xml-encoding: 'US-ascii';
5834     xml-standalone: false;
5835     element { }
5836     }
5837     @@XMLTest:
5838     @@@QName: xp.xmldecl.version.1.0.encoding.usascii.s.test
5839     @@@DEnt:
5840     @@@@test:value:
5841     <?xml version="1.0" encoding = "US-ascii" ?>
5842     <p></p>
5843     @@@test:domTree:
5844     document {
5845     xml-version: '1.0';
5846     xml-encoding: 'US-ascii';
5847     xml-standalone: false;
5848     element { }
5849     }
5850    
5851     @@XMLTest:
5852     @@@QName: xp.xmldecl.version.1.0.encoding.usascii.standalone.yes.test
5853     @@@DEnt:
5854     @@@@test:value:
5855     <?xml version="1.0" encoding="us-ascii" standalone="yes"?>
5856     <p></p>
5857     @@@test:domTree:
5858     document {
5859     xml-version: '1.0';
5860     xml-encoding: 'us-ascii';
5861     xml-standalone: true;
5862     element { }
5863     }
5864     @@XMLTest:
5865     @@@QName: xp.xmldecl.version.1.0.encoding.usascii.standalone.no.test
5866     @@@DEnt:
5867     @@@@test:value:
5868     <?xml version="1.0" encoding="us-ascii" standalone="no"?>
5869     <p></p>
5870     @@@test:domTree:
5871     document {
5872     xml-version: '1.0';
5873     xml-encoding: 'us-ascii';
5874     xml-standalone: false;
5875     element { }
5876     }
5877     @@XMLTest:
5878     @@@QName: xp.xmldecl.version.1.0.encoding.usascii.standalone.yes.lita.test
5879     @@@DEnt:
5880     @@@@test:value:
5881     <?xml version="1.0" encoding="us-ascii" standalone='yes'?>
5882     <p></p>
5883     @@@test:domTree:
5884     document {
5885     xml-version: '1.0';
5886     xml-encoding: 'us-ascii';
5887     xml-standalone: true;
5888     element { }
5889     }
5890     @@XMLTest:
5891     @@@QName: xp.xmldecl.version.1.0.encoding.usascii.standalone.yes.s.test
5892     @@@DEnt:
5893     @@@@test:value:
5894     <?xml version="1.0" encoding="us-ascii" standalone = "yes" ?>
5895     <p></p>
5896     @@@test:domTree:
5897     document {
5898     xml-version: '1.0';
5899     xml-encoding: 'us-ascii';
5900     xml-standalone: true;
5901     element { }
5902     }
5903 wakaba 1.14 @@XMLTest:
5904     @@@QName: xp.xmldecl.no.encoding.but.standalone.attr.test
5905     @@@DEnt:
5906     @@@@test:value:
5907     <?xml version="1.0" standalone="yes"?>
5908     <p></p>
5909     @@@test:domTree:
5910     document {
5911     xml-version: '1.0';
5912     xml-encoding: null;
5913     xml-standalone: true;
5914     element { }
5915     }
5916     @@XMLTest:
5917     @@@QName: xp.xmldecl.encoding.encname.test
5918     @@@DEnt:
5919     @@@@test:value:
5920     <?xml version="1.0" encoding="a-._01-"?>
5921     <p></p>
5922     @@@test:domTree:
5923     document {
5924     xml-version: '1.0';
5925     xml-encoding: 'a-._01-';
5926     xml-standalone: false;
5927     element { }
5928     }
5929    
5930     @@XMLTest:
5931     @@@QName: xp.xmldecl.no.s.no.attr.test
5932     @@@DEnt:
5933     @@@@test:value:
5934     <?xml?>
5935     <p></p>
5936     @@@c:erred:
5937 wakaba 1.16 <[[xp:wf-syntax-error]]> { (1, 1)..(1, 7); }
5938 wakaba 1.14 @@XMLTest:
5939     @@@QName: xp.xmldecl.s.no.attr.test
5940     @@@DEnt:
5941     @@@@test:value:
5942     <?xml ?>
5943     <p></p>
5944     @@@c:erred:
5945     <[[xp:wf-syntax-error]]> { (1, 8)..(1, 9); }
5946     @@XMLTest:
5947     @@@QName: xp.xmldecl.unknown.attr.test
5948     @@@DEnt:
5949     @@@@test:value:
5950     <?xml unknown="value"?>
5951     <p></p>
5952     @@@c:erred:
5953     <[[xp:wf-syntax-error]]> { (1, 8)..(1, 22); }
5954     @@XMLTest:
5955     @@@QName: xp.xmldecl.version.unknown.attr.test
5956     @@@DEnt:
5957     @@@@test:value:
5958     <?xml version="1.0" unknown="value"?>
5959     <p></p>
5960     @@@c:erred:
5961     <[[xp:wf-syntax-error]]> { (1, 21)..(1, 35); }
5962     @@XMLTest:
5963     @@@QName: xp.xmldecl.version.encoding.unknown.attr.test
5964     @@@DEnt:
5965     @@@@test:value:
5966     <?xml version="1.0" encoding="us-ascii" unknown="value"?>
5967     <p></p>
5968     @@@c:erred:
5969     <[[xp:wf-syntax-error]]> { (1, 41)..(1, 55); }
5970     @@XMLTest:
5971     @@@QName: xp.xmldecl.version.encoding.standalone.unknown.attr.test
5972     @@@DEnt:
5973     @@@@test:value:
5974     <?xml version="1.0" encoding="us-ascii" standalone="yes"
5975     unknown="value"?>
5976     <p></p>
5977     @@@c:erred:
5978     <[[xp:wf-syntax-error]]> { (2, 1)..(2, 15); }
5979     @@XMLTest:
5980     @@@QName: xp.xmldecl.no.version.but.encoding.attr.test
5981     @@@DEnt:
5982     @@@@test:value:
5983     <?xml encoding="us-ascii"?>
5984     <p></p>
5985     @@@c:erred:
5986     <[[xp:wf-syntax-error]]> { (1, 7)..(1, 25); }
5987     @@XMLTest:
5988     @@@QName: xp.xmldecl.no.version.but.standalone.attr.test
5989     @@@DEnt:
5990     @@@@test:value:
5991     <?xml standalone="yes"?>
5992     <p></p>
5993     @@@c:erred:
5994     <[[xp:wf-syntax-error]]> { (1, 7)..(1, 24); }
5995     @@XMLTest:
5996     @@@QName: xp.xmldecl.version.unsupported.test
5997     @@@DEnt:
5998     @@@@test:value:
5999     <?xml version="1.2"?>
6000     <p></p>
6001     @@@c:erred:
6002     <[[xp:wf-unsupported-xml-version]]> { (1, 7)..(1, 19); }
6003     @@XMLTest:
6004     @@@QName: xp.xmldecl.version.unsupported.2.test
6005     @@@DEnt:
6006     @@@@test:value:
6007     <?xml version=" 1.0 "?>
6008     <p></p>
6009     @@@c:erred:
6010     <[[xp:wf-unsupported-xml-version]]> { (1, 7)..(1, 21); }
6011     @@XMLTest:
6012     @@@QName: xp.xmldecl.version.unsupported.3.test
6013     @@@DEnt:
6014     @@@@test:value:
6015     <?xml version="01.00"?>
6016     <p></p>
6017     @@@c:erred:
6018     <[[xp:wf-unsupported-xml-version]]> { (1, 7)..(1, 21); }
6019     @@XMLTest:
6020     @@@QName: xp.xmldecl.encoding.malformed.1.test
6021     @@@DEnt:
6022     @@@@test:value:
6023     <?xml version="1.0" encoding="0088"?>
6024     <p></p>
6025     @@@c:erred:
6026     <[[xp:wf-malformed-enc-name]]> { (1, 21)..(1, 35); }
6027     @@XMLTest:
6028     @@@QName: xp.xmldecl.encoding.malformed.2.test
6029     @@@DEnt:
6030     @@@@test:value:
6031     <?xml version="1.0" encoding="D.V.D!"?>
6032     <p></p>
6033     @@@c:erred:
6034     <[[xp:wf-malformed-enc-name]]> { (1, 21)..(1, 38); }
6035     @@XMLTest:
6036     @@@QName: xp.xmldecl.standalone.malformed.1.test
6037     @@@DEnt:
6038     @@@@test:value:
6039     <?xml version="1.0" standalone="true"?>
6040     <p></p>
6041     @@@c:erred:
6042     <[[xp:wf-malformed-xml-standalone]]> { (1, 21)..(1, 38); }
6043     @@XMLTest:
6044     @@@QName: xp.xmldecl.standalone.malformed.2.test
6045     @@@DEnt:
6046     @@@@test:value:
6047     <?xml version="1.0" standalone="YES"?>
6048     <p></p>
6049     @@@c:erred:
6050     <[[xp:wf-malformed-xml-standalone]]> { (1, 21)..(1, 37); }
6051     @@XMLTest:
6052     @@@QName: xp.xmldecl.standalone.malformed.3.test
6053     @@@DEnt:
6054     @@@@test:value:
6055     <?xml version="1.0" standalone="no "?>
6056     <p></p>
6057     @@@c:erred:
6058     <[[xp:wf-malformed-xml-standalone]]> { (1, 21)..(1, 38); }
6059 wakaba 1.6
6060     @@XMLTest:
6061 wakaba 1.14 @@@QName: xp.no-xmldecl.xml...-pi.test
6062     @@@DEnt:
6063     @@@@test:value:
6064     <?xmldeclaration?>
6065     <a></a>
6066     @@@test:domTree:
6067     document {
6068     pi {
6069     node-name: 'xmldeclaration';
6070     node-value: '';
6071     }
6072     element { }
6073     }
6074     @@XMLTest:
6075     @@@QName: xp.no-xmldecl.xml...-pi.after.document.element.test
6076     @@@DEnt:
6077     @@@@test:value:
6078     <a></a>
6079     <?xmldeclaration?>
6080     @@@test:domTree:
6081     document {
6082     element { }
6083     pi {
6084     node-name: 'xmldeclaration';
6085     node-value: '';
6086     }
6087     }
6088     @@XMLTest:
6089     @@@QName: xp.no-xmldecl.xml...-pi.in.document.element.test
6090     @@@DEnt:
6091     @@@@test:value:
6092     <a>
6093     <?xmldeclaration?>
6094     </a>
6095     @@@test:domTree:
6096     document {
6097     element {
6098     text { }
6099     pi {
6100     node-name: 'xmldeclaration';
6101     node-value: '';
6102     }
6103     text { }
6104     }
6105     }
6106     @@XMLTest:
6107     @@@QName: xp.no-xmldecl.xml...-pi.in.doctype.test
6108     @@@DEnt:
6109     @@@@test:value:
6110     <!DOCTYPE a [
6111     <?xmldeclaration?>
6112     ]>
6113     <a></a>
6114     @@@test:domTree:
6115     document {
6116     document-type {
6117     pi {
6118     node-name: 'xmldeclaration';
6119     node-value: '';
6120     }
6121     }
6122     element { }
6123     }
6124    
6125     @@XMLTest:
6126     @@@QName: xp.XMLdecl.test
6127     @@@DEnt:
6128     @@@@test:value:
6129     <?XML version="1.0"?>
6130     <p></p>
6131     @@@c:erred:
6132     <[[xp:wf-pi-target-is-xml]]> { (1, 1)..(1, 5); }
6133     @@XMLTest:
6134     @@@QName: xp.Xmldecl.test
6135     @@@DEnt:
6136     @@@@test:value:
6137     <?Xml version="1.0"?>
6138     <p></p>
6139     @@@c:erred:
6140     <[[xp:wf-pi-target-is-xml]]> { (1, 1)..(1, 5); }
6141     @@XMLTest:
6142     @@@QName: xp.xmldecl.after.document.element.empty.test
6143     @@@DEnt:
6144     @@@@test:value:
6145     <p></p>
6146     <?xml?>
6147     @@@c:erred:
6148     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6149     @@XMLTest:
6150     @@@QName: xp.xmldecl.after.document.element.test
6151     @@@DEnt:
6152     @@@@test:value:
6153     <p></p>
6154     <?xml version="1.0"?>
6155     @@@c:erred:
6156     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6157     @@XMLTest:
6158     @@@QName: xp.xmldecl.in.element.empty.test
6159     @@@DEnt:
6160     @@@@test:value:
6161     <p>
6162     <?xml?>
6163     </p>
6164     @@@c:erred:
6165     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6166     @@XMLTest:
6167     @@@QName: xp.xmldecl.in.element.test
6168     @@@DEnt:
6169     @@@@test:value:
6170     <p>
6171     <?xml version="1.0"?>
6172     </p>
6173     @@@c:erred:
6174     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6175     @@XMLTest:
6176     @@@QName: xp.xmldecl.after.comment.test
6177     @@@DEnt:
6178     @@@@test:value:
6179     <!---->
6180     <?xml version="1.0"?>
6181     <p></p>
6182     @@@c:erred:
6183     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6184     @@XMLTest:
6185     @@@QName: xp.xmldecl.after.comment.empty.test
6186     @@@DEnt:
6187     @@@@test:value:
6188     <!---->
6189     <?xml?>
6190     <p></p>
6191     @@@c:erred:
6192     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6193     @@XMLTest:
6194     @@@QName: xp.xmldecl.after.pi.test
6195     @@@DEnt:
6196     @@@@test:value:
6197     <?xml-declaration?>
6198     <?xml version="1.0"?>
6199     <p></p>
6200     @@@c:erred:
6201     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6202     @@XMLTest:
6203     @@@QName: xp.xmldecl.after.pi.empty.test
6204     @@@DEnt:
6205     @@@@test:value:
6206     <?xml-declaration?>
6207     <?xml?>
6208     <p></p>
6209     @@@c:erred:
6210     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6211     @@XMLTest:
6212 wakaba 1.16 @@@QName: xp.xmldecl.after.pi.2.test
6213     @@@DEnt:
6214     @@@@test:value:
6215     <?declaration?>
6216     <?xml version="1.0"?>
6217     <p></p>
6218     @@@c:erred:
6219     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6220     @@XMLTest:
6221     @@@QName: xp.xmldecl.after.pi.empty.2.test
6222     @@@DEnt:
6223     @@@@test:value:
6224     <?declaration?>
6225     <?xml?>
6226     <p></p>
6227     @@@c:erred:
6228     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6229     @@XMLTest:
6230 wakaba 1.14 @@@QName: xp.xmldecl.after.doctype.test
6231     @@@DEnt:
6232     @@@@test:value:
6233     <!DOCTYPE a>
6234     <?xml version="1.0"?>
6235     <p></p>
6236     @@@c:erred:
6237     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6238     @@XMLTest:
6239     @@@QName: xp.xmldecl.after.doctype.empty.test
6240     @@@DEnt:
6241     @@@@test:value:
6242     <!DOCTYPE a>
6243     <?xml?>
6244     <p></p>
6245     @@@c:erred:
6246     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6247     @@XMLTest:
6248     @@@QName: xp.xmldecl.in.doctype.test
6249     @@@DEnt:
6250     @@@@test:value:
6251     <!DOCTYPE a [
6252     <?xml version="1.0"?>
6253     ]>
6254     <p></p>
6255     @@@c:erred:
6256     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6257     @@XMLTest:
6258     @@@QName: xp.xmldecl.in.doctype.empty.test
6259     @@@DEnt:
6260     @@@@test:value:
6261     <!DOCTYPE a [
6262     <?xml?>
6263     ]>
6264     <p></p>
6265     @@@c:erred:
6266     <[[xp:wf-pi-target-is-xml]]> { (2, 1)..(2, 5); }
6267    
6268     @@XMLTest:
6269     @@@QName: xp.pi.before.element.empty.test
6270     @@@DEnt:
6271     @@@@test:value:
6272     <?target?>
6273     <a></a>
6274     @@@test:domTree:
6275     document {
6276     pi {
6277     node-name: 'target';
6278     node-value: '';
6279     }
6280     element { }
6281     }
6282     @@XMLTest:
6283     @@@QName: xp.pi.before.element.s.test
6284     @@@DEnt:
6285     @@@@test:value:
6286     <?target ?>
6287     <a></a>
6288     @@@test:domTree:
6289     document {
6290     pi {
6291     node-name: 'target';
6292     node-value: '';
6293     }
6294     element { }
6295     }
6296     @@XMLTest:
6297     @@@QName: xp.pi.before.element.string.test
6298     @@@DEnt:
6299     @@@@test:value:
6300     <?target string?>
6301     <a></a>
6302     @@@test:domTree:
6303     document {
6304     pi {
6305     node-name: 'target';
6306     node-value: 'string';
6307     }
6308     element { }
6309     }
6310     @@XMLTest:
6311     @@@QName: xp.pi.before.element.string.s.test
6312     @@@DEnt:
6313     @@@@test:value:
6314     <?target string ?>
6315     <a></a>
6316     @@@test:domTree:
6317     document {
6318     pi {
6319     node-name: 'target';
6320     node-value: 'string ';
6321     }
6322     element { }
6323     }
6324     @@XMLTest:
6325     @@@QName: xp.pi.before.element.gt.test
6326     @@@DEnt:
6327     @@@@test:value:
6328     <?target string>string?>
6329     <a></a>
6330     @@@test:domTree:
6331     document {
6332     pi {
6333     node-name: 'target';
6334     node-value: 'string>string';
6335     }
6336     element { }
6337     }
6338     @@XMLTest:
6339     @@@QName: xp.pi.doctype.empty.test
6340     @@@DEnt:
6341     @@@@test:value:
6342     <!DOCTYPE a [
6343     <?target?>
6344     ]>
6345     <a></a>
6346     @@@test:domTree:
6347     document {
6348     document-type {
6349     pi {
6350     node-name: 'target';
6351     node-value: '';
6352     }
6353     }
6354     element { }
6355     }
6356    
6357     @@XMLTest:
6358     @@@QName: xp.pi.no.target.test
6359     @@@DEnt:
6360     @@@@test:value:
6361     <??>
6362     <p></p>
6363     @@@c:erred:
6364     <[[xp:wf-syntax-error]]> { (1, 3)..(1, 4); }
6365     @@XMLTest:
6366     @@@QName: xp.pi.no.target.2.test
6367     @@@DEnt:
6368     @@@@test:value:
6369     <? ?>
6370     <p></p>
6371     @@@c:erred:
6372     <[[xp:wf-syntax-error]]> { (1, 3)..(1, 4); }
6373     @@XMLTest:
6374     @@@QName: xp.pi.bad.target.1.test
6375     @@@DEnt:
6376     @@@@test:value:
6377     <?target! ?>
6378     <p></p>
6379     @@@c:erred:
6380     <[[xp:wf-syntax-error]]> { (1, 9)..(1, 9); }
6381     @@XMLTest:
6382     @@@QName: xp.pi.bad.target.2.test
6383     @@@DEnt:
6384     @@@@test:value:
6385     <?0target ?>
6386     <p></p>
6387     @@@c:erred:
6388     <[[xp:wf-syntax-error]]> { (1, 3)..(1, 3); }
6389    
6390     @@XMLTest:
6391 wakaba 1.15 @@@QName: xp.cdatasection.empty.1.test
6392     @@@DEnt:
6393     @@@@test:value:
6394     <p><![CDATA[]]></p>
6395     @@@test:domTree:
6396     document {
6397     element {
6398     cdata-section {
6399     data: '';
6400     }
6401     }
6402     }
6403     @@XMLTest:
6404     @@@QName: xp.cdatasection.empty.2.test
6405     @@@DEnt:
6406     @@@@test:value:
6407     <p>aa<![CDATA[]]>bb</p>
6408     @@@test:domTree:
6409     document {
6410     element {
6411     text { data: 'aa'; }
6412     cdata-section {
6413     data: '';
6414     }
6415     text { data: 'bb'; }
6416     }
6417     }
6418     @@XMLTest:
6419     @@@QName: xp.cdatasection.1.test
6420     @@@DEnt:
6421     @@@@test:value:
6422     <p><![CDATA[abcdefg]]></p>
6423     @@@test:domTree:
6424     document {
6425     element {
6426     cdata-section {
6427     data: 'abcdefg';
6428     }
6429     }
6430     }
6431     @@XMLTest:
6432     @@@QName: xp.cdatasection.2.test
6433     @@@DEnt:
6434     @@@@test:value:
6435     <p>aa<![CDATA[abcdefg]]>bb</p>
6436     @@@test:domTree:
6437     document {
6438     element {
6439     text { data: 'aa'; }
6440     cdata-section {
6441     data: 'abcdefg';
6442     }
6443     text { data: 'bb'; }
6444     }
6445     }
6446     @@XMLTest:
6447     @@@QName: xp.cdatasection.ref.1.test
6448     @@@DEnt:
6449     @@@@test:value:
6450     <p><![CDATA[a&amp;&#x32;&#32;%abc;&def;]]&gt;b]]></p>
6451     @@@test:domTree:
6452     document {
6453     element {
6454     cdata-section {
6455     data: 'a&amp;&#x32;&#32;%abc;&def;]]&gt;b';
6456     }
6457     }
6458     }
6459     @@XMLTest:
6460     @@@QName: xp.cdatasection.in.general.entity.test
6461     @@@DEnt:
6462     @@@@test:value:
6463     <!DOCTYPE p [
6464     <!ENTITY cdata "<![CDATA[text]]>">
6465     ]>
6466     <p>&cdata;</p>
6467 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
6468 wakaba 1.15 @@@test:domTree:
6469     document {
6470     document-type {
6471     general-entity {
6472     node-name: 'cdata';
6473     cdata-section {
6474     data: 'text';
6475     }
6476     }
6477     }
6478     element {
6479     general-entity-reference {
6480 wakaba 1.23 node-name: 'cdata';
6481 wakaba 1.34 manakai-expanded: true;
6482 wakaba 1.15 cdata-section {
6483     data: 'text';
6484     }
6485     }
6486     }
6487     }
6488     @@XMLTest:
6489     @@@QName: xp.cdatasection.no.mse.test
6490     @@@DEnt:
6491     @@@@test:value:
6492     <p><![CDATA[text</p>
6493     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 21); }
6494     @@XMLTest:
6495     @@@QName: xp.cdatasection.nest.test
6496     @@@DEnt:
6497     @@@@test:value:
6498     <p><![CDATA[text01<![CDATA[txt2]]>text3]]></p>
6499     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 40)..(1, 42); }
6500    
6501     @@XMLTest:
6502 wakaba 1.6 @@@QName: xp.doctype.empty.test
6503     @@@DEnt:
6504     @@@@test:value:
6505     <!DOCTYPE a>
6506     <a></a>
6507     @@@test:domTree:
6508     document {
6509     xml-version: '1.0';
6510     xml-encoding: null;
6511     xml-standalone: false;
6512     document-type {
6513     node-name: 'a';
6514 wakaba 1.17 public-id: null;
6515     system-id: null;
6516 wakaba 1.6 }
6517     element {
6518     namespace-uri: null;
6519     prefix: null;
6520     local-name: 'a';
6521     text-content: '';
6522     }
6523     }
6524 wakaba 1.15 @@XMLTest:
6525     @@@QName: xp.doctype.empty.after.document.element.test
6526     @@@DEnt:
6527     @@@@test:value:
6528     <a></a>
6529     <!DOCTYPE a>
6530     @@@c:erred: <[[xp|wf-syntax-error]]> { (2, 1)..(2, 12); }
6531     @@XMLTest:
6532     @@@QName: xp.doctype.empty.in.element.test
6533     @@@DEnt:
6534     @@@@test:value:
6535     <a>
6536     <!DOCTYPE a>
6537     </a>
6538     @@@c:erred: <[[xp|wf-syntax-error]]> { (2, 1)..(2, 12); }
6539     @@XMLTest:
6540     @@@QName: xp.doctype.empty.dup.test
6541     @@@DEnt:
6542     @@@@test:value:
6543     <!DOCTYPE a>
6544     <!DOCTYPE a>
6545     <a></a>
6546     @@@c:erred: <[[xp|wf-syntax-error]]> { (2, 1)..(2, 12); }
6547     @@XMLTest:
6548     @@@QName: xp.doctype.empty.in.intsubset.test
6549     @@@DEnt:
6550     @@@@test:value:
6551     <!DOCTYPE a [
6552     <!DOCTYPE a>
6553     ]>
6554     <a></a>
6555     @@@c:erred: <[[xp|wf-syntax-error]]> { (2, 1)..(2, 12); }
6556 wakaba 1.16 @@XMLTest:
6557     @@@QName: xp.doctype.no.s.no.name.test
6558     @@@DEnt:
6559     @@@@test:value:
6560     <!DOCTYPE>
6561     <a></a>
6562     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 10); }
6563     @@XMLTest:
6564     @@@QName: xp.doctype.no.name.test
6565     @@@DEnt:
6566     @@@@test:value:
6567     <!DOCTYPE >
6568     <a></a>
6569     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 11); }
6570     @@XMLTest:
6571     @@@QName: xp.doctype.name.s.test
6572     @@@DEnt:
6573     @@@@test:value:
6574     <!DOCTYPE aa >
6575     <aa></aa>
6576     @@@test:domTree:
6577     document {
6578     document-type {
6579     node-name: 'aa';
6580 wakaba 1.17 public-id: null;
6581     system-id: null;
6582 wakaba 1.16 }
6583     element { }
6584     }
6585     @@XMLTest:
6586     @@@QName: xp.doctype.no.mdc.test
6587     @@@DEnt:
6588     @@@@test:value:
6589     <!DOCTYPE aa
6590     <aa></aa>
6591     @@@c:erred: <[[xp|wf-syntax-error]]> { (2, 1); }
6592 wakaba 1.6
6593     @@XMLTest:
6594 wakaba 1.16 @@@QName: xp.doctype.intsubset.empty.1.test
6595 wakaba 1.6 @@@DEnt:
6596     @@@@test:value:
6597 wakaba 1.16 <!DOCTYPE a []>
6598 wakaba 1.6 <a></a>
6599     @@@test:domTree:
6600     document {
6601     xml-version: '1.0';
6602     xml-encoding: null;
6603     xml-standalone: false;
6604     document-type {
6605     node-name: 'a';
6606 wakaba 1.17 public-id: null;
6607     system-id: null;
6608 wakaba 1.6 }
6609     element {
6610     namespace-uri: null;
6611     prefix: null;
6612     local-name: 'a';
6613     text-content: '';
6614     }
6615     }
6616     @@XMLTest:
6617 wakaba 1.16 @@@QName: xp.doctype.intsubset.empty.2.test
6618 wakaba 1.6 @@@DEnt:
6619     @@@@test:value:
6620     <!DOCTYPE a [
6621 wakaba 1.16
6622 wakaba 1.6 ]>
6623     <a></a>
6624     @@@test:domTree:
6625     document {
6626     xml-version: '1.0';
6627     xml-encoding: null;
6628     xml-standalone: false;
6629     document-type {
6630     node-name: 'a';
6631 wakaba 1.17 public-id: null;
6632     system-id: null;
6633 wakaba 1.6 }
6634     element {
6635     namespace-uri: null;
6636     prefix: null;
6637     local-name: 'a';
6638     text-content: '';
6639     }
6640     }
6641     @@XMLTest:
6642 wakaba 1.16 @@@QName: xp.doctype.intsubset.empty.3.test
6643 wakaba 1.6 @@@DEnt:
6644     @@@@test:value:
6645 wakaba 1.16 <!DOCTYPE a[]>
6646 wakaba 1.6 <a></a>
6647     @@@test:domTree:
6648     document {
6649     document-type {
6650     node-name: 'a';
6651 wakaba 1.17 public-id: null;
6652     system-id: null;
6653 wakaba 1.6 }
6654 wakaba 1.16 element { }
6655     }
6656     @@XMLTest:
6657     @@@QName: xp.doctype.intsubset.empty.4.test
6658     @@@DEnt:
6659     @@@@test:value:
6660     <!DOCTYPE a[] >
6661     <a></a>
6662     @@@test:domTree:
6663     document {
6664     document-type {
6665     node-name: 'a';
6666 wakaba 1.17 public-id: null;
6667     system-id: null;
6668 wakaba 1.6 }
6669 wakaba 1.16 element { }
6670 wakaba 1.6 }
6671     @@XMLTest:
6672 wakaba 1.16 @@@QName: xp.doctype.intsubset.no.dsc.1.test
6673     @@@DEnt:
6674     @@@@test:value:
6675     <!DOCTYPE a [>
6676     <a></a>
6677     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 14); }
6678     @@XMLTest:
6679     @@@QName: xp.doctype.intsubset.no.dsc.2.test
6680 wakaba 1.6 @@@DEnt:
6681     @@@@test:value:
6682     <!DOCTYPE a [
6683     <a></a>
6684 wakaba 1.16 @@@c:erred: <[[xp|wf-syntax-error]]> { (2, 1); }
6685     @@XMLTest:
6686     @@@QName: xp.doctype.intsubset.no.dsc.3.test
6687     @@@DEnt:
6688     @@@@test:value:
6689     <!DOCTYPE a [
6690     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 14); }
6691     @@XMLTest:
6692     @@@QName: xp.doctype.intsubset.no.mdc.1.test
6693     @@@DEnt:
6694     @@@@test:value:
6695     <!DOCTYPE a []
6696     <a/>
6697     @@@c:erred: <[[xp|wf-syntax-error]]> { (2, 1); }
6698     @@XMLTest:
6699     @@@QName: xp.doctype.intsubset.no.mdc.2.test
6700     @@@DEnt:
6701     @@@@test:value:
6702     <!DOCTYPE a []]>
6703     <a/>
6704     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 15); }
6705 wakaba 1.17 @@XMLTest:
6706     @@@QName: xp.doctype.pubid.sysid.1.test
6707     @@@DEnt:
6708     @@@@test:value:
6709     <!DOCTYPE a PUBLIC "pubid" "sysid">
6710     <a/>
6711     @@@test:domTree:
6712     document {
6713     document-type {
6714     node-name: 'a';
6715     public-id: 'pubid';
6716     system-id: 'sysid';
6717     }
6718     element { }
6719     }
6720     @@XMLTest:
6721     @@@QName: xp.doctype.pubid.sysid.2.test
6722     @@@DEnt:
6723     @@@@test:value:
6724     <!DOCTYPE a PUBLIC 'pubid' "sysid">
6725     <a/>
6726     @@@test:domTree:
6727     document {
6728     document-type {
6729     node-name: 'a';
6730     public-id: 'pubid';
6731     system-id: 'sysid';
6732     }
6733     element { }
6734     }
6735     @@XMLTest:
6736     @@@QName: xp.doctype.pubid.sysid.3.test
6737     @@@DEnt:
6738     @@@@test:value:
6739     <!DOCTYPE a PUBLIC "pubid" 'sysid'>
6740     <a/>
6741     @@@test:domTree:
6742     document {
6743     document-type {
6744     node-name: 'a';
6745     public-id: 'pubid';
6746     system-id: 'sysid';
6747     }
6748     element { }
6749     }
6750     @@XMLTest:
6751     @@@QName: xp.doctype.pubid.sysid.4.test
6752     @@@DEnt:
6753     @@@@test:value:
6754     <!DOCTYPE a PUBLIC 'pubid' 'sysid'>
6755     <a/>
6756     @@@test:domTree:
6757     document {
6758     document-type {
6759     node-name: 'a';
6760     public-id: 'pubid';
6761     system-id: 'sysid';
6762     }
6763     element { }
6764     }
6765     @@XMLTest:
6766     @@@QName: xp.doctype.pubid.sysid.5.test
6767     @@@DEnt:
6768     @@@@test:value:
6769     <!DOCTYPE a PUBLIC "pubid" "sysid" >
6770     <a/>
6771     @@@test:domTree:
6772     document {
6773     document-type {
6774     node-name: 'a';
6775     public-id: 'pubid';
6776     system-id: 'sysid';
6777     }
6778     element { }
6779     }
6780     @@XMLTest:
6781     @@@QName: xp.doctype.pubid.sysid.6.test
6782     @@@DEnt:
6783     @@@@test:value:
6784     <!DOCTYPE a PUBLIC 'pubid' 'sysid' >
6785     <a/>
6786     @@@test:domTree:
6787     document {
6788     document-type {
6789     node-name: 'a';
6790     public-id: 'pubid';
6791     system-id: 'sysid';
6792     }
6793     element { }
6794     }
6795     @@XMLTest:
6796     @@@QName: xp.doctype.pubid.sysid.intsubset.1.test
6797     @@@DEnt:
6798     @@@@test:value:
6799     <!DOCTYPE a PUBLIC "pubid" "sysid"[]>
6800     <a/>
6801     @@@test:domTree:
6802     document {
6803     document-type {
6804     node-name: 'a';
6805     public-id: 'pubid';
6806     system-id: 'sysid';
6807     }
6808     element { }
6809     }
6810     @@XMLTest:
6811     @@@QName: xp.doctype.pubid.sysid.intsubset.2.test
6812     @@@DEnt:
6813     @@@@test:value:
6814     <!DOCTYPE a PUBLIC "pubid" "sysid" []>
6815     <a/>
6816     @@@test:domTree:
6817     document {
6818     document-type {
6819     node-name: 'a';
6820     public-id: 'pubid';
6821     system-id: 'sysid';
6822     }
6823     element { }
6824     }
6825     @@XMLTest:
6826     @@@QName: xp.doctype.pubid.sysid.intsubset.3.test
6827     @@@DEnt:
6828     @@@@test:value:
6829     <!DOCTYPE a PUBLIC 'pubid' 'sysid'[]>
6830     <a/>
6831     @@@test:domTree:
6832     document {
6833     document-type {
6834     node-name: 'a';
6835     public-id: 'pubid';
6836     system-id: 'sysid';
6837     }
6838     element { }
6839     }
6840     @@XMLTest:
6841     @@@QName: xp.doctype.pubid.sysid.intsubset.4.test
6842     @@@DEnt:
6843     @@@@test:value:
6844     <!DOCTYPE a PUBLIC 'pubid' 'sysid' []>
6845     <a/>
6846     @@@test:domTree:
6847     document {
6848     document-type {
6849     node-name: 'a';
6850     public-id: 'pubid';
6851     system-id: 'sysid';
6852     }
6853     element { }
6854     }
6855     @@XMLTest:
6856     @@@QName: xp.doctype.sysid.1.test
6857     @@@DEnt:
6858     @@@@test:value:
6859     <!DOCTYPE a SYSTEM "sysid">
6860     <a/>
6861     @@@test:domTree:
6862     document {
6863     document-type {
6864     node-name: 'a';
6865     public-id: null;
6866     system-id: 'sysid';
6867     }
6868     element { }
6869     }
6870     @@XMLTest:
6871     @@@QName: xp.doctype.sysid.2.test
6872     @@@DEnt:
6873     @@@@test:value:
6874     <!DOCTYPE a SYSTEM 'sysid'>
6875     <a/>
6876     @@@test:domTree:
6877     document {
6878     document-type {
6879     node-name: 'a';
6880     public-id: null;
6881     system-id: 'sysid';
6882     }
6883     element { }
6884     }
6885     @@XMLTest:
6886     @@@QName: xp.doctype.sysid.3.test
6887     @@@DEnt:
6888     @@@@test:value:
6889     <!DOCTYPE a SYSTEM "sysid" >
6890     <a/>
6891     @@@test:domTree:
6892     document {
6893     document-type {
6894     node-name: 'a';
6895     public-id: null;
6896     system-id: 'sysid';
6897     }
6898     element { }
6899     }
6900     @@XMLTest:
6901     @@@QName: xp.doctype.sysid.4.test
6902     @@@DEnt:
6903     @@@@test:value:
6904     <!DOCTYPE a SYSTEM 'sysid' >
6905     <a/>
6906     @@@test:domTree:
6907     document {
6908     document-type {
6909     node-name: 'a';
6910     public-id: null;
6911     system-id: 'sysid';
6912     }
6913     element { }
6914     }
6915     @@XMLTest:
6916     @@@QName: xp.doctype.sysid.intsubset.1.test
6917     @@@DEnt:
6918     @@@@test:value:
6919     <!DOCTYPE a SYSTEM "sysid"[]>
6920     <a/>
6921     @@@test:domTree:
6922     document {
6923     document-type {
6924     node-name: 'a';
6925     public-id: null;
6926     system-id: 'sysid';
6927     }
6928     element { }
6929     }
6930     @@XMLTest:
6931     @@@QName: xp.doctype.sysid.intsubset.2.test
6932     @@@DEnt:
6933     @@@@test:value:
6934     <!DOCTYPE a SYSTEM "sysid" []>
6935     <a/>
6936     @@@test:domTree:
6937     document {
6938     document-type {
6939     node-name: 'a';
6940     public-id: null;
6941     system-id: 'sysid';
6942     }
6943     element { }
6944     }
6945     @@XMLTest:
6946     @@@QName: xp.doctype.sysid.intsubset.3.test
6947     @@@DEnt:
6948     @@@@test:value:
6949     <!DOCTYPE a SYSTEM 'sysid'[]>
6950     <a/>
6951     @@@test:domTree:
6952     document {
6953     document-type {
6954     node-name: 'a';
6955     public-id: null;
6956     system-id: 'sysid';
6957     }
6958     element { }
6959     }
6960     @@XMLTest:
6961     @@@QName: xp.doctype.sysid.intsubset.4.test
6962     @@@DEnt:
6963     @@@@test:value:
6964     <!DOCTYPE a SYSTEM 'sysid' []>
6965     <a/>
6966     @@@test:domTree:
6967     document {
6968     document-type {
6969     node-name: 'a';
6970     public-id: null;
6971     system-id: 'sysid';
6972     }
6973     element { }
6974     }
6975     @@XMLTest:
6976     @@@QName: xp.doctype.public.stago.test
6977     @@@DEnt:
6978     @@@@test:value:
6979     <!DOCTYPE a PUBLIC<a/>
6980     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 19); }
6981     @@XMLTest:
6982     @@@QName: xp.doctype.public.mdc.test
6983     @@@DEnt:
6984     @@@@test:value:
6985     <!DOCTYPE a PUBLIC>
6986     <a/>
6987     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 19); }
6988     @@XMLTest:
6989     @@@QName: xp.doctype.public.s.stago.test
6990     @@@DEnt:
6991     @@@@test:value:
6992     <!DOCTYPE a PUBLIC <a/>
6993     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 20); }
6994     @@XMLTest:
6995     @@@QName: xp.doctype.public.s.mdc.test
6996     @@@DEnt:
6997     @@@@test:value:
6998     <!DOCTYPE a PUBLIC >
6999     <a/>
7000     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 20); }
7001     @@XMLTest:
7002     @@@QName: xp.doctype.public.lit.test
7003     @@@DEnt:
7004     @@@@test:value:
7005     <!DOCTYPE a PUBLIC"p" "s">
7006     <a/>
7007     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 19); }
7008     @@XMLTest:
7009     @@@QName: xp.doctype.public.lita.test
7010     @@@DEnt:
7011     @@@@test:value:
7012     <!DOCTYPE a PUBLIC'p' "s">
7013     <a/>
7014     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 19); }
7015     @@XMLTest:
7016     @@@QName: xp.doctype.pubid.lit.lita.unmatched.1.test
7017     @@@DEnt:
7018     @@@@test:value:
7019     <!DOCTYPE a PUBLIC "p' "s">
7020     <a/>
7021     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 25); }
7022     @@XMLTest:
7023     @@@QName: xp.doctype.pubid.lit.lita.unmatched.2.test
7024     @@@DEnt:
7025     @@@@test:value:
7026     <!DOCTYPE a PUBLIC "p' 's'><a/>
7027     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 32); }
7028     @@XMLTest:
7029     @@@QName: xp.doctype.pubid.lita.lit.unmatched.1.test
7030     @@@DEnt:
7031     @@@@test:value:
7032     <!DOCTYPE a PUBLIC 'p" "s"><a/>
7033     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 32); }
7034     @@XMLTest:
7035     @@@QName: xp.doctype.pubid.lita.lit.unmatched.2.test
7036     @@@DEnt:
7037     @@@@test:value:
7038     <!DOCTYPE a PUBLIC 'p" 's'>
7039     <a/>
7040     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 21)..(1, 25); }
7041     @@XMLTest:
7042     @@@QName: xp.doctype.public.s.lit.mdc.test
7043     @@@DEnt:
7044     @@@@test:value:
7045     <!DOCTYPE a PUBLIC "><a/>
7046     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 26); }
7047     @@XMLTest:
7048     @@@QName: xp.doctype.public.s.lita.mdc.test
7049     @@@DEnt:
7050     @@@@test:value:
7051     <!DOCTYPE a PUBLIC '><a/>
7052     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 26); }
7053     @@XMLTest:
7054     @@@QName: xp.doctype.public.lit.pubid.lit.mdc.test
7055     @@@DEnt:
7056     @@@@test:value:
7057     <!DOCTYPE a PUBLIC "p">
7058     <a/>
7059     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 23); }
7060     @@XMLTest:
7061     @@@QName: xp.doctype.public.lita.pubid.lita.mdc.test
7062     @@@DEnt:
7063     @@@@test:value:
7064     <!DOCTYPE a PUBLIC 'p'>
7065     <a/>
7066     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 23); }
7067     @@XMLTest:
7068     @@@QName: xp.doctype.public.lit.pubid.lit.s.mdc.test
7069     @@@DEnt:
7070     @@@@test:value:
7071     <!DOCTYPE a PUBLIC "p" >
7072     <a/>
7073     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 24); }
7074     @@XMLTest:
7075     @@@QName: xp.doctype.public.lita.pubid.lita.s.mdc.test
7076     @@@DEnt:
7077     @@@@test:value:
7078     <!DOCTYPE a PUBLIC 'p' >
7079     <a/>
7080     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 24); }
7081     @@XMLTest:
7082     @@@QName: xp.doctype.public.lit.pubid.lit.s.lit.mdc.test
7083     @@@DEnt:
7084     @@@@test:value:
7085     <!DOCTYPE a PUBLIC "p" "><a/>
7086     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 30); }
7087     @@XMLTest:
7088     @@@QName: xp.doctype.public.lit.pubid.lit.s.lita.mdc.test
7089     @@@DEnt:
7090     @@@@test:value:
7091     <!DOCTYPE a PUBLIC "p" '><a/>
7092     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 30); }
7093     @@XMLTest:
7094     @@@QName: xp.doctype.public.lita.pubid.lita.s.lit.mdc.test
7095     @@@DEnt:
7096     @@@@test:value:
7097     <!DOCTYPE a PUBLIC 'p' "><a/>
7098     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 30); }
7099     @@XMLTest:
7100     @@@QName: xp.doctype.public.lita.pubid.lita.s.lita.mdc.test
7101     @@@DEnt:
7102     @@@@test:value:
7103     <!DOCTYPE a PUBLIC 'p' '><a/>
7104     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 30); }
7105     @@XMLTest:
7106     @@@QName: xp.doctype.public.lit.pubid.lit.lit.lita.unmatched.mdc.test
7107     @@@DEnt:
7108     @@@@test:value:
7109     <!DOCTYPE a PUBLIC "p" "s'><a/>
7110     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 32); }
7111     @@XMLTest:
7112     @@@QName: xp.doctype.public.lita.pubid.lita.lita.lit.unmatched.mdc.test
7113     @@@DEnt:
7114     @@@@test:value:
7115     <!DOCTYPE a PUBLIC 'p' 's"><a/>
7116     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 32); }
7117     @@XMLTest:
7118     @@@QName: xp.doctype.pubid.sysid.stago.1.test
7119     @@@DEnt:
7120     @@@@test:value:
7121     <!DOCTYPE a PUBLIC "p" "s"<a/>
7122     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 27); }
7123     @@XMLTest:
7124     @@@QName: xp.doctype.pubid.sysid.stago.2.test
7125     @@@DEnt:
7126     @@@@test:value:
7127     <!DOCTYPE a PUBLIC "p" 's'<a/>
7128     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 27); }
7129     @@XMLTest:
7130     @@@QName: xp.doctype.pubid.sysid.stago.s.1.test
7131     @@@DEnt:
7132     @@@@test:value:
7133     <!DOCTYPE a PUBLIC "p" "s" <a/>
7134     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 28); }
7135     @@XMLTest:
7136     @@@QName: xp.doctype.pubid.sysid.stago.s.2.test
7137     @@@DEnt:
7138     @@@@test:value:
7139     <!DOCTYPE a PUBLIC "p" 's' <a/>
7140     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 28); }
7141 wakaba 1.16
7142     @@XMLTest:
7143     @@@QName: xp.endofline.1.0.crlf.test
7144     @@@DEnt:
7145     @@@@test:value:
7146     <?xml version="1.0"?>
7147     <p>aaa$u000D$u000Abbb</p>
7148 wakaba 1.6 @@@test:domTree:
7149     document {
7150     xml-version: '1.0';
7151 wakaba 1.16 element {
7152     text-content: 'aaa' U+000A 'bbb';
7153 wakaba 1.6 }
7154 wakaba 1.16 }
7155     @@XMLTest:
7156     @@@QName: xp.endofline.1.1.crlf.test
7157     @@@DEnt:
7158     @@@@test:value:
7159     <?xml version="1.1"?>
7160     <p>aaa$u000D$u000Abbb</p>
7161     @@@test:domTree:
7162     document {
7163     xml-version: '1.1';
7164 wakaba 1.6 element {
7165 wakaba 1.16 text-content: 'aaa' U+000A 'bbb';
7166 wakaba 1.6 }
7167     }
7168     @@XMLTest:
7169 wakaba 1.16 @@@QName: xp.endofline.1.0.crnl.test
7170 wakaba 1.6 @@@DEnt:
7171     @@@@test:value:
7172 wakaba 1.16 <?xml version="1.0"?>
7173     <p>aaa$u000D$u0085bbb</p>
7174 wakaba 1.6 @@@test:domTree:
7175     document {
7176     xml-version: '1.0';
7177 wakaba 1.16 element {
7178     text-content: 'aaa' U+000A U+0085 'bbb';
7179 wakaba 1.6 }
7180 wakaba 1.16 }
7181     @@XMLTest:
7182     @@@QName: xp.endofline.1.1.crnl.test
7183     @@@DEnt:
7184     @@@@test:value:
7185     <?xml version="1.1"?>
7186     <p>aaa$u000D$u0085bbb</p>
7187     @@@test:domTree:
7188     document {
7189     xml-version: '1.1';
7190 wakaba 1.6 element {
7191 wakaba 1.16 text-content: 'aaa' U+000A 'bbb';
7192 wakaba 1.6 }
7193     }
7194     @@XMLTest:
7195 wakaba 1.16 @@@QName: xp.endofline.1.0.nl.test
7196 wakaba 1.6 @@@DEnt:
7197     @@@@test:value:
7198 wakaba 1.16 <?xml version="1.0"?>
7199     <p>aaa$u0085bbb</p>
7200 wakaba 1.6 @@@test:domTree:
7201     document {
7202     xml-version: '1.0';
7203     element {
7204 wakaba 1.16 text-content: 'aaa' U+0085 'bbb';
7205 wakaba 1.6 }
7206     }
7207     @@XMLTest:
7208 wakaba 1.16 @@@QName: xp.endofline.1.1.nl.test
7209 wakaba 1.6 @@@DEnt:
7210     @@@@test:value:
7211 wakaba 1.16 <?xml version="1.1"?>
7212     <p>aaa$u0085bbb</p>
7213     @@@test:domTree:
7214     document {
7215     xml-version: '1.1';
7216     element {
7217     text-content: 'aaa' U+000A 'bbb';
7218     }
7219     }
7220     @@XMLTest:
7221     @@@QName: xp.endofline.1.0.ls.test
7222     @@@DEnt:
7223     @@@@test:value:
7224     <?xml version="1.0"?>
7225     <p>aaa$u2028bbb</p>
7226     @@@test:domTree:
7227     document {
7228     xml-version: '1.0';
7229     element {
7230     text-content: 'aaa' U+2028 'bbb';
7231     }
7232     }
7233     @@XMLTest:
7234     @@@QName: xp.endofline.1.1.ls.test
7235     @@@DEnt:
7236     @@@@test:value:
7237     <?xml version="1.1"?>
7238     <p>aaa$u2028bbb</p>
7239     @@@test:domTree:
7240     document {
7241     xml-version: '1.1';
7242     element {
7243     text-content: 'aaa' U+000A 'bbb';
7244     }
7245     }
7246     @@XMLTest:
7247     @@@QName: xp.endofline.1.0.cr.test
7248     @@@DEnt:
7249     @@@@test:value:
7250     <?xml version="1.0"?>
7251     <p>aaa$u000Dbbb</p>
7252     @@@test:domTree:
7253     document {
7254     xml-version: '1.0';
7255     element {
7256     text-content: 'aaa' U+000A 'bbb';
7257     }
7258     }
7259     @@XMLTest:
7260     @@@QName: xp.endofline.1.1.cr.test
7261     @@@DEnt:
7262     @@@@test:value:
7263     <?xml version="1.1"?>
7264     <p>aaa$u000Dbbb</p>
7265     @@@test:domTree:
7266     document {
7267     xml-version: '1.1';
7268     element {
7269     text-content: 'aaa' U+000A 'bbb';
7270     }
7271     }
7272     @@XMLTest:
7273     @@@QName: xp.endofline.1.0.lf.test
7274     @@@DEnt:
7275     @@@@test:value:
7276     <?xml version="1.0"?>
7277     <p>aaa$u000Abbb</p>
7278     @@@test:domTree:
7279     document {
7280     xml-version: '1.0';
7281     element {
7282     text-content: 'aaa' U+000A 'bbb';
7283     }
7284     }
7285     @@XMLTest:
7286     @@@QName: xp.endofline.1.1.lf.test
7287     @@@DEnt:
7288     @@@@test:value:
7289     <?xml version="1.1"?>
7290     <p>aaa$u000Abbb</p>
7291     @@@test:domTree:
7292     document {
7293     xml-version: '1.1';
7294     element {
7295     text-content: 'aaa' U+000A 'bbb';
7296     }
7297     }
7298     @@XMLTest:
7299     @@@QName: xp.xml10.endofline.nl.in.xmldecl.1.test
7300     @@@DEnt:
7301     @@@@test:value:
7302     <?xml$u0085version="1.0"?>
7303     <p/>
7304     @@@c:erred:
7305     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 6)..(2, 0); }
7306     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7307     @@XMLTest:
7308     @@@QName: xp.xml11.endofline.nl.in.xmldecl.1.test
7309     @@@DEnt:
7310     @@@@test:value:
7311     <?xml$u0085version="1.1"?>
7312     (err)<p/>
7313     @@@c:erred:
7314     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 6)..(2, 0); }
7315     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7316     @@XMLTest:
7317     @@@QName: xp.xml10.endofline.crnl.in.xmldecl.1.test
7318     @@@DEnt:
7319     @@@@test:value:
7320     <?xml$u000D$u0085version="1.0"?>
7321     <p/>
7322     @@@c:erred:
7323     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 6)..(2, 0); }
7324     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7325     @@XMLTest:
7326     @@@QName: xp.xml11.endofline.crnl.in.xmldecl.1.test
7327     @@@DEnt:
7328     @@@@test:value:
7329     <?xml$u000D$u0085version="1.1"?>
7330     (err)<p/>
7331     @@@c:erred:
7332     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 6)..(2, 0); }
7333     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7334     @@XMLTest:
7335     @@@QName: xp.xml10.endofline.ls.in.xmldecl.1.test
7336     @@@DEnt:
7337     @@@@test:value:
7338     <?xml$u2028version="1.0"?>
7339     <p/>
7340     @@@c:erred:
7341     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 6)..(2, 0); }
7342     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7343     @@XMLTest:
7344     @@@QName: xp.xml11.endofline.ls.in.xmldecl.1.test
7345     @@@DEnt:
7346     @@@@test:value:
7347     <?xml$u2028version="1.1"?>
7348     (err)<p/>
7349     @@@c:erred:
7350     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 6)..(2, 0); }
7351     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7352     @@XMLTest:
7353     @@@QName: xp.xml10.endofline.nl.in.xmldecl.2.test
7354     @@@DEnt:
7355     @@@@test:value:
7356     <?xml version="1.0"$u0085?>
7357     <p/>
7358     @@@c:erred:
7359     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 20)..(2, 0); }
7360     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7361     @@XMLTest:
7362     @@@QName: xp.xml11.endofline.nl.in.xmldecl.2.test
7363     @@@DEnt:
7364     @@@@test:value:
7365     <?xml version="1.1"$u0085?>
7366     (err)<p/>
7367     @@@c:erred:
7368     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 20)..(2, 0); }
7369     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7370     @@XMLTest:
7371     @@@QName: xp.xml10.endofline.crnl.in.xmldecl.2.test
7372     @@@DEnt:
7373     @@@@test:value:
7374     <?xml version="1.0"$u000D$u0085?>
7375     <p/>
7376     @@@c:erred:
7377     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 20)..(2, 0); }
7378     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7379     @@XMLTest:
7380     @@@QName: xp.xml11.endofline.crnl.in.xmldecl.2.test
7381     @@@DEnt:
7382     @@@@test:value:
7383     <?xml version="1.1"$u000D$u0085?>
7384     (err)<p/>
7385     @@@c:erred:
7386     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 20)..(2, 0); }
7387     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7388     @@XMLTest:
7389     @@@QName: xp.xml10.endofline.ls.in.xmldecl.2.test
7390     @@@DEnt:
7391     @@@@test:value:
7392     <?xml version="1.0"$u2028?>
7393     <p/>
7394     @@@c:erred:
7395     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 20)..(2, 0); }
7396     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7397     @@XMLTest:
7398     @@@QName: xp.xml11.endofline.ls.in.xmldecl.2.test
7399     @@@DEnt:
7400     @@@@test:value:
7401     <?xml version="1.1"$u2028?>
7402     (err)<p/>
7403     @@@c:erred:
7404     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 20)..(2, 0); }
7405     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7406     @@XMLTest:
7407     @@@QName: xp.xml10.endofline.nl.in.xmldecl.3.test
7408     @@@DEnt:
7409     @@@@test:value:
7410     <?xml $u0085version="1.0"?>
7411     <p/>
7412     @@@c:erred:
7413     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 7)..(2, 0); }
7414     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7415     @@XMLTest:
7416     @@@QName: xp.xml11.endofline.nl.in.xmldecl.3.test
7417     @@@DEnt:
7418     @@@@test:value:
7419     <?xml $u0085version="1.1"?>
7420     (err)<p/>
7421     @@@c:erred:
7422     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 7)..(2, 0); }
7423     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7424     @@XMLTest:
7425     @@@QName: xp.xml10.endofline.crnl.in.xmldecl.3.test
7426     @@@DEnt:
7427     @@@@test:value:
7428     <?xml $u000D$u0085version="1.0"?>
7429     <p/>
7430     @@@c:erred:
7431     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 7)..(2, 0); }
7432     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7433     @@XMLTest:
7434     @@@QName: xp.xml11.endofline.crnl.in.xmldecl.3.test
7435     @@@DEnt:
7436     @@@@test:value:
7437     <?xml $u000D$u0085version="1.1"?>
7438     (err)<p/>
7439     @@@c:erred:
7440     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 7)..(2, 0); }
7441     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7442     @@XMLTest:
7443     @@@QName: xp.xml10.endofline.ls.in.xmldecl.3.test
7444     @@@DEnt:
7445     @@@@test:value:
7446     <?xml $u2028version="1.0"?>
7447     <p/>
7448     @@@c:erred:
7449     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 7)..(2, 0); }
7450     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7451     @@XMLTest:
7452     @@@QName: xp.xml11.endofline.ls.in.xmldecl.3.test
7453     @@@DEnt:
7454     @@@@test:value:
7455     <?xml $u2028version="1.1"?>
7456     (err)<p/>
7457     @@@c:erred:
7458     <[[xp|fatal-xml11-end-of-line-in-xml-declaration]]> { (1, 7)..(2, 0); }
7459     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7460     @@XMLTest:
7461     @@@QName: xp.xml10implied.endofline.nl.in.pi.1.test
7462     @@@DEnt:
7463     @@@@test:value:
7464     <?xml-$u0085?>
7465     <p/>
7466     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 7)..(2, 0); }
7467     @@XMLTest:
7468     @@@QName: xp.xml10.endofline.nl.in.pi.1.test
7469     @@@DEnt:
7470     @@@@test:value:
7471     <?xml version="1.0"?>
7472     <?xml-$u0085?>
7473     <p/>
7474     @@@c:erred: <[[xp|wf-syntax-error]]> { (2, 7)..(3, 0); }
7475     @@XMLTest:
7476     @@@QName: xp.xml11.endofline.nl.in.pi.1.test
7477     @@@DEnt:
7478     @@@@test:value:
7479     <?xml version="1.1"?>
7480     <?xml-$u0085?>
7481     <p/>
7482     @@@test:domTree:
7483     document {
7484     xml-version: '1.1';
7485     pi {
7486     node-name: 'xml-';
7487     node-value: '';
7488     }
7489     element { }
7490     }
7491     @@XMLTest:
7492     @@@QName: xp.xml10implied.endofline.crnl.in.pi.1.test
7493     @@@DEnt:
7494     @@@@test:value:
7495     <?xml-$u000D$u0085?>
7496     <p/>
7497     @@@test:domTree:
7498     document {
7499     xml-version: '1.0';
7500     pi {
7501     node-name: 'xml-';
7502     node-value: U+0085;
7503     }
7504     element { }
7505     }
7506     @@XMLTest:
7507     @@@QName: xp.xml10.endofline.crnl.in.pi.1.test
7508     @@@DEnt:
7509     @@@@test:value:
7510     <?xml version="1.0"?>
7511     <?xml-$u000D$u0085?>
7512     <p/>
7513     @@@test:domTree:
7514     document {
7515     xml-version: '1.0';
7516     pi {
7517     node-name: 'xml-';
7518     node-value: U+0085;
7519     }
7520     element { }
7521     }
7522     @@XMLTest:
7523     @@@QName: xp.xml11.endofline.crnl.in.pi.1.test
7524     @@@DEnt:
7525     @@@@test:value:
7526     <?xml version="1.1"?>
7527     <?xml-$u000D$u0085?>
7528     <p/>
7529     @@@test:domTree:
7530     document {
7531     xml-version: '1.1';
7532     pi {
7533     node-name: 'xml-';
7534     node-value: '';
7535     }
7536     element { }
7537     }
7538     @@XMLTest:
7539     @@@QName: xp.xml10implied.endofline.ls.in.pi.1.test
7540     @@@DEnt:
7541     @@@@test:value:
7542     <?xml-$u2028?>
7543     <p/>
7544     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 7)..(2, 0); }
7545     @@XMLTest:
7546     @@@QName: xp.xml10.endofline.ls.in.pi.1.test
7547     @@@DEnt:
7548     @@@@test:value:
7549     <?xml version="1.0"?>
7550     <?xml-$u2028?>
7551     <p/>
7552     @@@c:erred: <[[xp|wf-syntax-error]]> { (2, 7)..(3, 0); }
7553     @@XMLTest:
7554     @@@QName: xp.xml11.endofline.ls.in.pi.1.test
7555     @@@DEnt:
7556     @@@@test:value:
7557     <?xml version="1.1"?>
7558     <?xml-$u2028?>
7559     <p/>
7560     @@@test:domTree:
7561     document {
7562     xml-version: '1.1';
7563     pi {
7564     node-name: 'xml-';
7565     node-value: '';
7566     }
7567     element { }
7568     }
7569 wakaba 1.27
7570     @@XMLTest:
7571     @@@QName: xp.xml10.endofline.internal.1.test
7572     @@@DEnt:
7573     @@@@test:value:
7574     <?xml version="1.0"?>
7575     <!DOCTYPE a [
7576     <!ENTITY e "&#x000D; &#x000A; &#x0085; &#x000D;&#x000A; $
7577     &#x000D;&#x0085; &#x2028;">
7578     ]><a>&e;</a>
7579 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
7580 wakaba 1.27 @@@test:domTree:
7581     document {
7582     xml-version: '1.0';
7583     document-type {
7584     general-entity {
7585     node-name: 'e';
7586     text-content: U+000D ' ' U+000A ' ' U+0085 ' '
7587     U+000D U+000A ' ' U+000D U+0085 ' ' U+2028;
7588     }
7589     }
7590     element {
7591     text-content: U+000D ' ' U+000A ' ' U+0085 ' '
7592     U+000D U+000A ' ' U+000D U+0085 ' ' U+2028;
7593     }
7594     }
7595     @@XMLTest:
7596     @@@QName: xp.xml11.endofline.internal.1.test
7597     @@@DEnt:
7598     @@@@test:value:
7599     <?xml version="1.1"?>
7600     <!DOCTYPE a [
7601     <!ENTITY e "&#x000D; &#x000A; &#x0085; &#x000D;&#x000A; $
7602     &#x000D;&#x0085; &#x2028;">
7603     ]><a>&e;</a>
7604 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
7605 wakaba 1.27 @@@test:domTree:
7606     document {
7607     xml-version: '1.1';
7608     document-type {
7609     general-entity {
7610     node-name: 'e';
7611     text-content: U+000D ' ' U+000A ' ' U+0085 ' '
7612     U+000D U+000A ' ' U+000D U+0085 ' ' U+2028;
7613     }
7614     }
7615     element {
7616     text-content: U+000D ' ' U+000A ' ' U+0085 ' '
7617     U+000D U+000A ' ' U+000D U+0085 ' ' U+2028;
7618     }
7619     }
7620    
7621 wakaba 1.16 @@XMLTest:
7622     @@@QName: xp.noxmldecl.pi.pi.test
7623     @@@DEnt:
7624     @@@@test:value:
7625     <?noxml 1?><?noxml 2?><p/>
7626     @@@test:domTree:
7627     document {
7628     xml-version: '1.0';
7629     pi {
7630     node-name: 'noxml';
7631     node-value: '1';
7632     }
7633     pi {
7634     node-name: 'noxml';
7635     node-value: '2';
7636     }
7637     element { }
7638     }
7639     @@XMLTest:
7640     @@@QName: xp.noxmldecl.pi.pi.2.test
7641     @@@DEnt:
7642     @@@@test:value:
7643     <?xmlno 1?><?xmlno 2?><p/>
7644     @@@test:domTree:
7645     document {
7646     xml-version: '1.0';
7647     pi {
7648     node-name: 'xmlno';
7649     node-value: '1';
7650     }
7651     pi {
7652     node-name: 'xmlno';
7653     node-value: '2';
7654     }
7655     element { }
7656     }
7657     @@XMLTest:
7658     @@@QName: xp.noxmldecl.pi.pi.3.test
7659     @@@DEnt:
7660     @@@@test:value:
7661     <?xmln 1?><?xmln 2?><p/>
7662     @@@test:domTree:
7663     document {
7664     xml-version: '1.0';
7665     pi {
7666     node-name: 'xmln';
7667     node-value: '1';
7668     }
7669     pi {
7670     node-name: 'xmln';
7671     node-value: '2';
7672     }
7673     element { }
7674     }
7675     @@XMLTest:
7676     @@@QName: xp.noxml.s.nl.test
7677     @@@DEnt:
7678     @@@@test:value:
7679     $u0085<p/>
7680     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 1)..(2, 0); }
7681     @@XMLTest:
7682     @@@QName: xp.noxml.s.crnl.test
7683     @@@DEnt:
7684     @@@@test:value:
7685     $u000D$u0085<p/>
7686     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 1)..(2, 0); }
7687     @@XMLTest:
7688     @@@QName: xp.noxml.s.ls.test
7689     @@@DEnt:
7690     @@@@test:value:
7691     $u2028<p/>
7692     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 1)..(2, 0); }
7693     @@XMLTest:
7694     @@@QName: xp.xml10.decl.s.nl.test
7695     @@@DEnt:
7696     @@@@test:value:
7697     <?xml version="1.0"?>$u0085<p/>
7698     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 22)..(2, 0); }
7699     @@XMLTest:
7700     @@@QName: xp.xml10.decl.s.crnl.test
7701     @@@DEnt:
7702     @@@@test:value:
7703     <?xml version="1.0"?>$u000D$u0085<p/>
7704     @@@c:erred: <[[xp|wf-syntax-error]]> { (2, 0)..(3, 0); }
7705     @@XMLTest:
7706     @@@QName: xp.xml10.decl.s.ls.test
7707     @@@DEnt:
7708     @@@@test:value:
7709     <?xml version="1.0"?>$u2028<p/>
7710     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 22)..(2, 0); }
7711     @@XMLTest:
7712     @@@QName: xp.xml11.decl.s.nl.test
7713     @@@DEnt:
7714     @@@@test:value:
7715     <?xml version="1.1"?>$u0085<p/>
7716     @@@test:domTree:
7717     document {
7718     xml-version: '1.1';
7719     element { }
7720     }
7721     @@XMLTest:
7722     @@@QName: xp.xml11.decl.s.crnl.test
7723     @@@DEnt:
7724     @@@@test:value:
7725     <?xml version="1.1"?>$u000D$u0085<p/>
7726     @@@test:domTree:
7727     document {
7728     xml-version: '1.1';
7729     element { }
7730     }
7731     @@XMLTest:
7732     @@@QName: xp.xml11.decl.s.ls.test
7733     @@@DEnt:
7734     @@@@test:value:
7735     <?xml version="1.1"?>$u2028<p/>
7736     @@@test:domTree:
7737     document {
7738     xml-version: '1.1';
7739     element { }
7740     }
7741    
7742     @@XMLTest:
7743 wakaba 1.18 @@@QName: xp.element.type.match.1.test
7744     @@@DEnt:
7745     @@@@test:value:
7746     <p></pa>(err)
7747     @@@c:erred: <[[xp|wf-element-type-match]]> { (1, 4)..(1, 8); }
7748     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7749     @@XMLTest:
7750     @@@QName: xp.element.type.match.2.test
7751     @@@DEnt:
7752     @@@@test:value:
7753     <p><pa></pa></pa>(err)
7754     @@@c:erred: <[[xp|wf-element-type-match]]> { (1, 13)..(1, 17); }
7755     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7756     @@XMLTest:
7757     @@@QName: xp.element.type.match.3.test
7758     @@@DEnt:
7759     @@@@test:value:
7760     <p><pa></p></p>(err)
7761     @@@c:erred: <[[xp|wf-element-type-match]]> { (1, 8)..(1, 11); }
7762     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7763     @@XMLTest:
7764     @@@QName: xp.element.type.match.4.test
7765     @@@DEnt:
7766     @@@@test:value:
7767     <a:p xmlns:a="about:1"></p>(err)
7768     @@@c:erred: <[[xp|wf-element-type-match]]> { (1, 24)..(1, 27); }
7769     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7770     @@XMLTest:
7771     @@@QName: xp.element.type.match.5.test
7772     @@@DEnt:
7773     @@@@test:value:
7774     <a:p xmlns:a="about:1" xmlns:b="about:1"></b:p>(err)
7775     @@@c:erred: <[[xp|wf-element-type-match]]> { (1, 42)..(1, 47); }
7776     @@@c:erred: <[[xp|wf-syntax-error]]> { }
7777    
7778     @@XMLTest:
7779     @@@QName: xp.stag.stago.name.etago.test
7780     @@@DEnt:
7781     @@@@test:value:
7782     <a</a>
7783     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 3); }
7784     @@XMLTest:
7785     @@@QName: xp.stag.stago.name.s.etago.test
7786     @@@DEnt:
7787     @@@@test:value:
7788     <a </a>
7789     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 4); }
7790     @@XMLTest:
7791     @@@QName: xp.stag.stago.name.s.attr.etago.test
7792     @@@DEnt:
7793     @@@@test:value:
7794     <a a="b"</a>
7795     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 9); }
7796     @@XMLTest:
7797     @@@QName: xp.stag.stago.name.s.attr.s.attr.etago.test
7798     @@@DEnt:
7799     @@@@test:value:
7800     <a a="b" c="d"</a>
7801     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 15); }
7802     @@XMLTest:
7803     @@@QName: xp.stag.stago.name.s.attr.s.etago.test
7804     @@@DEnt:
7805     @@@@test:value:
7806     <a a="b" </a>
7807     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 10); }
7808     @@XMLTest:
7809     @@@QName: xp.stag.etag.1.test
7810 wakaba 1.16 @@@DEnt:
7811     @@@@test:value:
7812 wakaba 1.18 <root><a></a></root>
7813 wakaba 1.16 @@@test:domTree:
7814     document {
7815 wakaba 1.18 element {
7816     element {
7817     node-name: 'a';
7818 wakaba 1.16 }
7819     }
7820 wakaba 1.18 }
7821     @@XMLTest:
7822     @@@QName: xp.stag.etag.2.test
7823     @@@DEnt:
7824     @@@@test:value:
7825     <root><ab></ab></root>
7826     @@@test:domTree:
7827     document {
7828 wakaba 1.16 element {
7829 wakaba 1.18 element {
7830     node-name: 'ab';
7831     }
7832 wakaba 1.16 }
7833 wakaba 1.18 }
7834 wakaba 1.16 @@XMLTest:
7835 wakaba 1.18 @@@QName: xp.stag.etag.s.1.test
7836 wakaba 1.16 @@@DEnt:
7837     @@@@test:value:
7838 wakaba 1.18 <root><a ></a ></root>
7839 wakaba 1.16 @@@test:domTree:
7840     document {
7841 wakaba 1.18 element {
7842     element {
7843     node-name: 'a';
7844 wakaba 1.16 }
7845     }
7846 wakaba 1.18 }
7847     @@XMLTest:
7848     @@@QName: xp.etag.1.test
7849     @@@DEnt:
7850     @@@@test:value:
7851     <root><a/></root>
7852     @@@test:domTree:
7853     document {
7854 wakaba 1.16 element {
7855 wakaba 1.18 element {
7856     node-name: 'a';
7857     }
7858 wakaba 1.16 }
7859 wakaba 1.18 }
7860 wakaba 1.16 @@XMLTest:
7861 wakaba 1.18 @@@QName: xp.etag.2.test
7862 wakaba 1.16 @@@DEnt:
7863     @@@@test:value:
7864 wakaba 1.18 <root><a /></root>
7865 wakaba 1.16 @@@test:domTree:
7866     document {
7867     element {
7868 wakaba 1.18 element {
7869     node-name: 'a';
7870     }
7871 wakaba 1.16 }
7872 wakaba 1.18 }
7873 wakaba 1.16 @@XMLTest:
7874 wakaba 1.18 @@@QName: xp.stag.etag.attr.1.test
7875 wakaba 1.16 @@@DEnt:
7876     @@@@test:value:
7877 wakaba 1.18 <root><a at="v"></a></root>
7878 wakaba 1.16 @@@test:domTree:
7879     document {
7880 wakaba 1.18 element {
7881     element {
7882     node-name: 'a';
7883     attribute {
7884     node-name: 'at';
7885     value: 'v';
7886     }
7887 wakaba 1.16 }
7888     }
7889 wakaba 1.18 }
7890     @@XMLTest:
7891     @@@QName: xp.stag.etag.attr.2.test
7892     @@@DEnt:
7893     @@@@test:value:
7894     <root><a at="v" ></a></root>
7895     @@@test:domTree:
7896     document {
7897 wakaba 1.16 element {
7898 wakaba 1.18 element {
7899     node-name: 'a';
7900     attribute {
7901     node-name: 'at';
7902     value: 'v';
7903 wakaba 1.16 }
7904     }
7905     }
7906 wakaba 1.18 }
7907 wakaba 1.16 @@XMLTest:
7908 wakaba 1.18 @@@QName: xp.stag.etag.attr.3.test
7909 wakaba 1.16 @@@DEnt:
7910     @@@@test:value:
7911 wakaba 1.18 <root><a at ="v"></a></root>
7912 wakaba 1.16 @@@test:domTree:
7913     document {
7914 wakaba 1.18 element {
7915     element {
7916     node-name: 'a';
7917     attribute {
7918     node-name: 'at';
7919     value: 'v';
7920     }
7921 wakaba 1.16 }
7922     }
7923 wakaba 1.18 }
7924     @@XMLTest:
7925     @@@QName: xp.stag.etag.attr.4.test
7926     @@@DEnt:
7927     @@@@test:value:
7928     <root><a at= "v"></a></root>
7929     @@@test:domTree:
7930     document {
7931 wakaba 1.16 element {
7932 wakaba 1.18 element {
7933     node-name: 'a';
7934     attribute {
7935     node-name: 'at';
7936     value: 'v';
7937 wakaba 1.16 }
7938     }
7939 wakaba 1.18 }
7940     }
7941     @@XMLTest:
7942     @@@QName: xp.stag.etag.attr.5.test
7943     @@@DEnt:
7944     @@@@test:value:
7945     <root><a at='v'></a></root>
7946     @@@test:domTree:
7947     document {
7948     element {
7949     element {
7950     node-name: 'a';
7951     attribute {
7952     node-name: 'at';
7953     value: 'v';
7954 wakaba 1.16 }
7955     }
7956     }
7957 wakaba 1.18 }
7958 wakaba 1.16 @@XMLTest:
7959 wakaba 1.18 @@@QName: xp.stag.etag.attr.6.test
7960 wakaba 1.16 @@@DEnt:
7961     @@@@test:value:
7962 wakaba 1.18 <root><a at= 'v' ></a></root>
7963 wakaba 1.6 @@@test:domTree:
7964     document {
7965 wakaba 1.18 element {
7966     element {
7967     node-name: 'a';
7968     attribute {
7969     node-name: 'at';
7970     value: 'v';
7971     }
7972 wakaba 1.11 }
7973 wakaba 1.6 }
7974 wakaba 1.18 }
7975     @@XMLTest:
7976     @@@QName: xp.stag.etag.attr.attr.1.test
7977     @@@DEnt:
7978     @@@@test:value:
7979     <root><a at="v" tr="w"></a></root>
7980     @@@test:domTree:
7981     document {
7982 wakaba 1.6 element {
7983 wakaba 1.18 element {
7984     node-name: 'a';
7985     attribute {
7986     node-name: 'at';
7987     value: 'v';
7988 wakaba 1.6 }
7989 wakaba 1.18 attribute {
7990     node-name: 'tr';
7991     value: 'w';
7992 wakaba 1.6 }
7993     }
7994     }
7995 wakaba 1.18 }
7996 wakaba 1.6 @@XMLTest:
7997 wakaba 1.18 @@@QName: xp.stag.etag.attr.attr.2.test
7998 wakaba 1.6 @@@DEnt:
7999     @@@@test:value:
8000 wakaba 1.18 <root><a tr="w" at="v"></a></root>
8001 wakaba 1.6 @@@test:domTree:
8002     document {
8003 wakaba 1.18 element {
8004     element {
8005     node-name: 'a';
8006     attribute {
8007     node-name: 'at';
8008     value: 'v';
8009     }
8010     attribute {
8011     node-name: 'tr';
8012     value: 'w';
8013 wakaba 1.11 }
8014     }
8015 wakaba 1.6 }
8016 wakaba 1.18 }
8017     @@XMLTest:
8018     @@@QName: xp.stag.etag.attr.no.s.attr.test
8019     @@@DEnt:
8020     @@@@test:value:
8021     <root><a at="v"tr="w"></a></root>
8022     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 16)..(1, 17); }
8023     @@XMLTest:
8024     @@@QName: xp.etag.attr.1.test
8025     @@@DEnt:
8026     @@@@test:value:
8027     <root><a at="v" tr="w"></a b="c"></root>
8028     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 28); }
8029     @@XMLTest:
8030     @@@QName: xp.etag.no.etagc.1.test
8031     @@@DEnt:
8032     @@@@test:value:
8033     <root><a at="v" tr="w"></a</root>
8034     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 27)..(1, 28); }
8035     @@XMLTest:
8036     @@@QName: xp.etag.no.etagc.2.test
8037     @@@DEnt:
8038     @@@@test:value:
8039     <root><a at="v" tr="w"></a </root>
8040     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 29)..(1, 30); }
8041     @@XMLTest:
8042     @@@QName: xp.mtag.attr.1.test
8043     @@@DEnt:
8044     @@@@test:value:
8045     <root><a b="c"/></root>
8046     @@@test:domTree:
8047     document {
8048 wakaba 1.6 element {
8049 wakaba 1.18 element {
8050     node-name: 'a';
8051     attribute {
8052     node-name: 'b';
8053     value: 'c';
8054 wakaba 1.6 }
8055     }
8056 wakaba 1.8 }
8057 wakaba 1.18 }
8058 wakaba 1.11 @@XMLTest:
8059 wakaba 1.18 @@@QName: xp.mtag.attr.2.test
8060 wakaba 1.11 @@@DEnt:
8061     @@@@test:value:
8062 wakaba 1.18 <root><a b="c" /></root>
8063 wakaba 1.11 @@@test:domTree:
8064     document {
8065 wakaba 1.18 element {
8066     element {
8067     node-name: 'a';
8068     attribute {
8069     node-name: 'b';
8070     value: 'c';
8071     }
8072 wakaba 1.11 }
8073     }
8074 wakaba 1.18 }
8075 wakaba 1.11 @@XMLTest:
8076 wakaba 1.18 @@@QName: xp.mtag.attr.3.test
8077 wakaba 1.11 @@@DEnt:
8078     @@@@test:value:
8079 wakaba 1.18 <root><a b='c'/></root>
8080 wakaba 1.11 @@@test:domTree:
8081     document {
8082     element {
8083 wakaba 1.18 element {
8084     node-name: 'a';
8085     attribute {
8086     node-name: 'b';
8087     value: 'c';
8088     }
8089     }
8090 wakaba 1.11 }
8091 wakaba 1.18 }
8092 wakaba 1.11 @@XMLTest:
8093 wakaba 1.18 @@@QName: xp.mtag.attr.4.test
8094 wakaba 1.11 @@@DEnt:
8095     @@@@test:value:
8096 wakaba 1.18 <root><a b="c" d="e"/></root>
8097 wakaba 1.11 @@@test:domTree:
8098     document {
8099     element {
8100 wakaba 1.18 element {
8101     node-name: 'a';
8102     attribute {
8103     node-name: 'b';
8104     value: 'c';
8105     }
8106     attribute {
8107     node-name: 'd';
8108     value: 'e';
8109     }
8110 wakaba 1.11 }
8111     }
8112 wakaba 1.18 }
8113    
8114     @@XMLTest:
8115     @@@QName: xp.attvalue.lt.1.test
8116     @@@DEnt:
8117     @@@@test:value:
8118     <a b="aa<dd"/>
8119     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 9); }
8120     @@XMLTest:
8121     @@@QName: xp.attvalue.lt.2.test
8122     @@@DEnt:
8123     @@@@test:value:
8124     <a b='aa<dd'/>
8125     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 9); }
8126     @@XMLTest:
8127     @@@QName: xp.attvalue.amp.1.test
8128     @@@DEnt:
8129     @@@@test:value:
8130     <a b="aa& dd"/>
8131     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 9)..(1, 12); }
8132     @@XMLTest:
8133     @@@QName: xp.attvalue.amp.2.test
8134     @@@DEnt:
8135     @@@@test:value:
8136     <a b='aa& dd'/>
8137     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 9)..(1, 12); }
8138     @@XMLTest:
8139     @@@QName: xp.attvalue.amp.3.test
8140     @@@DEnt:
8141     @@@@test:value:
8142     <a b="aa&# dd"/>
8143     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 9)..(1, 13); }
8144     @@XMLTest:
8145     @@@QName: xp.attvalue.amp.4.test
8146     @@@DEnt:
8147     @@@@test:value:
8148     <a b="aa&#x dd"/>
8149     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 9)..(1, 14); }
8150    
8151     @@XMLTest:
8152     @@@QName: xp.unique.att.spec.1.test
8153     @@@DEnt:
8154     @@@@test:value:
8155     <a b="c" b="d"/>
8156     @@@c:erred: <[[xp|wf-unique-att-spec]]> { (1, 4)..(1, 14); }
8157     @@XMLTest:
8158     @@@QName: xp.unique.att.spec.2.test
8159     @@@DEnt:
8160     @@@@test:value:
8161     <a d:b="c" d:b="d" xmlns:d="about:2"/>
8162     @@@c:erred: <[[xp|wf-unique-att-spec]]> { (1, 4)..(1, 18); }
8163    
8164     @@XMLTest:
8165     @@@QName: xp.no.external.entity.references.1.test
8166     @@@DEnt:
8167     @@@@test:value:
8168     <!DOCTYPE a [
8169     <!ENTITY ent SYSTEM "something">
8170     ]>
8171     <a b="c&ent;"/>
8172     @@@c:erred: <[[xp|wf-no-external-entity-references]]> { (4, 8)..(4, 12); }
8173     @@XMLTest:
8174     @@@QName: xp.no.external.entity.references.2.test
8175     @@@DEnt:
8176     @@@@test:value:
8177     <!DOCTYPE a [
8178     <!NOTATION n SYSTEM "notation">
8179     <!ENTITY ent SYSTEM "something" NDATA n>
8180     ]>
8181     <a b="c&ent;"/>
8182     @@@c:erred: <[[xp|wf-no-external-entity-references]]> { (5, 8)..(5, 12); }
8183     @@XMLTest:
8184     @@@QName: xp.no.external.entity.references.3.test
8185     @@@DEnt:
8186     @@@@test:value:
8187     <!DOCTYPE a [
8188     <!ENTITY ent SYSTEM "something">
8189     <!ENTITY ent2 "ddd&ent;">
8190     ]>
8191     <a b="c&ent2;"/>
8192     @@@c:erred: <[[xp|wf-no-external-entity-references]]> { (1, 4)..(1, 8); }
8193     @@XMLTest:
8194     @@@QName: xp.no.external.entity.references.4.test
8195     @@@DEnt:
8196     @@@@test:value:
8197     <!DOCTYPE a [
8198     <!NOTATION n SYSTEM "notation">
8199     <!ENTITY ent SYSTEM "something" NDATA n>
8200     <!ENTITY ent2 "ddd&ent;">
8201     ]>
8202     <a b="c&ent2;"/>
8203 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8204 wakaba 1.18 @@@c:erred: <[[xp|wf-no-external-entity-references]]> { (1, 4)..(1, 8); }
8205 wakaba 1.23 @@@c:erred: <[[xp|wf-parsed-entity]]> { }
8206 wakaba 1.18 @@XMLTest:
8207     @@@QName: xp.no.lt.in.attr.value.1.test
8208     @@@DEnt:
8209     @@@@test:value:
8210     <!DOCTYPE a [
8211     <!ENTITY ent "aa<bb">
8212     ]>
8213     <a b="c&ent;"/>
8214 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8215 wakaba 1.18 @@@c:erred: <[[xp|wf-no-lt-in-attribute-values]]> { (1, 3); }
8216 wakaba 1.20 @@@c:erred:
8217     @@@@@: <[[xp|wf-syntax-error]]> { (1, 3)..(1, 6); }
8218     @@@@enImplNote: When entity node is created.
8219 wakaba 1.18 @@XMLTest:
8220 wakaba 1.34 @@@QName: xp.no.lt.in.attr.value.1.2.test
8221     @@@DEnt:
8222     @@@@test:value:
8223     <!DOCTYPE a [
8224     <!ENTITY ent "aa<bb">
8225     ]>
8226     <a b="c&ent;"/>
8227     @@@cfg:entity-replacement-tree: 0
8228     @@@c:erred: <[[xp|wf-no-lt-in-attribute-values]]> { (1, 3); }
8229     @@XMLTest:
8230 wakaba 1.18 @@@QName: xp.no.lt.in.attr.value.2.test
8231     @@@DEnt:
8232     @@@@test:value:
8233     <!DOCTYPE a [
8234     <!ENTITY ent "aa<bb">
8235     <!ENTITY ent2 "ccc&ent;">
8236     ]>
8237     <a b="c&ent2;"/>
8238 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8239 wakaba 1.18 @@@c:erred: <[[xp|wf-no-lt-in-attribute-values]]> { (1, 3); }
8240 wakaba 1.20 @@@c:erred:
8241     @@@@@: <[[xp|wf-syntax-error]]> { (1, 3)..(1, 6); }
8242     @@@@enImplNote: When entity node is created.
8243 wakaba 1.18 @@XMLTest:
8244     @@@QName: xp.no.lt.in.attr.value.3.test
8245     @@@DEnt:
8246     @@@@test:value:
8247     <!DOCTYPE a [
8248     <!ENTITY ent "aa&#x3C;bb">
8249     ]>
8250     <a b="c&ent;"/>
8251 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8252 wakaba 1.18 @@@c:erred: <[[xp|wf-no-lt-in-attribute-values]]> { (1, 3); }
8253 wakaba 1.20 @@@c:erred:
8254     @@@@@: <[[xp|wf-syntax-error]]> { (1, 3)..(1, 6); }
8255     @@@@enImplNote: When entity node is created.
8256 wakaba 1.18 @@XMLTest:
8257     @@@QName: xp.no.lt.in.attr.value.4.test
8258     @@@DEnt:
8259     @@@@test:value:
8260     <!DOCTYPE a [
8261     <!ENTITY ent "aa&#x3C;bb">
8262     <!ENTITY ent2 "ccc&ent;">
8263     ]>
8264     <a b="c&ent2;"/>
8265 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8266 wakaba 1.18 @@@c:erred: <[[xp|wf-no-lt-in-attribute-values]]> { (1, 3); }
8267 wakaba 1.20 @@@c:erred:
8268     @@@@@: <[[xp|wf-syntax-error]]> { (1, 3)..(1, 6); }
8269     @@@@enImplNote: When entity node is created.
8270 wakaba 1.11 @@XMLTest:
8271 wakaba 1.18 @@@QName: xp.ger.lt.in.attr.value.1.test
8272 wakaba 1.11 @@@DEnt:
8273     @@@@test:value:
8274     <!DOCTYPE a [
8275 wakaba 1.18 <!ENTITY ent "aa&lt;bb">
8276 wakaba 1.11 ]>
8277 wakaba 1.18 <a b="c&ent;"/>
8278 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8279 wakaba 1.11 @@@test:domTree:
8280     document {
8281     document-type {
8282     general-entity {
8283     node-name: 'ent';
8284 wakaba 1.18 text-content: 'aa<bb';
8285 wakaba 1.11 }
8286     }
8287     element {
8288 wakaba 1.18 attribute {
8289     node-name: 'b';
8290     text { data: 'c'; }
8291     general-entity-reference {
8292 wakaba 1.34 manakai-expanded: true;
8293 wakaba 1.18 node-name: 'ent';
8294     text-content: 'aa<bb';
8295     }
8296     }
8297 wakaba 1.11 }
8298     }
8299     @@XMLTest:
8300 wakaba 1.18 @@@QName: xp.ger.lt.in.attr.value.2.test
8301 wakaba 1.11 @@@DEnt:
8302     @@@@test:value:
8303     <!DOCTYPE a [
8304 wakaba 1.18 <!ENTITY ent "aa&lt;bb">
8305     <!ENTITY ent2 "ccc&ent;">
8306 wakaba 1.11 ]>
8307 wakaba 1.18 <a b="c&ent2;"/>
8308 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8309 wakaba 1.11 @@@test:domTree:
8310     document {
8311     document-type {
8312     general-entity {
8313 wakaba 1.18 node-name: 'ent';
8314     text-content: 'aa<bb';
8315     }
8316     general-entity {
8317     node-name: 'ent2';
8318     text { data: 'ccc'; }
8319     general-entity-reference {
8320     node-name: 'ent';
8321     text-content: 'aa<bb';
8322 wakaba 1.34 manakai-expanded: true;
8323 wakaba 1.18 }
8324 wakaba 1.11 }
8325     }
8326     element {
8327 wakaba 1.18 attribute {
8328     node-name: 'b';
8329     text { data: 'c'; }
8330     general-entity-reference {
8331     node-name: 'ent2';
8332     text { data: 'ccc'; }
8333     general-entity-reference {
8334     node-name: 'ent';
8335     text-content: 'aa<bb';
8336 wakaba 1.34 manakai-expanded: true;
8337 wakaba 1.18 }
8338 wakaba 1.34 manakai-expanded: true;
8339 wakaba 1.18 }
8340     }
8341 wakaba 1.11 }
8342     }
8343    
8344 wakaba 1.8 @@XMLTest:
8345 wakaba 1.18 @@@QName: xp.doctype.intsubset.pi.test
8346 wakaba 1.8 @@@DEnt:
8347     @@@@test:value:
8348     <!DOCTYPE a [
8349 wakaba 1.18 <?pi data ?>
8350 wakaba 1.8 ]>
8351     <a></a>
8352     @@@test:domTree:
8353     document {
8354     xml-version: '1.0';
8355     xml-encoding: null;
8356     xml-standalone: false;
8357     document-type {
8358     node-name: 'a';
8359 wakaba 1.18 pi {
8360     target: 'pi';
8361     data: 'data ';
8362 wakaba 1.8 }
8363     }
8364     element {
8365     namespace-uri: null;
8366 wakaba 1.18 prefix: null;
8367 wakaba 1.8 local-name: 'a';
8368 wakaba 1.18 text-content: '';
8369 wakaba 1.8 }
8370     }
8371 wakaba 1.18 @@@enImplNote:
8372     A DOM PI node in doctype node is a manakai extension.
8373    
8374    
8375 wakaba 1.8 @@XMLTest:
8376 wakaba 1.18 @@@QName: xp.doctype.intsubset.entity.general.internal.test
8377 wakaba 1.8 @@@DEnt:
8378     @@@@test:value:
8379     <!DOCTYPE a [
8380 wakaba 1.18 <!ENTITY entity "entity value">
8381 wakaba 1.8 ]>
8382     <a></a>
8383 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8384 wakaba 1.8 @@@test:domTree:
8385     document {
8386     xml-version: '1.0';
8387     xml-encoding: null;
8388     xml-standalone: false;
8389     document-type {
8390     node-name: 'a';
8391 wakaba 1.18 general-entity {
8392     node-name: 'entity';
8393     text-content: 'entity value';
8394     has-replacement-tree: true;
8395 wakaba 1.8 }
8396     }
8397     element {
8398     namespace-uri: null;
8399 wakaba 1.18 prefix: null;
8400 wakaba 1.8 local-name: 'a';
8401 wakaba 1.18 text-content: '';
8402 wakaba 1.8 }
8403     }
8404     @@XMLTest:
8405 wakaba 1.18 @@@QName: xp.doctype.intsubset.entity.parameter.internal.test
8406 wakaba 1.8 @@@DEnt:
8407     @@@@test:value:
8408     <!DOCTYPE a [
8409 wakaba 1.18 <!ENTITY % entity "entity value">
8410 wakaba 1.8 ]>
8411     <a></a>
8412     @@@test:domTree:
8413     document {
8414     xml-version: '1.0';
8415     xml-encoding: null;
8416     xml-standalone: false;
8417     document-type {
8418     node-name: 'a';
8419     }
8420     element {
8421     namespace-uri: null;
8422 wakaba 1.18 prefix: null;
8423 wakaba 1.8 local-name: 'a';
8424 wakaba 1.18 text-content: '';
8425 wakaba 1.8 }
8426     }
8427 wakaba 1.18
8428 wakaba 1.8 @@XMLTest:
8429 wakaba 1.18 @@@QName: xp.doctype.internal.entity.root.element.text.only.test
8430 wakaba 1.8 @@@DEnt:
8431     @@@@test:value:
8432     <!DOCTYPE a [
8433 wakaba 1.18 <!ENTITY entity "entity value">
8434 wakaba 1.8 ]>
8435 wakaba 1.18 <a>&entity;</a>
8436 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8437 wakaba 1.8 @@@test:domTree:
8438     document {
8439     xml-version: '1.0';
8440     xml-encoding: null;
8441     xml-standalone: false;
8442     document-type {
8443     node-name: 'a';
8444 wakaba 1.18 general-entity {
8445     node-name: 'entity';
8446     text-content: 'entity value';
8447     has-replacement-tree: true;
8448 wakaba 1.8 }
8449     }
8450     element {
8451     namespace-uri: null;
8452 wakaba 1.18 prefix: null;
8453 wakaba 1.8 local-name: 'a';
8454 wakaba 1.18 general-entity-reference {
8455     node-name: 'entity';
8456     text {
8457     data: 'entity value';
8458     }
8459 wakaba 1.34 manakai-expanded: true;
8460 wakaba 1.10 }
8461 wakaba 1.9 }
8462     }
8463     @@XMLTest:
8464 wakaba 1.18 @@@QName: xp.doctype.internal.entity.root.element.text.mult.test
8465 wakaba 1.9 @@@DEnt:
8466     @@@@test:value:
8467     <!DOCTYPE a [
8468 wakaba 1.18 <!ENTITY entity "entity value">
8469 wakaba 1.9 ]>
8470 wakaba 1.18 <a>&entity; and &entity;</a>
8471 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8472 wakaba 1.9 @@@test:domTree:
8473     document {
8474     xml-version: '1.0';
8475     xml-encoding: null;
8476     xml-standalone: false;
8477     document-type {
8478     node-name: 'a';
8479 wakaba 1.18 general-entity {
8480     node-name: 'entity';
8481     text-content: 'entity value';
8482     has-replacement-tree: true;
8483 wakaba 1.9 }
8484     }
8485     element {
8486     namespace-uri: null;
8487 wakaba 1.18 prefix: null;
8488 wakaba 1.9 local-name: 'a';
8489 wakaba 1.18 general-entity-reference {
8490     node-name: 'entity';
8491     text {
8492     data: 'entity value';
8493     }
8494 wakaba 1.34 manakai-expanded: true;
8495 wakaba 1.18 }
8496     text { data: ' and '; }
8497     general-entity-reference {
8498     node-name: 'entity';
8499     text {
8500     data: 'entity value';
8501     }
8502 wakaba 1.34 manakai-expanded: true;
8503 wakaba 1.10 }
8504 wakaba 1.9 }
8505     }
8506     @@XMLTest:
8507 wakaba 1.18 @@@QName: xp.doctype.internal.entity.root.element.text.element.test
8508 wakaba 1.9 @@@DEnt:
8509     @@@@test:value:
8510     <!DOCTYPE a [
8511 wakaba 1.18 <!ENTITY entity "entity <p>value</p> with <e>element</e> ">
8512 wakaba 1.9 ]>
8513 wakaba 1.18 <a>&entity;</a>
8514 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8515 wakaba 1.18 @@@test:domTree:
8516     document {
8517     xml-version: '1.0';
8518     xml-encoding: null;
8519     xml-standalone: false;
8520     document-type {
8521     node-name: 'a';
8522     general-entity {
8523     node-name: 'entity';
8524     has-replacement-tree: true;
8525     text { data: 'entity '; }
8526     element {
8527     node-name: 'p';
8528     text-content: 'value';
8529     }
8530     text { data: ' with '; }
8531     element {
8532     node-name: 'e';
8533     text-content: 'element';
8534     }
8535 wakaba 1.20 text { data: ' '; }
8536 wakaba 1.18 }
8537     }
8538     element {
8539     namespace-uri: null;
8540     prefix: null;
8541     local-name: 'a';
8542     general-entity-reference {
8543     node-name: 'entity';
8544 wakaba 1.34 manakai-expanded: true;
8545 wakaba 1.18 text {
8546     data: 'entity ';
8547     }
8548     element {
8549     namespace-uri: null;
8550     prefix: null;
8551     local-name: 'p';
8552     text {
8553     data: 'value';
8554     }
8555     }
8556     text {
8557     data: ' with ';
8558     }
8559     element {
8560     namespace-uri: null;
8561     prefix: null;
8562     local-name: 'e';
8563     text {
8564     data: 'element';
8565     }
8566     }
8567     text {
8568     data: ' ';
8569     }
8570     }
8571     }
8572     }
8573     @@XMLTest:
8574     @@@QName: xp.doctype.internal.entity.root.element.text.in.ent.test
8575     @@@DEnt:
8576     @@@@test:value:
8577     <!DOCTYPE a [
8578     <!ENTITY entity1 "entity value">
8579     <!ENTITY entity2 "e&entity1;n">
8580     ]>
8581     <a>&entity2;</a>
8582 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8583 wakaba 1.18 @@@test:domTree:
8584     document {
8585     xml-version: '1.0';
8586     xml-encoding: null;
8587     xml-standalone: false;
8588     document-type {
8589     node-name: 'a';
8590     general-entity {
8591     node-name: 'entity1';
8592     text-content: 'entity value';
8593     }
8594     general-entity {
8595     node-name: 'entity2';
8596     text { data: 'e'; }
8597     general-entity-reference {
8598     node-name: 'entity1';
8599     text-content: 'entity value';
8600 wakaba 1.34 manakai-expanded: true;
8601 wakaba 1.18 }
8602     text { data: 'n'; }
8603     }
8604     }
8605     element {
8606     namespace-uri: null;
8607     prefix: null;
8608     local-name: 'a';
8609     general-entity-reference {
8610     node-name: 'entity2';
8611     text { data: 'e'; }
8612 wakaba 1.34 manakai-expanded: true;
8613 wakaba 1.18 general-entity-reference {
8614     node-name: 'entity1';
8615     text {
8616     data: 'entity value';
8617     }
8618 wakaba 1.34 manakai-expanded: true;
8619 wakaba 1.18 }
8620     text { data: 'n'; }
8621     }
8622     }
8623     }
8624    
8625     @@XMLTest:
8626     @@@QName: xp.doctype.entity.value.charref.test
8627     @@@DEnt:
8628     @@@@test:value:
8629     <!DOCTYPE a [
8630     <!ENTITY entity1 "entity &#x21;value&#35;">
8631     <!ENTITY entity2 '&#x21;value&#35;'>
8632     ]>
8633     <a></a>
8634 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8635 wakaba 1.18 @@@test:domTree:
8636     document {
8637     document-type {
8638     general-entity {
8639     node-name: 'entity1';
8640     text-content: 'entity !value#';
8641     has-replacement-tree: true;
8642     }
8643     general-entity {
8644     node-name: 'entity2';
8645     text-content: '!value#';
8646     has-replacement-tree: true;
8647     }
8648     }
8649     element { }
8650     }
8651    
8652     @@XMLTest:
8653     @@@QName: xp.predefined.in.content.test
8654     @@@DEnt:
8655     @@@@test:value:
8656     <a>_&lt;_&gt;_&quot;_&apos;_&amp;_</a>
8657     @@@test:domTree:
8658     document {
8659     element {
8660     text-content: '_<_>_"_' U+0027 '_&_';
8661     }
8662     }
8663     @@XMLTest:
8664     @@@QName: xp.predefined.in.attr.test
8665     @@@DEnt:
8666     @@@@test:value:
8667     <a at="_&lt;_&gt;_&quot;_&apos;_&amp;_"></a>
8668     @@@test:domTree:
8669     document {
8670     element {
8671     attribute {
8672     node-name: 'at';
8673     text-content: '_<_>_"_' U+0027 '_&_';
8674     }
8675     }
8676     }
8677     @@XMLTest:
8678     @@@QName: xp.predefined.in.content.in.entity.test
8679     @@@DEnt:
8680     @@@@test:value:
8681     <!DOCTYPE a [
8682     <!ENTITY ent "_&lt;_&gt;_&quot;_&apos;_&amp;_">
8683     ]>
8684     <a>&ent;</a>
8685 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8686 wakaba 1.18 @@@test:domTree:
8687     document {
8688     document-type {
8689     general-entity {
8690     node-name: 'ent';
8691     text-content: '_<_>_"_' U+0027 '_&_';
8692     }
8693     }
8694     element {
8695     text-content: '_<_>_"_' U+0027 '_&_';
8696     }
8697     }
8698     @@XMLTest:
8699     @@@QName: xp.predefined.decl.ignore.test
8700     @@@DEnt:
8701     @@@@test:value:
8702     <!DOCTYPE a [
8703     <!ENTITY lt "&#x26;#x3C;">
8704     <!ENTITY gt "&#x3E;">
8705     <!ENTITY amp "&#x26;#x26;">
8706     <!ENTITY quot "&#x22;">
8707     <!ENTITY apos "&#x27;">
8708     <!ENTITY other "other">
8709     ]>
8710     <a>_&lt;_&gt;_&quot;_&apos;_&amp;_&other;_</a>
8711 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
8712 wakaba 1.18 @@@test:domTree:
8713     document {
8714     document-type {
8715     general-entity {
8716     node-name: 'other';
8717     text-content: 'other';
8718     }
8719     }
8720     element {
8721     text-content: '_<_>_"_' U+0027 '_&_other_';
8722     }
8723     }
8724    
8725     @@XMLTest:
8726     @@@QName: xp.doctype.internal.attr.empty.test
8727     @@@DEnt:
8728     @@@@test:value:
8729     <!DOCTYPE a [
8730     <!ATTLIST a>
8731     ]>
8732     <a></a>
8733     @@@test:domTree:
8734     document {
8735     xml-version: '1.0';
8736     xml-encoding: null;
8737     xml-standalone: false;
8738     document-type {
8739     node-name: 'a';
8740     element-type-definition {
8741     node-name: 'a';
8742     }
8743     }
8744     element {
8745     namespace-uri: null;
8746     local-name: 'a';
8747     }
8748     }
8749     @@XMLTest:
8750     @@@QName: xp.doctype.internal.attr.cdata.implied.test
8751     @@@DEnt:
8752     @@@@test:value:
8753     <!DOCTYPE a [
8754     <!ATTLIST a
8755     at CDATA #IMPLIED
8756     >
8757     ]>
8758     <a></a>
8759 wakaba 1.9 @@@test:domTree:
8760     document {
8761     xml-version: '1.0';
8762     xml-encoding: null;
8763     xml-standalone: false;
8764     document-type {
8765     node-name: 'a';
8766     element-type-definition {
8767     node-name: 'a';
8768     attribute-definition {
8769     node-name: 'at';
8770 wakaba 1.18 declared-type: const (CDATA_ATTR);
8771 wakaba 1.9 allowed-tokens: DOMStringList ();
8772 wakaba 1.18 default-type: const (IMPLIED_DEFAULT);
8773     text-content: '';
8774 wakaba 1.9 }
8775     }
8776     }
8777     element {
8778     namespace-uri: null;
8779     local-name: 'a';
8780 wakaba 1.18 }
8781     }
8782     @@XMLTest:
8783     @@@QName: xp.doctype.internal.attr.types.implied.test
8784     @@@DEnt:
8785     @@@@test:value:
8786     <!DOCTYPE a [
8787     <!ATTLIST a
8788     at1 ID #IMPLIED
8789     at2 IDREF #IMPLIED
8790     at3 IDREFS #IMPLIED
8791     at4 ENTITY #IMPLIED
8792     at5 ENTITIES #IMPLIED
8793     at6 NMTOKEN #IMPLIED
8794     at7 NMTOKENS #IMPLIED
8795     at8 NOTATION (n1 | n2|n3) #IMPLIED
8796     at9 (e1| e2| e3 ) #IMPLIED
8797     >
8798     ]>
8799     <a></a>
8800     @@@test:domTree:
8801     document {
8802     xml-version: '1.0';
8803     xml-encoding: null;
8804     xml-standalone: false;
8805     document-type {
8806     node-name: 'a';
8807     element-type-definition {
8808     node-name: 'a';
8809     attribute-definition {
8810     node-name: 'at1';
8811     declared-type: const (ID_ATTR);
8812     allowed-tokens: DOMStringList ();
8813     default-type: const (IMPLIED_DEFAULT);
8814     text-content: '';
8815     }
8816     attribute-definition {
8817     node-name: 'at2';
8818     declared-type: const (IDREF_ATTR);
8819     allowed-tokens: DOMStringList ();
8820     default-type: const (IMPLIED_DEFAULT);
8821     text-content: '';
8822     }
8823     attribute-definition {
8824     node-name: 'at3';
8825     declared-type: const (IDREFS_ATTR);
8826     allowed-tokens: DOMStringList ();
8827     default-type: const (IMPLIED_DEFAULT);
8828     text-content: '';
8829     }
8830     attribute-definition {
8831     node-name: 'at4';
8832     declared-type: const (ENTITY_ATTR);
8833     allowed-tokens: DOMStringList ();
8834     default-type: const (IMPLIED_DEFAULT);
8835     text-content: '';
8836     }
8837     attribute-definition {
8838     node-name: 'at5';
8839     declared-type: const (ENTITIES_ATTR);
8840     allowed-tokens: DOMStringList ();
8841     default-type: const (IMPLIED_DEFAULT);
8842     text-content: '';
8843     }
8844     attribute-definition {
8845     node-name: 'at6';
8846     declared-type: const (NMTOKEN_ATTR);
8847     allowed-tokens: DOMStringList ();
8848     default-type: const (IMPLIED_DEFAULT);
8849     text-content: '';
8850     }
8851     attribute-definition {
8852     node-name: 'at7';
8853     declared-type: const (NMTOKENS_ATTR);
8854     allowed-tokens: DOMStringList ();
8855     default-type: const (IMPLIED_DEFAULT);
8856     text-content: '';
8857     }
8858     attribute-definition {
8859     node-name: 'at8';
8860     declared-type: const (NOTATION_ATTR);
8861     allowed-tokens: DOMStringList ('n1', 'n2', 'n3');
8862     default-type: const (IMPLIED_DEFAULT);
8863     text-content: '';
8864     }
8865     attribute-definition {
8866     node-name: 'at9';
8867     declared-type: const (ENUMERATION_ATTR);
8868     allowed-tokens: DOMStringList ('e1', 'e2', 'e3');
8869     default-type: const (IMPLIED_DEFAULT);
8870     text-content: '';
8871     }
8872     }
8873     }
8874     element {
8875     namespace-uri: null;
8876     local-name: 'a';
8877     }
8878     }
8879     @@XMLTest:
8880     @@@QName: xp.doctype.internal.attr.cdata.defaults.test
8881     @@@DEnt:
8882     @@@@test:value:
8883     <!DOCTYPE a [
8884     <!ATTLIST a
8885     at1 CDATA #IMPLIED
8886     at2 CDATA #REQUIRED
8887     at3 CDATA #FIXED "value3"
8888     at4 CDATA "value4"
8889     at5 CDATA #FIXED 'value5'
8890     at6 CDATA 'value6'
8891     >
8892     ]>
8893     <a></a>
8894     @@@test:domTree:
8895     document {
8896     xml-version: '1.0';
8897     xml-encoding: null;
8898     xml-standalone: false;
8899     document-type {
8900     node-name: 'a';
8901     element-type-definition {
8902     node-name: 'a';
8903     attribute-definition {
8904     node-name: 'at1';
8905     declared-type: const (CDATA_ATTR);
8906     allowed-tokens: DOMStringList ();
8907     default-type: const (IMPLIED_DEFAULT);
8908     text-content: '';
8909     }
8910     attribute-definition {
8911     node-name: 'at2';
8912     declared-type: const (CDATA_ATTR);
8913     allowed-tokens: DOMStringList ();
8914     default-type: const (REQUIRED_DEFAULT);
8915     text-content: '';
8916     }
8917     attribute-definition {
8918     node-name: 'at3';
8919     declared-type: const (CDATA_ATTR);
8920     allowed-tokens: DOMStringList ();
8921     default-type: const (FIXED_DEFAULT);
8922     text-content: 'value3';
8923     }
8924     attribute-definition {
8925     node-name: 'at4';
8926     declared-type: const (CDATA_ATTR);
8927     allowed-tokens: DOMStringList ();
8928     default-type: const (EXPLICIT_DEFAULT);
8929     text-content: 'value4';
8930     }
8931     attribute-definition {
8932     node-name: 'at5';
8933     declared-type: const (CDATA_ATTR);
8934     allowed-tokens: DOMStringList ();
8935     default-type: const (FIXED_DEFAULT);
8936     text-content: 'value5';
8937     }
8938     attribute-definition {
8939     node-name: 'at6';
8940     declared-type: const (CDATA_ATTR);
8941     allowed-tokens: DOMStringList ();
8942     default-type: const (EXPLICIT_DEFAULT);
8943     text-content: 'value6';
8944     }
8945     }
8946     }
8947     element {
8948     namespace-uri: null;
8949     local-name: 'a';
8950     attribute {
8951     node-name: 'at3';
8952     text-content: 'value3';
8953     specified: false;
8954     }
8955     attribute {
8956     node-name: 'at4';
8957     text-content: 'value4';
8958     specified: false;
8959     }
8960     attribute {
8961     node-name: 'at5';
8962     text-content: 'value5';
8963     specified: false;
8964     }
8965     attribute {
8966     node-name: 'at6';
8967     text-content: 'value6';
8968     specified: false;
8969     }
8970     }
8971     }
8972    
8973     @@XMLTest:
8974     @@@QName: xp.doctype.internal.attr.cdata.default.normalize.test
8975     @@@DEnt:
8976     @@@@test:value:
8977     <!DOCTYPE a [
8978     <!ATTLIST a
8979     at CDATA " default &#x0A;value "
8980     >
8981     ]>
8982     <a></a>
8983     @@@test:domTree:
8984     document {
8985     xml-version: '1.0';
8986     xml-encoding: null;
8987     xml-standalone: false;
8988     document-type {
8989     node-name: 'a';
8990     element-type-definition {
8991     node-name: 'a';
8992     attribute-definition {
8993     node-name: 'at';
8994     declared-type: const (CDATA_ATTR);
8995     allowed-tokens: DOMStringList ();
8996     default-type: const (EXPLICIT_DEFAULT);
8997     text-content: ' default ' U+000A 'value ';
8998     }
8999     }
9000     }
9001     element {
9002     namespace-uri: null;
9003     local-name: 'a';
9004     attribute {
9005     node-name: 'at';
9006     text-content: ' default ' U+000A 'value ';
9007     specified: false;
9008     }
9009     }
9010     }
9011     @@XMLTest:
9012     @@@QName: xp.doctype.internal.attr.nmtoken.default.normalize.test
9013     @@@DEnt:
9014     @@@@test:value:
9015     <!DOCTYPE a [
9016     <!ATTLIST a
9017     at NMTOKEN " default &#x0A;value "
9018     >
9019     ]>
9020     <a></a>
9021     @@@test:domTree:
9022     document {
9023     xml-version: '1.0';
9024     xml-encoding: null;
9025     xml-standalone: false;
9026     document-type {
9027     node-name: 'a';
9028     element-type-definition {
9029     node-name: 'a';
9030     attribute-definition {
9031     node-name: 'at';
9032     declared-type: const (NMTOKEN_ATTR);
9033     allowed-tokens: DOMStringList ();
9034     default-type: const (EXPLICIT_DEFAULT);
9035     text-content: ' default ' U+000A 'value ';
9036     }
9037     }
9038     }
9039     element {
9040     namespace-uri: null;
9041     local-name: 'a';
9042     attribute {
9043     node-name: 'at';
9044     text-content: ' default ' U+000A 'value ';
9045     specified: false;
9046     }
9047     }
9048     }
9049    
9050     @@XMLTest:
9051     @@@QName: xp.doctype.attrtype.no-value.test
9052     @@@DEnt:
9053     @@@@test:value:
9054     <!DOCTYPE a>
9055     <a at=" at value "></a>
9056     @@@test:domTree:
9057     document {
9058     xml-version: '1.0';
9059     xml-encoding: null;
9060     xml-standalone: false;
9061     document-type { }
9062     element {
9063     namespace-uri: null;
9064     local-name: 'a';
9065     attribute {
9066     namespace-uri: null;
9067     local-name: 'at';
9068     value: ' at value ';
9069     text {
9070     data: ' at value ';
9071     }
9072     schema-type-info: TypeInfo (null, null);
9073     specified: true;
9074     }
9075     }
9076     }
9077     @@XMLTest:
9078     @@@QName: xp.doctype.attrtype.cdata.test
9079     @@@DEnt:
9080     @@@@test:value:
9081     <!DOCTYPE a [
9082     <!ATTLIST a
9083     at CDATA #IMPLIED
9084     >
9085     ]>
9086     <a at=" at value "></a>
9087     @@@test:domTree:
9088     document {
9089     xml-version: '1.0';
9090     xml-encoding: null;
9091     xml-standalone: false;
9092     document-type { }
9093     element {
9094     namespace-uri: null;
9095     local-name: 'a';
9096     attribute {
9097     namespace-uri: null;
9098     local-name: 'at';
9099     value: ' at value ';
9100     text {
9101     data: ' at value ';
9102     }
9103     schema-type-info:
9104     TypeInfo ('http://www.w3.org/TR/REC-xml', 'CDATA');
9105     specified: true;
9106     }
9107     }
9108     }
9109     @@XMLTest:
9110     @@@QName: xp.doctype.attrtype.nmtoken.test
9111     @@@DEnt:
9112     @@@@test:value:
9113     <!DOCTYPE a [
9114     <!ATTLIST a
9115     at NMTOKEN #IMPLIED
9116     >
9117     ]>
9118     <a at=" at value "></a>
9119     @@@test:domTree:
9120     document {
9121     xml-version: '1.0';
9122     xml-encoding: null;
9123     xml-standalone: false;
9124     document-type { }
9125     element {
9126     namespace-uri: null;
9127     local-name: 'a';
9128     attribute {
9129     namespace-uri: null;
9130     local-name: 'at';
9131     value: 'at value';
9132     text {
9133     data: ' at value ';
9134     }
9135     schema-type-info:
9136     TypeInfo ('http://www.w3.org/TR/REC-xml', 'NMTOKEN');
9137     specified: true;
9138     }
9139     }
9140     }
9141    
9142     @@XMLTest:
9143     @@@QName: xp.doctype.attr.normalization.1.test
9144     @@@DEnt:
9145     @@@@test:value:
9146     <a at=" at &#xA;value "></a>
9147     @@@test:domTree:
9148     document {
9149     element {
9150     attribute {
9151     node-name: 'at';
9152     value: ' at ' U+000A 'value ';
9153     schema-type-info: TypeInfo (null, null);
9154     specified: true;
9155     }
9156     }
9157     }
9158     @@XMLTest:
9159     @@@QName: xp.doctype.attr.normalization.2.test
9160     @@@DEnt:
9161     @@@@test:value:
9162     <a at=" at &#xD;value "></a>
9163     @@@test:domTree:
9164     document {
9165     element {
9166     attribute {
9167     value: ' at ' U+000D 'value ';
9168     schema-type-info: TypeInfo (null, null);
9169     specified: true;
9170     }
9171     }
9172     }
9173     @@XMLTest:
9174     @@@QName: xp.doctype.attr.normalization.3.test
9175     @@@DEnt:
9176     @@@@test:value:
9177     <a at=" at &#x9;value "></a>
9178     @@@test:domTree:
9179     document {
9180     element {
9181     attribute {
9182     node-name: 'at';
9183     value: ' at ' U+0009 'value ';
9184     schema-type-info: TypeInfo (null, null);
9185     specified: true;
9186     }
9187     }
9188     }
9189    
9190     @@XMLTest:
9191     @@@QName: xp.doctype.attr.specified.1.test
9192     @@@DEnt:
9193     @@@@test:value:
9194     <!DOCTYPE a [
9195     <!ATTLIST a
9196     at CDATA "default"
9197     >
9198     ]>
9199     <a></a>
9200     @@@test:domTree:
9201     document {
9202     document-type { }
9203     element {
9204     attribute {
9205     node-name: 'at';
9206     value: 'default';
9207     specified: false;
9208     }
9209     }
9210     }
9211     @@XMLTest:
9212     @@@QName: xp.doctype.attr.specified.2.test
9213     @@@DEnt:
9214     @@@@test:value:
9215     <!DOCTYPE a [
9216     <!ATTLIST a
9217     at CDATA "default"
9218     >
9219     ]>
9220     <a at2="specified"></a>
9221     @@@test:domTree:
9222     document {
9223     document-type { }
9224     element {
9225     attribute {
9226     node-name: 'at';
9227     value: 'default';
9228     specified: false;
9229     }
9230     attribute {
9231     node-name: 'at2';
9232     value: 'specified';
9233     specified: true;
9234     }
9235     }
9236     }
9237     @@XMLTest:
9238     @@@QName: xp.doctype.attr.specified.3.test
9239     @@@DEnt:
9240     @@@@test:value:
9241     <!DOCTYPE a [
9242     <!ATTLIST a
9243     at CDATA "default"
9244     >
9245     ]>
9246     <a at="specified"></a>
9247     @@@test:domTree:
9248     document {
9249     document-type { }
9250     element {
9251     attribute {
9252     node-name: 'at';
9253     value: 'specified';
9254     specified: true;
9255     }
9256     }
9257     }
9258    
9259     @@XMLTest:
9260     @@@QName: xp.attr.literal.charref.test
9261     @@@DEnt:
9262     @@@@test:value:
9263     <a at1 = "value&#33;_&#x25;value"
9264     at2 = 'value&#x25;_&#33;value'></a>
9265     @@@test:domTree:
9266     document {
9267     element {
9268     attribute {
9269     node-name: 'at1';
9270     text-content: 'value!_%value';
9271     }
9272     attribute {
9273     node-name: 'at2';
9274     text-content: 'value%_!value';
9275     }
9276     }
9277     }
9278     @@XMLTest:
9279     @@@QName: xp.attr.literal.entref.test
9280     @@@DEnt:
9281     @@@@test:value:
9282     <!DOCTYPE a [
9283     <!ENTITY ent "entity&#x26;#33;_&#x26;#x29;value">
9284     ]>
9285     <a at1 = "value&ent;value"
9286     at2 = 'value&ent;value'></a>
9287 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
9288 wakaba 1.18 @@@test:domTree:
9289     document {
9290     document-type {
9291     general-entity {
9292     node-name: 'ent';
9293     text-content: 'entity!_)value';
9294     }
9295     }
9296     element {
9297     attribute {
9298     node-name: 'at1';
9299     text-content: 'valueentity!_)valuevalue';
9300     }
9301     attribute {
9302     node-name: 'at2';
9303     text-content: 'valueentity!_)valuevalue';
9304     }
9305     }
9306     }
9307     @@XMLTest:
9308     @@@QName: xp.attr.literal.entref.nest.test
9309     @@@DEnt:
9310     @@@@test:value:
9311     <!DOCTYPE a [
9312     <!ENTITY ent1 "entity&#x26;#33;_&#x26;#x29;value">
9313     <!ENTITY ent2 "@&ent1;@">
9314     ]>
9315     <a at1 = "value&ent2;value"
9316     at2 = 'value&ent2;value'></a>
9317 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
9318 wakaba 1.18 @@@test:domTree:
9319     document {
9320     document-type {
9321     general-entity {
9322     node-name: 'ent1';
9323     text-content: 'entity!_)value';
9324     }
9325     general-entity {
9326     node-name: 'ent2';
9327     text-content: '@entity!_)value@';
9328     }
9329     }
9330     element {
9331     attribute {
9332     node-name: 'at1';
9333     text-content: 'value@entity!_)value@value';
9334     }
9335     attribute {
9336     node-name: 'at2';
9337     text-content: 'value@entity!_)value@value';
9338     }
9339     }
9340     }
9341    
9342     @@XMLTest:
9343     @@@QName: xp.element.content.ncr.1.test
9344     @@@DEnt:
9345     @@@@test:value:
9346     <e>&#33;</e>
9347     @@@test:domTree:
9348     document {
9349     element {
9350     text-content: '!';
9351     }
9352     }
9353     @@XMLTest:
9354     @@@QName: xp.element.content.ncr.2.test
9355     @@@DEnt:
9356     @@@@test:value:
9357     <e>aaaa&#33;bbbb</e>
9358     @@@test:domTree:
9359     document {
9360     element {
9361     text-content: 'aaaa!bbbb';
9362 wakaba 1.31 text {
9363     text-content: 'aaaa!bbbb';
9364     }
9365 wakaba 1.18 }
9366     }
9367     @@XMLTest:
9368     @@@QName: xp.attrval.ncr.1.test
9369     @@@DEnt:
9370     @@@@test:value:
9371     <e a="&#33;"/>
9372     @@@test:domTree:
9373     document {
9374     element {
9375     attribute {
9376     node-name: 'a';
9377     text-content: '!';
9378     }
9379     }
9380     }
9381     @@XMLTest:
9382     @@@QName: xp.attrval.ncr.2.test
9383     @@@DEnt:
9384     @@@@test:value:
9385     <e a="aaaaa&#33;bbbbb"/>
9386     @@@test:domTree:
9387     document {
9388     element {
9389     attribute {
9390     node-name: 'a';
9391     text-content: 'aaaaa!bbbbb';
9392 wakaba 1.31 text {
9393     text-content: 'aaaaa!bbbbb';
9394     }
9395 wakaba 1.18 }
9396     }
9397     }
9398     @@XMLTest:
9399     @@@QName: xp.attrval.ncr.3.test
9400     @@@DEnt:
9401     @@@@test:value:
9402     <e a='&#33;'/>
9403     @@@test:domTree:
9404     document {
9405     element {
9406     attribute {
9407     node-name: 'a';
9408     text-content: '!';
9409     }
9410     }
9411     }
9412     @@XMLTest:
9413     @@@QName: xp.attrval.ncr.4.test
9414     @@@DEnt:
9415     @@@@test:value:
9416     <e a='aaaaa&#33;bbbbb'/>
9417     @@@test:domTree:
9418     document {
9419     element {
9420     attribute {
9421     node-name: 'a';
9422     text-content: 'aaaaa!bbbbb';
9423     }
9424     }
9425     }
9426     @@XMLTest:
9427     @@@QName: xp.entval.ncr.1.test
9428     @@@DEnt:
9429     @@@@test:value:
9430     <!DOCTYPE e [
9431     <!ENTITY ent "&#33;">
9432     ]>
9433     <e/>
9434 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
9435 wakaba 1.18 @@@test:domTree:
9436     document {
9437     document-type {
9438     general-entity {
9439     node-name: 'ent';
9440     text-content: '!';
9441     }
9442     }
9443     element { }
9444     }
9445     @@XMLTest:
9446     @@@QName: xp.entval.ncr.2.test
9447     @@@DEnt:
9448     @@@@test:value:
9449     <!DOCTYPE e [
9450     <!ENTITY ent "aaaaa&#33;bbbbb">
9451     ]>
9452     <e/>
9453 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
9454 wakaba 1.18 @@@test:domTree:
9455     document {
9456     document-type {
9457     general-entity {
9458     node-name: 'ent';
9459     text-content: 'aaaaa!bbbbb';
9460     }
9461     }
9462     element { }
9463     }
9464     @@XMLTest:
9465     @@@QName: xp.element.content.reptxt.ncr.1.test
9466     @@@DEnt:
9467     @@@@test:value:
9468     <!DOCTYPE e [
9469     <!ENTITY ent "&#38;#33;">
9470     ]>
9471     <e>&ent;</e>
9472     @@@test:domTree:
9473     document {
9474     document-type { }
9475     element {
9476     general-entity-reference {
9477     node-name: 'ent';
9478     text-content: '!';
9479 wakaba 1.34 manakai-expanded: true;
9480 wakaba 1.18 }
9481     }
9482     }
9483     @@XMLTest:
9484     @@@QName: xp.element.content.reptxt.ncr.2.test
9485     @@@DEnt:
9486     @@@@test:value:
9487     <!DOCTYPE e [
9488     <!ENTITY ent "aaaaa&#38;#33;bbbbb">
9489     ]>
9490     <e>&ent;</e>
9491     @@@test:domTree:
9492     document {
9493     document-type { }
9494     element {
9495     general-entity-reference {
9496     node-name: 'ent';
9497     text-content: 'aaaaa!bbbbb';
9498 wakaba 1.34 manakai-expanded: true;
9499 wakaba 1.18 }
9500     }
9501     }
9502     @@XMLTest:
9503     @@@QName: xp.element.content.reptxt.reptxt.ncr.1.test
9504     @@@DEnt:
9505     @@@@test:value:
9506     <!DOCTYPE e [
9507     <!ENTITY ent "&#38;#33;">
9508     <!ENTITY ent2 "&ent;">
9509     ]>
9510     <e>&ent2;</e>
9511     @@@test:domTree:
9512     document {
9513     document-type { }
9514     element {
9515     general-entity-reference {
9516     node-name: 'ent2';
9517     general-entity-reference {
9518     node-name: 'ent';
9519     text-content: '!';
9520 wakaba 1.34 manakai-expanded: true;
9521 wakaba 1.18 }
9522 wakaba 1.34 manakai-expanded: true;
9523 wakaba 1.18 }
9524     }
9525     }
9526     @@XMLTest:
9527     @@@QName: xp.element.content.reptxt.reptxt.ncr.2.test
9528     @@@DEnt:
9529     @@@@test:value:
9530     <!DOCTYPE e [
9531     <!ENTITY ent "aa&#38;#33;bb">
9532     <!ENTITY ent2 "&ent;">
9533     ]>
9534     <e>&ent2;</e>
9535     @@@test:domTree:
9536     document {
9537     document-type { }
9538     element {
9539     general-entity-reference {
9540     node-name: 'ent2';
9541     general-entity-reference {
9542     node-name: 'ent';
9543     text-content: 'aa!bb';
9544 wakaba 1.34 manakai-expanded: true;
9545 wakaba 1.31 text {
9546     text-content: 'aa!bb';
9547     }
9548 wakaba 1.18 }
9549 wakaba 1.34 manakai-expanded: true;
9550 wakaba 1.18 }
9551     }
9552     }
9553     @@XMLTest:
9554     @@@QName: xp.attval.reptxt.ncr.1.test
9555     @@@DEnt:
9556     @@@@test:value:
9557     <!DOCTYPE e [
9558     <!ENTITY ent "&#38;#33;">
9559     ]>
9560     <e a="&ent;"/>
9561     @@@test:domTree:
9562     document {
9563     document-type { }
9564     element {
9565     attribute {
9566     node-name: 'a';
9567     general-entity-reference {
9568     node-name: 'ent';
9569     text-content: '!';
9570 wakaba 1.34 manakai-expanded: true;
9571 wakaba 1.18 }
9572     }
9573     }
9574     }
9575     @@XMLTest:
9576     @@@QName: xp.attval.reptxt.ncr.2.test
9577     @@@DEnt:
9578     @@@@test:value:
9579     <!DOCTYPE e [
9580     <!ENTITY ent "aaaaa&#38;#33;bbbbb">
9581     ]>
9582     <e a="&ent;"/>
9583     @@@test:domTree:
9584     document {
9585     document-type { }
9586     element {
9587     attribute {
9588     node-name: 'a';
9589     general-entity-reference {
9590     node-name: 'ent';
9591     text-content: 'aaaaa!bbbbb';
9592 wakaba 1.34 manakai-expanded: true;
9593 wakaba 1.31 text {
9594     text-content: 'aaaaa!bbbbb';
9595     }
9596 wakaba 1.18 }
9597     }
9598     }
9599     }
9600     @@XMLTest:
9601     @@@QName: xp.attval.reptxt.reptxt.ncr.1.test
9602     @@@DEnt:
9603     @@@@test:value:
9604     <!DOCTYPE e [
9605     <!ENTITY ent "&#38;#33;">
9606     <!ENTITY ent2 "&ent;">
9607     ]>
9608     <e a="&ent2;"/>
9609     @@@test:domTree:
9610     document {
9611     document-type { }
9612     element {
9613     attribute {
9614     node-name: 'a';
9615     general-entity-reference {
9616     node-name: 'ent2';
9617 wakaba 1.34 manakai-expanded: true;
9618 wakaba 1.18 general-entity-reference {
9619     node-name: 'ent';
9620     text-content: '!';
9621 wakaba 1.34 manakai-expanded: true;
9622 wakaba 1.18 }
9623     }
9624     }
9625     }
9626     }
9627     @@XMLTest:
9628     @@@QName: xp.attval.reptxt.reptxt.ncr.2.test
9629     @@@DEnt:
9630     @@@@test:value:
9631     <!DOCTYPE e [
9632     <!ENTITY ent "aa&#38;#33;bb">
9633     <!ENTITY ent2 "&ent;">
9634     ]>
9635     <e a="&ent2;"/>
9636     @@@test:domTree:
9637     document {
9638     document-type { }
9639     element {
9640     attribute {
9641     node-name: 'a';
9642     general-entity-reference {
9643     node-name: 'ent2';
9644 wakaba 1.34 manakai-expanded: true;
9645 wakaba 1.18 general-entity-reference {
9646     node-name: 'ent';
9647     text-content: 'aa!bb';
9648 wakaba 1.34 manakai-expanded: true;
9649 wakaba 1.18 }
9650     }
9651     }
9652     }
9653     }
9654    
9655     @@XMLTest:
9656     @@@QName: xp.element.content.hcr.1.test
9657     @@@DEnt:
9658     @@@@test:value:
9659     <e>&#x21;</e>
9660     @@@test:domTree:
9661     document {
9662     element {
9663     text-content: '!';
9664     }
9665     }
9666     @@XMLTest:
9667     @@@QName: xp.element.content.hcr.2.test
9668     @@@DEnt:
9669     @@@@test:value:
9670     <e>aaaa&#x21;bbbb</e>
9671     @@@test:domTree:
9672     document {
9673     element {
9674     text-content: 'aaaa!bbbb';
9675 wakaba 1.31 text {
9676     text-content: 'aaaa!bbbb';
9677     }
9678 wakaba 1.18 }
9679     }
9680     @@XMLTest:
9681     @@@QName: xp.attrval.hcr.1.test
9682     @@@DEnt:
9683     @@@@test:value:
9684     <e a="&#x21;"/>
9685     @@@test:domTree:
9686     document {
9687     element {
9688     attribute {
9689     node-name: 'a';
9690     text-content: '!';
9691     }
9692     }
9693     }
9694     @@XMLTest:
9695     @@@QName: xp.attrval.hcr.2.test
9696     @@@DEnt:
9697     @@@@test:value:
9698     <e a="aaaaa&#x21;bbbbb"/>
9699     @@@test:domTree:
9700     document {
9701     element {
9702     attribute {
9703     node-name: 'a';
9704     text-content: 'aaaaa!bbbbb';
9705 wakaba 1.31 text {
9706     text-content: 'aaaaa!bbbbb';
9707     }
9708 wakaba 1.18 }
9709     }
9710     }
9711     @@XMLTest:
9712     @@@QName: xp.attrval.hcr.3.test
9713     @@@DEnt:
9714     @@@@test:value:
9715     <e a='&#x21;'/>
9716     @@@test:domTree:
9717     document {
9718     element {
9719     attribute {
9720     node-name: 'a';
9721     text-content: '!';
9722     }
9723     }
9724     }
9725     @@XMLTest:
9726     @@@QName: xp.attrval.hcr.4.test
9727     @@@DEnt:
9728     @@@@test:value:
9729     <e a='aaaaa&#x21;bbbbb'/>
9730     @@@test:domTree:
9731     document {
9732     element {
9733     attribute {
9734     node-name: 'a';
9735     text-content: 'aaaaa!bbbbb';
9736     }
9737     }
9738     }
9739     @@XMLTest:
9740     @@@QName: xp.entval.hcr.1.test
9741     @@@DEnt:
9742     @@@@test:value:
9743     <!DOCTYPE e [
9744     <!ENTITY ent "&#x21;">
9745     ]>
9746     <e/>
9747 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
9748 wakaba 1.18 @@@test:domTree:
9749     document {
9750     document-type {
9751     general-entity {
9752     node-name: 'ent';
9753     text-content: '!';
9754 wakaba 1.10 }
9755 wakaba 1.9 }
9756 wakaba 1.18 element { }
9757 wakaba 1.9 }
9758     @@XMLTest:
9759 wakaba 1.18 @@@QName: xp.entval.hcr.2.test
9760 wakaba 1.9 @@@DEnt:
9761     @@@@test:value:
9762 wakaba 1.18 <!DOCTYPE e [
9763     <!ENTITY ent "aaaaa&#x21;bbbbb">
9764     ]>
9765     <e/>
9766 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
9767 wakaba 1.9 @@@test:domTree:
9768     document {
9769 wakaba 1.18 document-type {
9770     general-entity {
9771     node-name: 'ent';
9772     text-content: 'aaaaa!bbbbb';
9773 wakaba 1.31 text {
9774     text-content: 'aaaaa!bbbbb';
9775     }
9776 wakaba 1.9 }
9777     }
9778 wakaba 1.18 element { }
9779 wakaba 1.9 }
9780     @@XMLTest:
9781 wakaba 1.18 @@@QName: xp.element.content.reptxt.hcr.1.test
9782 wakaba 1.9 @@@DEnt:
9783     @@@@test:value:
9784 wakaba 1.18 <!DOCTYPE e [
9785     <!ENTITY ent "&#38;#x21;">
9786 wakaba 1.9 ]>
9787 wakaba 1.18 <e>&ent;</e>
9788 wakaba 1.9 @@@test:domTree:
9789     document {
9790     document-type { }
9791     element {
9792 wakaba 1.18 general-entity-reference {
9793     node-name: 'ent';
9794     text-content: '!';
9795 wakaba 1.34 manakai-expanded: true;
9796 wakaba 1.9 }
9797     }
9798     }
9799     @@XMLTest:
9800 wakaba 1.18 @@@QName: xp.element.content.reptxt.hcr.2.test
9801 wakaba 1.9 @@@DEnt:
9802     @@@@test:value:
9803 wakaba 1.18 <!DOCTYPE e [
9804     <!ENTITY ent "aaaaa&#38;#x21;bbbbb">
9805 wakaba 1.9 ]>
9806 wakaba 1.18 <e>&ent;</e>
9807 wakaba 1.9 @@@test:domTree:
9808     document {
9809     document-type { }
9810     element {
9811 wakaba 1.18 general-entity-reference {
9812     node-name: 'ent';
9813     text-content: 'aaaaa!bbbbb';
9814 wakaba 1.34 manakai-expanded: true;
9815 wakaba 1.9 }
9816     }
9817     }
9818     @@XMLTest:
9819 wakaba 1.18 @@@QName: xp.element.content.reptxt.reptxt.hcr.1.test
9820 wakaba 1.9 @@@DEnt:
9821     @@@@test:value:
9822 wakaba 1.18 <!DOCTYPE e [
9823     <!ENTITY ent "&#38;#x21;">
9824     <!ENTITY ent2 "&ent;">
9825     ]>
9826     <e>&ent2;</e>
9827 wakaba 1.9 @@@test:domTree:
9828     document {
9829 wakaba 1.18 document-type { }
9830 wakaba 1.9 element {
9831 wakaba 1.18 general-entity-reference {
9832     node-name: 'ent2';
9833 wakaba 1.34 manakai-expanded: true;
9834 wakaba 1.18 general-entity-reference {
9835     node-name: 'ent';
9836     text-content: '!';
9837 wakaba 1.34 manakai-expanded: true;
9838 wakaba 1.18 }
9839 wakaba 1.9 }
9840     }
9841     }
9842     @@XMLTest:
9843 wakaba 1.18 @@@QName: xp.element.content.reptxt.reptxt.hcr.2.test
9844 wakaba 1.9 @@@DEnt:
9845     @@@@test:value:
9846 wakaba 1.18 <!DOCTYPE e [
9847     <!ENTITY ent "aa&#38;#x21;bb">
9848     <!ENTITY ent2 "&ent;">
9849     ]>
9850     <e>&ent2;</e>
9851 wakaba 1.9 @@@test:domTree:
9852     document {
9853 wakaba 1.18 document-type { }
9854 wakaba 1.9 element {
9855 wakaba 1.18 general-entity-reference {
9856     node-name: 'ent2';
9857 wakaba 1.34 manakai-expanded: true;
9858 wakaba 1.18 general-entity-reference {
9859     node-name: 'ent';
9860 wakaba 1.34 manakai-expanded: true;
9861 wakaba 1.18 text-content: 'aa!bb';
9862     }
9863 wakaba 1.9 }
9864     }
9865     }
9866     @@XMLTest:
9867 wakaba 1.18 @@@QName: xp.attval.reptxt.hcr.1.test
9868 wakaba 1.9 @@@DEnt:
9869     @@@@test:value:
9870 wakaba 1.18 <!DOCTYPE e [
9871     <!ENTITY ent "&#38;#x21;">
9872     ]>
9873     <e a="&ent;"/>
9874 wakaba 1.9 @@@test:domTree:
9875     document {
9876 wakaba 1.18 document-type { }
9877 wakaba 1.9 element {
9878     attribute {
9879 wakaba 1.18 node-name: 'a';
9880     general-entity-reference {
9881     node-name: 'ent';
9882 wakaba 1.34 manakai-expanded: true;
9883 wakaba 1.18 text-content: '!';
9884     }
9885 wakaba 1.10 }
9886     }
9887     }
9888     @@XMLTest:
9889 wakaba 1.18 @@@QName: xp.attval.reptxt.hcr.2.test
9890 wakaba 1.10 @@@DEnt:
9891     @@@@test:value:
9892 wakaba 1.18 <!DOCTYPE e [
9893     <!ENTITY ent "aaaaa&#38;#x21;bbbbb">
9894 wakaba 1.10 ]>
9895 wakaba 1.18 <e a="&ent;"/>
9896 wakaba 1.10 @@@test:domTree:
9897     document {
9898     document-type { }
9899     element {
9900     attribute {
9901 wakaba 1.18 node-name: 'a';
9902     general-entity-reference {
9903     node-name: 'ent';
9904 wakaba 1.34 manakai-expanded: true;
9905 wakaba 1.18 text-content: 'aaaaa!bbbbb';
9906 wakaba 1.31 text {
9907     text-content: 'aaaaa!bbbbb';
9908     }
9909 wakaba 1.18 }
9910 wakaba 1.10 }
9911     }
9912     }
9913     @@XMLTest:
9914 wakaba 1.18 @@@QName: xp.attval.reptxt.reptxt.hcr.1.test
9915 wakaba 1.10 @@@DEnt:
9916     @@@@test:value:
9917 wakaba 1.18 <!DOCTYPE e [
9918     <!ENTITY ent "&#38;#x21;">
9919     <!ENTITY ent2 "&ent;">
9920 wakaba 1.10 ]>
9921 wakaba 1.18 <e a="&ent2;"/>
9922 wakaba 1.10 @@@test:domTree:
9923     document {
9924     document-type { }
9925     element {
9926     attribute {
9927 wakaba 1.18 node-name: 'a';
9928     general-entity-reference {
9929     node-name: 'ent2';
9930 wakaba 1.34 manakai-expanded: true;
9931 wakaba 1.18 general-entity-reference {
9932     node-name: 'ent';
9933 wakaba 1.34 manakai-expanded: true;
9934 wakaba 1.18 text-content: '!';
9935     }
9936     }
9937 wakaba 1.10 }
9938     }
9939     }
9940     @@XMLTest:
9941 wakaba 1.18 @@@QName: xp.attval.reptxt.reptxt.hcr.2.test
9942 wakaba 1.10 @@@DEnt:
9943     @@@@test:value:
9944 wakaba 1.18 <!DOCTYPE e [
9945     <!ENTITY ent "aa&#38;#x21;bb">
9946     <!ENTITY ent2 "&ent;">
9947 wakaba 1.10 ]>
9948 wakaba 1.18 <e a="&ent2;"/>
9949 wakaba 1.10 @@@test:domTree:
9950     document {
9951     document-type { }
9952     element {
9953     attribute {
9954 wakaba 1.18 node-name: 'a';
9955     general-entity-reference {
9956     node-name: 'ent2';
9957 wakaba 1.34 manakai-expanded: true;
9958 wakaba 1.18 general-entity-reference {
9959     node-name: 'ent';
9960 wakaba 1.34 manakai-expanded: true;
9961 wakaba 1.18 text-content: 'aa!bb';
9962     }
9963     }
9964 wakaba 1.11 }
9965     }
9966     }
9967    
9968     @@XMLTest:
9969 wakaba 1.18 @@@QName: xp.element.content.ncr.legal.char.1.0.1.test
9970     @@@DEnt:
9971     @@@@test:value:
9972     <?xml version="1.0"?>
9973     <e>&#0;</e>
9974     @@@c:erred: <[[xp|wf-legal-character]]> { (2, 4)..(2, 7); }
9975     @@XMLTest:
9976     @@@QName: xp.element.content.ncr.legal.char.1.1.1.test
9977     @@@DEnt:
9978     @@@@test:value:
9979     <?xml version="1.1"?>
9980     <e>&#0;</e>
9981     @@@c:erred: <[[xp|wf-legal-character]]> { (2, 4)..(2, 7); }
9982     @@XMLTest:
9983     @@@QName: xp.element.content.ncr.legal.char.1.0.2.test
9984     @@@DEnt:
9985     @@@@test:value:
9986     <?xml version="1.0"?>
9987     <e>&#1;</e>
9988     @@@c:erred: <[[xp|wf-legal-character]]> { (2, 4)..(2, 7); }
9989     @@XMLTest:
9990     @@@QName: xp.element.content.ncr.legal.char.1.1.2.test
9991 wakaba 1.11 @@@DEnt:
9992     @@@@test:value:
9993 wakaba 1.18 <?xml version="1.1"?>
9994     <e>&#1;</e>
9995 wakaba 1.11 @@@test:domTree:
9996     document {
9997 wakaba 1.18 xml-version: '1.1';
9998 wakaba 1.11 element {
9999 wakaba 1.18 text-content: U+0001;
10000 wakaba 1.11 }
10001     }
10002     @@XMLTest:
10003 wakaba 1.18 @@@QName: xp.element.content.hcr.legal.char.1.0.1.test
10004     @@@DEnt:
10005     @@@@test:value:
10006     <?xml version="1.0"?>
10007     <e>&#x0;</e>
10008     @@@c:erred: <[[xp|wf-legal-character]]> { (2, 4)..(2, 8); }
10009     @@XMLTest:
10010     @@@QName: xp.element.content.hcr.legal.char.1.1.1.test
10011     @@@DEnt:
10012     @@@@test:value:
10013     <?xml version="1.1"?>
10014     <e>&#x0;</e>
10015     @@@c:erred: <[[xp|wf-legal-character]]> { (2, 4)..(2, 8); }
10016     @@XMLTest:
10017     @@@QName: xp.element.content.hcr.legal.char.1.0.2.test
10018 wakaba 1.11 @@@DEnt:
10019     @@@@test:value:
10020 wakaba 1.18 <?xml version="1.0"?>
10021     <e>&#x1;</e>
10022     @@@c:erred: <[[xp|wf-legal-character]]> { (2, 4)..(2, 8); }
10023 wakaba 1.11 @@XMLTest:
10024 wakaba 1.18 @@@QName: xp.element.content.hcr.legal.char.1.1.2.test
10025 wakaba 1.11 @@@DEnt:
10026     @@@@test:value:
10027 wakaba 1.18 <?xml version="1.1"?>
10028     <e>&#x1;</e>
10029 wakaba 1.11 @@@test:domTree:
10030     document {
10031 wakaba 1.18 xml-version: '1.1';
10032 wakaba 1.11 element {
10033 wakaba 1.18 text-content: U+0001;
10034 wakaba 1.6 }
10035     }
10036    
10037 wakaba 1.19 @@XMLTest:
10038     @@@QName: xp.element.content.ger.entity.declared.nodtd.1.test
10039     @@@DEnt:
10040     @@@@test:value:
10041     <p>&entity;</p>
10042     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 4)..(1, 11); }
10043     @@XMLTest:
10044     @@@QName: xp.element.content.ger.entity.declared.nodtd.2.test
10045     @@@DEnt:
10046     @@@@test:value:
10047     <?xml version="1.0" standalone="yes"?>
10048     <p>&entity;</p>
10049     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 4)..(2, 11); }
10050     @@XMLTest:
10051     @@@QName: xp.element.content.ger.entity.declared.nodtd.3.test
10052     @@@DEnt:
10053     @@@@test:value:
10054     <?xml version="1.0" standalone="no"?>
10055     <p>&entity;</p>
10056     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 4)..(2, 11); }
10057     @@XMLTest:
10058     @@@QName: xp.element.content.ger.entity.declared.nodtd.-1.test
10059     @@@DEnt:
10060     @@@@test:value:
10061     <p>&lt;&gt;&amp;&quot;&apos;</p>
10062     @@@test:domTree:
10063     document {
10064     element {
10065     text-content: '<>&"' U+0027;
10066     }
10067     }
10068     @@XMLTest:
10069     @@@QName: xp.element.content.ger.entity.declared.nopref.1.test
10070     @@@DEnt:
10071     @@@@test:value:
10072     <!DOCTYPE p []>
10073     <p>&entity;</p>
10074     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 4)..(2, 11); }
10075     @@XMLTest:
10076     @@@QName: xp.element.content.ger.entity.declared.nopref.2.test
10077     @@@DEnt:
10078     @@@@test:value:
10079     <!DOCTYPE p [
10080     <!ENTITY other "aa">
10081     <!ENTITY % another "aa">
10082     ]>
10083     <p>&entity;</p>
10084     @@@c:erred: <[[xp|wf-entity-declared]]> { (5, 4)..(5, 11); }
10085     @@XMLTest:
10086     @@@QName: xp.element.content.ger.entity.declared.nopref.3.test
10087     @@@DEnt:
10088     @@@@test:value:
10089     <?xml version="1.0" standalone="yes"?>
10090     <!DOCTYPE p []>
10091     <p>&entity;</p>
10092     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 4)..(3, 11); }
10093     @@XMLTest:
10094     @@@QName: xp.element.content.ger.entity.declared.nopref.4.test
10095     @@@DEnt:
10096     @@@@test:value:
10097     <?xml version="1.0" standalone="no"?>
10098     <!DOCTYPE p []>
10099     <p>&entity;</p>
10100     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 4)..(3, 11); }
10101     @@XMLTest:
10102     @@@QName: xp.element.content.ger.entity.declared.nopref.5.test
10103     @@@DEnt:
10104     @@@@test:value:
10105     <?xml version="1.0" standalone="yes"?>
10106     <!DOCTYPE p [
10107     <!ENTITY other "aa">
10108     <!ENTITY % another "aa">
10109     ]>
10110     <p>&entity;</p>
10111     @@@c:erred: <[[xp|wf-entity-declared]]> { (6, 4)..(6, 11); }
10112     @@XMLTest:
10113     @@@QName: xp.element.content.ger.entity.declared.nopref.6.test
10114     @@@DEnt:
10115     @@@@test:value:
10116     <?xml version="1.0" standalone="no"?>
10117     <!DOCTYPE p [
10118     <!ENTITY other "aa">
10119     <!ENTITY % another "aa">
10120     ]>
10121     <p>&entity;</p>
10122     @@@c:erred: <[[xp|wf-entity-declared]]> { (6, 4)..(6, 11); }
10123     @@XMLTest:
10124     @@@QName: xp.element.content.ger.entity.declared.nopref.-1.test
10125     @@@DEnt:
10126     @@@@test:value:
10127     <!DOCTYPE p [
10128     <!ENTITY entity "value">
10129     ]>
10130     <p>&entity;</p>
10131 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
10132 wakaba 1.19 @@@test:domTree:
10133     document {
10134     document-type {
10135     general-entity {
10136     node-name: 'entity';
10137     text-content: 'value';
10138     }
10139     }
10140     element {
10141 wakaba 1.20 general-entity-reference {
10142 wakaba 1.19 node-name: 'entity';
10143 wakaba 1.34 manakai-expanded: true;
10144 wakaba 1.19 text-content: 'value';
10145     }
10146     }
10147     }
10148     @@XMLTest:
10149     @@@QName: xp.element.content.ger.entity.declared.nopref.-2.test
10150     @@@DEnt:
10151     @@@@test:value:
10152     <!DOCTYPE p [
10153     <!ENTITY entity "value">
10154     <!ENTITY another SYSTEM "another">
10155     ]>
10156     <p>&entity;</p>
10157 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
10158 wakaba 1.19 @@@test:domTree:
10159     document {
10160     document-type {
10161     general-entity {
10162     node-name: 'entity';
10163     text-content: 'value';
10164     }
10165 wakaba 1.20 general-entity {
10166     node-name: 'another';
10167     public-id: null;
10168     system-id: 'another';
10169     }
10170 wakaba 1.19 }
10171     element {
10172 wakaba 1.20 general-entity-reference {
10173 wakaba 1.19 node-name: 'entity';
10174 wakaba 1.34 manakai-expanded: true;
10175 wakaba 1.19 text-content: 'value';
10176     }
10177     }
10178     }
10179     @@XMLTest:
10180     @@@QName: xp.element.content.ger.entity.declared.standalone.1.test
10181     @@@DEnt:
10182     @@@@test:value:
10183     <?xml version="1.0" standalone="yes"?>
10184     <p>&entity;</p>
10185     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 4)..(2, 11); }
10186     @@XMLTest:
10187     @@@QName: xp.element.content.ger.entity.declared.standalone.2.test
10188     @@@DEnt:
10189     @@@@test:value:
10190     <?xml version="1.0" standalone="yes"?>
10191     <!DOCTYPE p []>
10192     <p>&entity;</p>
10193     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 4)..(3, 11); }
10194     @@XMLTest:
10195     @@@QName: xp.element.content.ger.entity.declared.standalone.3.test
10196     @@@DEnt:
10197     @@@@test:value:
10198     <?xml version="1.0" standalone="yes"?>
10199     <!DOCTYPE p [
10200     <!ENTITY % para "<!-- -->">
10201     %para;
10202     ]>
10203     <p>&entity;</p>
10204     @@@c:erred: <[[xp|wf-entity-declared]]> { (6, 4)..(6, 11); }
10205     @@XMLTest:
10206     @@@QName: xp.element.content.ger.entity.declared.standalone.-1.test
10207     @@@DEnt:
10208     @@@@test:value:
10209     <?xml version="1.0" standalone="no"?>
10210     <!DOCTYPE p [
10211     <!ENTITY % para "<!-- -->">
10212     %para;
10213     ]>
10214     <p>&entity;</p>
10215     @@@test:domTree:
10216     document {
10217     document-type { }
10218     element {
10219     general-entity-reference {
10220 wakaba 1.34 manakai-expanded: false;
10221 wakaba 1.19 }
10222     }
10223     }
10224     @@XMLTest:
10225     @@@QName: xp.element.content.ger.entity.declared.standalone.-2.test
10226     @@@DEnt:
10227     @@@@test:value:
10228     <!DOCTYPE p [
10229     <!ENTITY % para "<!-- -->">
10230     %para;
10231     ]>
10232     <p>&entity;</p>
10233     @@@test:domTree:
10234     document {
10235     document-type { }
10236     element {
10237     general-entity-reference {
10238 wakaba 1.34 manakai-expanded: false;
10239 wakaba 1.19 }
10240     }
10241     }
10242     @@XMLTest:
10243     @@@QName: xp.element.content.ger.entity.declared.standalone.4.test
10244     @@@DEnt:
10245     @@@@test:value:
10246     <?xml version="1.0" standalone="yes"?>
10247     <!DOCTYPE p [
10248     <!ENTITY % para SYSTEM "para">
10249     %para;
10250     ]>
10251     <p>&entity;</p>
10252     @@@c:erred: <[[xp|wf-entity-declared]]> { (6, 4)..(6, 11); }
10253     @@XMLTest:
10254     @@@QName: xp.element.content.ger.entity.declared.standalone.-3.test
10255     @@@DEnt:
10256     @@@@test:value:
10257     <?xml version="1.0" standalone="no"?>
10258     <!DOCTYPE p [
10259     <!ENTITY % para SYSTEM "para">
10260     %para;
10261     ]>
10262     <p>&entity;</p>
10263     @@@test:domTree:
10264     document {
10265     document-type { }
10266     element {
10267     general-entity-reference {
10268 wakaba 1.34 manakai-expanded: false;
10269 wakaba 1.19 }
10270     }
10271     }
10272     @@XMLTest:
10273     @@@QName: xp.element.content.ger.entity.declared.standalone.-4.test
10274     @@@DEnt:
10275     @@@@test:value:
10276     <!DOCTYPE p [
10277     <!ENTITY % para SYSTEM "para">
10278     %para;
10279     ]>
10280     <p>&entity;</p>
10281     @@@test:domTree:
10282     document {
10283     document-type { }
10284     element {
10285     general-entity-reference {
10286 wakaba 1.34 manakai-expanded: false;
10287 wakaba 1.19 }
10288     }
10289     }
10290     @@XMLTest:
10291     @@@QName: xp.element.content.ger.entity.declared.standalone.5.test
10292     @@@DEnt:
10293     @@@@test:value:
10294     <?xml version="1.0" standalone="yes"?>
10295     <!DOCTYPE p SYSTEM "dtd">
10296     <p>&entity;</p>
10297     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 4)..(3, 11); }
10298     @@XMLTest:
10299     @@@QName: xp.element.content.ger.entity.declared.standalone.-5.test
10300     @@@DEnt:
10301     @@@@test:value:
10302     <?xml version="1.0" standalone="no"?>
10303     <!DOCTYPE p SYSTEM "dtd">
10304     <p>&entity;</p>
10305     @@@test:domTree:
10306     document {
10307     document-type { }
10308     element {
10309     general-entity-reference {
10310 wakaba 1.34 manakai-expanded: false;
10311 wakaba 1.19 }
10312     }
10313     }
10314     @@XMLTest:
10315     @@@QName: xp.element.content.ger.entity.declared.standalone.-6.test
10316     @@@DEnt:
10317     @@@@test:value:
10318     <!DOCTYPE p SYSTEM "dtd">
10319     <p>&entity;</p>
10320     @@@test:domTree:
10321     document {
10322     document-type { }
10323     element {
10324     general-entity-reference {
10325 wakaba 1.34 manakai-expanded: false;
10326 wakaba 1.19 }
10327     }
10328     }
10329    
10330 wakaba 1.20 @@XMLTest:
10331     @@@QName: xp.reptxt.element.content.ger.entity.declared.nopref.1.test
10332     @@@DEnt:
10333     @@@@test:value:
10334     <!DOCTYPE p [
10335     <!ENTITY c "&entity;">
10336     ]>
10337     <p>&c;</p>
10338     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
10339     @@XMLTest:
10340     @@@QName: xp.reptxt.element.content.ger.entity.declared.nopref.2.test
10341     @@@DEnt:
10342     @@@@test:value:
10343     <!DOCTYPE p [
10344     <!ENTITY other "aa">
10345     <!ENTITY % another "aa">
10346     <!ENTITY c "&entity;">
10347     ]>
10348     <p>&c;</p>
10349     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
10350     @@XMLTest:
10351     @@@QName: xp.reptxt.element.content.ger.entity.declared.nopref.3.test
10352     @@@DEnt:
10353     @@@@test:value:
10354     <?xml version="1.0" standalone="yes"?>
10355     <!DOCTYPE p [
10356     <!ENTITY c "&entity;">
10357     ]>
10358     <p>&c;</p>
10359     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
10360     @@XMLTest:
10361     @@@QName: xp.reptxt.element.content.ger.entity.declared.nopref.4.test
10362     @@@DEnt:
10363     @@@@test:value:
10364     <?xml version="1.0" standalone="no"?>
10365     <!DOCTYPE p [
10366     <!ENTITY c "&entity;">
10367     ]>
10368     <p>&c;</p>
10369     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
10370     @@XMLTest:
10371     @@@QName: xp.reptxt.element.content.ger.entity.declared.nopref.5.test
10372     @@@DEnt:
10373     @@@@test:value:
10374     <?xml version="1.0" standalone="yes"?>
10375     <!DOCTYPE p [
10376     <!ENTITY other "aa">
10377     <!ENTITY % another "aa">
10378     <!ENTITY c "&entity;">
10379     ]>
10380     <p>&c;</p>
10381     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
10382     @@XMLTest:
10383     @@@QName: xp.reptxt.element.content.ger.entity.declared.nopref.6.test
10384     @@@DEnt:
10385     @@@@test:value:
10386     <?xml version="1.0" standalone="no"?>
10387     <!DOCTYPE p [
10388     <!ENTITY other "aa">
10389     <!ENTITY % another "aa">
10390     <!ENTITY c "&entity;">
10391     ]>
10392     <p>&c;</p>
10393     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
10394     @@XMLTest:
10395     @@@QName: xp.reptxt.element.content.ger.entity.declared.nopref.-1.test
10396     @@@DEnt:
10397     @@@@test:value:
10398     <!DOCTYPE p [
10399     <!ENTITY entity "value">
10400     <!ENTITY c "&entity;">
10401     ]>
10402     <p>&c;</p>
10403 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
10404 wakaba 1.20 @@@test:domTree:
10405     document {
10406     document-type {
10407     general-entity {
10408     node-name: 'entity';
10409     text-content: 'value';
10410     }
10411     general-entity {
10412     node-name: 'c';
10413     general-entity-reference {
10414     node-name: 'entity';
10415     text-content: 'value';
10416     }
10417     }
10418     }
10419     element {
10420     general-entity-reference {
10421     node-name: 'c';
10422     general-entity-reference {
10423     node-name: 'entity';
10424     text-content: 'value';
10425     }
10426     }
10427     }
10428     }
10429     @@XMLTest:
10430     @@@QName: xp.reptxt.element.content.ger.entity.declared.nopref.-2.test
10431     @@@DEnt:
10432     @@@@test:value:
10433     <!DOCTYPE p [
10434     <!ENTITY entity "value">
10435     <!ENTITY another SYSTEM "another">
10436     <!ENTITY c "&entity;">
10437     ]>
10438     <p>&c;</p>
10439 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
10440 wakaba 1.20 @@@test:domTree:
10441     document {
10442     document-type {
10443     general-entity {
10444     node-name: 'entity';
10445     text-content: 'value';
10446     }
10447     general-entity {
10448     node-name: 'c';
10449     general-entity-reference {
10450     node-name: 'entity';
10451 wakaba 1.34 manakai-expanded: true;
10452 wakaba 1.20 text-content: 'value';
10453     }
10454     }
10455     general-entity {
10456     node-name: 'another';
10457     public-id: null;
10458     system-id: 'another';
10459     has-replacement-tree: false;
10460     }
10461     }
10462     element {
10463     general-entity-reference {
10464     node-name: 'c';
10465 wakaba 1.34 manakai-expanded: true;
10466 wakaba 1.20 general-entity-reference {
10467     node-name: 'entity';
10468 wakaba 1.34 manakai-expanded: true;
10469 wakaba 1.20 text-content: 'value';
10470     }
10471     }
10472     }
10473     }
10474     @@XMLTest:
10475     @@@QName: xp.reptxt.element.content.ger.entity.declared.standalone.2.test
10476     @@@DEnt:
10477     @@@@test:value:
10478     <?xml version="1.0" standalone="yes"?>
10479     <!DOCTYPE p [
10480     <!ENTITY c "&entity;">
10481     ]>
10482     <p>&c;</p>
10483     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
10484     @@XMLTest:
10485     @@@QName: xp.reptxt.element.content.ger.entity.declared.standalone.3.test
10486     @@@DEnt:
10487     @@@@test:value:
10488     <?xml version="1.0" standalone="yes"?>
10489     <!DOCTYPE p [
10490     <!ENTITY % para "<!-- -->">
10491     %para;
10492     <!ENTITY c "&entity;">
10493     ]>
10494     <p>&c;</p>
10495     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
10496     @@XMLTest:
10497     @@@QName: xp.reptxt.element.content.ger.entity.declared.standalone.-1.test
10498     @@@DEnt:
10499     @@@@test:value:
10500     <?xml version="1.0" standalone="no"?>
10501     <!DOCTYPE p [
10502     <!ENTITY c "&entity;">
10503     <!ENTITY % para "<!-- -->">
10504     %para;
10505     ]>
10506     <p>&c;</p>
10507 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
10508 wakaba 1.20 @@@test:domTree:
10509     document {
10510     document-type {
10511     general-entity {
10512     node-name: 'c';
10513     general-entity-reference {
10514     node-name: 'entity';
10515 wakaba 1.34 manakai-expanded: false;
10516 wakaba 1.20 }
10517     }
10518     }
10519     element {
10520     general-entity-reference {
10521     node-name: 'c';
10522     general-entity-reference {
10523     node-name: 'entity';
10524 wakaba 1.34 manakai-expanded: false;
10525 wakaba 1.20 }
10526     }
10527     }
10528     }
10529     @@XMLTest:
10530     @@@QName:
10531     xp.reptxt.element.content.ger.entity.declared.standalone.-1.2.test
10532     @@@DEnt:
10533     @@@@test:value:
10534     <?xml version="1.0" standalone="no"?>
10535     <!DOCTYPE p [
10536     <!ENTITY % para "<!-- -->">
10537     %para;
10538     <!ENTITY c "&entity;">
10539     ]>
10540     <p>&c;</p>
10541     @@@test:domTree:
10542     document {
10543     document-type { }
10544     element {
10545     general-entity-reference {
10546     node-name: 'c';
10547 wakaba 1.34 manakai-expanded: false;
10548 wakaba 1.20 }
10549     }
10550     }
10551     @@XMLTest:
10552     @@@QName: xp.reptxt.element.content.ger.entity.declared.standalone.-2.test
10553     @@@DEnt:
10554     @@@@test:value:
10555     <!DOCTYPE p [
10556     <!ENTITY c "&entity;">
10557     <!ENTITY % para "<!-- -->">
10558     %para;
10559     ]>
10560     <p>&c;</p>
10561     @@@test:domTree:
10562     document {
10563     document-type { }
10564     element {
10565     general-entity-reference {
10566     node-name: 'c';
10567 wakaba 1.34 manakai-expanded: true;
10568 wakaba 1.20 general-entity-reference {
10569     node-name: 'entity';
10570 wakaba 1.34 manakai-expanded: false;
10571 wakaba 1.20 }
10572     }
10573     }
10574     }
10575     @@XMLTest:
10576     @@@QName:
10577     xp.reptxt.element.content.ger.entity.declared.standalone.-2.2.test
10578     @@@DEnt:
10579     @@@@test:value:
10580     <!DOCTYPE p [
10581     <!ENTITY % para "<!-- -->">
10582     %para;
10583     <!ENTITY c "&entity;">
10584     ]>
10585     <p>&c;</p>
10586     @@@test:domTree:
10587     document {
10588     document-type { }
10589     element {
10590     general-entity-reference {
10591     node-name: 'c';
10592 wakaba 1.34 manakai-expanded: false;
10593 wakaba 1.20 }
10594     }
10595     }
10596     @@XMLTest:
10597     @@@QName: xp.reptxt.element.content.ger.entity.declared.standalone.4.test
10598     @@@DEnt:
10599     @@@@test:value:
10600     <?xml version="1.0" standalone="yes"?>
10601     <!DOCTYPE p [
10602     <!ENTITY % para SYSTEM "para">
10603     %para;
10604     <!ENTITY c "&entity;">
10605     ]>
10606     <p>&c;</p>
10607     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
10608     @@XMLTest:
10609     @@@QName: xp.reptxt.element.content.ger.entity.declared.standalone.-3.test
10610     @@@DEnt:
10611     @@@@test:value:
10612     <?xml version="1.0" standalone="no"?>
10613     <!DOCTYPE p [
10614     <!ENTITY c "&entity;">
10615     <!ENTITY % para SYSTEM "para">
10616     %para;
10617     ]>
10618     <p>&c;</p>
10619     @@@test:domTree:
10620     document {
10621     document-type { }
10622     element {
10623     general-entity-reference {
10624     node-name: 'c';
10625 wakaba 1.34 manakai-expanded: true;
10626 wakaba 1.20 general-entity-reference {
10627     node-name: 'entity';
10628 wakaba 1.34 manakai-expanded: false;
10629 wakaba 1.20 }
10630     }
10631     }
10632     }
10633     @@XMLTest:
10634     @@@QName:
10635     xp.reptxt.element.content.ger.entity.declared.standalone.-3.2.test
10636     @@@DEnt:
10637     @@@@test:value:
10638     <?xml version="1.0" standalone="no"?>
10639     <!DOCTYPE p [
10640     <!ENTITY % para SYSTEM "para">
10641     %para;
10642     <!ENTITY c "&entity;">
10643     ]>
10644     <p>&c;</p>
10645     @@@test:domTree:
10646     document {
10647     document-type { }
10648     element {
10649     general-entity-reference {
10650     node-name: 'c';
10651 wakaba 1.34 manakai-expanded: false;
10652 wakaba 1.20 }
10653     }
10654     }
10655     @@XMLTest:
10656     @@@QName: xp.reptxt.element.content.ger.entity.declared.standalone.-4.test
10657     @@@DEnt:
10658     @@@@test:value:
10659     <!DOCTYPE p [
10660     <!ENTITY c "&entity;">
10661     <!ENTITY % para SYSTEM "para">
10662     %para;
10663     ]>
10664     <p>&c;</p>
10665     @@@test:domTree:
10666     document {
10667     document-type { }
10668     element {
10669     general-entity-reference {
10670     node-name: 'c';
10671 wakaba 1.34 manakai-expanded: true;
10672 wakaba 1.20 general-entity-reference {
10673     node-name: 'entity';
10674 wakaba 1.34 manakai-expanded: false;
10675 wakaba 1.20 }
10676     }
10677     }
10678     }
10679     @@XMLTest:
10680     @@@QName:
10681     xp.reptxt.element.content.ger.entity.declared.standalone.-4.2.test
10682     @@@DEnt:
10683     @@@@test:value:
10684     <!DOCTYPE p [
10685     <!ENTITY % para SYSTEM "para">
10686     %para;
10687     <!ENTITY c "&entity;">
10688     ]>
10689     <p>&c;</p>
10690     @@@test:domTree:
10691     document {
10692     document-type { }
10693     element {
10694     general-entity-reference {
10695     node-name: 'c';
10696 wakaba 1.34 manakai-expanded: false;
10697 wakaba 1.20 }
10698     }
10699     }
10700     @@XMLTest:
10701     @@@QName: xp.reptxt.element.content.ger.entity.declared.standalone.5.test
10702     @@@DEnt:
10703     @@@@test:value:
10704     <?xml version="1.0" standalone="yes"?>
10705     <!DOCTYPE p SYSTEM "dtd" [
10706     <!ENTITY c "&entity;">
10707     ]>
10708     <p>&c;</p>
10709     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
10710     @@XMLTest:
10711     @@@QName: xp.reptxt.element.content.ger.entity.declared.standalone.-5.test
10712     @@@DEnt:
10713     @@@@test:value:
10714     <?xml version="1.0" standalone="no"?>
10715     <!DOCTYPE p SYSTEM "dtd" [
10716     <!ENTITY c "&entity;">
10717     ]>
10718     <p>&c;</p>
10719     @@@test:domTree:
10720     document {
10721     document-type { }
10722     element {
10723     general-entity-reference {
10724     node-name: 'c';
10725 wakaba 1.34 manakai-expanded: true;
10726 wakaba 1.20 general-entity-reference {
10727     node-name: 'entity';
10728 wakaba 1.34 manakai-expanded: false;
10729 wakaba 1.20 }
10730     }
10731     }
10732     }
10733     @@XMLTest:
10734     @@@QName: xp.reptxt.element.content.ger.entity.declared.standalone.-6.test
10735     @@@DEnt:
10736     @@@@test:value:
10737     <!DOCTYPE p SYSTEM "dtd" [<!ENTITY c "&entity;">]>
10738     <p>&c;</p>
10739     @@@test:domTree:
10740     document {
10741     document-type { }
10742     element {
10743     general-entity-reference {
10744     node-name: 'c';
10745 wakaba 1.34 manakai-expanded: true;
10746 wakaba 1.20 general-entity-reference {
10747     node-name: 'entity';
10748 wakaba 1.34 manakai-expanded: false;
10749 wakaba 1.20 }
10750     }
10751     }
10752     }
10753    
10754     @@XMLTest:
10755     @@@QName: xp.attval.ger.entity.declared.nodtd.1.test
10756     @@@DEnt:
10757     @@@@test:value:
10758     <p a="&entity;"/>
10759     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 7)..(1, 14); }
10760     @@XMLTest:
10761     @@@QName: xp.attval.ger.entity.declared.nodtd.2.test
10762     @@@DEnt:
10763     @@@@test:value:
10764     <?xml version="1.0" standalone="yes"?>
10765     <p a="&entity;"/>
10766     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 7)..(2, 14); }
10767     @@XMLTest:
10768     @@@QName: xp.attval.ger.entity.declared.nodtd.3.test
10769     @@@DEnt:
10770     @@@@test:value:
10771     <?xml version="1.0" standalone="no"?>
10772     <p a="&entity;"/>
10773     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 7)..(2, 14); }
10774     @@XMLTest:
10775     @@@QName: xp.attval.ger.entity.declared.nodtd.-1.test
10776     @@@DEnt:
10777     @@@@test:value:
10778     <p a="&lt;&gt;&amp;&quot;&apos;"/>
10779     @@@test:domTree:
10780     document {
10781     element {
10782     attribute {
10783     node-name: 'a';
10784     text-content: '<>&"' U+0027;
10785     }
10786     }
10787     }
10788     @@XMLTest:
10789     @@@QName: xp.attval.ger.entity.declared.nopref.1.test
10790     @@@DEnt:
10791     @@@@test:value:
10792     <!DOCTYPE p []>
10793     <p a="&entity;"/>
10794     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 7)..(2, 14); }
10795     @@XMLTest:
10796     @@@QName: xp.attval.ger.entity.declared.nopref.2.test
10797     @@@DEnt:
10798     @@@@test:value:
10799     <!DOCTYPE p [
10800     <!ENTITY other "aa">
10801     <!ENTITY % another "aa">
10802     ]>
10803     <p a="&entity;"/>
10804     @@@c:erred: <[[xp|wf-entity-declared]]> { (5, 7)..(5, 14); }
10805     @@XMLTest:
10806     @@@QName: xp.attval.ger.entity.declared.nopref.3.test
10807     @@@DEnt:
10808     @@@@test:value:
10809     <?xml version="1.0" standalone="yes"?>
10810     <!DOCTYPE p []>
10811     <p a="&entity;"/>
10812     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 7)..(3, 14); }
10813     @@XMLTest:
10814     @@@QName: xp.attval.ger.entity.declared.nopref.4.test
10815     @@@DEnt:
10816     @@@@test:value:
10817     <?xml version="1.0" standalone="no"?>
10818     <!DOCTYPE p []>
10819     <p a="&entity;"/>
10820     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 7)..(3, 14); }
10821     @@XMLTest:
10822     @@@QName: xp.attval.ger.entity.declared.nopref.5.test
10823     @@@DEnt:
10824     @@@@test:value:
10825     <?xml version="1.0" standalone="yes"?>
10826     <!DOCTYPE p [
10827     <!ENTITY other "aa">
10828     <!ENTITY % another "aa">
10829     ]>
10830     <p a="&entity;"/>
10831     @@@c:erred: <[[xp|wf-entity-declared]]> { (6, 7)..(6, 14); }
10832     @@XMLTest:
10833     @@@QName: xp.attval.ger.entity.declared.nopref.6.test
10834     @@@DEnt:
10835     @@@@test:value:
10836     <?xml version="1.0" standalone="no"?>
10837     <!DOCTYPE p [
10838     <!ENTITY other "aa">
10839     <!ENTITY % another "aa">
10840     ]>
10841     <p a="&entity;"/>
10842     @@@c:erred: <[[xp|wf-entity-declared]]> { (6, 7)..(6, 14); }
10843     @@XMLTest:
10844     @@@QName: xp.attval.ger.entity.declared.nopref.-1.test
10845     @@@DEnt:
10846     @@@@test:value:
10847     <!DOCTYPE p [
10848     <!ENTITY entity "value">
10849     ]>
10850     <p a="&entity;"/>
10851 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
10852 wakaba 1.20 @@@test:domTree:
10853     document {
10854     document-type {
10855     general-entity {
10856     node-name: 'entity';
10857     text-content: 'value';
10858     }
10859     }
10860     element {
10861     attribute {
10862     node-name: 'a';
10863     general-entity-reference {
10864     node-name: 'entity';
10865 wakaba 1.34 manakai-expanded: true;
10866 wakaba 1.20 text-content: 'value';
10867     }
10868     }
10869     }
10870     }
10871     @@XMLTest:
10872     @@@QName: xp.attval.ger.entity.declared.nopref.-2.test
10873     @@@DEnt:
10874     @@@@test:value:
10875     <!DOCTYPE p [
10876     <!ENTITY entity "value">
10877     <!ENTITY another SYSTEM "another">
10878     ]>
10879     <p a="&entity;"/>
10880 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
10881 wakaba 1.20 @@@test:domTree:
10882     document {
10883     document-type {
10884     general-entity {
10885     node-name: 'entity';
10886     text-content: 'value';
10887     has-replacement-tree: true;
10888     }
10889     general-entity {
10890     node-name: 'another';
10891     public-id: null;
10892     system-id: 'another';
10893     has-replacement-tree: false;
10894     }
10895     }
10896     element {
10897     attribute {
10898     node-name: 'a';
10899     general-entity-reference {
10900     node-name: 'entity';
10901 wakaba 1.34 manakai-expanded: true;
10902 wakaba 1.20 text-content: 'value';
10903     }
10904     }
10905     }
10906     }
10907     @@XMLTest:
10908     @@@QName: xp.attval.ger.entity.declared.standalone.1.test
10909     @@@DEnt:
10910     @@@@test:value:
10911     <?xml version="1.0" standalone="yes"?>
10912     <p a="&entity;"/>
10913     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 7)..(2, 14); }
10914     @@XMLTest:
10915     @@@QName: xp.attval.ger.entity.declared.standalone.2.test
10916     @@@DEnt:
10917     @@@@test:value:
10918     <?xml version="1.0" standalone="yes"?>
10919     <!DOCTYPE p []>
10920     <p a="&entity;"/>
10921     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 7)..(3, 14); }
10922     @@XMLTest:
10923     @@@QName: xp.attval.ger.entity.declared.standalone.3.test
10924     @@@DEnt:
10925     @@@@test:value:
10926     <?xml version="1.0" standalone="yes"?>
10927     <!DOCTYPE p [
10928     <!ENTITY % para "<!-- -->">
10929     %para;
10930     ]>
10931     <p a="&entity;"/>
10932     @@@c:erred: <[[xp|wf-entity-declared]]> { (6, 7)..(6, 14); }
10933     @@XMLTest:
10934     @@@QName: xp.attval.ger.entity.declared.standalone.-1.test
10935     @@@DEnt:
10936     @@@@test:value:
10937     <?xml version="1.0" standalone="no"?>
10938     <!DOCTYPE p [
10939     <!ENTITY % para "<!-- -->">
10940     %para;
10941     ]>
10942     <p a="&entity;"/>
10943     @@@test:domTree:
10944     document {
10945     document-type { }
10946     element {
10947     attribute {
10948     node-name: 'a';
10949     general-entity-reference {
10950 wakaba 1.34 manakai-expanded: false;
10951 wakaba 1.20 }
10952     }
10953     }
10954     }
10955     @@XMLTest:
10956     @@@QName: xp.attval.ger.entity.declared.standalone.-2.test
10957     @@@DEnt:
10958     @@@@test:value:
10959     <!DOCTYPE p [
10960     <!ENTITY % para "<!-- -->">
10961     %para;
10962     ]>
10963     <p a="&entity;"/>
10964     @@@test:domTree:
10965     document {
10966     document-type { }
10967     element {
10968     attribute {
10969     node-name: 'a';
10970     general-entity-reference {
10971 wakaba 1.34 manakai-expanded: false;
10972 wakaba 1.20 }
10973     }
10974     }
10975     }
10976     @@XMLTest:
10977     @@@QName: xp.attval.ger.entity.declared.standalone.4.test
10978     @@@DEnt:
10979     @@@@test:value:
10980     <?xml version="1.0" standalone="yes"?>
10981     <!DOCTYPE p [
10982     <!ENTITY % para SYSTEM "para">
10983     %para;
10984     ]>
10985     <p a="&entity;"/>
10986     @@@c:erred: <[[xp|wf-entity-declared]]> { (6, 7)..(6, 14); }
10987     @@XMLTest:
10988     @@@QName: xp.attval.ger.entity.declared.standalone.-3.test
10989     @@@DEnt:
10990     @@@@test:value:
10991     <?xml version="1.0" standalone="no"?>
10992     <!DOCTYPE p [
10993     <!ENTITY % para SYSTEM "para">
10994     %para;
10995     ]>
10996     <p a="&entity;"/>
10997     @@@test:domTree:
10998     document {
10999     document-type { }
11000     element {
11001     attribute {
11002     node-name: 'a';
11003     general-entity-reference {
11004 wakaba 1.34 manakai-expanded: false;
11005 wakaba 1.20 }
11006     }
11007     }
11008     }
11009     @@XMLTest:
11010     @@@QName: xp.attval.ger.entity.declared.standalone.-4.test
11011     @@@DEnt:
11012     @@@@test:value:
11013     <!DOCTYPE p [
11014     <!ENTITY % para SYSTEM "para">
11015     %para;
11016     ]>
11017     <p a="&entity;"/>
11018     @@@test:domTree:
11019     document {
11020     document-type { }
11021     element {
11022     attribute {
11023     node-name: 'a';
11024     general-entity-reference {
11025 wakaba 1.34 manakai-expanded: false;
11026 wakaba 1.20 }
11027     }
11028     }
11029     }
11030     @@XMLTest:
11031     @@@QName: xp.attval.ger.entity.declared.standalone.5.test
11032     @@@DEnt:
11033     @@@@test:value:
11034     <?xml version="1.0" standalone="yes"?>
11035     <!DOCTYPE p SYSTEM "dtd">
11036     <p a="&entity;"/>
11037     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 7)..(3, 14); }
11038     @@XMLTest:
11039     @@@QName: xp.attval.ger.entity.declared.standalone.-5.test
11040     @@@DEnt:
11041     @@@@test:value:
11042     <?xml version="1.0" standalone="no"?>
11043     <!DOCTYPE p SYSTEM "dtd">
11044     <p a="&entity;"/>
11045     @@@test:domTree:
11046     document {
11047     document-type { }
11048     element {
11049     attribute {
11050     node-name: 'a';
11051     general-entity-reference {
11052 wakaba 1.34 manakai-expanded: false;
11053 wakaba 1.20 }
11054     }
11055     }
11056     }
11057     @@XMLTest:
11058     @@@QName: xp.attval.ger.entity.declared.standalone.-6.test
11059     @@@DEnt:
11060     @@@@test:value:
11061     <!DOCTYPE p SYSTEM "dtd">
11062     <p a="&entity;"/>
11063     @@@test:domTree:
11064     document {
11065     document-type { }
11066     element {
11067     attribute {
11068     node-name: 'a';
11069     general-entity-reference {
11070 wakaba 1.34 manakai-expanded: false;
11071 wakaba 1.20 }
11072     }
11073     }
11074     }
11075    
11076 wakaba 1.21 @@XMLTest:
11077 wakaba 1.22 @@@QName: xp.reptxt.attval.ger.entity.declared.nopref.1.test
11078 wakaba 1.21 @@@DEnt:
11079     @@@@test:value:
11080     <!DOCTYPE p [
11081 wakaba 1.22 <!ENTITY c "&entity;">
11082 wakaba 1.21 ]>
11083 wakaba 1.22 <p a="&c;"/>
11084     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11085 wakaba 1.21 @@XMLTest:
11086 wakaba 1.22 @@@QName: xp.reptxt.attval.ger.entity.declared.nopref.2.test
11087 wakaba 1.21 @@@DEnt:
11088     @@@@test:value:
11089     <!DOCTYPE p [
11090     <!ENTITY other "aa">
11091     <!ENTITY % another "aa">
11092 wakaba 1.22 <!ENTITY c "&entity;">
11093 wakaba 1.21 ]>
11094 wakaba 1.22 <p a="&c;"/>
11095     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11096 wakaba 1.21 @@XMLTest:
11097 wakaba 1.22 @@@QName: xp.reptxt.attval.ger.entity.declared.nopref.3.test
11098 wakaba 1.21 @@@DEnt:
11099     @@@@test:value:
11100     <?xml version="1.0" standalone="yes"?>
11101     <!DOCTYPE p [
11102 wakaba 1.22 <!ENTITY c "&entity;">
11103 wakaba 1.21 ]>
11104 wakaba 1.22 <p a="&c;"/>
11105     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11106 wakaba 1.21 @@XMLTest:
11107 wakaba 1.22 @@@QName: xp.reptxt.attval.ger.entity.declared.nopref.4.test
11108 wakaba 1.21 @@@DEnt:
11109     @@@@test:value:
11110     <?xml version="1.0" standalone="no"?>
11111     <!DOCTYPE p [
11112 wakaba 1.22 <!ENTITY c "&entity;">
11113 wakaba 1.21 ]>
11114 wakaba 1.22 <p a="&c;"/>
11115     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11116 wakaba 1.21 @@XMLTest:
11117 wakaba 1.22 @@@QName: xp.reptxt.attval.ger.entity.declared.nopref.5.test
11118 wakaba 1.21 @@@DEnt:
11119     @@@@test:value:
11120     <?xml version="1.0" standalone="yes"?>
11121     <!DOCTYPE p [
11122     <!ENTITY other "aa">
11123     <!ENTITY % another "aa">
11124 wakaba 1.22 <!ENTITY c "&entity;">
11125 wakaba 1.21 ]>
11126 wakaba 1.22 <p a="&c;"/>
11127     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11128 wakaba 1.21 @@XMLTest:
11129 wakaba 1.22 @@@QName: xp.reptxt.attval.ger.entity.declared.nopref.6.test
11130 wakaba 1.21 @@@DEnt:
11131     @@@@test:value:
11132     <?xml version="1.0" standalone="no"?>
11133     <!DOCTYPE p [
11134     <!ENTITY other "aa">
11135     <!ENTITY % another "aa">
11136 wakaba 1.22 <!ENTITY c "&entity;">
11137 wakaba 1.21 ]>
11138 wakaba 1.22 <p a="&c;"/>
11139     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11140 wakaba 1.21 @@XMLTest:
11141 wakaba 1.22 @@@QName: xp.reptxt.attval.ger.entity.declared.nopref.-1.test
11142 wakaba 1.21 @@@DEnt:
11143     @@@@test:value:
11144     <!DOCTYPE p [
11145     <!ENTITY entity "value">
11146 wakaba 1.22 <!ENTITY c "&entity;">
11147 wakaba 1.21 ]>
11148 wakaba 1.22 <p a="&c;"/>
11149 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
11150 wakaba 1.21 @@@test:domTree:
11151     document {
11152     document-type {
11153     general-entity {
11154     node-name: 'entity';
11155     text-content: 'value';
11156     }
11157 wakaba 1.22 general-entity {
11158     node-name: 'c';
11159     general-entity-reference {
11160     node-name: 'entity';
11161     text-content: 'value';
11162 wakaba 1.21 }
11163     }
11164     }
11165     element {
11166     attribute {
11167     node-name: 'a';
11168     general-entity-reference {
11169 wakaba 1.22 node-name: 'c';
11170     general-entity-reference {
11171     node-name: 'entity';
11172     text-content: 'value';
11173     }
11174 wakaba 1.21 }
11175     }
11176     }
11177     }
11178     @@XMLTest:
11179 wakaba 1.22 @@@QName: xp.reptxt.attval.ger.entity.declared.nopref.-2.test
11180 wakaba 1.21 @@@DEnt:
11181     @@@@test:value:
11182     <!DOCTYPE p [
11183     <!ENTITY entity "value">
11184     <!ENTITY another SYSTEM "another">
11185 wakaba 1.22 <!ENTITY c "&entity;">
11186 wakaba 1.21 ]>
11187 wakaba 1.22 <p a="&c;"/>
11188 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
11189 wakaba 1.21 @@@test:domTree:
11190     document {
11191     document-type {
11192     general-entity {
11193     node-name: 'entity';
11194     text-content: 'value';
11195 wakaba 1.22 }
11196     general-entity {
11197     node-name: 'c';
11198     general-entity-reference {
11199     node-name: 'entity';
11200     text-content: 'value';
11201     }
11202 wakaba 1.21 }
11203     general-entity {
11204     node-name: 'another';
11205     public-id: null;
11206     system-id: 'another';
11207     has-replacement-tree: false;
11208     }
11209     }
11210     element {
11211     attribute {
11212     node-name: 'a';
11213     general-entity-reference {
11214 wakaba 1.22 node-name: 'c';
11215     general-entity-reference {
11216     node-name: 'entity';
11217     text-content: 'value';
11218     }
11219 wakaba 1.21 }
11220     }
11221     }
11222     }
11223     @@XMLTest:
11224 wakaba 1.22 @@@QName: xp.reptxt.attval.ger.entity.declared.standalone.2.test
11225 wakaba 1.21 @@@DEnt:
11226     @@@@test:value:
11227     <?xml version="1.0" standalone="yes"?>
11228     <!DOCTYPE p [
11229 wakaba 1.22 <!ENTITY c "&entity;">
11230 wakaba 1.21 ]>
11231 wakaba 1.22 <p a="&c;"/>
11232     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11233 wakaba 1.21 @@XMLTest:
11234 wakaba 1.22 @@@QName: xp.reptxt.attval.ger.entity.declared.standalone.3.test
11235 wakaba 1.21 @@@DEnt:
11236     @@@@test:value:
11237     <?xml version="1.0" standalone="yes"?>
11238     <!DOCTYPE p [
11239     <!ENTITY % para "<!-- -->">
11240     %para;
11241 wakaba 1.22 <!ENTITY c "&entity;">
11242 wakaba 1.21 ]>
11243 wakaba 1.22 <p a="&c;"/>
11244     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11245 wakaba 1.21 @@XMLTest:
11246 wakaba 1.22 @@@QName: xp.reptxt.attval.ger.entity.declared.standalone.-1.test
11247 wakaba 1.21 @@@DEnt:
11248     @@@@test:value:
11249 wakaba 1.22 <?xml version="1.0" standalone="no"?>
11250 wakaba 1.21 <!DOCTYPE p [
11251 wakaba 1.22 <!ENTITY c "&entity;">
11252 wakaba 1.21 <!ENTITY % para "<!-- -->">
11253     %para;
11254     ]>
11255 wakaba 1.22 <p a="&c;"/>
11256 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
11257 wakaba 1.22 @@@test:domTree:
11258     document {
11259     document-type {
11260     general-entity {
11261     node-name: 'c';
11262     general-entity-reference {
11263     node-name: 'entity';
11264 wakaba 1.34 manakai-expanded: false;
11265 wakaba 1.22 }
11266     }
11267     }
11268     element {
11269     attribute {
11270     node-name: 'a';
11271     general-entity-reference {
11272     node-name: 'c';
11273     general-entity-reference {
11274     node-name: 'entity';
11275 wakaba 1.34 manakai-expanded: false;
11276 wakaba 1.22 }
11277     }
11278     }
11279     }
11280     }
11281 wakaba 1.21 @@XMLTest:
11282 wakaba 1.22 @@@QName:
11283     xp.reptxt.attval.ger.entity.declared.standalone.-1.2.test
11284 wakaba 1.21 @@@DEnt:
11285     @@@@test:value:
11286     <?xml version="1.0" standalone="no"?>
11287     <!DOCTYPE p [
11288     <!ENTITY % para "<!-- -->">
11289     %para;
11290 wakaba 1.22 <!ENTITY c "&entity;">
11291 wakaba 1.21 ]>
11292 wakaba 1.22 <p a="&c;"/>
11293     @@@test:domTree:
11294     document {
11295     document-type { }
11296     element {
11297     attribute {
11298     node-name: 'a';
11299     general-entity-reference {
11300     node-name: 'c';
11301 wakaba 1.34 manakai-expanded: false;
11302 wakaba 1.22 }
11303     }
11304     }
11305     }
11306 wakaba 1.21 @@XMLTest:
11307 wakaba 1.22 @@@QName: xp.reptxt.attval.ger.entity.declared.standalone.-2.test
11308 wakaba 1.21 @@@DEnt:
11309     @@@@test:value:
11310     <!DOCTYPE p [
11311 wakaba 1.22 <!ENTITY c "&entity;">
11312     <!ENTITY % para "<!-- -->">
11313     %para;
11314     ]>
11315     <p a="&c;"/>
11316     @@@test:domTree:
11317     document {
11318     document-type { }
11319     element {
11320     attribute {
11321     node-name: 'a';
11322     general-entity-reference {
11323     node-name: 'c';
11324 wakaba 1.34 manakai-expanded: true;
11325 wakaba 1.22 general-entity-reference {
11326     node-name: 'entity';
11327 wakaba 1.34 manakai-expanded: false;
11328 wakaba 1.22 }
11329     }
11330     }
11331     }
11332     }
11333     @@XMLTest:
11334     @@@QName:
11335     xp.reptxt.attval.ger.entity.declared.standalone.-2.2.test
11336     @@@DEnt:
11337     @@@@test:value:
11338     <!DOCTYPE p [
11339     <!ENTITY % para "<!-- -->">
11340     %para;
11341     <!ENTITY c "&entity;">
11342     ]>
11343     <p a="&c;"/>
11344     @@@test:domTree:
11345     document {
11346     document-type { }
11347     element {
11348     attribute {
11349     node-name: 'a';
11350     general-entity-reference {
11351     node-name: 'c';
11352 wakaba 1.34 manakai-expanded: false;
11353 wakaba 1.22 }
11354     }
11355     }
11356     }
11357     @@XMLTest:
11358     @@@QName: xp.reptxt.attval.ger.entity.declared.standalone.4.test
11359     @@@DEnt:
11360     @@@@test:value:
11361     <?xml version="1.0" standalone="yes"?>
11362     <!DOCTYPE p [
11363     <!ENTITY % para SYSTEM "para">
11364     %para;
11365     <!ENTITY c "&entity;">
11366     ]>
11367     <p a="&c;"/>
11368     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11369     @@XMLTest:
11370     @@@QName: xp.reptxt.attval.ger.entity.declared.standalone.-3.test
11371     @@@DEnt:
11372     @@@@test:value:
11373     <?xml version="1.0" standalone="no"?>
11374     <!DOCTYPE p [
11375     <!ENTITY c "&entity;">
11376     <!ENTITY % para SYSTEM "para">
11377     %para;
11378     ]>
11379     <p a="&c;"/>
11380     @@@test:domTree:
11381     document {
11382     document-type { }
11383     element {
11384     attribute {
11385     node-name: 'a';
11386     general-entity-reference {
11387     node-name: 'c';
11388 wakaba 1.34 manakai-expanded: true;
11389 wakaba 1.22 general-entity-reference {
11390     node-name: 'entity';
11391 wakaba 1.34 manakai-expanded: false;
11392 wakaba 1.22 }
11393     }
11394     }
11395     }
11396     }
11397     @@XMLTest:
11398     @@@QName:
11399     xp.reptxt.attval.ger.entity.declared.standalone.-3.2.test
11400     @@@DEnt:
11401     @@@@test:value:
11402     <?xml version="1.0" standalone="no"?>
11403     <!DOCTYPE p [
11404     <!ENTITY % para SYSTEM "para">
11405     %para;
11406     <!ENTITY c "&entity;">
11407     ]>
11408     <p a="&c;"/>
11409     @@@test:domTree:
11410     document {
11411     document-type { }
11412     element {
11413     attribute {
11414     node-name: 'a';
11415     general-entity-reference {
11416     node-name: 'c';
11417 wakaba 1.34 manakai-expanded: false;
11418 wakaba 1.22 }
11419     }
11420     }
11421     }
11422     @@XMLTest:
11423     @@@QName: xp.reptxt.attval.ger.entity.declared.standalone.-4.test
11424     @@@DEnt:
11425     @@@@test:value:
11426     <!DOCTYPE p [
11427     <!ENTITY c "&entity;">
11428     <!ENTITY % para SYSTEM "para">
11429     %para;
11430     ]>
11431     <p a="&c;"/>
11432     @@@test:domTree:
11433     document {
11434     document-type { }
11435     element {
11436     attribute {
11437     node-name: 'a';
11438     general-entity-reference {
11439     node-name: 'c';
11440 wakaba 1.34 manakai-expanded: true;
11441 wakaba 1.22 general-entity-reference {
11442     node-name: 'entity';
11443 wakaba 1.34 manakai-expanded: false;
11444 wakaba 1.22 }
11445     }
11446     }
11447     }
11448     }
11449     @@XMLTest:
11450     @@@QName:
11451     xp.reptxt.attval.ger.entity.declared.standalone.-4.2.test
11452     @@@DEnt:
11453     @@@@test:value:
11454     <!DOCTYPE p [
11455     <!ENTITY % para SYSTEM "para">
11456     %para;
11457     <!ENTITY c "&entity;">
11458     ]>
11459     <p a="&c;"/>
11460     @@@test:domTree:
11461     document {
11462     document-type { }
11463     element {
11464     attribute {
11465     node-name: 'a';
11466     general-entity-reference {
11467     node-name: 'c';
11468 wakaba 1.34 manakai-expanded: false;
11469 wakaba 1.22 }
11470     }
11471     }
11472     }
11473     @@XMLTest:
11474     @@@QName: xp.reptxt.attval.ger.entity.declared.standalone.5.test
11475     @@@DEnt:
11476     @@@@test:value:
11477     <?xml version="1.0" standalone="yes"?>
11478     <!DOCTYPE p SYSTEM "dtd" [
11479     <!ENTITY c "&entity;">
11480     ]>
11481     <p a="&c;"/>
11482     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11483     @@XMLTest:
11484     @@@QName: xp.reptxt.attval.ger.entity.declared.standalone.-5.test
11485     @@@DEnt:
11486     @@@@test:value:
11487     <?xml version="1.0" standalone="no"?>
11488     <!DOCTYPE p SYSTEM "dtd" [
11489     <!ENTITY c "&entity;">
11490     ]>
11491     <p a="&c;"/>
11492     @@@test:domTree:
11493     document {
11494     document-type { }
11495     element {
11496     attribute {
11497     node-name: 'a';
11498     general-entity-reference {
11499     node-name: 'c';
11500 wakaba 1.34 manakai-expanded: true;
11501 wakaba 1.22 general-entity-reference {
11502     node-name: 'entity';
11503 wakaba 1.34 manakai-expanded: false;
11504 wakaba 1.22 }
11505     }
11506     }
11507     }
11508     }
11509     @@XMLTest:
11510     @@@QName: xp.reptxt.attval.ger.entity.declared.standalone.-6.test
11511     @@@DEnt:
11512     @@@@test:value:
11513     <!DOCTYPE p SYSTEM "dtd" [<!ENTITY c "&entity;">]>
11514     <p a="&c;"/>
11515     @@@test:domTree:
11516     document {
11517     document-type { }
11518     element {
11519     attribute {
11520     node-name: 'a';
11521     general-entity-reference {
11522     node-name: 'c';
11523 wakaba 1.34 manakai-expanded: true;
11524 wakaba 1.22 general-entity-reference {
11525     node-name: 'entity';
11526 wakaba 1.34 manakai-expanded: false;
11527 wakaba 1.22 }
11528     }
11529     }
11530     }
11531     }
11532    
11533     @@XMLTest:
11534     @@@QName: xp.attlist.dup.entity.declared.1.test
11535     @@@DEnt:
11536     @@@@test:value:
11537     <!DOCTYPE p [
11538     <!ATTLIST p a CDATA "no-entity">
11539     <!ATTLIST p a CDATA "&entity;">
11540     ]>
11541     <p/>
11542     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 21)..(3, 29); }
11543     @@XMLTest:
11544     @@@QName: xp.attlist.dup.entity.declared.2.test
11545     @@@DEnt:
11546     @@@@test:value:
11547     <!DOCTYPE p [
11548     <!ATTLIST p a CDATA "no-entity"
11549     a CDATA "&entity;">
11550     ]>
11551     <p/>
11552     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 21)..(3, 29); }
11553     @@XMLTest:
11554     @@@QName: xp.attlist.unused.entity.declared.1.test
11555     @@@DEnt:
11556     @@@@test:value:
11557     <!DOCTYPE p [
11558     <!ATTLIST q a CDATA "&entity;">
11559     ]>
11560     <p/>
11561     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 21)..(2, 29); }
11562     @@XMLTest:
11563     @@@QName: xp.attlist.unused.entity.declared.2.test
11564     @@@DEnt:
11565     @@@@test:value:
11566     <!DOCTYPE p [
11567     <!ATTLIST p a CDATA "&entity;">
11568     ]>
11569     <p a="bb"/>
11570     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 21)..(2, 29); }
11571    
11572     @@XMLTest:
11573     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.nopref.1.test
11574     @@@DEnt:
11575     @@@@test:value:
11576     <!DOCTYPE p [
11577     <!ENTITY c "&entity;">
11578     <!ATTLIST p a CDATA "&c;">
11579     ]>
11580     <p/>
11581     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11582     @@XMLTest:
11583     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.nopref.2.test
11584     @@@DEnt:
11585     @@@@test:value:
11586     <!DOCTYPE p [
11587     <!ENTITY other "aa">
11588     <!ENTITY % another "aa">
11589     <!ENTITY c "&entity;">
11590     <!ATTLIST p a CDATA "&c;">
11591     ]>
11592     <p/>
11593     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11594     @@XMLTest:
11595     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.nopref.3.test
11596     @@@DEnt:
11597     @@@@test:value:
11598     <?xml version="1.0" standalone="yes"?>
11599     <!DOCTYPE p [
11600     <!ENTITY c "&entity;">
11601     <!ATTLIST p a CDATA "&c;">
11602     ]>
11603     <p/>
11604     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11605     @@XMLTest:
11606     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.nopref.4.test
11607     @@@DEnt:
11608     @@@@test:value:
11609     <?xml version="1.0" standalone="no"?>
11610     <!DOCTYPE p [
11611     <!ENTITY c "&entity;">
11612     <!ATTLIST p a CDATA "&c;">
11613     ]>
11614     <p/>
11615     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11616     @@XMLTest:
11617     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.nopref.5.test
11618     @@@DEnt:
11619     @@@@test:value:
11620     <?xml version="1.0" standalone="yes"?>
11621     <!DOCTYPE p [
11622     <!ENTITY other "aa">
11623     <!ENTITY % another "aa">
11624     <!ENTITY c "&entity;">
11625     <!ATTLIST p a CDATA "&c;">
11626     ]>
11627     <p/>
11628     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11629     @@XMLTest:
11630     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.nopref.6.test
11631     @@@DEnt:
11632     @@@@test:value:
11633     <?xml version="1.0" standalone="no"?>
11634     <!DOCTYPE p [
11635     <!ENTITY other "aa">
11636     <!ENTITY % another "aa">
11637     <!ENTITY c "&entity;">
11638     <!ATTLIST p a CDATA "&c;">
11639     ]>
11640     <p/>
11641     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11642     @@XMLTest:
11643     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.nopref.-1.test
11644     @@@DEnt:
11645     @@@@test:value:
11646     <!DOCTYPE p [
11647     <!ENTITY entity "value">
11648     <!ENTITY c "&entity;">
11649     <!ATTLIST p a CDATA "&c;">
11650     ]>
11651     <p/>
11652 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
11653 wakaba 1.22 @@@test:domTree:
11654     document {
11655     document-type {
11656     general-entity {
11657     node-name: 'entity';
11658     text-content: 'value';
11659     }
11660     general-entity {
11661     node-name: 'c';
11662     general-entity-reference {
11663     node-name: 'entity';
11664 wakaba 1.34 manakai-expanded: true;
11665 wakaba 1.22 text-content: 'value';
11666     }
11667     }
11668     element-type-definition {
11669     node-name: 'p';
11670     attribute-definition {
11671     node-name: 'a';
11672     general-entity-reference {
11673     node-name: 'c';
11674 wakaba 1.34 manakai-expanded: true;
11675 wakaba 1.22 general-entity-reference {
11676     node-name: 'entity';
11677 wakaba 1.34 manakai-expanded: true;
11678 wakaba 1.22 text-content: 'value';
11679     }
11680     }
11681     }
11682     }
11683     }
11684     element {
11685     attribute {
11686     node-name: 'a';
11687     specified: false;
11688     general-entity-reference {
11689     node-name: 'c';
11690     general-entity-reference {
11691     node-name: 'entity';
11692     text-content: 'value';
11693     }
11694     }
11695     }
11696     }
11697     }
11698     @@XMLTest:
11699     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.nopref.-2.test
11700     @@@DEnt:
11701     @@@@test:value:
11702     <!DOCTYPE p [
11703     <!ENTITY entity "value">
11704     <!ENTITY another SYSTEM "another">
11705     <!ENTITY c "&entity;">
11706     <!ATTLIST p a CDATA "&c;">
11707     ]>
11708     <p/>
11709 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
11710 wakaba 1.22 @@@test:domTree:
11711     document {
11712     document-type {
11713     general-entity {
11714     node-name: 'entity';
11715     text-content: 'value';
11716     }
11717     general-entity {
11718     node-name: 'c';
11719     general-entity-reference {
11720     node-name: 'entity';
11721     text-content: 'value';
11722     }
11723     }
11724     general-entity {
11725     node-name: 'another';
11726     public-id: null;
11727     system-id: 'another';
11728     has-replacement-tree: false;
11729     }
11730     element-type-definition {
11731     node-name: 'p';
11732     attribute-definition {
11733     node-name: 'a';
11734     general-entity-reference {
11735     node-name: 'c';
11736 wakaba 1.34 manakai-expanded: true;
11737 wakaba 1.22 general-entity-reference {
11738     node-name: 'entity';
11739 wakaba 1.34 manakai-expanded: true;
11740 wakaba 1.22 text-content: 'value';
11741     }
11742     }
11743     }
11744     }
11745     }
11746     element {
11747     attribute {
11748     node-name: 'a';
11749     specified: false;
11750     general-entity-reference {
11751     node-name: 'c';
11752     general-entity-reference {
11753     node-name: 'entity';
11754     text-content: 'value';
11755     }
11756     }
11757     }
11758     }
11759     }
11760     @@XMLTest:
11761     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.standalone.2.test
11762     @@@DEnt:
11763     @@@@test:value:
11764     <?xml version="1.0" standalone="yes"?>
11765     <!DOCTYPE p [
11766     <!ENTITY c "&entity;">
11767     <!ATTLIST p a CDATA "&c;">
11768     ]>
11769     <p/>
11770     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11771     @@XMLTest:
11772     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.standalone.3.test
11773     @@@DEnt:
11774     @@@@test:value:
11775     <?xml version="1.0" standalone="yes"?>
11776     <!DOCTYPE p [
11777     <!ENTITY % para "<!-- -->">
11778     %para;
11779     <!ENTITY c "&entity;">
11780     <!ATTLIST p a CDATA "&c;">
11781     ]>
11782     <p/>
11783     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11784     @@XMLTest:
11785     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.standalone.-1.test
11786     @@@DEnt:
11787     @@@@test:value:
11788     <?xml version="1.0" standalone="no"?>
11789     <!DOCTYPE p [
11790     <!ENTITY c "&entity;">
11791     <!ATTLIST p a CDATA "&c;">
11792     <!ENTITY % para "<!-- -->">
11793     %para;
11794     ]>
11795     <p/>
11796     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11797     @@XMLTest:
11798     @@@QName:
11799     xp.reptxt.attlist.attval.ger.entity.declared.standalone.-1.2.test
11800     @@@DEnt:
11801     @@@@test:value:
11802     <?xml version="1.0" standalone="no"?>
11803     <!DOCTYPE p [
11804     <!ENTITY % para "<!-- -->">
11805     %para;
11806     <!ENTITY c "&entity;">
11807     <!ATTLIST p a CDATA "&c;">
11808     ]>
11809     <p g="h"/>
11810     @@@test:domTree:
11811     document {
11812     document-type { }
11813     element {
11814     attribute {
11815     node-name: 'g';
11816     text-content: 'h';
11817     }
11818     }
11819     }
11820     @@XMLTest:
11821     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.standalone.-2.test
11822     @@@DEnt:
11823     @@@@test:value:
11824     <!DOCTYPE p [
11825     <!ENTITY c "&entity;">
11826     <!ATTLIST p a CDATA "&c;">
11827     <!ENTITY % para "<!-- -->">
11828     %para;
11829     ]>
11830     <p/>
11831     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11832     @@XMLTest:
11833     @@@QName:
11834     xp.reptxt.attlist.attval.ger.entity.declared.standalone.-2.2.test
11835     @@@DEnt:
11836     @@@@test:value:
11837     <!DOCTYPE p [
11838     <!ENTITY % para "<!-- -->">
11839     %para;
11840     <!ENTITY c "&entity;">
11841     <!ATTLIST p a CDATA "&c;">
11842     ]>
11843     <p g="h"/>
11844     @@@test:domTree:
11845     document {
11846     document-type { }
11847     element {
11848     attribute {
11849     node-name: 'g';
11850     text-content: 'h';
11851     }
11852     }
11853     }
11854     @@XMLTest:
11855     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.standalone.4.test
11856     @@@DEnt:
11857     @@@@test:value:
11858     <?xml version="1.0" standalone="yes"?>
11859     <!DOCTYPE p [
11860     <!ENTITY % para SYSTEM "para">
11861     %para;
11862     <!ENTITY c "&entity;">
11863     <!ATTLIST p a CDATA "&c;">
11864     ]>
11865     <p/>
11866     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11867     @@XMLTest:
11868     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.standalone.-3.test
11869     @@@DEnt:
11870     @@@@test:value:
11871     <?xml version="1.0" standalone="no"?>
11872     <!DOCTYPE p [
11873     <!ENTITY c "&entity;">
11874     <!ATTLIST p a CDATA "&c;">
11875     <!ENTITY % para SYSTEM "para">
11876     %para;
11877     ]>
11878     <p/>
11879     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11880     @@XMLTest:
11881     @@@QName:
11882     xp.reptxt.attlist.attval.ger.entity.declared.standalone.-3.2.test
11883     @@@DEnt:
11884     @@@@test:value:
11885     <?xml version="1.0" standalone="no"?>
11886     <!DOCTYPE p [
11887     <!ENTITY % para SYSTEM "para">
11888     %para;
11889     <!ENTITY c "&entity;">
11890     <!ATTLIST p a CDATA "&c;">
11891     ]>
11892     <p g="h"/>
11893     @@@test:domTree:
11894     document {
11895     document-type { }
11896     element {
11897     attribute {
11898     node-name: 'g';
11899     text-content: 'h';
11900     }
11901     }
11902     }
11903     @@XMLTest:
11904     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.standalone.-4.test
11905     @@@DEnt:
11906     @@@@test:value:
11907     <!DOCTYPE p [
11908     <!ENTITY c "&entity;">
11909     <!ATTLIST p a CDATA "&c;">
11910     <!ENTITY % para SYSTEM "para">
11911     %para;
11912     ]>
11913     <p/>
11914     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11915     @@XMLTest:
11916     @@@QName:
11917     xp.reptxt.attlist.attval.ger.entity.declared.standalone.-4.2.test
11918     @@@DEnt:
11919     @@@@test:value:
11920     <!DOCTYPE p [
11921     <!ENTITY % para SYSTEM "para">
11922     %para;
11923     <!ENTITY c "&entity;">
11924     <!ATTLIST p a CDATA "&c;">
11925     ]>
11926     <p g="h"/>
11927     @@@test:domTree:
11928     document {
11929     document-type { }
11930     element {
11931     attribute {
11932     node-name: 'g';
11933     text-content: 'h';
11934     }
11935     }
11936     }
11937     @@XMLTest:
11938     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.standalone.5.test
11939     @@@DEnt:
11940     @@@@test:value:
11941     <?xml version="1.0" standalone="yes"?>
11942     <!DOCTYPE p SYSTEM "dtd" [
11943     <!ENTITY c "&entity;">
11944     <!ATTLIST p a CDATA "&c;">
11945     ]>
11946     <p/>
11947     @@@c:erred: <[[xp|wf-entity-declared]]> { (1, 1)..(1, 8); }
11948     @@XMLTest:
11949     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.standalone.-5.test
11950     @@@DEnt:
11951     @@@@test:value:
11952     <?xml version="1.0" standalone="no"?>
11953     <!DOCTYPE p SYSTEM "dtd" [
11954     <!ENTITY c "&entity;">
11955     <!ATTLIST p a CDATA "&c;">
11956     ]>
11957     <p/>
11958     @@@test:domTree:
11959     document {
11960     document-type { }
11961     element {
11962     attribute {
11963     node-name: 'a';
11964     specified: false;
11965     general-entity-reference {
11966     node-name: 'c';
11967 wakaba 1.34 manakai-expanded: true;
11968 wakaba 1.22 general-entity-reference {
11969     node-name: 'entity';
11970 wakaba 1.34 manakai-expanded: false;
11971 wakaba 1.22 }
11972     }
11973     }
11974     }
11975     }
11976     @@XMLTest:
11977     @@@QName: xp.reptxt.attlist.attval.ger.entity.declared.standalone.-6.test
11978     @@@DEnt:
11979     @@@@test:value:
11980     <!DOCTYPE p SYSTEM "dtd" [<!ENTITY c "&entity;">
11981     <!ATTLIST p a CDATA "&c;">
11982     ]>
11983     <p/>
11984     @@@test:domTree:
11985     document {
11986     document-type { }
11987     element {
11988     attribute {
11989     node-name: 'a';
11990     specified: false;
11991     general-entity-reference {
11992     node-name: 'c';
11993 wakaba 1.34 manakai-expanded: true;
11994 wakaba 1.22 general-entity-reference {
11995     node-name: 'entity';
11996 wakaba 1.34 manakai-expanded: false;
11997 wakaba 1.22 }
11998     }
11999     }
12000     }
12001     }
12002    
12003     @@XMLTest:
12004     @@@QName: xp.attlist.attval.ger.entity.declared.nopref.1.test
12005     @@@DEnt:
12006     @@@@test:value:
12007     <!DOCTYPE p [
12008     <!ATTLIST p a CDATA "&entity;">
12009     ]>
12010     <p/>
12011     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 22)..(2, 29); }
12012     @@XMLTest:
12013     @@@QName: xp.attlist.attval.ger.entity.declared.nopref.2.test
12014     @@@DEnt:
12015     @@@@test:value:
12016     <!DOCTYPE p [
12017     <!ENTITY other "aa">
12018     <!ENTITY % another "aa">
12019     <!ATTLIST p a CDATA "&entity;">
12020     ]>
12021     <p/>
12022     @@@c:erred: <[[xp|wf-entity-declared]]> { (4, 22)..(4, 29); }
12023     @@XMLTest:
12024     @@@QName: xp.attlist.attval.ger.entity.declared.nopref.3.test
12025     @@@DEnt:
12026     @@@@test:value:
12027     <?xml version="1.0" standalone="yes"?>
12028     <!DOCTYPE p [
12029     <!ATTLIST p a CDATA "&entity;">
12030     ]>
12031     <p/>
12032     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 22)..(3, 29); }
12033     @@XMLTest:
12034     @@@QName: xp.attlist.attval.ger.entity.declared.nopref.4.test
12035     @@@DEnt:
12036     @@@@test:value:
12037     <?xml version="1.0" standalone="no"?>
12038     <!DOCTYPE p [
12039     <!ATTLIST p a CDATA "&entity;">
12040     ]>
12041     <p/>
12042     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 22)..(3, 29); }
12043     @@XMLTest:
12044     @@@QName: xp.attlist.attval.ger.entity.declared.nopref.5.test
12045     @@@DEnt:
12046     @@@@test:value:
12047     <?xml version="1.0" standalone="yes"?>
12048     <!DOCTYPE p [
12049     <!ENTITY other "aa">
12050     <!ENTITY % another "aa">
12051     <!ATTLIST p a CDATA "&entity;">
12052     ]>
12053     <p/>
12054     @@@c:erred: <[[xp|wf-entity-declared]]> { (5, 22)..(5, 29); }
12055     @@XMLTest:
12056     @@@QName: xp.attlist.attval.ger.entity.declared.nopref.6.test
12057     @@@DEnt:
12058     @@@@test:value:
12059     <?xml version="1.0" standalone="no"?>
12060     <!DOCTYPE p [
12061     <!ENTITY other "aa">
12062     <!ENTITY % another "aa">
12063     <!ATTLIST p a CDATA "&entity;">
12064     ]>
12065     <p/>
12066     @@@c:erred: <[[xp|wf-entity-declared]]> { (5, 22)..(5, 29); }
12067     @@XMLTest:
12068     @@@QName: xp.attlist.attval.ger.entity.declared.nopref.-1.test
12069     @@@DEnt:
12070     @@@@test:value:
12071     <!DOCTYPE p [
12072     <!ENTITY entity "value">
12073     <!ATTLIST p a CDATA "&entity;">
12074     ]>
12075     <p/>
12076 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
12077 wakaba 1.22 @@@test:domTree:
12078     document {
12079     document-type {
12080     general-entity {
12081     node-name: 'entity';
12082     text-content: 'value';
12083     }
12084     element-type-definition {
12085     node-name: 'p';
12086     attribute-definition {
12087     node-name: 'a';
12088     general-entity-reference {
12089     node-name: 'entity';
12090 wakaba 1.34 manakai-expanded: true;
12091 wakaba 1.22 text-content: 'value';
12092     }
12093     }
12094     }
12095     }
12096     element {
12097     attribute {
12098     node-name: 'a';
12099     specified: false;
12100     general-entity-reference {
12101     node-name: 'entity';
12102 wakaba 1.34 manakai-expanded: true;
12103 wakaba 1.22 text-content: 'value';
12104     }
12105     }
12106     }
12107     }
12108     @@XMLTest:
12109     @@@QName: xp.attlist.attval.ger.entity.declared.nopref.-1.2.test
12110     @@@DEnt:
12111     @@@@test:value:
12112     <!DOCTYPE p [
12113     <!ATTLIST p a CDATA "&entity;">
12114     <!ENTITY entity "value">
12115     ]>
12116     <p/>
12117     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 22)..(2, 29); }
12118     @@XMLTest:
12119     @@@QName: xp.attlist.attval.ger.entity.declared.nopref.-2.test
12120     @@@DEnt:
12121     @@@@test:value:
12122     <!DOCTYPE p [
12123     <!ENTITY entity "value">
12124     <!ENTITY another SYSTEM "another">
12125     <!ATTLIST p a CDATA "&entity;">
12126     ]>
12127     <p/>
12128 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
12129 wakaba 1.22 @@@test:domTree:
12130     document {
12131     document-type {
12132     element-type-definition {
12133     node-name: 'p';
12134     attribute-definition {
12135     node-name: 'a';
12136     general-entity-reference {
12137     node-name: 'entity';
12138 wakaba 1.34 manakai-expanded: true;
12139 wakaba 1.22 text-content: 'value';
12140     }
12141     }
12142     }
12143     general-entity {
12144     node-name: 'entity';
12145     text-content: 'value';
12146     has-replacement-tree: true;
12147     }
12148     general-entity {
12149     node-name: 'another';
12150     public-id: null;
12151     system-id: 'another';
12152     has-replacement-tree: false;
12153     }
12154     }
12155     element {
12156     attribute {
12157     node-name: 'a';
12158     specified: false;
12159     general-entity-reference {
12160     node-name: 'entity';
12161 wakaba 1.34 manakai-expanded: true;
12162 wakaba 1.22 text-content: 'value';
12163     }
12164     }
12165     }
12166     }
12167     @@XMLTest:
12168     @@@QName: xp.attlist.attval.ger.entity.declared.nopref.-2.2.test
12169     @@@DEnt:
12170     @@@@test:value:
12171     <!DOCTYPE p [
12172     <!ATTLIST p a CDATA "&entity;">
12173     <!ENTITY entity "value">
12174     <!ENTITY another SYSTEM "another">
12175     ]>
12176     <p/>
12177     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 22)..(2, 29); }
12178     @@XMLTest:
12179     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.2.test
12180     @@@DEnt:
12181     @@@@test:value:
12182     <?xml version="1.0" standalone="yes"?>
12183     <!DOCTYPE p [
12184     <!ATTLIST p a CDATA "&entity;">
12185     ]>
12186     <p/>
12187     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 22)..(3, 29); }
12188     @@XMLTest:
12189     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.3.test
12190     @@@DEnt:
12191     @@@@test:value:
12192     <?xml version="1.0" standalone="yes"?>
12193     <!DOCTYPE p [
12194     <!ATTLIST p a CDATA "&entity;">
12195     <!ENTITY % para "<!-- -->">
12196     %para;
12197     ]>
12198     <p/>
12199     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 22)..(3, 29); }
12200     @@XMLTest:
12201     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.3.2.test
12202     @@@DEnt:
12203     @@@@test:value:
12204     <?xml version="1.0" standalone="yes"?>
12205     <!DOCTYPE p [
12206     <!ENTITY % para "<!-- -->">
12207     %para;
12208     <!ATTLIST p a CDATA "&entity;">
12209     ]>
12210     <p/>
12211     @@@c:erred: <[[xp|wf-entity-declared]]> { (5, 22)..(5, 29); }
12212     @@@enImplNote:
12213     The <XML::ATTLIST> declaration is processed since
12214     it is a <XA::standalone> document.
12215     @@XMLTest:
12216     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.-1.test
12217     @@@DEnt:
12218     @@@@test:value:
12219     <?xml version="1.0" standalone="no"?>
12220     <!DOCTYPE p [
12221     <!ATTLIST p a CDATA "&entity;">
12222     <!ENTITY % para "<!-- -->">
12223     %para;
12224     ]>
12225     <p/>
12226     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 22)..(3, 29); }
12227     @@XMLTest:
12228     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.-1.2.test
12229     @@@DEnt:
12230     @@@@test:value:
12231     <?xml version="1.0" standalone="no"?>
12232     <!DOCTYPE p [
12233 wakaba 1.25 <!ATTLIST p b CDATA #IMPLIED>
12234 wakaba 1.21 <!ENTITY % para "<!-- -->">
12235     %para;
12236     <!ATTLIST p a CDATA "&entity;">
12237     ]>
12238     <p c="d"/>
12239 wakaba 1.25 @@@c:erred:
12240     <[[xp|warning-attribute-definition-not-processed]]> { (6, 13)..(6, 30); }
12241 wakaba 1.21 @@@test:domTree:
12242     document {
12243     document-type {
12244     element-type-definition {
12245 wakaba 1.25 node-name: 'p';
12246 wakaba 1.21 attribute-definition {
12247     node-name: 'b';
12248     }
12249     }
12250     }
12251     element {
12252     attribute {
12253     node-name: 'c';
12254     text-content: 'd';
12255     }
12256     }
12257     }
12258     @@@enImplNote:
12259     The second <XML::ATTLIST> declaration is read but not processed
12260     and its <XML::&entity;> general entity reference violates
12261     entity declared validty constraint rather than well-formedness
12262     constraint.
12263     @@XMLTest:
12264     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.-2.test
12265     @@@DEnt:
12266     @@@@test:value:
12267     <!DOCTYPE p [
12268     <!ATTLIST p a CDATA "&entity;">
12269     <!ENTITY % para "<!-- -->">
12270     %para;
12271     ]>
12272     <p/>
12273     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 22)..(2, 29); }
12274     @@XMLTest:
12275     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.-2.2.test
12276     @@@DEnt:
12277     @@@@test:value:
12278     <!DOCTYPE p [
12279 wakaba 1.25 <!ATTLIST p b CDATA #IMPLIED>
12280 wakaba 1.21 <!ENTITY % para "<!-- -->">
12281     %para;
12282     <!ATTLIST p a CDATA "&entity;">
12283     ]>
12284     <p c="d"/>
12285 wakaba 1.25 @@@c:erred:
12286     <[[xp|warning-attribute-definition-not-processed]]> { (5, 13)..(5, 30); }
12287 wakaba 1.21 @@@test:domTree:
12288     document {
12289     document-type {
12290     element-type-definition {
12291 wakaba 1.25 node-name: 'p';
12292 wakaba 1.21 attribute-definition {
12293     node-name: 'b';
12294     }
12295     }
12296     }
12297     element {
12298     attribute {
12299     node-name: 'c';
12300     text-content: 'd';
12301     }
12302     }
12303     }
12304     @@XMLTest:
12305     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.4.test
12306     @@@DEnt:
12307     @@@@test:value:
12308     <?xml version="1.0" standalone="yes"?>
12309     <!DOCTYPE p [
12310     <!ATTLIST p a CDATA "&entity;">
12311     <!ENTITY % para SYSTEM "p">
12312     %para;
12313     ]>
12314     <p/>
12315     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 22)..(3, 29); }
12316     @@XMLTest:
12317     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.4.2.test
12318     @@@DEnt:
12319     @@@@test:value:
12320     <?xml version="1.0" standalone="yes"?>
12321     <!DOCTYPE p [
12322     <!ENTITY % para SYSTEM "p">
12323     %para;
12324     <!ATTLIST p a CDATA "&entity;">
12325     ]>
12326     <p/>
12327     @@@c:erred: <[[xp|wf-entity-declared]]> { (5, 22)..(5, 29); }
12328     @@@enImplNote:
12329     The <XML::ATTLIST> declaration is processed since
12330     it is a <XA::standalone> document.
12331     @@XMLTest:
12332     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.-3.test
12333     @@@DEnt:
12334     @@@@test:value:
12335     <?xml version="1.0" standalone="no"?>
12336     <!DOCTYPE p [
12337     <!ATTLIST p a CDATA "&entity;">
12338     <!ENTITY % para SYSTEM "p">
12339     %para;
12340     ]>
12341     <p/>
12342     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 22)..(3, 29); }
12343     @@@enImplNote:
12344     Is this well-formed? It has a parameter entity reference,
12345     therefore, it does not violates Entity Declared WFC, isn't it?
12346    
12347     Note that Firefox 1.5 and Opera 9 TP1 reports that this document has a
12348     fatal error (also note that they does not support unexpanded).
12349    
12350     See also:
12351     <URI::http://suika.fam.cx/gate/2005/sw/%E5%B1%9E%E6%80%A7%E5%80%A4%E8%A1%A8%E8%A8%98#anchor-8>
12352     @@XMLTest:
12353     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.-3.2.test
12354     @@@DEnt:
12355     @@@@test:value:
12356     <?xml version="1.0" standalone="no"?>
12357     <!DOCTYPE p [
12358 wakaba 1.25 <!ATTLIST p b CDATA #IMPLIED>
12359 wakaba 1.21 <!ENTITY % para SYSTEM "p">
12360     %para;
12361     <!ATTLIST p a CDATA "&entity;">
12362     ]>
12363     <p c="d"/>
12364 wakaba 1.25 @@@c:erred:
12365     <[[xp|warning-attribute-definition-not-processed]]> { (6, 13)..(6, 30); }
12366 wakaba 1.21 @@@test:domTree:
12367     document {
12368     document-type {
12369     element-type-definition {
12370 wakaba 1.25 node-name: 'p';
12371 wakaba 1.21 attribute-definition {
12372     node-name: 'b';
12373     }
12374     }
12375     }
12376     element {
12377     attribute {
12378     node-name: 'c';
12379     text-content: 'd';
12380     }
12381     }
12382     }
12383     @@@enImplNote:
12384     The second <XML::ATTLIST> declaration is read but not processed
12385     and its <XML::&entity;> general entity reference violates
12386     entity declared validty constraint rather than well-formedness
12387     constraint.
12388     @@XMLTest:
12389     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.-4.test
12390     @@@DEnt:
12391     @@@@test:value:
12392     <!DOCTYPE p [
12393     <!ATTLIST p a CDATA "&entity;">
12394     <!ENTITY % para SYSTEM "p">
12395     %para;
12396     ]>
12397     <p/>
12398     @@@c:erred: <[[xp|wf-entity-declared]]> { (2, 22)..(2, 29); }
12399     @@XMLTest:
12400     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.-4.2.test
12401     @@@DEnt:
12402     @@@@test:value:
12403     <!DOCTYPE p [
12404 wakaba 1.25 <!ATTLIST p b CDATA #IMPLIED>
12405 wakaba 1.21 <!ENTITY % para SYSTEM "p">
12406     %para;
12407     <!ATTLIST p a CDATA "&entity;">
12408     ]>
12409     <p c="d"/>
12410 wakaba 1.25 @@@c:erred:
12411     <[[xp|warning-attribute-definition-not-processed]]> { (5, 13)..(5, 30); }
12412 wakaba 1.21 @@@test:domTree:
12413     document {
12414     document-type {
12415     element-type-definition {
12416 wakaba 1.25 node-name: 'p';
12417 wakaba 1.21 attribute-definition {
12418     node-name: 'b';
12419     }
12420     }
12421     }
12422     element {
12423     attribute {
12424     node-name: 'c';
12425     text-content: 'd';
12426     }
12427     }
12428     }
12429     @@XMLTest:
12430     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.5.test
12431     @@@DEnt:
12432     @@@@test:value:
12433     <?xml version="1.0" standalone="yes"?>
12434     <!DOCTYPE p SYSTEM "dtd" [
12435     <!ATTLIST p a CDATA "&entity;">
12436     ]>
12437     <p/>
12438     @@@c:erred: <[[xp|wf-entity-declared]]> { (3, 22)..(3, 29); }
12439     @@@enImplNote:
12440     This document has an error - result is implementation dependent.
12441     @@XMLTest:
12442     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.-5.test
12443     @@@DEnt:
12444     @@@@test:value:
12445     <?xml version="1.0" standalone="no"?>
12446     <!DOCTYPE p SYSTEM "dtd" [
12447     <!ATTLIST p a CDATA "&entity;">
12448     ]>
12449     <p/>
12450     @@@test:domTree:
12451     document {
12452     document-type {
12453     element-type-definition {
12454     node-name: 'p';
12455     attribute-definition {
12456     node-name: 'a';
12457     general-entity-reference {
12458     node-name: 'entity';
12459 wakaba 1.34 manakai-expanded: false;
12460 wakaba 1.21 }
12461     }
12462     }
12463     }
12464     element {
12465     attribute {
12466     node-name: 'a';
12467     specified: false;
12468     general-entity-reference {
12469     node-name: 'entity';
12470 wakaba 1.34 manakai-expanded: false;
12471 wakaba 1.21 }
12472     }
12473     }
12474     }
12475     @@@enImplNote:
12476     This document has an error - result is implementation dependent.
12477     @@XMLTest:
12478     @@@QName: xp.attlist.attval.ger.entity.declared.standalone.-6.test
12479     @@@DEnt:
12480     @@@@test:value:
12481     <!DOCTYPE p SYSTEM "dtd" [
12482     <!ATTLIST p a CDATA "&entity;">
12483     ]>
12484     <p/>
12485     @@@test:domTree:
12486     document {
12487     document-type {
12488     element-type-definition {
12489     node-name: 'p';
12490     attribute-definition {
12491     node-name: 'a';
12492     general-entity-reference {
12493     node-name: 'entity';
12494 wakaba 1.34 manakai-expanded: false;
12495 wakaba 1.21 }
12496     }
12497     }
12498     }
12499     element {
12500     attribute {
12501     node-name: 'a';
12502     specified: false;
12503     general-entity-reference {
12504     node-name: 'entity';
12505 wakaba 1.34 manakai-expanded: false;
12506 wakaba 1.21 }
12507     }
12508     }
12509     }
12510     @@@enImplNote:
12511     This document has an error - result is implementation dependent.
12512    
12513 wakaba 1.19 @@enImplNote:
12514     {TODO:: Entity declared WFC for
12515 wakaba 1.20
12516     - General entity references in entity value??
12517 wakaba 1.19
12518     }
12519    
12520 wakaba 1.23 @@XMLTest:
12521     @@@QName: xp.element.content.parsed.entity.reference.test
12522     @@@DEnt:
12523     @@@@test:value:
12524     <!DOCTYPE p [
12525     <!NOTATION n SYSTEM "notation">
12526     <!ENTITY ext SYSTEM "system" NDATA n>
12527     ]>
12528     <p>&ext;</p>
12529     @@@c:erred: <[[xp|wf-parsed-entity]]> { (5, 4)..(5, 8); }
12530     @@XMLTest:
12531     @@@QName: xp.attval.parsed.entity.reference.test
12532     @@@DEnt:
12533     @@@@test:value:
12534     <!DOCTYPE p [
12535     <!NOTATION n SYSTEM "notation">
12536     <!ENTITY ext SYSTEM "system" NDATA n>
12537     ]>
12538     <p a="&ext;"/>
12539     # @@@c:erred: <[[xp|wf-parsed-entity]]> { (5, 7)..(5, 11); }
12540     @@@c:erred: <[[xp|wf-no-external-entity-references]]> { (5, 7)..(5, 11); }
12541     @@XMLTest:
12542     @@@QName: xp.element.content.reptxt.parsed.entity.reference.test
12543     @@@DEnt:
12544     @@@@test:value:
12545     <!DOCTYPE p [
12546     <!NOTATION n SYSTEM "notation">
12547     <!ENTITY ext SYSTEM "system" NDATA n>
12548     <!ENTITY c "&#x26;ext;">
12549     ]>
12550     <p>&c;</p>
12551     @@@c:erred: <[[xp|wf-parsed-entity]]> { (1, 1)..(1, 5); }
12552     @@XMLTest:
12553     @@@QName: xp.attval.reptxt.parsed.entity.reference.test
12554     @@@DEnt:
12555     @@@@test:value:
12556     <!DOCTYPE p [
12557     <!NOTATION n SYSTEM "notation">
12558     <!ENTITY ext SYSTEM "system" NDATA n>
12559     <!ENTITY c "&#x26;ext;">
12560     ]>
12561     <p a="&c;"/>
12562 wakaba 1.34 @@@cfg:entity-replacement-tree: 0
12563     @@@c:erred: <[[xp|wf-no-external-entity-references]]> { (1, 1)..(1, 5); }
12564     @@XMLTest:
12565     @@@QName: xp.attval.reptxt.parsed.entity.reference.2.test
12566     @@@DEnt:
12567     @@@@test:value:
12568     <!DOCTYPE p [
12569     <!NOTATION n SYSTEM "notation">
12570     <!ENTITY ext SYSTEM "system" NDATA n>
12571     <!ENTITY c "&#x26;ext;">
12572     ]>
12573     <p a="&c;"/>
12574     @@@cfg:entity-replacement-tree: 1
12575 wakaba 1.23 @@@c:erred: <[[xp|wf-no-external-entity-references]]> { (1, 1)..(1, 5); }
12576     @@@c:erred:
12577     @@@@@: <[[xp|wf-parsed-entity]]> { }
12578     @@@@enImplNote: During entity node construction.
12579     @@XMLTest:
12580     @@@QName: xp.element.content.entval.parsed.entity.reference.test
12581     @@@DEnt:
12582     @@@@test:value:
12583     <!DOCTYPE p [
12584     <!NOTATION n SYSTEM "notation">
12585     <!ENTITY ext SYSTEM "system" NDATA n>
12586     <!ENTITY c "&ext;">
12587     ]>
12588     <p>&c;</p>
12589     @@@c:erred: <[[xp|wf-parsed-entity]]> { }
12590     @@XMLTest:
12591     @@@QName: xp.attval.entval.parsed.entity.reference.test
12592     @@@DEnt:
12593     @@@@test:value:
12594     <!DOCTYPE p [
12595     <!NOTATION n SYSTEM "notation">
12596     <!ENTITY ext SYSTEM "system" NDATA n>
12597     <!ENTITY c "&ext;">
12598     ]>
12599     <p a="&c;"/>
12600 wakaba 1.34 @@@cfg:entity-replacement-tree: 0
12601     @@@c:erred: <[[xp|wf-no-external-entity-references]]> { }
12602     @@XMLTest:
12603     @@@QName: xp.attval.entval.parsed.entity.reference.2.test
12604     @@@DEnt:
12605     @@@@test:value:
12606     <!DOCTYPE p [
12607     <!NOTATION n SYSTEM "notation">
12608     <!ENTITY ext SYSTEM "system" NDATA n>
12609     <!ENTITY c "&ext;">
12610     ]>
12611     <p a="&c;"/>
12612     @@@cfg:entity-replacement-tree: 1
12613 wakaba 1.23 @@@c:erred: <[[xp|wf-no-external-entity-references]]> { }
12614     @@@c:erred: <[[xp|wf-parsed-entity]]> { }
12615    
12616     @@XMLTest:
12617     @@@QName: xp.element.content.no.recursion.direct.test
12618     @@@DEnt:
12619     @@@@test:value:
12620     <!DOCTYPE p [
12621     <!ENTITY c "&c;">
12622     ]>
12623     <p>&c;</p>
12624     @@@c:erred: <[[xp|wf-no-recursion]]> { (1, 1)..(1, 3); }
12625     @@XMLTest:
12626     @@@QName: xp.element.content.no.recursion.indirect.test
12627     @@@DEnt:
12628     @@@@test:value:
12629     <!DOCTYPE p [
12630     <!ENTITY d "&c;">
12631     <!ENTITY c "&d;">
12632     ]>
12633     <p>&c;</p>
12634     @@@c:erred: <[[xp|wf-no-recursion]]> { /* |d| */ (1, 1)..(1, 3); }
12635     @@XMLTest:
12636     @@@QName: xp.attval.no.recursion.direct.test
12637     @@@DEnt:
12638     @@@@test:value:
12639     <!DOCTYPE p [
12640     <!ENTITY c "&c;">
12641     ]>
12642     <p a="&c;"/>
12643     @@@c:erred: <[[xp|wf-no-recursion]]> { (1, 1)..(1, 3); }
12644     @@XMLTest:
12645     @@@QName: xp.attval.no.recursion.indirect.test
12646     @@@DEnt:
12647     @@@@test:value:
12648     <!DOCTYPE p [
12649     <!ENTITY d "&c;">
12650     <!ENTITY c "&d;">
12651     ]>
12652     <p a="&c;"/>
12653     @@@c:erred: <[[xp|wf-no-recursion]]> { /* |d| */ (1, 1)..(1, 3); }
12654     @@XMLTest:
12655     @@@QName: xp.reptxt.element.content.no.recursion.direct.test
12656     @@@DEnt:
12657     @@@@test:value:
12658     <!DOCTYPE p [
12659     <!ENTITY c "&c;">
12660     <!ENTITY e "&#x26;c;">
12661     ]>
12662     <p>&e;</p>
12663     @@@c:erred: <[[xp|wf-no-recursion]]> { /* |e| */ (1, 1)..(1, 3); }
12664     @@XMLTest:
12665     @@@QName: xp.reptxt.element.content.no.recursion.indirect.test
12666     @@@DEnt:
12667     @@@@test:value:
12668     <!DOCTYPE p [
12669     <!ENTITY d "&c;">
12670     <!ENTITY c "&d;">
12671     <!ENTITY e "&#x26;c;">
12672     ]>
12673     <p>&e;</p>
12674     @@@c:erred: <[[xp|wf-no-recursion]]> { /* |d| */ (1, 1)..(1, 3); }
12675     @@XMLTest:
12676     @@@QName: xp.reptxt.attval.no.recursion.direct.test
12677     @@@DEnt:
12678     @@@@test:value:
12679     <!DOCTYPE p [
12680     <!ENTITY c "&c;">
12681     <!ENTITY e "&#x26;c;">
12682     ]>
12683     <p a="&e;"/>
12684     @@@c:erred: <[[xp|wf-no-recursion]]> { /* |e| */ (1, 1)..(1, 3); }
12685     @@XMLTest:
12686     @@@QName: xp.reptxt.attval.no.recursion.indirect.test
12687     @@@DEnt:
12688     @@@@test:value:
12689     <!DOCTYPE p [
12690     <!ENTITY d "&c;">
12691     <!ENTITY c "&d;">
12692     <!ENTITY e "&#x26;c;">
12693     ]>
12694     <p a="&e;"/>
12695     @@@c:erred: <[[xp|wf-no-recursion]]> { /* |d| */ (1, 1)..(1, 3); }
12696    
12697     @@XMLTest:
12698     @@@QName: xp.ENTITY.system.ndata.name.test
12699     @@@DEnt:
12700     @@@@test:value:
12701     <!DOCTYPE a [
12702     <!NOTATION n SYSTEM "n">
12703     <!ENTITY % e SYSTEM "sys" NDATA n>
12704     ]><a/>
12705     @@@c:erred: <[[xp|wf-syntax-error]]> { (3, 26)..(3, 30); }
12706     @@XMLTest:
12707     @@@QName: xp.ENTITY.public.ndata.name.test
12708     @@@DEnt:
12709     @@@@test:value:
12710     <!DOCTYPE a [
12711     <!NOTATION n SYSTEM "n">
12712     <!ENTITY % e PUBLIC "pub" "sys" NDATA n>
12713     ]><a/>
12714     @@@c:erred: <[[xp|wf-syntax-error]]> { (3, 33)..(3, 37); }
12715     @@XMLTest:
12716     @@@QName: xp.ENTITY.public.ndata.name.-1.test
12717     @@@DEnt:
12718     @@@@test:value:
12719     <!DOCTYPE a [
12720     <!NOTATION n SYSTEM "n">
12721     <!ENTITY % e PUBLIC "pub" "sys" >
12722     ]><a/>
12723     @@@test:domTree:
12724     document { }
12725    
12726     @@XMLTest:
12727     @@@QName: xp.ENTITY.pubid.1.test
12728     @@@DEnt:
12729     @@@@test:value:
12730     <!DOCTYPE a [
12731     <!ENTITY e PUBLIC "p" "s">
12732     ]><a/>
12733     @@@test:domTree:
12734     document {
12735     document-type {
12736     general-entity {
12737     node-name: 'e';
12738     public-id: 'p';
12739     system-id: 's';
12740     }
12741     }
12742     element { }
12743     }
12744     @@XMLTest:
12745     @@@QName: xp.ENTITY.pubid.2.test
12746     @@@DEnt:
12747     @@@@test:value:
12748     <!DOCTYPE a [
12749     <!ENTITY e PUBLIC " p " "s">
12750     ]><a/>
12751     @@@test:domTree:
12752     document {
12753     document-type {
12754     general-entity {
12755     node-name: 'e';
12756     public-id: 'p';
12757     system-id: 's';
12758     }
12759     }
12760     element { }
12761     }
12762     @@XMLTest:
12763     @@@QName: xp.ENTITY.pubid.3.test
12764     @@@DEnt:
12765     @@@@test:value:
12766     <!DOCTYPE a [
12767     <!ENTITY e PUBLIC " p $u000Aq$u000A " "s">
12768     ]><a/>
12769     @@@test:domTree:
12770     document {
12771     document-type {
12772     general-entity {
12773     node-name: 'e';
12774     public-id: 'p q';
12775     system-id: 's';
12776     }
12777     }
12778     element { }
12779     }
12780     @@XMLTest:
12781     @@@QName: xp.ENTITY.pubid.4.test
12782     @@@DEnt:
12783     @@@@test:value:
12784     <!DOCTYPE a [
12785     <!ENTITY e PUBLIC " p $u000D$u000Aq" "s">
12786     ]><a/>
12787     @@@test:domTree:
12788     document {
12789     document-type {
12790     general-entity {
12791     node-name: 'e';
12792     public-id: 'p q';
12793     system-id: 's';
12794     }
12795     }
12796     element { }
12797     }
12798     @@XMLTest:
12799     @@@QName: xp.ENTITY.pubid.5.test
12800     @@@DEnt:
12801     @@@@test:value:
12802     <?xml version="1.1"?>
12803     <!DOCTYPE a [
12804 wakaba 1.27 <!ENTITY e PUBLIC " p $u000D$u0085q" "s">
12805 wakaba 1.23 ]><a/>
12806     @@@test:domTree:
12807     document {
12808     document-type {
12809     general-entity {
12810     node-name: 'e';
12811     public-id: 'p q';
12812     system-id: 's';
12813     }
12814     }
12815     element { }
12816     }
12817    
12818 wakaba 1.24 @@XMLTest:
12819     @@@QName: xp.ENTITY.ignored.test
12820     @@@DEnt:
12821     @@@@test:value:
12822     <!DOCTYPE a [
12823     <!ENTITY e "a">
12824     <!ENTITY e "b">
12825     ]><a/>
12826 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
12827 wakaba 1.24 @@@test:domTree:
12828     document {
12829     document-type {
12830     general-entity {
12831     node-name: 'e';
12832     text-content: 'a';
12833     }
12834     }
12835     element { }
12836     }
12837     @@@c:erred:
12838     <[[xp|warning-entity-declaration-ignored]]> { (3, 1)..(3, 15); }
12839     @@XMLTest:
12840     @@@QName: xp.ENTITY.ignored.2.test
12841     @@@DEnt:
12842     @@@@test:value:
12843     <!DOCTYPE a [
12844     <!ENTITY % e "a">
12845     <!ENTITY % e "b">
12846     ]><a/>
12847     @@@test:domTree:
12848     document { }
12849     @@@c:erred:
12850     <[[xp|warning-entity-declaration-ignored]]> { (3, 1)..(3, 17); }
12851    
12852     @@XMLTest:
12853     @@@QName: xp.ENTITY.predefined.1.test
12854     @@@DEnt:
12855     @@@@test:value:
12856     <!DOCTYPE a [
12857     <!ENTITY lt "&#38;#60;">
12858     <!ENTITY gt "&#62;">
12859     <!ENTITY amp "&#38;#38;">
12860     <!ENTITY apos "&#39;">
12861     <!ENTITY quot "&#34;">
12862     <!ENTITY e "f">
12863     ]><a>&lt;&gt;&amp;&apos;&quot;</a>
12864 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
12865 wakaba 1.24 @@@test:domTree:
12866     document {
12867     document-type {
12868     general-entity {
12869     node-name: 'e';
12870     text-content: 'f';
12871     }
12872     }
12873     element {
12874     text-content: '<>&' U+0027 '"';
12875     }
12876     }
12877     @@XMLTest:
12878     @@@QName: xp.ENTITY.predefined.2.test
12879     @@@DEnt:
12880     @@@@test:value:
12881     <!DOCTYPE a [
12882     <!ENTITY lt "&#38;#60;">
12883     <!ENTITY gt "&#x26;#62;">
12884     <!ENTITY amp "&#38;#38;">
12885     <!ENTITY apos "&#x26;#39;">
12886     <!ENTITY quot "&#x26;#34;">
12887     <!ENTITY e "f">
12888     ]><a>&lt;&gt;&amp;&apos;&quot;</a>
12889 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
12890 wakaba 1.24 @@@test:domTree:
12891     document {
12892     document-type {
12893     general-entity {
12894     node-name: 'e';
12895     text-content: 'f';
12896     }
12897     }
12898     element {
12899     text-content: '<>&' U+0027 '"';
12900     }
12901     }
12902     @@XMLTest:
12903     @@@QName: xp.ENTITY.predefined.3.test
12904     @@@DEnt:
12905     @@@@test:value:
12906     <!DOCTYPE a [
12907     <!ENTITY lt "&#60;">
12908     <!ENTITY gt "&#62;">
12909     <!ENTITY amp "&#38;">
12910     <!ENTITY apos "&#39;">
12911     <!ENTITY quot "&#34;">
12912     <!ENTITY e "f">
12913     ]><a>&lt;&gt;&amp;&apos;&quot;</a>
12914 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
12915 wakaba 1.24 @@@c:erred: <[[xp|error-malformed-predefined-entity]]> { (2, 1)..(2, 24); }
12916     @@@c:erred: <[[xp|error-malformed-predefined-entity]]> { (4, 1)..(4, 24); }
12917     @@@test:domTree:
12918     document {
12919     document-type {
12920     general-entity {
12921     node-name: 'e';
12922     text-content: 'f';
12923     }
12924     }
12925     element {
12926     text-content: '<>&' U+0027 '"';
12927     }
12928     }
12929     @@XMLTest:
12930     @@@QName: xp.ENTITY.predefined.4.test
12931     @@@DEnt:
12932     @@@@test:value:
12933     <!DOCTYPE a [
12934     <!ENTITY lt "1">
12935     <!ENTITY gt "2">
12936     <!ENTITY amp "3">
12937     <!ENTITY apos "4">
12938     <!ENTITY quot "5">
12939     <!ENTITY e "f">
12940     ]><a>&lt;&gt;&amp;&apos;&quot;</a>
12941 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
12942 wakaba 1.24 @@@c:erred: <[[xp|error-malformed-predefined-entity]]> { (2, 1)..(2, 24); }
12943     @@@c:erred: <[[xp|error-malformed-predefined-entity]]> { (3, 1)..(3, 24); }
12944     @@@c:erred: <[[xp|error-malformed-predefined-entity]]> { (4, 1)..(4, 24); }
12945     @@@c:erred: <[[xp|error-malformed-predefined-entity]]> { (5, 1)..(5, 24); }
12946     @@@c:erred: <[[xp|error-malformed-predefined-entity]]> { (6, 1)..(6, 24); }
12947     @@@test:domTree:
12948     document {
12949     document-type {
12950     general-entity {
12951     node-name: 'e';
12952     text-content: 'f';
12953     }
12954     }
12955     element {
12956     text-content: '<>&' U+0027 '"';
12957     }
12958     }
12959     @@XMLTest:
12960     @@@QName: xp.ENTITY.predefined.5.test
12961     @@@DEnt:
12962     @@@@test:value:
12963     <!DOCTYPE a [
12964     <!ENTITY lt SYSTEM "1">
12965     <!ENTITY gt SYSTEM "2">
12966     <!ENTITY amp SYSTEM "3">
12967     <!ENTITY apos SYSTEM "4">
12968     <!ENTITY quot SYSTEM "5">
12969     <!ENTITY e "f">
12970     ]><a>&lt;&gt;&amp;&apos;&quot;</a>
12971 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
12972 wakaba 1.24 @@@c:erred: <[[xp|error-internal-predefined-entity]]> { (2, 1)..(2, 27); }
12973     @@@c:erred: <[[xp|error-internal-predefined-entity]]> { (3, 1)..(3, 27); }
12974     @@@c:erred: <[[xp|error-internal-predefined-entity]]> { (4, 1)..(4, 27); }
12975     @@@c:erred: <[[xp|error-internal-predefined-entity]]> { (5, 1)..(5, 27); }
12976     @@@c:erred: <[[xp|error-internal-predefined-entity]]> { (6, 1)..(6, 27); }
12977     @@@test:domTree:
12978     document {
12979     document-type {
12980     general-entity {
12981     node-name: 'e';
12982     text-content: 'f';
12983     }
12984     }
12985     element {
12986     text-content: '<>&' U+0027 '"';
12987     }
12988     }
12989     @@XMLTest:
12990     @@@QName: xp.ENTITY.predefined.6.test
12991     @@@DEnt:
12992     @@@@test:value:
12993     <!DOCTYPE a [
12994     <!ENTITY % lt SYSTEM "1">
12995     <!ENTITY % gt SYSTEM "2">
12996     <!ENTITY % amp SYSTEM "3">
12997     <!ENTITY % apos SYSTEM "4">
12998     <!ENTITY % quot SYSTEM "5">
12999     <!ENTITY e "f">
13000     ]><a>&lt;&gt;&amp;&apos;&quot;</a>
13001 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
13002 wakaba 1.24 @@@test:domTree:
13003     document {
13004     document-type {
13005     general-entity {
13006     node-name: 'e';
13007     text-content: 'f';
13008     }
13009     }
13010     element {
13011     text-content: '<>&' U+0027 '"';
13012     }
13013     }
13014     @@XMLTest:
13015     @@@QName: xp.ENTITY.predefined.7.test
13016     @@@DEnt:
13017     @@@@test:value:
13018     <!DOCTYPE a [
13019     <!ENTITY lt "&#38;#x3C;">
13020     <!ENTITY gt "&#x3E;">
13021     <!ENTITY amp "&#38;#x26;">
13022     <!ENTITY apos "&#x27;">
13023     <!ENTITY quot "&#x22;">
13024     <!ENTITY e "f">
13025     ]><a>&lt;&gt;&amp;&apos;&quot;</a>
13026 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
13027 wakaba 1.24 @@@test:domTree:
13028     document {
13029     document-type {
13030     general-entity {
13031     node-name: 'e';
13032     text-content: 'f';
13033     }
13034     }
13035     element {
13036     text-content: '<>&' U+0027 '"';
13037     }
13038     }
13039     @@XMLTest:
13040     @@@QName: xp.ENTITY.predefined.8.test
13041     @@@DEnt:
13042     @@@@test:value:
13043     <!DOCTYPE a [
13044     <!ENTITY lt "&#38;#x3c;">
13045     <!ENTITY gt "&#x3e;">
13046     <!ENTITY amp "&#38;#x26;">
13047     <!ENTITY apos "&#x27;">
13048     <!ENTITY quot "&#x22;">
13049     <!ENTITY e "f">
13050     ]><a>&lt;&gt;&amp;&apos;&quot;</a>
13051 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
13052 wakaba 1.24 @@@test:domTree:
13053     document {
13054     document-type {
13055     general-entity {
13056     node-name: 'e';
13057     text-content: 'f';
13058     }
13059     }
13060     element {
13061     text-content: '<>&' U+0027 '"';
13062     }
13063     }
13064     @@XMLTest:
13065     @@@QName: xp.ENTITY.predefined.9.test
13066     @@@DEnt:
13067     @@@@test:value:
13068     <!DOCTYPE a [
13069     <!ENTITY lt "&#38;#x00003C;">
13070     <!ENTITY gt "&#x0003E;">
13071     <!ENTITY amp "&#38;#x026;">
13072     <!ENTITY apos "&#x000027;">
13073     <!ENTITY quot "&#x0022;">
13074     <!ENTITY e "f">
13075     ]><a>&lt;&gt;&amp;&apos;&quot;</a>
13076 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
13077 wakaba 1.24 @@@test:domTree:
13078     document {
13079     document-type {
13080     general-entity {
13081     node-name: 'e';
13082     text-content: 'f';
13083     }
13084     }
13085     element {
13086     text-content: '<>&' U+0027 '"';
13087     }
13088     }
13089     @@XMLTest:
13090     @@@QName: xp.ENTITY.predefined.10.test
13091     @@@DEnt:
13092     @@@@test:value:
13093     <!DOCTYPE a [
13094     <!ENTITY lt "&#38;#00060;">
13095     <!ENTITY gt "&#062;">
13096     <!ENTITY amp "&#38;#000038;">
13097     <!ENTITY apos "&#0000039;">
13098     <!ENTITY quot "&#0034;">
13099     <!ENTITY e "f">
13100     ]><a>&lt;&gt;&amp;&apos;&quot;</a>
13101 wakaba 1.34 @@@cfg:entity-replacement-tree: 1
13102 wakaba 1.24 @@@test:domTree:
13103     document {
13104     document-type {
13105     general-entity {
13106     node-name: 'e';
13107     text-content: 'f';
13108     }
13109     }
13110     element {
13111     text-content: '<>&' U+0027 '"';
13112     }
13113     }
13114    
13115 wakaba 1.25 @@XMLTest:
13116     @@@QName: xp.processed.1.test
13117     @@@DEnt:
13118     @@@@test:value:
13119     <a/>
13120     @@@test:domTree:
13121     document {
13122     all-declarations-processed: true;
13123     element { }
13124     }
13125     @@XMLTest:
13126     @@@QName: xp.processed.2.test
13127     @@@DEnt:
13128     @@@@test:value:
13129     <!DOCTYPE a [
13130     <!ENTITY e "f">
13131     <!ATTLIST a b NMTOKEN " c ">
13132     ]><a>&e;</a>
13133     @@@test:domTree:
13134     document {
13135     document-type {
13136     general-entity {
13137     node-name: 'e';
13138     }
13139     element-type-definition {
13140     node-name: 'a';
13141     attribute-definition {
13142     node-name: 'b';
13143     }
13144     }
13145     }
13146     all-declarations-processed: true;
13147     element {
13148     attribute {
13149     node-name: 'b';
13150     node-value: 'c';
13151     }
13152     text-content: 'f';
13153     }
13154     }
13155     @@XMLTest:
13156     @@@QName: xp.processed.3.test
13157     @@@DEnt:
13158     @@@@test:value:
13159     <!DOCTYPE a [
13160     <!ENTITY % p SYSTEM "p">
13161     %p;
13162     <!ENTITY e "f">
13163     <!ATTLIST a b NMTOKEN " c ">
13164     ]><a d="e">&e;</a>
13165     @@@test:domTree:
13166     document {
13167     document-type { }
13168     all-declarations-processed: false;
13169     element {
13170     attribute {
13171     node-name: 'd';
13172     node-value: 'e';
13173     }
13174     general-entity-reference {
13175     node-name: 'e';
13176 wakaba 1.34 manakai-expanded: false;
13177 wakaba 1.25 }
13178     }
13179     }
13180     @@@c:erred:
13181     <[[xp|warning-entity-declaration-not-processed]]> { (4, 1)..(4, 20); }
13182     @@@c:erred:
13183     <[[xp|warning-attribute-definition-not-processed]]> { (5, 13)..(5, 31); }
13184     @@XMLTest:
13185     @@@QName: xp.processed.4.test
13186     @@@DEnt:
13187     @@@@test:value:
13188     <?xml version="1.1" standalone="yes"?>
13189     <!DOCTYPE a [
13190     <!ENTITY % p SYSTEM "p">
13191     %p;
13192     <!ENTITY e "f">
13193     <!ATTLIST a b NMTOKEN " c ">
13194     ]><a>&e;</a>
13195     @@@test:domTree:
13196     document {
13197     document-type {
13198     general-entity {
13199     node-name: 'e';
13200     }
13201     element-type-definition {
13202     node-name: 'a';
13203     attribute-definition {
13204     node-name: 'b';
13205     }
13206     }
13207     }
13208     all-declarations-processed: false;
13209     element {
13210     attribute {
13211     node-name: 'b';
13212     node-value: 'c';
13213     }
13214     text-content: 'f';
13215     }
13216     }
13217     @@XMLTest:
13218     @@@QName: xp.processed.5.test
13219     @@@DEnt:
13220     @@@@test:value:
13221     <!DOCTYPE a SYSTEM "p" [
13222     <!ENTITY e "f">
13223     <!ATTLIST a b NMTOKEN " c ">
13224     ]><a>&e;</a>
13225     @@@test:domTree:
13226     document {
13227     document-type {
13228     general-entity {
13229     node-name: 'e';
13230     }
13231     element-type-definition {
13232     node-name: 'a';
13233     attribute-definition {
13234     node-name: 'b';
13235     }
13236     }
13237     }
13238     all-declarations-processed: false;
13239     element {
13240     attribute {
13241     node-name: 'b';
13242     node-value: 'c';
13243     }
13244     text-content: 'f';
13245     }
13246     }
13247    
13248     @@XMLTest:
13249     @@@QName: xp.PEs.in.internal.subset.1.test
13250     @@@DEnt:
13251     @@@@test:value:
13252     <!DOCTYPE a [
13253     <!ENTITY % p " ">
13254 wakaba 1.26 <!ENTITY % q "%p;">
13255 wakaba 1.25 ]><a/>
13256     @@@c:erred: <[[xp|wf-pes-in-internal-subset]]> { (3, 15)..(3, 17); }
13257     @@XMLTest:
13258     @@@QName: xp.PEs.in.internal.subset.2.test
13259     @@@DEnt:
13260     @@@@test:value:
13261     <!DOCTYPE a [
13262     <!ENTITY % p " ">
13263 wakaba 1.26 <!ENTITY % q '%p;'>
13264 wakaba 1.25 ]><a/>
13265     @@@c:erred: <[[xp|wf-pes-in-internal-subset]]> { (3, 15)..(3, 17); }
13266    
13267 wakaba 1.26 @@XMLTest:
13268     @@@QName: xp.name.pitarget.content.1.0.2.test
13269     @@@DEnt:
13270     @@@@test:value:
13271     <?xml version="1.0"?>
13272     <p>
13273     <?$u3001$u3002?>
13274     </p>
13275     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]> { (3, 3)..(3, 4); }
13276     @@XMLTest:
13277     @@@QName: xp.name.pitarget.content.1.1.2.test
13278     @@@DEnt:
13279     @@@@test:value:
13280     <?xml version="1.1"?>
13281     <p>$
13282     <?$u3001$u3002?>$
13283     </p>
13284     @@@test:domTree:
13285     document {
13286     xml-version: '1.1';
13287     element {
13288     pi {
13289     node-name: U+3001 U+3002;
13290 wakaba 1.14 }
13291 wakaba 1.12 }
13292 wakaba 1.26 }
13293     @@XMLTest:
13294     @@@QName: xp.name.pitarget.content.1.0.3.test
13295     @@@DEnt:
13296     @@@@test:value:
13297     <?xml version="1.0"?>
13298     <p>
13299     <?$u3005b?>
13300     </p>
13301     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]> { (3, 3)..(3, 4); }
13302     @@XMLTest:
13303     @@@QName: xp.name.pitarget.content.1.1.3.test
13304     @@@DEnt:
13305     @@@@test:value:
13306     <?xml version="1.1"?>
13307     <p>$
13308     <?$u3005b?>$
13309     </p>
13310     @@@test:domTree:
13311     document {
13312     xml-version: '1.1';
13313     element {
13314     pi {
13315     node-name: U+3005 'b';
13316 wakaba 1.12 }
13317     }
13318 wakaba 1.26 }
13319     @@XMLTest:
13320     @@@QName: xp.name.pitarget.content.names.1.0.1.test
13321     @@@DEnt:
13322     @@@@test:value:
13323     <?xml version="1.0"?>
13324     <p>
13325     <?a:b?>
13326     </p>
13327     @@@c:erred: <[[xp|nswf-legal-ncname]]> { (3, 3)..(3, 5); }
13328     @@XMLTest:
13329     @@@QName: xp.name.pitarget.content.names.1.1.1.test
13330     @@@DEnt:
13331     @@@@test:value:
13332     <?xml version="1.1"?>
13333     <p>
13334     <?a:b?>
13335     </p>
13336     @@@c:erred: <[[xp|nswf-legal-ncname]]> { (3, 3)..(3, 5); }
13337     @@XMLTest:
13338     @@@QName: xp.name.pitarget.intsubset.1.0.2.test
13339     @@@DEnt:
13340     @@@@test:value:
13341     <?xml version="1.0"?>
13342     <!DOCTYPE p [
13343     <?$u3001$u3002?>
13344     ]><p/>
13345     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]> { (3, 3)..(3, 4); }
13346     @@XMLTest:
13347     @@@QName: xp.name.pitarget.intsubset.1.1.2.test
13348     @@@DEnt:
13349     @@@@test:value:
13350     <?xml version="1.1"?>
13351     <!DOCTYPE p [
13352     <?$u3001$u3002?>
13353     ]><p/>
13354     @@@test:domTree:
13355     document {
13356     xml-version: '1.1';
13357     document-type {
13358     pi {
13359     node-name: U+3001 U+3002;
13360     }
13361     }
13362     element { }
13363     }
13364     @@XMLTest:
13365     @@@QName: xp.name.pitarget.intsubset.1.0.3.test
13366     @@@DEnt:
13367     @@@@test:value:
13368     <?xml version="1.0"?>
13369     <!DOCTYPE p [
13370     <?$u3005b?>
13371     ]><p/>
13372     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]> { (3, 3)..(3, 4); }
13373     @@XMLTest:
13374     @@@QName: xp.name.pitarget.intsubset.1.1.3.test
13375     @@@DEnt:
13376     @@@@test:value:
13377     <?xml version="1.1"?>
13378     <!DOCTYPE p [
13379     <?$u3005b?>
13380     ]><p/>
13381     @@@test:domTree:
13382     document {
13383     xml-version: '1.1';
13384     document-type {
13385     pi {
13386     node-name: U+3005 'b';
13387     }
13388     }
13389     element { }
13390     }
13391     @@XMLTest:
13392     @@@QName: xp.name.pitarget.intsubset.names.1.0.1.test
13393     @@@DEnt:
13394     @@@@test:value:
13395     <?xml version="1.0"?>
13396     <!DOCTYPE p [
13397     <?a:b?>
13398     ]><p/>
13399     @@@c:erred: <[[xp|nswf-legal-ncname]]> { (3, 3)..(3, 5); }
13400     @@XMLTest:
13401     @@@QName: xp.name.pitarget.intsubset.names.1.1.1.test
13402     @@@DEnt:
13403     @@@@test:value:
13404     <?xml version="1.1"?>
13405     <!DOCTYPE p [
13406     <?a:b?>
13407     ]><p/>
13408     @@@c:erred: <[[xp|nswf-legal-ncname]]> { (3, 3)..(3, 5); }
13409     @@XMLTest:
13410     @@@QName: xp.name.doctypedecl.stag.etag.1.0.2.test
13411     @@@DEnt:
13412     @@@@test:value:
13413     <?xml version="1.0"?>
13414     <!DOCTYPE $u3001$u3002>
13415     <$u3001$u3002>
13416     </$u3001$u3002>
13417     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (2, 11)..(2, 12); }
13418     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (3, 2)..(3, 3); }
13419     # @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (4, 3)..(4, 4); }
13420     @@XMLTest:
13421     @@@QName: xp.name.doctypedecl.stag.etag.1.1.2.test
13422     @@@DEnt:
13423     @@@@test:value:
13424     <?xml version="1.1"?>
13425     <!DOCTYPE $u3001$u3002>
13426     <$u3001$u3002>
13427     </$u3001$u3002>
13428     @@@test:domTree:
13429     document {
13430     xml-version: '1.1';
13431     document-type {
13432     node-name: U+3001 U+3002;
13433     }
13434     element {
13435     node-name: U+3001 U+3002;
13436     }
13437     }
13438     @@XMLTest:
13439     @@@QName: xp.name.doctypedecl.stag.etag.1.0.3.test
13440     @@@DEnt:
13441     @@@@test:value:
13442     <?xml version="1.0"?>
13443     <!DOCTYPE $u3005b>
13444     <$u3005b>
13445     </$u3005b>
13446     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (2, 11)..(2, 12); }
13447     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (3, 2)..(3, 3); }
13448     # @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (4, 3)..(4, 4); }
13449     @@XMLTest:
13450     @@@QName: xp.name.doctype.decl.stag.etag.1.1.3.test
13451     @@@DEnt:
13452     @@@@test:value:
13453     <?xml version="1.1"?>
13454     <!DOCTYPE $u3005b>
13455     <$u3005b>
13456     </$u3005b>
13457     @@@test:domTree:
13458     document {
13459     xml-version: '1.1';
13460     document-type {
13461     node-name: U+3005 'b';
13462     }
13463     element {
13464     node-name: U+3005 'b';
13465     }
13466     }
13467     @@XMLTest:
13468     @@@QName: xp.name.doctypedecl.stag.etag.names.1.0.1.test
13469     @@@DEnt:
13470     @@@@test:value:
13471     <?xml version="1.0"?>
13472     <!DOCTYPE a:b>
13473     <a:b xmlns:a="http://a.example/">
13474     </a:b>
13475     @@@test:domTree:
13476     document {
13477     xml-version: '1.0';
13478     document-type {
13479     node-name: 'a:b';
13480     }
13481     element {
13482     prefix: 'a';
13483     local-name: 'b';
13484     namespace-uri: 'http://a.example/';
13485     attribute {
13486     namespace-uri: 'http://www.w3.org/2000/xmlns/';
13487     prefix: 'xmlns';
13488     local-name: 'a';
13489     value: 'http://a.example/';
13490     specified: true;
13491     }
13492     }
13493     }
13494     @@XMLTest:
13495     @@@QName: xp.name.doctypedecl.stag.etag.names.1.1.1.test
13496     @@@DEnt:
13497     @@@@test:value:
13498     <?xml version="1.1"?>
13499     <!DOCTYPE a:b>
13500     <a:b xmlns:a="http://a.example/">
13501     </a:b>
13502     @@@test:domTree:
13503     document {
13504     xml-version: '1.1';
13505     document-type {
13506     node-name: 'a:b';
13507     }
13508     element {
13509     prefix: 'a';
13510     local-name: 'b';
13511     namespace-uri: 'http://a.example/';
13512     attribute {
13513     namespace-uri: 'http://www.w3.org/2000/xmlns/';
13514     prefix: 'xmlns';
13515     local-name: 'a';
13516     specified: true;
13517     }
13518     }
13519     }
13520     @@XMLTest:
13521     @@@QName: xp.name.doctypedecl.stag.etag.names.1.0.2.test
13522     @@@DEnt:
13523     @@@@test:value:
13524     <?xml version="1.0"?>
13525     <!DOCTYPE :ab>
13526     <:ab>
13527     </:ab>
13528     @@@c:erred: <[[xp|nswf-legal-qname]]> { (2, 11)..(2, 13); }
13529     @@@c:erred: <[[xp|nswf-legal-qname]]> { (3, 2)..(3, 4); }
13530     @@@c:erred: <[[xp|nsc-prefix-declared]]> { /* prefix || */ }
13531     @@XMLTest:
13532     @@@QName: xp.name.doctypedecl.stag.etag.names.1.1.2.test
13533     @@@DEnt:
13534     @@@@test:value:
13535     <?xml version="1.1"?>
13536     <!DOCTYPE :ab>
13537     <:ab>
13538     </:ab>
13539     @@@c:erred: <[[xp|nswf-legal-qname]]> { (2, 11)..(2, 13); }
13540     @@@c:erred: <[[xp|nswf-legal-qname]]> { (3, 2)..(3, 4); }
13541     @@@c:erred: <[[xp|nsc-prefix-declared]]> { /* prefix || */ }
13542     @@XMLTest:
13543     @@@QName: xp.name.doctypedecl.stag.etag.names.1.0.3.test
13544     @@@DEnt:
13545     @@@@test:value:
13546     <?xml version="1.0"?>
13547     <!DOCTYPE a:$u3005>
13548     <a:$u3005 xmlns:a="http://a.example/">
13549     </a:$u3005>
13550     @@@c:erred: <[[xp|nswf-legal-qname]]> { (2, 11)..(2, 13); }
13551     @@@c:erred: <[[xp|nswf-legal-qname]]> { (3, 2)..(3, 4); }
13552     @@XMLTest:
13553     @@@QName: xp.name.doctypedecl.stag.etag.names.1.1.3.test
13554     @@@DEnt:
13555     @@@@test:value:
13556     <?xml version="1.1"?>
13557     <!DOCTYPE a:$u3005>
13558     <a:$u3005 xmlns:a="http://a.example/">
13559     </a:$u3005>
13560     @@@test:domTree:
13561     document {
13562     xml-version: '1.1';
13563     document-type {
13564     node-name: 'a:' U+3005;
13565     }
13566     element {
13567     prefix: 'a';
13568     local-name: U+3005;
13569     namespace-uri: 'http://a.example/';
13570     attribute {
13571     namespace-uri: 'http://www.w3.org/2000/xmlns/';
13572     prefix: 'xmlns';
13573     local-name: 'a';
13574     value: 'http://a.example/';
13575     specified: true;
13576     }
13577     }
13578     }
13579     @@XMLTest:
13580     @@@QName: xp.name.doctypedecl.stag.etag.names.1.0.4.test
13581     @@@DEnt:
13582     @@@@test:value:
13583     <?xml version="1.0"?>
13584     <!DOCTYPE a:b>
13585     <a:b>
13586     </a:b>
13587     @@@c:erred: <[[xp|nsc-prefix-declared]]> { (3, 1)..(3, 5); }
13588     @@XMLTest:
13589     @@@QName: xp.name.doctypedecl.stag.etag.names.1.1.4.test
13590     @@@DEnt:
13591     @@@@test:value:
13592     <?xml version="1.1"?>
13593     <!DOCTYPE a:b>
13594     <a:b>
13595     </a:b>
13596     @@@c:erred: <[[xp|nsc-prefix-declared]]> { (3, 1)..(3, 5); }
13597     @@XMLTest:
13598     @@@QName: xp.name.emptyelemtag.1.0.2.test
13599     @@@DEnt:
13600     @@@@test:value:
13601     <?xml version="1.0"?>
13602     <$u3001$u3002/>
13603     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (2, 2)..(2, 3); }
13604     @@XMLTest:
13605     @@@QName: xp.name.emptyelemtag.1.1.2.test
13606     @@@DEnt:
13607     @@@@test:value:
13608     <?xml version="1.1"?>
13609     <$u3001$u3002/>
13610     @@@test:domTree:
13611     document {
13612     xml-version: '1.1';
13613     element {
13614     node-name: U+3001 U+3002;
13615     }
13616     }
13617     @@XMLTest:
13618     @@@QName: xp.name.emptyelemtag.1.0.3.test
13619     @@@DEnt:
13620     @@@@test:value:
13621     <?xml version="1.0"?>
13622     <$u3005b/>
13623     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (2, 2)..(2, 3); }
13624     @@XMLTest:
13625     @@@QName: xp.name.emptyelemtag.1.1.3.test
13626     @@@DEnt:
13627     @@@@test:value:
13628     <?xml version="1.1"?>
13629     <$u3005b/>
13630     @@@test:domTree:
13631     document {
13632     xml-version: '1.1';
13633     element {
13634     node-name: U+3005 'b';
13635     }
13636     }
13637     @@XMLTest:
13638     @@@QName: xp.name.emptyelemtag.names.1.0.1.test
13639     @@@DEnt:
13640     @@@@test:value:
13641     <?xml version="1.0"?>
13642     <a:b/>
13643     @@@c:erred: <[[xp|nsc-prefix-declared]]>{ (2, 1)..(2, 6); }
13644     @@XMLTest:
13645     @@@QName: xp.name.emptyelemtag.names.1.1.1.test
13646     @@@DEnt:
13647     @@@@test:value:
13648     <?xml version="1.1"?>
13649     <a:b/>
13650     @@@c:erred: <[[xp|nsc-prefix-declared]]>{ (2, 1)..(2, 6); }
13651     @@XMLTest:
13652     @@@QName: xp.name.attr.1.0.2.test
13653     @@@DEnt:
13654     @@@@test:value:
13655     <?xml version="1.0"?>
13656     <a $u3001$u3002=""/>
13657     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (2, 4)..(2, 5); }
13658     @@XMLTest:
13659     @@@QName: xp.name.attr.1.1.2.test
13660     @@@DEnt:
13661     @@@@test:value:
13662     <?xml version="1.1"?>
13663     <a $u3001$u3002=""/>
13664     @@@test:domTree:
13665     document {
13666     xml-version: '1.1';
13667     element {
13668     attribute {
13669     node-name: U+3001 U+3002;
13670     }
13671     }
13672     }
13673     @@XMLTest:
13674     @@@QName: xp.name.attr.1.0.3.test
13675     @@@DEnt:
13676     @@@@test:value:
13677     <?xml version="1.0"?>
13678     <a $u3005b=""/>
13679     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (2, 4)..(2, 5); }
13680     @@XMLTest:
13681     @@@QName: xp.name.attr.1.1.3.test
13682     @@@DEnt:
13683     @@@@test:value:
13684     <?xml version="1.1"?>
13685     <a $u3005b=""/>
13686     @@@test:domTree:
13687     document {
13688     xml-version: '1.1';
13689     element {
13690     attribute {
13691     node-name: U+3005 'b';
13692     }
13693     }
13694     }
13695     @@XMLTest:
13696     @@@QName: xp.name.attr.names.1.0.1.test
13697     @@@DEnt:
13698     @@@@test:value:
13699     <?xml version="1.0"?>
13700     <a a:b=""/>
13701     @@@c:erred: <[[xp|nsc-prefix-declared]]>{ (2, 1)..(2, 11); }
13702     @@XMLTest:
13703     @@@QName: xp.name.attr.names.1.1.1.test
13704     @@@DEnt:
13705     @@@@test:value:
13706     <?xml version="1.1"?>
13707     <a a:b=""/>
13708     @@@c:erred: <[[xp|nsc-prefix-declared]]>{ (2, 1)..(2, 11); }
13709     @@XMLTest:
13710     @@@QName: xp.name.attr.names.1.0.2.test
13711     @@@DEnt:
13712     @@@@test:value:
13713     <?xml version="1.0"?>
13714     <a :ab=""/>
13715     @@@c:erred: <[[xp|nswf-legal-qname]]>{ (2, 4)..(2, 6); }
13716     @@@c:erred: <[[xp|nsc-prefix-declared]]> { }
13717     @@XMLTest:
13718     @@@QName: xp.name.attr.names.1.1.2.test
13719     @@@DEnt:
13720     @@@@test:value:
13721     <?xml version="1.1"?>
13722     <a :ab=""/>
13723     @@@c:erred: <[[xp|nswf-legal-qname]]>{ (2, 4)..(2, 6); }
13724     @@@c:erred: <[[xp|nsc-prefix-declared]]> { }
13725     @@XMLTest:
13726     @@@QName: xp.name.attlist.1.0.2.test
13727     @@@DEnt:
13728     @@@@test:value:
13729     <?xml version="1.0"?>
13730     <!DOCTYPE p [
13731     <!NOTATION $u3001$u3002 SYSTEM "n">
13732     <!ATTLIST $u3001$u3002
13733     $u3001$u3002
13734     NOTATION
13735     ($u3001$u3002)
13736     #IMPLIED>
13737     ]><p/>
13738     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (3, 12)..(3, 13); }
13739     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (4, 11)..(4, 12); }
13740     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (5, 1)..(5, 2); }
13741     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (7, 2)..(7, 3); }
13742     @@XMLTest:
13743     @@@QName: xp.name.attlist.1.1.2.test
13744     @@@DEnt:
13745     @@@@test:value:
13746     <?xml version="1.1"?>
13747     <!DOCTYPE p [
13748     <!NOTATION $u3001$u3002 SYSTEM "n">
13749     <!ATTLIST $u3001$u3002
13750     $u3001$u3002
13751     NOTATION
13752     ($u3001$u3002)
13753     #IMPLIED>
13754     ]><p/>
13755     @@@test:domTree:
13756     document {
13757     xml-version: '1.1';
13758     document-type {
13759     notation {
13760     node-name: U+3001 U+3002;
13761     }
13762     element-type-definition {
13763     node-name: U+3001 U+3002;
13764     attribute-definition {
13765     node-name: U+3001 U+3002;
13766     allowed-tokens: DOMStringList (U+3001 U+3002);
13767     }
13768     }
13769     }
13770     element { }
13771     }
13772     @@XMLTest:
13773     @@@QName: xp.name.attlist.1.0.3.test
13774     @@@DEnt:
13775     @@@@test:value:
13776     <?xml version="1.0"?>
13777     <!DOCTYPE p [
13778     <!NOTATION $u3005b SYSTEM "n">
13779     <!ATTLIST $u3005b
13780     $u3005b
13781     NOTATION
13782     ($u3005b)
13783     #IMPLIED>
13784     ]><p/>
13785     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (3, 12)..(3, 13); }
13786     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (4, 11)..(4, 12); }
13787     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (5, 1)..(5, 2); }
13788     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (7, 2)..(7, 3); }
13789     @@XMLTest:
13790     @@@QName: xp.name.attlist.1.1.3.test
13791     @@@DEnt:
13792     @@@@test:value:
13793     <?xml version="1.1"?>
13794     <!DOCTYPE p [
13795     <!NOTATION $u3005b SYSTEM "n">
13796     <!ATTLIST $u3005b
13797     $u3005b
13798     NOTATION
13799     ($u3005b)
13800     #IMPLIED>
13801     ]><p/>
13802     @@@test:domTree:
13803     document {
13804     xml-version: '1.1';
13805     document-type {
13806     notation {
13807     node-name: U+3005 'b';
13808     }
13809     element-type-definition {
13810     node-name: U+3005 'b';
13811     attribute-definition {
13812     node-name: U+3005 'b';
13813     allowed-tokens: DOMStringList (U+3005 'b');
13814     }
13815     }
13816     }
13817     element { }
13818     }
13819     @@XMLTest:
13820     @@@QName: xp.name.attlist.names.1.0.1.test
13821     @@@DEnt:
13822     @@@@test:value:
13823     <?xml version="1.0"?>
13824     <!DOCTYPE p [
13825     <!NOTATION a:b SYSTEM "n">
13826     <!ATTLIST a:b
13827     a:b
13828     NOTATION
13829     (a:b)
13830     #IMPLIED>
13831     ]><p/>
13832     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (3, 12)..(3, 14); }
13833     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (7, 2)..(7, 4); }
13834     @@XMLTest:
13835     @@@QName: xp.name.attlist.names.1.1.1.test
13836     @@@DEnt:
13837     @@@@test:value:
13838     <?xml version="1.1"?>
13839     <!DOCTYPE p [
13840     <!NOTATION a:b SYSTEM "n">
13841     <!ATTLIST a:b
13842     a:b
13843     NOTATION
13844     (a:b)
13845     #IMPLIED>
13846     ]><p/>
13847     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (3, 12)..(3, 14); }
13848     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (7, 2)..(7, 4); }
13849     @@XMLTest:
13850     @@@QName: xp.name.attlist.names.1.0.2.test
13851     @@@DEnt:
13852     @@@@test:value:
13853     <?xml version="1.0"?>
13854     <!DOCTYPE p [
13855     <!NOTATION :ab SYSTEM "n">
13856     <!ATTLIST :ab
13857     :ab
13858     NOTATION
13859     (:ab)
13860     #IMPLIED>
13861     ]><p/>
13862     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (3, 12)..(3, 14); }
13863     @@@c:erred: <[[xp|nswf-legal-qname]]>{ (4, 11)..(4, 13); }
13864     @@@c:erred: <[[xp|nswf-legal-qname]]>{ (5, 1)..(5, 3); }
13865     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (7, 2)..(7, 4); }
13866     @@XMLTest:
13867     @@@QName: xp.name.attlist.names.1.1.2.test
13868     @@@DEnt:
13869     @@@@test:value:
13870     <?xml version="1.1"?>
13871     <!DOCTYPE p [
13872     <!NOTATION :ab SYSTEM "n">
13873     <!ATTLIST :ab
13874     :ab
13875     NOTATION
13876     (:ab)
13877     #IMPLIED>
13878     ]><p/>
13879     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (3, 12)..(3, 14); }
13880     @@@c:erred: <[[xp|nswf-legal-qname]]>{ (4, 11)..(4, 13); }
13881     @@@c:erred: <[[xp|nswf-legal-qname]]>{ (5, 1)..(5, 3); }
13882     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (7, 2)..(7, 4); }
13883     @@XMLTest:
13884     @@@QName: xp.name.gent.1.0.2.test
13885     @@@DEnt:
13886     @@@@test:value:
13887     <?xml version="1.0"?>
13888     <!DOCTYPE p [
13889     <!ENTITY $u3001$u3002 "n">
13890     ]>
13891     <p a="&$u3001$u3002;">
13892     &$u3001$u3002;
13893     </p>
13894     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (3, 10)..(3, 11); }
13895     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (5, 8)..(5, 9); }
13896     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (6, 2)..(6, 3); }
13897     @@XMLTest:
13898     @@@QName: xp.name.ger.1.1.2.test
13899     @@@DEnt:
13900     @@@@test:value:
13901     <?xml version="1.1"?>
13902     <!DOCTYPE p [
13903     <!ENTITY $u3001$u3002 "n">
13904     ]>
13905     <p a="&$u3001$u3002;">$
13906     &$u3001$u3002;$
13907     </p>
13908     @@@test:domTree:
13909     document {
13910     xml-version: '1.1';
13911     document-type {
13912     general-entity {
13913     node-name: U+3001 U+3002;
13914     }
13915     }
13916     element {
13917     attribute {
13918     node-name: 'a';
13919     general-entity-reference {
13920     node-name: U+3001 U+3002;
13921     }
13922     }
13923     general-entity-reference {
13924     node-name: U+3001 U+3002;
13925     }
13926     }
13927     }
13928     @@XMLTest:
13929     @@@QName: xp.name.ger.1.0.3.test
13930     @@@DEnt:
13931     @@@@test:value:
13932     <?xml version="1.0"?>
13933     <!DOCTYPE p [
13934     <!ENTITY $u3005b "n">
13935     ]>
13936     <p a="&$u3005b;">
13937     &$u3005b;
13938     </p>
13939     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (3, 10)..(3, 11); }
13940     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (5, 8)..(5, 9); }
13941     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (6, 2)..(6, 3); }
13942     @@XMLTest:
13943     @@@QName: xp.name.ger.1.1.3.test
13944     @@@DEnt:
13945     @@@@test:value:
13946     <?xml version="1.1"?>
13947     <!DOCTYPE p [
13948     <!ENTITY $u3005b "n">
13949     ]>
13950     <p a="&$u3005b;">$
13951     &$u3005b;$
13952     </p>
13953     @@@test:domTree:
13954     document {
13955     xml-version: '1.1';
13956     document-type {
13957     general-entity {
13958     node-name: U+3005 'b';
13959     }
13960     }
13961     element {
13962     attribute {
13963     node-name: 'a';
13964     general-entity-reference {
13965     node-name: U+3005 'b';
13966     }
13967     }
13968     general-entity-reference {
13969     node-name: U+3005 'b';
13970     }
13971     }
13972     }
13973     @@XMLTest:
13974     @@@QName: xp.name.ger.names.1.0.1.test
13975     @@@DEnt:
13976     @@@@test:value:
13977     <?xml version="1.0"?>
13978     <!DOCTYPE p [
13979     <!ENTITY a:b "n">
13980     ]>
13981     <p a="&a:b;">
13982     &a:b;
13983     </p>
13984     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (3, 10)..(3, 12); }
13985     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (5, 8)..(5, 10); }
13986     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (6, 2)..(6, 4); }
13987     @@XMLTest:
13988     @@@QName: xp.name.ger.names.1.1.1.test
13989     @@@DEnt:
13990     @@@@test:value:
13991     <?xml version="1.1"?>
13992     <!DOCTYPE p [
13993     <!ENTITY a:b "n">
13994     ]>
13995     <p a="&a:b;">
13996     &a:b;
13997     </p>
13998     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (3, 10)..(3, 12); }
13999     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (5, 8)..(5, 10); }
14000     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (6, 2)..(6, 4); }
14001     @@XMLTest:
14002     @@@QName: xp.name.ndata.1.0.2.test
14003     @@@DEnt:
14004     @@@@test:value:
14005     <?xml version="1.0"?>
14006     <!DOCTYPE p [
14007     <!NOTATION $u3001$u3002 SYSTEM "n">
14008     <!ENTITY e SYSTEM "s" NDATA $u3001$u3002>
14009     ]><p/>
14010     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (3, 12)..(3, 13); }
14011     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (4, 29)..(4, 30); }
14012     @@XMLTest:
14013     @@@QName: xp.name.ndata.1.1.2.test
14014     @@@DEnt:
14015     @@@@test:value:
14016     <?xml version="1.1"?>
14017     <!DOCTYPE p [
14018     <!NOTATION $u3001$u3002 SYSTEM "n">
14019     <!ENTITY e SYSTEM "s" NDATA $u3001$u3002>
14020     ]><p/>
14021     @@@test:domTree:
14022     document {
14023     xml-version: '1.1';
14024     document-type {
14025     notation {
14026     node-name: U+3001 U+3002;
14027     }
14028     general-entity {
14029     node-name: 'e';
14030     notation-name: U+3001 U+3002;
14031     }
14032     }
14033     element { }
14034     }
14035     @@XMLTest:
14036     @@@QName: xp.name.ndata.1.0.3.test
14037     @@@DEnt:
14038     @@@@test:value:
14039     <?xml version="1.0"?>
14040     <!DOCTYPE p [
14041     <!NOTATION $u3005b SYSTEM "n">
14042     <!ENTITY e SYSTEM "s" NDATA $u3005b>
14043     ]><p/>
14044     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (3, 12)..(3, 13); }
14045     @@@c:erred: <[[xp|wf-invalid-character-in-node-name]]>{ (4, 29)..(4, 30); }
14046     @@XMLTest:
14047     @@@QName: xp.name.ndata.1.1.3.test
14048     @@@DEnt:
14049     @@@@test:value:
14050     <?xml version="1.1"?>
14051     <!DOCTYPE p [
14052     <!NOTATION $u3005b SYSTEM "n">
14053     <!ENTITY e SYSTEM "s" NDATA $u3005b>
14054     ]><p/>
14055     @@@test:domTree:
14056     document {
14057     xml-version: '1.1';
14058     document-type {
14059     notation {
14060     node-name: U+3005 'b';
14061     }
14062     general-entity {
14063     node-name: 'e';
14064     notation-name: U+3005 'b';
14065     }
14066     }
14067     element { }
14068     }
14069     @@XMLTest:
14070     @@@QName: xp.name.ndata.names.1.0.1.test
14071     @@@DEnt:
14072     @@@@test:value:
14073     <?xml version="1.0"?>
14074     <!DOCTYPE p [
14075     <!NOTATION a:b SYSTEM "n">
14076     <!ENTITY e SYSTEM "s" NDATA a:b>
14077     ]><p/>
14078     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (3, 12)..(3, 14); }
14079     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (4, 29)..(4, 31); }
14080     @@XMLTest:
14081     @@@QName: xp.name.ndata.names.1.1.1.test
14082     @@@DEnt:
14083     @@@@test:value:
14084     <?xml version="1.1"?>
14085     <!DOCTYPE p [
14086     <!NOTATION a:b SYSTEM "n">
14087     <!ENTITY e SYSTEM "s" NDATA a:b>
14088     ]><p/>
14089     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (3, 12)..(3, 14); }
14090     @@@c:erred: <[[xp|nswf-legal-ncname]]>{ (4, 29)..(4, 31); }
14091    
14092     @@enImplNote:
14093     @@@ddid: wf-invalid-character-in-node-name
14094     @@@@:
14095     {ISSUE::
14096     {P:: Tests required for:
14097    
14098     - <CODE::Name> in element type declaration
14099    
14100     - <CODE::Name> in model group
14101    
14102     - <CODE::Name> in parameter entity declaration
14103    
14104     - <CODE::Name> in parameter entity reference
14105    
14106     }
14107     }
14108    
14109     @@XMLTest:
14110     @@@QName: xp.NOTATION.1.test
14111     @@@DEnt:
14112     @@@@test:value:
14113     <!DOCTYPE p [
14114     <!NOTATION n SYSTEM "m">
14115     ]><p/>
14116     @@@test:domTree:
14117     document {
14118     document-type {
14119     notation {
14120     node-name: 'n';
14121     public-id: null;
14122     system-id: 'm';
14123     }
14124     }
14125     element { }
14126     }
14127     @@XMLTest:
14128     @@@QName: xp.NOTATION.2.test
14129     @@@DEnt:
14130     @@@@test:value:
14131     <!DOCTYPE p [
14132     <!NOTATION n PUBLIC "m">
14133     ]><p/>
14134     @@@test:domTree:
14135     document {
14136     document-type {
14137     notation {
14138     node-name: 'n';
14139     system-id: null;
14140     public-id: 'm';
14141     }
14142     }
14143     element { }
14144     }
14145     @@XMLTest:
14146     @@@QName: xp.NOTATION.3.test
14147     @@@DEnt:
14148     @@@@test:value:
14149     <!DOCTYPE p [
14150     <!NOTATION n PUBLIC "m" "l">
14151     ]><p/>
14152     @@@test:domTree:
14153     document {
14154     document-type {
14155     notation {
14156     node-name: 'n';
14157     public-id: 'm';
14158     system-id: 'l';
14159     }
14160     }
14161     element { }
14162     }
14163     @@XMLTest:
14164     @@@QName: xp.NOTATION.4.test
14165     @@@DEnt:
14166     @@@@test:value:
14167     <!DOCTYPE p [
14168     <!NOTATION n SYSTEM "m">
14169     <!NOTATION n SYSTEM "l">
14170     ]><p/>
14171     @@@c:erred: <[[xp|vc-unique-notation-name]]> { (3, 1)..(3, 24); }
14172     @@@test:domTree:
14173     document {
14174     document-type {
14175     notation {
14176     node-name: 'n';
14177     system-id: 'm';
14178     }
14179     }
14180     element { }
14181     }
14182    
14183     @@XMLTest:
14184     @@@QName: xp.names.1.test
14185     @@@DEnt:
14186     @@@@test:value:
14187     <p xmlns="http://1.example/" a="b"/>
14188     @@@test:domTree:
14189     document {
14190     element {
14191     prefix: null;
14192     local-name: 'p';
14193     namespace-uri: 'http://1.example/';
14194     attribute {
14195     prefix: null;
14196     local-name: 'xmlns';
14197     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14198     specified: true;
14199     }
14200     attribute {
14201     prefix: null;
14202     local-name: 'a';
14203     specified: true;
14204     }
14205     }
14206     }
14207     @@XMLTest:
14208     @@@QName: xp.names.2.test
14209     @@@DEnt:
14210     @@@@test:value:
14211     <p xmlns:a="http://1.example/" a="b" a:a="c"/>
14212     @@@test:domTree:
14213     document {
14214     element {
14215     prefix: null;
14216     local-name: 'p';
14217     namespace-uri: null;
14218     attribute {
14219     prefix: 'xmlns';
14220     local-name: 'a';
14221     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14222     specified: true;
14223     }
14224     attribute {
14225     prefix: null;
14226     local-name: 'a';
14227     specified: true;
14228     }
14229     attribute {
14230     prefix: 'a';
14231     local-name: 'a';
14232     namespace-uri: 'http://1.example/';
14233     specified: true;
14234     }
14235     }
14236     }
14237     @@XMLTest:
14238     @@@QName: xp.names.3.test
14239     @@@DEnt:
14240     @@@@test:value:
14241     <a:p xmlns:a="http://1.example/" a="b" a:a="c"/>
14242     @@@test:domTree:
14243     document {
14244     element {
14245     prefix: 'a';
14246     local-name: 'p';
14247     namespace-uri: 'http://1.example/';
14248     attribute {
14249     prefix: 'xmlns';
14250     local-name: 'a';
14251     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14252     specified: true;
14253     }
14254     attribute {
14255     prefix: null;
14256     local-name: 'a';
14257     specified: true;
14258     }
14259     attribute {
14260     prefix: 'a';
14261     local-name: 'a';
14262     namespace-uri: 'http://1.example/';
14263     specified: true;
14264     }
14265     }
14266     }
14267     @@XMLTest:
14268     @@@QName: xp.names.5.test
14269     @@@DEnt:
14270     @@@@test:value:
14271     <p xmlns:a="http://1.example/">$
14272     <a:q/>$
14273     </p>
14274     @@@test:domTree:
14275     document {
14276     element {
14277     prefix: null;
14278     local-name: 'p';
14279     namespace-uri: null;
14280     attribute {
14281     prefix: 'xmlns';
14282     local-name: 'a';
14283     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14284     specified: true;
14285     }
14286     element {
14287     prefix: 'a';
14288     local-name: 'q';
14289     namespace-uri: 'http://1.example/';
14290     }
14291     }
14292     }
14293     @@XMLTest:
14294     @@@QName: xp.names.6.test
14295     @@@DEnt:
14296     @@@@test:value:
14297     <p xmlns:a="http://1.example/">$
14298     <q a:b="c"/>$
14299     </p>
14300     @@@test:domTree:
14301     document {
14302     element {
14303     prefix: null;
14304     local-name: 'p';
14305     namespace-uri: null;
14306     attribute {
14307     prefix: 'xmlns';
14308     local-name: 'a';
14309     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14310     specified: true;
14311     }
14312     element {
14313     prefix: null;
14314     local-name: 'q';
14315     namespace-uri: null;
14316     attribute {
14317     prefix: 'a';
14318     local-name: 'b';
14319     namespace-uri: 'http://1.example/';
14320     specified: true;
14321     }
14322     }
14323     }
14324     }
14325     @@XMLTest:
14326     @@@QName: xp.names.7.test
14327     @@@DEnt:
14328     @@@@test:value:
14329     <p xmlns:a="http://1.example/">$
14330     <q a:b="c" xmlns:a="http://2.example/"/>$
14331     </p>
14332     @@@test:domTree:
14333     document {
14334     element {
14335     prefix: null;
14336     local-name: 'p';
14337     namespace-uri: null;
14338     attribute {
14339     prefix: 'xmlns';
14340     local-name: 'a';
14341     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14342     specified: true;
14343     }
14344     element {
14345     prefix: null;
14346     local-name: 'q';
14347     namespace-uri: null;
14348     attribute {
14349     prefix: 'a';
14350     local-name: 'b';
14351     namespace-uri: 'http://2.example/';
14352     specified: true;
14353     }
14354     attribute {
14355     prefix: 'xmlns';
14356     local-name: 'a';
14357     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14358     specified: true;
14359     }
14360     }
14361     }
14362     }
14363    
14364     @@XMLTest:
14365     @@@QName: xp.names.undeclare.1.test
14366     @@@DEnt:
14367     @@@@test:value:
14368     <p xmlns="http://1.example/">$
14369     <q xmlns="">$
14370     <r xmlns="http://2.example/"/>$
14371     </q>$
14372     </p>
14373     @@@test:domTree:
14374     document {
14375     element {
14376     prefix: null;
14377     local-name: 'p';
14378     namespace-uri: 'http://1.example/';
14379     attribute {
14380     prefix: null;
14381     local-name: 'xmlns';
14382     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14383     specified: true;
14384     }
14385     element {
14386     prefix: null;
14387     local-name: 'q';
14388     namespace-uri: null;
14389     attribute {
14390     prefix: null;
14391     local-name: 'xmlns';
14392     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14393     specified: true;
14394     }
14395     element {
14396     prefix: null;
14397     local-name: 'r';
14398     namespace-uri: 'http://2.example/';
14399     attribute {
14400     prefix: null;
14401     local-name: 'xmlns';
14402     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14403     specified: true;
14404     }
14405     }
14406     }
14407     }
14408     }
14409    
14410     @@XMLTest:
14411     @@@QName: xp.names.undeclare.1.0.1.test
14412     @@@DEnt:
14413     @@@@test:value:
14414     <?xml version="1.0"?>
14415     <a:p xmlns:a="http://1.example/">$
14416     <q xmlns:a="">$
14417     <a:r xmlns:a="http://2.example/"/>$
14418     </q>$
14419     </a:p>
14420     @@@c:erred: <[[xp|nswf-empty-namespace-name]]> { (2, 34)..(2, 47); }
14421     @@XMLTest:
14422     @@@QName: xp.names.undeclare.1.1.1.test
14423     @@@DEnt:
14424     @@@@test:value:
14425     <?xml version="1.1"?>
14426     <a:p xmlns:a="http://1.example/">$
14427     <q xmlns:a="">$
14428     <a:r xmlns:a="http://2.example/"/>$
14429     </q>$
14430     </a:p>
14431     @@@test:domTree:
14432     document {
14433     element {
14434     prefix: 'a';
14435     local-name: 'p';
14436     namespace-uri: 'http://1.example/';
14437     attribute {
14438     prefix: 'xmlns';
14439     local-name: 'a';
14440     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14441     specified: true;
14442     }
14443     element {
14444     prefix: null;
14445     local-name: 'q';
14446     namespace-uri: null;
14447     attribute {
14448     prefix: 'xmlns';
14449     local-name: 'a';
14450     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14451     specified: true;
14452     }
14453     element {
14454     prefix: 'a';
14455     local-name: 'r';
14456     namespace-uri: 'http://2.example/';
14457     attribute {
14458     prefix: 'xmlns';
14459     local-name: 'a';
14460     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14461     specified: true;
14462     }
14463     }
14464     }
14465     }
14466     }
14467     @@XMLTest:
14468     @@@QName: xp.names.undeclare.1.1.2.test
14469     @@@DEnt:
14470     @@@@test:value:
14471     <?xml version="1.1"?>
14472     <a:p xmlns:a="http://1.example/">$
14473     <q xmlns:a="">$
14474     <a:r/>$
14475     </q>$
14476     </a:p>
14477     @@@c:erred: <[[xp|nsc-prefix-declared]]> { (2, 48)..(2, 53); }
14478    
14479     @@XMLTest:
14480     @@@QName: xp.names.xml.prefix.1.test
14481     @@@DEnt:
14482     @@@@test:value:
14483     <a xmlns:xml="http://www.w3.org/XML/1998/namespace"/>
14484     @@@test:domTree:
14485     document {
14486     element {
14487     attribute {
14488     prefix: 'xmlns';
14489     local-name: 'xml';
14490     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14491     }
14492     }
14493     }
14494     @@XMLTest:
14495     @@@QName: xp.names.xml.prefix.2.test
14496     @@@DEnt:
14497     @@@@test:value:
14498     <a xmlns:xml="a"/>
14499     @@@c:erred: <[[xp|nsc-reserved-prefix-xml]]> { (1, 1)..(1, 18); }
14500     @@XMLTest:
14501     @@@QName: xp.names.xml.prefix.3.test
14502     @@@DEnt:
14503     @@@@test:value:
14504     <a xmlns:a="http://www.w3.org/XML/1998/namespace"
14505     />
14506     @@@c:erred: <[[xp|nsc-reserved-namespace-name-xml]]> { (1, 1)..(2, 2); }
14507     @@XMLTest:
14508     @@@QName: xp.names.xml.prefix.4.test
14509     @@@DEnt:
14510     @@@@test:value:
14511     <a xml:lang="ja"/>
14512     @@@test:domTree:
14513     document {
14514     element {
14515     attribute {
14516     prefix: 'xml';
14517     local-name: 'lang';
14518     namespace-uri: 'http://www.w3.org/XML/1998/namespace';
14519     }
14520     }
14521     }
14522    
14523     @@XMLTest:
14524     @@@QName: xp.names.prefix.declared.1.test
14525     @@@DEnt:
14526     @@@@test:value:
14527     <!DOCTYPE a [
14528     <!ATTLIST a
14529     b:c CDATA "d"
14530     >
14531     ]>
14532     <a/>
14533     @@@c:erred: <[[xp|nsc-prefix-declared]]> { (6, 1)..(6, 4); }
14534    
14535     @@XMLTest:
14536     @@@QName: xp.names.xmlns.reserved.1.test
14537     @@@DEnt:
14538     @@@@test:value:
14539     <a xmlns:xmlns="http://www.w3.org/2000/xmlns/"
14540     />
14541     @@@c:erred: <[[xp|nsc-reserved-prefix-xmlns]]> { (1, 1)..(2, 2); }
14542     @@@c:erred: <[[xp|nsc-reserved-namespace-name-xmlns]]> { (1, 1)..(2, 2); }
14543     @@XMLTest:
14544     @@@QName: xp.names.xmlns.reserved.2.test
14545     @@@DEnt:
14546     @@@@test:value:
14547     <a xmlns:xmlns="a"
14548     />
14549     @@@c:erred: <[[xp|nsc-reserved-prefix-xmlns]]> { (1, 1)..(2, 2); }
14550     @@XMLTest:
14551     @@@QName: xp.names.xmlns.reserved.3.test
14552     @@@DEnt:
14553     @@@@test:value:
14554     <a xmlns:a="http://www.w3.org/2000/xmlns/"
14555     />
14556     @@@c:erred: <[[xp|nsc-reserved-namespace-name-xmlns]]> { (1, 1)..(2, 2); }
14557    
14558     @@XMLTest:
14559     @@@QName: xp.names.default.1.test
14560     @@@DEnt:
14561     @@@@test:value:
14562     <!DOCTYPE a [
14563     <!ATTLIST a
14564     xmlns CDATA "http://1.example/">
14565     ]>
14566     <a/>
14567     @@@test:domTree:
14568     document {
14569     document-type {
14570     element-type-definition {
14571     node-name: 'a';
14572     attribute-definition {
14573     node-name: 'xmlns';
14574     node-value: 'http://1.example/';
14575     }
14576     }
14577     }
14578     element {
14579     prefix: null;
14580     local-name: 'a';
14581     namespace-uri: 'http://1.example/';
14582     attribute {
14583     prefix: null;
14584     local-name: 'xmlns';
14585     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14586     value: 'http://1.example/';
14587     specified: false;
14588     }
14589     }
14590     }
14591     @@XMLTest:
14592     @@@QName: xp.names.default.2.test
14593     @@@DEnt:
14594     @@@@test:value:
14595     <!DOCTYPE a [
14596     <!ATTLIST a
14597     xmlns CDATA "http://1.example/">
14598     ]>
14599     <a xmlns="http://2.example/"/>
14600     @@@test:domTree:
14601     document {
14602     document-type {
14603     element-type-definition {
14604     node-name: 'a';
14605     attribute-definition {
14606     node-name: 'xmlns';
14607     node-value: 'http://1.example/';
14608     }
14609     }
14610     }
14611     element {
14612     prefix: null;
14613     local-name: 'a';
14614     namespace-uri: 'http://2.example/';
14615     attribute {
14616     prefix: null;
14617     local-name: 'xmlns';
14618     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14619     value: 'http://2.example/';
14620     specified: true;
14621     }
14622     }
14623     }
14624     @@XMLTest:
14625     @@@QName: xp.names.default.3.test
14626     @@@DEnt:
14627     @@@@test:value:
14628     <!DOCTYPE b:a [
14629     <!ATTLIST b:a
14630     xmlns:b CDATA "http://1.example/">
14631     ]>
14632     <b:a/>
14633     @@@test:domTree:
14634     document {
14635     document-type {
14636     element-type-definition {
14637     node-name: 'b:a';
14638     attribute-definition {
14639     node-name: 'xmlns:b';
14640     node-value: 'http://1.example/';
14641     }
14642     }
14643     }
14644     element {
14645     prefix: 'b';
14646     local-name: 'a';
14647     namespace-uri: 'http://1.example/';
14648     attribute {
14649     prefix: 'xmlns';
14650     local-name: 'b';
14651     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14652     value: 'http://1.example/';
14653     specified: false;
14654     }
14655     }
14656     }
14657     @@XMLTest:
14658     @@@QName: xp.names.default.4.test
14659     @@@DEnt:
14660     @@@@test:value:
14661     <!DOCTYPE b:a [
14662     <!ATTLIST b:a
14663     xmlns:b CDATA "http://1.example/">
14664     ]>
14665     <b:a xmlns:b="http://2.example/"/>
14666     @@@test:domTree:
14667     document {
14668     document-type {
14669     element-type-definition {
14670     node-name: 'b:a';
14671     attribute-definition {
14672     node-name: 'xmlns:b';
14673     node-value: 'http://1.example/';
14674     }
14675     }
14676     }
14677     element {
14678     prefix: 'b';
14679     local-name: 'a';
14680     namespace-uri: 'http://2.example/';
14681     attribute {
14682     prefix: 'xmlns';
14683     local-name: 'b';
14684     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14685     value: 'http://2.example/';
14686     specified: true;
14687     }
14688     }
14689     }
14690     @@XMLTest:
14691     @@@QName: xp.names.default.5.test
14692     @@@DEnt:
14693     @@@@test:value:
14694     <!DOCTYPE a [
14695     <!ATTLIST a
14696     xmlns:b CDATA "http://1.example/"
14697     b:c CDATA "http://1.example/">
14698     ]>
14699     <a xmlns:b="http://2.example/"/>
14700     @@@test:domTree:
14701     document {
14702     document-type {
14703     element-type-definition {
14704     node-name: 'a';
14705     attribute-definition {
14706     node-name: 'xmlns:b';
14707     text-content: 'http://1.example/';
14708     }
14709     attribute-definition {
14710     node-name: 'b:c';
14711     text-content: 'http://1.example/';
14712     }
14713     }
14714     }
14715     element {
14716     prefix: null;
14717     local-name: 'a';
14718     namespace-uri: null;
14719     attribute {
14720     prefix: 'xmlns';
14721     local-name: 'b';
14722     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14723     value: 'http://2.example/';
14724     specified: true;
14725     }
14726     attribute {
14727     prefix: 'b';
14728     local-name: 'c';
14729     namespace-uri: 'http://2.example/';
14730     specified: false;
14731     }
14732     }
14733     }
14734    
14735     @@XMLTest:
14736     @@@QName: xp.names.unique.1.test
14737     @@@DEnt:
14738     @@@@test:value:
14739     <a
14740     xmlns:b="http://2.example/"
14741     xmlns:c="http://2.example/"
14742     b:d=""
14743     c:d=""
14744     />
14745     @@@c:erred: <[[xp|nswf-unique-att-spec-expanded-name]]> { (1, 1)..(6, 2); }
14746     @@XMLTest:
14747     @@@QName: xp.names.unique.2.test
14748     @@@DEnt:
14749     @@@@test:value:
14750     <!DOCTYPE a [
14751     <!ATTLIST a
14752     c:d CDATA ""
14753     >
14754     ]>
14755     <a
14756     xmlns:b="http://2.example/"
14757     xmlns:c="http://2.example/"
14758     b:d=""
14759     />
14760     @@@c:erred: <[[xp|nswf-unique-att-spec-expanded-name]]> { (6, 1)..(10, 2);}
14761     @@XMLTest:
14762     @@@QName: xp.names.unique.3.test
14763     @@@DEnt:
14764     @@@@test:value:
14765     <!DOCTYPE a [
14766     <!ATTLIST a
14767     c:d CDATA "value1"
14768     >
14769     ]>
14770     <a
14771     xmlns:c="http://2.example/"
14772     c:d="value2"
14773     />
14774     @@@test:domTree:
14775     document {
14776     document-type { }
14777     element {
14778     attribute {
14779     prefix: 'xmlns';
14780     local-name: 'c';
14781     namespace-uri: 'http://www.w3.org/2000/xmlns/';
14782     specified: true;
14783     }
14784     attribute {
14785     prefix: 'c';
14786     local-name: 'd';
14787     namespace-uri: 'http://2.example/';
14788     value: 'value2';
14789     specified: true;
14790     }
14791     }
14792     }
14793    
14794     @@XMLTest:
14795     @@@QName: xp.names.normalize.1.test
14796     @@@DEnt:
14797     @@@@test:value:
14798     <!DOCTYPE a [
14799     <!ATTLIST a
14800     xmlns NMTOKEN #IMPLIED
14801     >
14802     ]>
14803     <a xmlns=" "/>
14804     @@@test:domTree:
14805     document {
14806     document-type { }
14807     element {
14808     namespace-uri: null;
14809     prefix: null;
14810     local-name: 'a';
14811     }
14812     }
14813     @@XMLTest:
14814     @@@QName: xp.names.normalize.2.test
14815     @@@DEnt:
14816     @@@@test:value:
14817     <!DOCTYPE a [
14818     <!ATTLIST a
14819     xmlns NMTOKEN #IMPLIED
14820     >
14821     ]>
14822     <a xmlns=" about:blank "/>
14823     @@@test:domTree:
14824     document {
14825     document-type { }
14826     element {
14827     namespace-uri: 'about:blank';
14828     prefix: null;
14829     local-name: 'a';
14830     }
14831     }
14832     @@XMLTest:
14833     @@@QName: xp.names.normalize.3.test
14834     @@@DEnt:
14835     @@@@test:value:
14836     <!DOCTYPE a:a [
14837     <!ATTLIST a:a
14838     xmlns:a NMTOKEN #IMPLIED
14839     >
14840     ]>
14841     <a:a xmlns:a=" about:blank "/>
14842     @@@test:domTree:
14843     document {
14844     document-type { }
14845     element {
14846     namespace-uri: 'about:blank';
14847     prefix: 'a';
14848     local-name: 'a';
14849     }
14850     }
14851    
14852 wakaba 1.29 @@XMLTest:
14853     @@@QName: xp.no.baseuri.test
14854     @@@DEnt:
14855     @@@@test:value:
14856     <p/>
14857     @@@test:domTree:
14858     document {
14859     document-uri: null;
14860     base-uri: null;
14861     element {
14862     node-name: 'p';
14863     base-uri: null;
14864     }
14865     }
14866     @@XMLTest:
14867     @@@QName: xp.docuri.no.baseuri.test
14868     @@@DEnt:
14869     @@@@test:uri:
14870     http://www.example.com/
14871     @@@@test:value:
14872     <p/>
14873     @@@test:domTree:
14874     document {
14875     document-uri: 'http://www.example.com/';
14876     base-uri: 'http://www.example.com/';
14877     element {
14878     node-name: 'p';
14879     base-uri: 'http://www.example.com/';
14880     }
14881     }
14882     @@XMLTest:
14883     @@@QName: xp.docuri.baseuri.test
14884     @@@DEnt:
14885     @@@@test:uri:
14886     http://www.example.com/
14887     @@@@test:baseURI:
14888     ftp://ftp.example.com/
14889     @@@@test:value:
14890     <p/>
14891     @@@test:domTree:
14892     document {
14893     document-uri: 'http://www.example.com/';
14894     base-uri: 'ftp://ftp.example.com/';
14895     element {
14896     node-name: 'p';
14897     base-uri: 'ftp://ftp.example.com/';
14898     }
14899     }
14900     @@XMLTest:
14901     @@@QName: xp.doctype.baseuri.test
14902     @@@DEnt:
14903     @@@@test:uri:
14904     http://www.example.com/
14905     @@@@test:baseURI:
14906     ftp://ftp.example.com/
14907     @@@@test:value:
14908     <!DOCTYPE p SYSTEM "sys">
14909     <p/>
14910     @@@test:domTree:
14911     document {
14912     document-uri: 'http://www.example.com/';
14913     base-uri: 'ftp://ftp.example.com/';
14914     document-type {
14915     system-id: 'sys';
14916     manakai-declaration-base-uri: 'ftp://ftp.example.com/';
14917     }
14918     element {
14919     node-name: 'p';
14920     base-uri: 'ftp://ftp.example.com/';
14921     }
14922     }
14923     @@XMLTest:
14924     @@@QName: xp.entdecl.baseuri.test
14925     @@@DEnt:
14926     @@@@test:uri:
14927     http://www.example.com/
14928     @@@@test:baseURI:
14929     ftp://ftp.example.com/
14930     @@@@test:value:
14931     <!DOCTYPE p [
14932     <!ENTITY ent SYSTEM "ent">
14933     ]>
14934     <p/>
14935     @@@test:domTree:
14936     document {
14937     document-uri: 'http://www.example.com/';
14938     base-uri: 'ftp://ftp.example.com/';
14939     document-type {
14940     general-entity {
14941     node-name: 'ent';
14942     manakai-declaration-base-uri: 'ftp://ftp.example.com/';
14943     }
14944     }
14945     element {
14946     node-name: 'p';
14947     base-uri: 'ftp://ftp.example.com/';
14948     }
14949     }
14950     @@XMLTest:
14951     @@@QName: xp.notdecl.baseuri.test
14952     @@@DEnt:
14953     @@@@test:uri:
14954     http://www.example.com/
14955     @@@@test:baseURI:
14956     ftp://ftp.example.com/
14957     @@@@test:value:
14958     <!DOCTYPE p [
14959     <!NOTATION not SYSTEM "not">
14960     ]>
14961     <p/>
14962     @@@test:domTree:
14963     document {
14964     document-uri: 'http://www.example.com/';
14965     base-uri: 'ftp://ftp.example.com/';
14966     document-type {
14967     notation {
14968     node-name: 'not';
14969     manakai-declaration-base-uri: 'ftp://ftp.example.com/';
14970     }
14971     }
14972     element {
14973     node-name: 'p';
14974     base-uri: 'ftp://ftp.example.com/';
14975     }
14976     }
14977     @@XMLTest:
14978     @@@QName: xp.doctype.intsubset.pi.baseuri.test
14979     @@@DEnt:
14980     @@@@test:uri:
14981     http://www.example.com/
14982     @@@@test:baseURI:
14983     ftp://ftp.example.com/
14984     @@@@test:value:
14985     <!DOCTYPE p [
14986     <?pi?>
14987     ]>
14988     <p/>
14989     @@@test:domTree:
14990     document {
14991     document-uri: 'http://www.example.com/';
14992     base-uri: 'ftp://ftp.example.com/';
14993     document-type {
14994     pi {
14995     node-name: 'pi';
14996     base-uri: 'ftp://ftp.example.com/';
14997     }
14998     }
14999     element {
15000     node-name: 'p';
15001     base-uri: 'ftp://ftp.example.com/';
15002     }
15003     }
15004    
15005 wakaba 1.30 @@XMLTest:
15006     @@@QName: xp.xmlid.attr.test
15007     @@@DEnt:
15008     @@@@test:value:
15009     <p xml:id="idv"/>
15010 wakaba 1.34 @@@cfg:xml-id: 1
15011 wakaba 1.30 @@@test:domTree:
15012     document {
15013     element {
15014     attribute {
15015     node-name: 'xml:id';
15016     value: 'idv';
15017     schema-type-info: TypeInfo ('http://www.w3.org/TR/REC-xml',
15018     'ID');
15019     specified: true;
15020     }
15021     }
15022     }
15023     @@XMLTest:
15024 wakaba 1.34 @@@QName: xp.xmlid.attr.disabled.test
15025     @@@DEnt:
15026     @@@@test:value:
15027     <p xml:id="idv"/>
15028     @@@cfg:xml-id: 0
15029     @@@test:domTree:
15030     document {
15031     element {
15032     attribute {
15033     node-name: 'xml:id';
15034     value: 'idv';
15035     schema-type-info: TypeInfo (null, null);
15036     specified: true;
15037     }
15038     }
15039     }
15040     @@XMLTest:
15041 wakaba 1.30 @@@QName: xp.xmlid.attr.norm.test
15042     @@@DEnt:
15043     @@@@test:value:
15044     <p xml:id=" $u000Aidv "/>
15045 wakaba 1.34 @@@cfg:xml-id: 1
15046 wakaba 1.30 @@@test:domTree:
15047     document {
15048     element {
15049     attribute {
15050     node-name: 'xml:id';
15051     value: 'idv';
15052     schema-type-info: TypeInfo ('http://www.w3.org/TR/REC-xml',
15053     'ID');
15054     specified: true;
15055     }
15056     }
15057     }
15058     @@XMLTest:
15059 wakaba 1.34 @@@QName: xp.xmlid.attr.norm.disabled.test
15060     @@@DEnt:
15061     @@@@test:value:
15062     <p xml:id=" $u000Aidv "/>
15063     @@@cfg:xml-id: 0
15064     @@@test:domTree:
15065     document {
15066     element {
15067     attribute {
15068     node-name: 'xml:id';
15069     value: ' idv ';
15070     schema-type-info: TypeInfo (null, null);
15071     specified: true;
15072     }
15073     }
15074     }
15075     @@XMLTest:
15076 wakaba 1.30 @@@QName: xp.xmlid.attrdef.test
15077     @@@DEnt:
15078     @@@@test:value:
15079     <!DOCTYPE p [
15080     <!ATTLIST p xml:id ID #IMPLIED>
15081     ]>
15082     <p/>
15083 wakaba 1.34 @@@cfg:xml-id: 1
15084     @@@test:domTree:
15085     document {
15086     document-type {
15087     element-type-definition {
15088     node-name: 'p';
15089     attribute-definition {
15090     node-name: 'xml:id';
15091     declared-type: const (ID_ATTR);
15092     default-type: const (IMPLIED_DEFAULT);
15093     }
15094     }
15095     }
15096     element { }
15097     }
15098     @@XMLTest:
15099     @@@QName: xp.xmlid.attrdef.disabled.test
15100     @@@DEnt:
15101     @@@@test:value:
15102     <!DOCTYPE p [
15103     <!ATTLIST p xml:id ID #IMPLIED>
15104     ]>
15105     <p/>
15106     @@@cfg:xml-id: 0
15107 wakaba 1.30 @@@test:domTree:
15108     document {
15109     document-type {
15110     element-type-definition {
15111     node-name: 'p';
15112     attribute-definition {
15113     node-name: 'xml:id';
15114     declared-type: const (ID_ATTR);
15115     default-type: const (IMPLIED_DEFAULT);
15116     }
15117     }
15118     }
15119     element { }
15120     }
15121     @@XMLTest:
15122     @@@QName: xp.xmlid.attrdef.defaultattr.test
15123     @@@DEnt:
15124     @@@@test:value:
15125     <!DOCTYPE p [
15126     <!ATTLIST p xml:id ID "idv"><!-- invalid -->
15127     ]>
15128     <p/>
15129 wakaba 1.34 @@@cfg:xml-id: 1
15130     @@@test:domTree:
15131     document {
15132     document-type {
15133     element-type-definition {
15134     node-name: 'p';
15135     attribute-definition {
15136     node-name: 'xml:id';
15137     declared-type: const (ID_ATTR);
15138     default-type: const (EXPLICIT_DEFAULT);
15139     node-value: 'idv';
15140     }
15141     }
15142     }
15143     element {
15144     attribute {
15145     node-name: 'xml:id';
15146     schema-type-info: TypeInfo ('http://www.w3.org/TR/REC-xml',
15147     'ID');
15148     value: 'idv';
15149     specified: false;
15150     }
15151     }
15152     }
15153     @@XMLTest:
15154     @@@QName: xp.xmlid.attrdef.defaultattr.disabled.test
15155     @@@DEnt:
15156     @@@@test:value:
15157     <!DOCTYPE p [
15158     <!ATTLIST p xml:id ID "idv"><!-- invalid -->
15159     ]>
15160     <p/>
15161     @@@cfg:xml-id: 0
15162 wakaba 1.30 @@@test:domTree:
15163     document {
15164     document-type {
15165     element-type-definition {
15166     node-name: 'p';
15167     attribute-definition {
15168     node-name: 'xml:id';
15169     declared-type: const (ID_ATTR);
15170     default-type: const (EXPLICIT_DEFAULT);
15171     node-value: 'idv';
15172     }
15173     }
15174     }
15175     element {
15176     attribute {
15177     node-name: 'xml:id';
15178     schema-type-info: TypeInfo ('http://www.w3.org/TR/REC-xml',
15179     'ID');
15180     value: 'idv';
15181     specified: false;
15182     }
15183     }
15184     }
15185    
15186 wakaba 1.34 @@XMLTest:
15187     @@@QName: xp.general.entity.unused.1.test
15188     @@@DEnt:
15189     @@@@test:value:
15190     <!DOCTYPE p [
15191     <!ENTITY mylt "<">
15192     ]>
15193     <p/>
15194     @@@cfg:entity-replacement-tree: 0
15195     @@@test:domTree:
15196     document {
15197     document-type {
15198     general-entity {
15199     node-name: 'mylt';
15200     }
15201     }
15202     element { }
15203     }
15204     @@XMLTest:
15205     @@@QName: xp.general.entity.unused.2.test
15206     @@@DEnt:
15207     @@@@test:value:
15208     <!DOCTYPE p [
15209     <!ENTITY mylt "<">
15210     ]>
15211     <p/>
15212     @@@cfg:entity-replacement-tree: 1
15213     @@@c:erred: <[[xp|wf-syntax-error]]> { (1, 1)..(1, 2); }
15214    
15215 wakaba 1.26 @@PerlDef:
15216     my $impl = $Message::DOM::ImplementationRegistry->get_implementation ({
15217     'Core' => '3.0',
15218     'XML' => '3.0',
15219     'XMLVersion' => ['1.0', '1.1'],
15220     });
15221    
15222     for my $test_data (@$TestData) {
15223 wakaba 1.34 my $parser = <Class::ManakaiXMLParser>->new ($impl);
15224    
15225 wakaba 1.26 $test->start_new_test ($test_data->{uri});
15226     my $doc_ent = $test_data->{entity}->{$test_data->{root_uri}};
15227     my $not_ok;
15228    
15229 wakaba 1.34 ## -- DOM Configuration Parameters
15230    
15231     my $pcfg = $parser->dom_config;
15232     for (keys %{$test_data->{dom_config}}) {
15233     $pcfg->set_parameter ($_ => $test_data->{dom_config}->{$_});
15234     }
15235    
15236     $pcfg->set_parameter ('error-handler' => sub ($$) {
15237 wakaba 1.26 my (undef, $err) = @_;
15238     my $err_type = $err->type;
15239     if ($test_data->{dom_error}->{$err_type}) {
15240     $test->assert_error_equals
15241     (actual_value => $err,
15242     expected_hash => shift @{$test_data->{dom_error}
15243     ->{$err_type}});
15244     } else { # Uncatched error
15245     warn $err;
15246     unless ($err->severity == <C::c|DOMError.SEVERITY_WARNING>) {
15247     $test->failure_comment ('Unexpected error |'.$err->type.'|');
15248     $not_ok = true;
15249     }
15250     }
15251     return true; # continue as far as possible
15252     });
15253    
15254 wakaba 1.34 ## -- Input Data
15255    
15256 wakaba 1.27 my $input = {string_data => \$doc_ent->{<Q::test:value>},
15257     system_id => $doc_ent->{<Q::test:uri>},
15258     base_uri => $doc_ent->{<Q::test:baseURI>}};
15259 wakaba 1.34
15260     ## -- Test and Result
15261    
15262 wakaba 1.26 if ($test_data->{dom_tree}) { # Successful test
15263 wakaba 1.31 my $doc;
15264 wakaba 1.26 try {
15265 wakaba 1.31 $doc = $parser->parse ($input);
15266 wakaba 1.26 $test->assert_dom_tree_equals
15267     (actual_value => $doc,
15268     expected_hash => $test_data->{dom_tree});
15269     for (values %{$test_data->{dom_error}||{}}) {
15270     if (@$_) {
15271     $test->failure_comment
15272     (@$_.' |DOMError|s of type |'.
15273     $_->[0]->{type}->{value}.'| are not reported');
15274     $not_ok = true;
15275     }
15276     }
15277     $not_ok ? $test->not_ok : $test->ok;
15278 wakaba 1.31 undef $doc;
15279 wakaba 1.26 } catch Message::Util::IF::DTException with {
15280 wakaba 1.31 require 'manakai/mndebug.pl';
15281     manakai::mndebug::dump ($doc);
15282 wakaba 1.26 } catch Message::DOM::IF::LSException with {
15283     # not_ok
15284     } otherwise {
15285     my $err = shift;
15286     warn $err;
15287     $test->not_ok;
15288     };
15289     } else {
15290 wakaba 1.31 my $doc;
15291 wakaba 1.26 try {
15292 wakaba 1.31 $doc = $parser->parse ($input);
15293 wakaba 1.26 } catch Message::Util::IF::DTException with {
15294 wakaba 1.31 require 'manakai/mndebug.pl';
15295     manakai::mndebug::dump ($doc);
15296 wakaba 1.26 } catch Message::DOM::IF::LSException with {
15297     #
15298     } otherwise {
15299     my $err = shift;
15300     warn $err;
15301     $test->not_ok;
15302     };
15303     for (values %{$test_data->{dom_error}||{}}) {
15304     if (@$_) {
15305     $test->failure_comment
15306     (@$_.' |DOMError|s of type |'.
15307     $_->[0]->{type}->{value}.'| are not reported');
15308     $not_ok = true;
15309     }
15310     }
15311     $not_ok ? $test->not_ok : $test->ok;
15312 wakaba 1.12 }
15313 wakaba 1.5 }
15314 wakaba 1.6
15315     @ResourceDef:
15316 wakaba 1.19 @@QName: getEmptyEntityState
15317     @@rdf:type: DISPerl|InlineCode
15318     @@ForCheck: ManakaiDOM|ForClass
15319     @@PerlDef:
15320     {reptxt => \'', line => 1, column => 1, pos => 0,
15321 wakaba 1.27 is_externally_declared => true, name => $name,
15322     fh => do {
15323     open my $empty, '<', \'';
15324     $empty;
15325     },
15326     close_file => sub { }}
15327 wakaba 1.19
15328     @ResourceDef:
15329 wakaba 1.6 @@QName: getCopyOfEntityState
15330     @@rdf:type: DISPerl|InlineCode
15331     @@ForCheck: ManakaiDOM|ForClass
15332     @@PerlDef:
15333     {%{$self->{$entity_type}->{$entity_name}},
15334 wakaba 1.27 line => 1, column => 1, pos => 0,
15335     fh => do {
15336     require IO::String;
15337     IO::String->new
15338     (${$self->{$entity_type}->{$entity_name}->{reptxt}});
15339     ## TODO: External entities.
15340     },
15341     close_file => sub { }}
15342 wakaba 1.1 ##ManakaiXMLParser
15343 wakaba 1.5
15344     ElementTypeBinding:
15345 wakaba 1.27 @Name: Test
15346     @ElementType:
15347     dis:ResourceDef
15348     @ShadowContent:
15349     @@ForCheck: ManakaiDOM|ForClass
15350     @@rdf:type: test|StandaloneTest
15351    
15352     ElementTypeBinding:
15353 wakaba 1.5 @Name: XMLTests
15354     @ElementType:
15355     dis:ResourceDef
15356     @ShadowContent:
15357     @@ForCheck: ManakaiDOM|ForClass
15358     @@rdf:type: test|ParserTestSet
15359    
15360     ElementTypeBinding:
15361     @Name: XMLTest
15362     @ElementType:
15363     dis:ResourceDef
15364     @ShadowContent:
15365     @@ForCheck: ManakaiDOM|ForClass
15366     @@rdf:type: test|ParserTest
15367    
15368     ElementTypeBinding:
15369     @Name: DEnt
15370     @ElementType:
15371     dis:ResourceDef
15372     @ShadowContent:
15373     @@rdf:type: test|RootEntity
15374    
15375     ElementTypeBinding:
15376     @Name: Ent
15377     @ElementType:
15378     dis:ResourceDef
15379     @ShadowContent:
15380     @@rdf:type: test|Entity
15381 wakaba 1.1
15382 wakaba 1.3 ResourceDef:
15383     @QName: xp|get-location-from-token
15384     @rdf:type: DISPerl|BlockCode
15385     @enDesc:
15386     Creates a <IF::DOMCore:DOMLocator> object from a token.
15387     @PerlDef:
15388 wakaba 1.14 my $__d = $token->{type} ne '#EOF'
15389     ? $token->{location}->{char_d}
15390     : 0;
15391 wakaba 1.15 $__d -= $token->{location_d} if $token->{location_d};
15392 wakaba 1.3 $result = {
15393 wakaba 1.14 utf32_offset => $token->{location}->{pos} - $__d,
15394     line_number => $token->{location}->{line},
15395     column_number => $token->{location}->{column} - $__d,
15396 wakaba 1.3 };
15397 wakaba 1.14 $result->{utf32_offset} = 0 if $result->{utf32_offset} < 0;
15398     $result->{column_number} = 0 if $result->{column_number} < 0;
15399     ## 0 or 1, which should be?
15400 wakaba 1.3 @For: ManakaiDOM|ManakaiDOM3
15401 wakaba 1.1
15402     ElementTypeBinding:
15403     @Name: RuleDef
15404     @ElementType:
15405     dis:ResourceDef
15406     @ShadowContent:
15407     @@ForCheck: ManakaiDOM|ForClass
15408     @@rdf:type: Muf2003|RuleDefClass
15409    
15410     ElementTypeBinding:
15411     @Name: RuleParam
15412     @ElementType:
15413     dis:ResourceDef
15414     @ShadowContent:
15415     @@rdf:type: Muf2003|RuleParameter
15416    
15417     ElementTypeBinding:
15418     @Name: enImplNote
15419     @ElementType:
15420     dis:ImplNote
15421     @ShadowContent:
15422     @@lang:en
15423    
15424     ElementTypeBinding:
15425 wakaba 1.24 @Name: WFErrDef
15426 wakaba 1.1 @ElementType:
15427     dis:ResourceDef
15428     @ShadowContent:
15429     @@rdf:type: DOMCore|DOMErrorType
15430     @@For: ManakaiDOM|DOM3
15431     @@ecore:textFormatter: ManakaiXMLParserExceptionFormatter
15432 wakaba 1.24 @@c:severity: c|SEVERITY_FATAL_ERROR
15433 wakaba 1.1
15434 wakaba 1.3 ElementTypeBinding:
15435 wakaba 1.24 @Name: FatalErrDef
15436 wakaba 1.3 @ElementType:
15437     dis:ResourceDef
15438     @ShadowContent:
15439     @@rdf:type: DOMCore|DOMErrorType
15440     @@For: ManakaiDOM|DOM3
15441     @@ecore:textFormatter: ManakaiXMLParserExceptionFormatter
15442 wakaba 1.24 @@c:severity: c|SEVERITY_FATAL_ERROR
15443    
15444     ElementTypeBinding:
15445 wakaba 1.26 @Name: NSFatalErrDef
15446     @ElementType:
15447     dis:ResourceDef
15448     @ShadowContent:
15449     @@rdf:type: c|DOMErrorType
15450     @@For: ManakaiDOM|DOM3
15451     @@ecore:textFormatter: ManakaiXMLParserExceptionFormatter
15452     @@c:severity: c|SEVERITY_FATAL_ERROR
15453    
15454     ElementTypeBinding:
15455     @Name: NSCErrDef
15456     @ElementType:
15457     dis:ResourceDef
15458     @ShadowContent:
15459     @@rdf:type: c|DOMErrorType
15460     @@For: ManakaiDOM|DOM3
15461     @@ecore:textFormatter: ManakaiXMLParserExceptionFormatter
15462     @@c:severity: c|SEVERITY_FATAL_ERROR
15463    
15464     ElementTypeBinding:
15465 wakaba 1.24 @Name: VCErrDef
15466     @ElementType:
15467     dis:ResourceDef
15468     @ShadowContent:
15469     @@rdf:type: c|DOMErrorType
15470     @@For: ManakaiDOM|DOM3
15471     @@ecore:textFormatter: ManakaiXMLParserExceptionFormatter
15472     @@c:severity: c|SEVERITY_ERROR
15473    
15474     ElementTypeBinding:
15475     @Name: ErrDef
15476     @ElementType:
15477     dis:ResourceDef
15478     @ShadowContent:
15479     @@rdf:type: c|DOMErrorType
15480     @@For: ManakaiDOM|DOM3
15481     @@ecore:textFormatter: ManakaiXMLParserExceptionFormatter
15482     @@c:severity: c|SEVERITY_ERROR
15483 wakaba 1.3
15484 wakaba 1.16 ElementTypeBinding:
15485 wakaba 1.24 @Name: WarnDef
15486 wakaba 1.16 @ElementType:
15487     dis:ResourceDef
15488     @ShadowContent:
15489 wakaba 1.24 @@rdf:type: c|DOMErrorType
15490 wakaba 1.16 @@For: ManakaiDOM|DOM3
15491     @@ecore:textFormatter: ManakaiXMLParserExceptionFormatter
15492 wakaba 1.24 @@c:severity: c|SEVERITY_WARNING
15493 wakaba 1.16
15494 wakaba 1.3 WFErrDef:
15495     @QName: xp|wf-syntax-error
15496     @enDesc:
15497     The entity does not match to the production rule; it is not
15498     well-formed.
15499     @enMufDef:
15500     |%xp-error-token-type;|%xp-error-token-value
15501     (prefix => { (|}, suffix => {|)}); is not
15502     allowed%xp-error-lines (prefix => { (|}, suffix => {|)});
15503     @ecore:hasParameter:
15504     @@@: xp|error-token
15505     @@enDesc:
15506     The token that is not allowed.
15507    
15508     WFErrDef:
15509     @QName: xp|wf-pi-target-is-xml
15510     @enDesc:
15511     A processing instruction has its <CODE::PITarget> of
15512     <XML::xml> (in any case) which is not allowed.
15513     @enMufDef:
15514     Processing instruction target name cannot be |%p
15515     (name => {<Q::xp|name>});|
15516     @ecore:hasParameter:
15517     @@@: xp|error-token
15518     @@enDesc:
15519     The token that contains the name.
15520     @ecore:hasParameter:
15521     @@@: xp|name
15522     @@enDesc:
15523     A string that is specified as target name of the
15524     processing instruction.
15525     @ecore:hasParameter: xp|parent
15526    
15527     WFErrDef:
15528     @QName: xp|wf-no-end-tag
15529     @enDesc:
15530     An end-tag is not found.
15531     @enMufDef:
15532     End-tag |</%p (name => {<Q::xp|expected-element-type>});>| is required
15533     @ecore:hasParameter: xp|error-token
15534     @ecore:hasParameter:
15535     @@@: xp|node
15536     @@enDesc:
15537     The element node that is not closed.
15538     @ecore:hasParameter:
15539     @@@: xp|expected-element-type
15540     @@enDesc:
15541     The element type name of the element that is not closed.
15542    
15543     WFErrDef:
15544     @QName: xp|wf-unsupported-xml-version
15545     @enDesc:
15546     The XML version specified in the version declaration is not supported.
15547     @enMufDef:
15548     XML version |%p (name => {<Q::infoset|version>});| is not supported
15549     @ecore:hasParameter: xp|bad-token
15550     @ecore:hasParameter:
15551     @@@: xp|parent
15552     @@enDesc:
15553     The document node.
15554     @ecore:hasParameter:
15555     @@@: infoset|version
15556     @@enDesc:
15557     The specified XML version.
15558    
15559     WFErrDef:
15560     @QName: xp|wf-malformed-enc-name
15561     @enDesc:
15562     An <XA::encoding> pseudo-attribute value does not match
15563     to the procduction rule <CODE::EncName>.
15564     @enMufDef:
15565     Encoding name |%p (name => {<Q::xp|name>});| is not allowed
15566     @ecore:hasParameter: xp|error-token
15567     @ecore:hasParameter:
15568     @@@: xp|parent
15569     @@enDesc: The document node.
15570     @ecore:hasParameter:
15571     @@@: xp|name
15572     @@enDesc:
15573     The <XA::encoding> value.
15574    
15575     WFErrDef:
15576     @QName: xp|wf-malformed-xml-standalone
15577     @enDesc:
15578     An <XA::standalone> pseudo-attribute value is neither <XML::yes>
15579     or <XML::no>.
15580     @enMufDef:
15581     |standalone| pseudo-attribute value |%p (name => {<Q::xp|name>});|
15582     is not allowed
15583     @ecore:hasParameter: xp|error-token
15584     @ecore:hasParameter:
15585     @@@: xp|parent
15586     @@enDesc: The document node.
15587     @ecore:hasParameter:
15588     @@@: xp|name
15589     @@enDesc:
15590     The <XA::standalone> value.
15591    
15592     WFErrDef:
15593     @QName: xp|wf-legal-literal-character
15594     @enDesc:
15595     Each character in XML entity must match to the production
15596     rule <CODE::Char - RestrictedChar>.
15597     @enMufDef:
15598     Character %character-code-point
15599     (v => {<Q::xp|character-number>}); is not allowed
15600     @ecore:hasParameter:
15601     @@@: xp|character-number
15602     @@enDesc:
15603     The code position of the character being referred.
15604    
15605     WFErrDef:
15606 wakaba 1.26 @QName: xp|wf-invalid-character-in-node-name
15607     @c:errorType:
15608     @@@: wf-invalid-character-in-node-name
15609     @@ContentType: DISCore|String
15610     @enDesc:
15611     If a name contains a character that is not a name character
15612     in the XML version in use, or if the first character of a name
15613     is not a name start character in the XML version in use.
15614    
15615     {NOTE::
15616     When an invalid character is encountered in an entity
15617     where a <CODE::Name> is expected, what type of error
15618     is issued is implementation dependent: <Q::xp|wf-syntax-error>,
15619     <Q::xp|wf-pi-target-is-xml> or other error might be reported.
15620     }
15621    
15622     {NOTE::
15623     This error type is defined in DOM Level 3 Core and Load and Save
15624     modules and redefined herein for the purpose of XML parser.
15625     }
15626     @enMufDef:
15627     Character %character-code-point
15628     (v => {<Q::xp|character-number>}); is not allowed in name
15629     @ecore:hasParameter: xp|error-token
15630     @ecore:hasParameter:
15631     @@@: xp|character-number
15632     @@enDesc:
15633     The code position of the character being referred.
15634     @ecore:hasParameter:
15635     @@@: infoset|version
15636     @@enDesc:
15637     The version of XML in use.
15638    
15639     WFErrDef:
15640 wakaba 1.25 @QName: xp|wf-pes-in-internal-subset
15641     @enDesc:
15642     In the internal subset of the DTD, parameter entity references
15643     <kwd:MUST-NOT> occur within markup declarations.
15644     @enMufDef:
15645     Parameter entity reference |%percent;%param (name => {<Q::xp|name>});;|
15646     cannot occur within a markup declaration
15647     @ecore:hasParameter: xp|error-token
15648     @ecore:hasParameter:
15649     @@@: xp|name
15650     @@enDesc:
15651     The name of the parameter entity.
15652    
15653     WFErrDef:
15654 wakaba 1.3 @QName: xp|wf-element-type-match
15655 wakaba 1.1 @enDesc:
15656 wakaba 1.3 The <CODE::Name> in an element's end-tag must match the element type
15657     in the start-tag.
15658     @enMufDef:
15659     End-tag |</%p (name => {<Q::xp|actual-element-type>});>| does
15660     not match to start-tag |<%p (name => {<Q::xp|expected-element-type>});>|
15661     @ecore:hasParameter: xp|error-token
15662     @ecore:hasParameter:
15663     @@@: xp|node
15664     @@enDesc:
15665     The current opening element node.
15666     @ecore:hasParameter:
15667     @@@: xp|expected-element-type
15668     @@enDesc:
15669     The element type name of the current element.
15670     @ecore:hasParameter:
15671     @@@: xp|actual-element-type
15672     @@enDesc:
15673     The <CODE::Name> occurs in the end-tag.
15674    
15675     WFErrDef:
15676     @QName: xp|wf-unique-att-spec
15677     @enDesc:
15678     An attribute name <kwd:MUST-NOT> appear more than once in
15679     the same start-tag or empty-element tag.
15680 wakaba 1.1 @enMufDef:
15681 wakaba 1.3 Attribute |%p (name => {<Q::xp|name>});| is specified more
15682     than once in the same tag
15683     @ecore:hasParameter: xp|error-token
15684     @ecore:hasParameter:
15685     @@@: xp|name
15686     @@enDesc:
15687     The name of the attribute.
15688 wakaba 1.18
15689     WFErrDef:
15690     @QName: xp|wf-no-external-entity-references
15691     @enDesc:
15692     Attribute values <kwd:MUST-NOT> contain direct or indirect
15693     entity references to external entities.
15694     @enMufDef:
15695     External entity |%p (name => {<Q::xp|name>});| is referenced
15696     in an attribute value literal
15697     @ecore:hasParameter: xp|error-token
15698     @ecore:hasParameter:
15699     @@@: xp|name
15700     @@enDesc:
15701     The name of the entity.
15702    
15703     WFErrDef:
15704     @QName: xp|wf-no-lt-in-attribute-values
15705     @enDesc:
15706     The replacement text of any entity referred to directly or indirectly
15707     in an attribute value literal <kwd:MUST-NOT> contain a
15708     <CHAR::LESS-THAN SIGN>.
15709     @enMufDef:
15710     Entity replacement text cannot contain a
15711     |LESS-THAN SIGN| since it is referenced from an attribute
15712     value literal
15713     @ecore:hasParameter: xp|error-token
15714 wakaba 1.3
15715 wakaba 1.25 WarnDef:
15716     @QName: xp|warning-attribute-definition-ignored
15717     @enDesc:
15718     An attribute definition is ignored because the same attribute
15719     is declared before.
15720     @enMufDef:
15721     Attribute definition for |%p (name => {<Q::xp|name>});| is ignored
15722     @ecore:hasParameter: xp|error-token
15723     @ecore:hasParameter:
15724     @@@: xp|name
15725     @@enDesc:
15726     The name of the attribute.
15727    
15728 wakaba 1.3 WFErrDef:
15729     @QName: xp|wf-legal-character
15730     @enDesc:
15731     Characters referred to using character references <kwd:MUST>
15732     match the production for <CODE::Char>.
15733     @enMufDef:
15734     Reference to character %character-code-point
15735     (v => {<Q::xp|character-number>}); is not allowed
15736     @ecore:hasParameter: xp|error-token
15737     @ecore:hasParameter:
15738     @@@: xp|character-number
15739     @@enDesc:
15740     The code position of the character being referred.
15741     @ecore:hasParameter:
15742     @@@: xp|parent
15743     @@enDesc:
15744     The parent node in which the character reference has
15745     occurred, if available.
15746 wakaba 1.19
15747     WFErrDef:
15748     @QName: xp|wf-entity-declared
15749     @enDesc:
15750     {P:: In a document
15751    
15752     - without any DTD,
15753    
15754     - with only an internal DTD subset that contains no parameter
15755     entity references, or
15756    
15757     - with <XML::standalone="yes">,
15758    
15759     for an entity reference that does not occur within the external
15760     subset or a parameter entity, the <CODE::Name> given in the
15761     entity reference <kwd:MUST> match the <CODE::Name> does not
15762     occur within the external subset or a parameter entity,
15763     except that five predefined character entities need not
15764     be declared. The declaration of a general entity <kwd:MUST>
15765     precede any reference to it which appears in a default value
15766     in an attribute list declaration.
15767     @enMufDef:
15768     Entity |%p (name => {<Q::xp|name>});| must be declared
15769     in the internal subset
15770 wakaba 1.23 @ecore:hasParameter: xp|error-token
15771     @ecore:hasParameter:
15772     @@@: xp|name
15773     @@enDesc:
15774     The name of the entity.
15775    
15776     WFErrDef:
15777     @QName: xp|wf-parsed-entity
15778     @enDesc:
15779     An entity reference <kwd:MUST-NOT> contain the name of an
15780     unparsed entity.
15781     @enMufDef:
15782     Entity |%p (name => {<Q::xp|name>});| is an unparsed entity
15783     @ecore:hasParameter: xp|error-token
15784     @ecore:hasParameter:
15785     @@@: xp|name
15786     @@enDesc:
15787     The name of the entity.
15788    
15789     WFErrDef:
15790     @QName: xp|wf-no-recursion
15791     @enDesc:
15792     A parsed entity <kwd:MUST-NOT> contain a recursive reference
15793     to itself, either directly or indirectly.
15794     @enMufDef:
15795     Entity |%p (name => {<Q::xp|name>});| is recursively referenced
15796 wakaba 1.19 @ecore:hasParameter: xp|error-token
15797     @ecore:hasParameter:
15798     @@@: xp|name
15799     @@enDesc:
15800     The name of the entity.
15801 wakaba 1.16
15802     FatalErrDef:
15803     @QName: xp|fatal-xml11-end-of-line-in-xml-declaration
15804     @enDesc:
15805     An end-of-line character <CODE::U+0085> or <CODE::U+2028> is appeared
15806     within an XML declaration or text declaration.
15807     @enMufDef:
15808     End-of-line character %character-code-point
15809     (v => {<Q::xp|character-number>}); cannot be used within the
15810     XML or text declaration
15811     @ecore:hasParameter:
15812     @@@: xp|character-number
15813     @@enDesc:
15814     The code position of the end-of-line character.
15815 wakaba 1.24
15816     ErrDef:
15817     @QName: xp|error-internal-predefined-entity
15818     @enDesc:
15819     A general entity declaration whose <CODE::Name> equals to one
15820     of predefined entities <kwd:MUST> declare it as an internal entity.
15821     @enMufDef:
15822     Entity |%p (name => {<Q::xp|name>});| must be declared as an
15823     internal entity
15824     @ecore:hasParameter: xp|error-token
15825     @ecore:hasParameter:
15826     @@@: xp|name
15827     @@enDesc:
15828     The name of the entity.
15829    
15830     ErrDef:
15831     @QName: xp|error-malformed-predefined-entity
15832     @enDesc:
15833     A general entity declaration whose <CODE::Name> equals to one
15834     of predefined entities <kwd:MUST> declare it as a data
15835     character for the entity.
15836     @enMufDef:
15837     Entity declaration for |%p (name => {<Q::xp|name>});|
15838     (replacement text |%p (name => {<Q::xp|replacement-text>});|) is malformed
15839     @ecore:hasParameter: xp|error-token
15840     @ecore:hasParameter:
15841     @@@: xp|name
15842     @@enDesc:
15843     The name of the entity.
15844     @ecore:hasParameter:
15845     @@@: xp|replacement-text
15846     @@enDesc:
15847     The replacement text of the entity declaration.
15848    
15849     WarnDef:
15850     @QName: xp|warning-entity-declaration-ignored
15851     @enDesc:
15852     An entity declaration is ignored because the same entity
15853     is declared before.
15854     @enMufDef:
15855     Entity declaration for |%p (name => {<Q::xp|name>});| is ignored
15856     @ecore:hasParameter: xp|error-token
15857     @ecore:hasParameter:
15858     @@@: xp|name
15859     @@enDesc:
15860     The name of the entity.
15861    
15862     VCErrDef:
15863     @QName: xp|vc-unique-notation-name
15864     @enDesc:
15865     A <CODE::Name> <kwd:MUST-NOT> be declared in more than
15866     one notation declaration.
15867     @enMufDef:
15868     Notation |%p (name => {<Q::xp|name>});| is already declared
15869     @ecore:hasParameter: xp|error-token
15870     @ecore:hasParameter:
15871     @@@: xp|name
15872     @@enDesc:
15873     The name of the notation.
15874 wakaba 1.25
15875     WarnDef:
15876     @QName: xp|warning-entity-declaration-not-processed
15877     @enDesc:
15878     An entity declaration is not processed because there
15879     is a reference to parameter entity before the declaration
15880     and the entity is not read.
15881     @enMufDef:
15882     Entity declaration for |%p (name => {<Q::xp|name>});| is not processed
15883     @ecore:hasParameter: xp|error-token
15884     @ecore:hasParameter:
15885     @@@: xp|name
15886     @@enDesc:
15887     The name of the entity.
15888    
15889     WarnDef:
15890     @QName: xp|warning-attribute-definition-not-processed
15891     @enDesc:
15892     An attribute definition is not processed because there
15893     is a reference to parameter entity before the declaration
15894     and the entity is not read.
15895     @enMufDef:
15896     Attribute definition for |%p (name => {<Q::xp|name>});| is not processed
15897     @ecore:hasParameter: xp|error-token
15898     @ecore:hasParameter:
15899     @@@: xp|name
15900     @@enDesc:
15901     The name of the attribute.
15902 wakaba 1.26
15903     NSFatalErrDef:
15904     @QName: xp|nswf-legal-ncname
15905     @enDesc:
15906     <CODE::Name>s other than element type names and attribute names
15907     <kwd:MUST> be <CODE::NCName>s.
15908     @enMufDef:
15909     <CODE::Name> |%p (name => {<Q::xp|name>});| is not an <CODE::NCName>
15910     @ecore:hasParameter: xp|error-token
15911     @ecore:hasParameter:
15912     @@@: xp|name
15913     @@enDesc:
15914     The name.
15915     @ecore:hasParameter:
15916     @@@: infoset|version
15917     @@enDesc:
15918     The version of XML in use.
15919    
15920     NSFatalErrDef:
15921     @QName: xp|nswf-legal-qname
15922     @enDesc:
15923     An element type name or an attribute name <kwd:MUST> be a
15924     <CODE::QName>.
15925     @enMufDef:
15926     <CODE::Name> |%p (name => {<Q::xp|name>});| is not a <CODE::QName>
15927     @ecore:hasParameter: xp|error-token
15928     @ecore:hasParameter:
15929     @@@: xp|name
15930     @@enDesc:
15931     The name.
15932     @ecore:hasParameter:
15933     @@@: infoset|version
15934     @@enDesc:
15935     The version of XML in use.
15936    
15937     NSCErrDef:
15938     @QName: xp|nsc-reserved-prefix-xml
15939     @enDesc:
15940     The prefix <XML::xml> <kwd:MUST-NOT> be undeclared or bound
15941     to any namespace name other than <URI::http://www.w3.org/XML/1998/namespace>.
15942     @enMufDef:
15943     Namespace prefix |xml| cannot be bound to namespace
15944     name |%p (name => {<Q::infoset|namespaceName>});|
15945     @ecore:hasParameter: xp|error-token
15946     @ecore:hasParameter:
15947     @@@: infoset|prefix
15948     @@enDesc:
15949     The namespace prefix.
15950     @ecore:hasParameter:
15951     @@@: infoset|namespaceName
15952     @@enDesc:
15953     The namespace name bound to or an empty string for undeclaring.
15954    
15955     NSCErrDef:
15956     @QName: xp|nsc-reserved-namespace-name-xml
15957     @enDesc:
15958     Namespace prefixes other than <XML::xml> <kwd:MUST-NOT> be bound
15959     to the namespace name <URI::http://www.w3.org/XML/1998/namespace>.
15960     @enMufDef:
15961     Namespace prefix |%p (name => {<Q::infoset|prefix>});| cannot be
15962     bound to namespace name |http://www.w3.org/XML/1998/namespace|
15963     @enImplNote:
15964     The XMLNames spec does not prohibit the URI bound to
15965     the default namespace (!)
15966     @ecore:hasParameter: xp|error-token
15967     @ecore:hasParameter:
15968     @@@: infoset|prefix
15969     @@enDesc:
15970     The namespace prefix or <DOM::null> for default namespace.
15971     @ecore:hasParameter:
15972     @@@: infoset|namespaceName
15973     @@enDesc:
15974     The namespace name bound to.
15975    
15976     NSCErrDef:
15977     @QName: xp|nsc-reserved-prefix-xmlns
15978     @enDesc:
15979     The prefix <XML::xmlns> <kwd:MUST-NOT> be declared or undeclared.
15980     @enMufDef:
15981     Namespace prefix |xmlns| cannot be declared or undeclared
15982     @ecore:hasParameter: xp|error-token
15983     @ecore:hasParameter:
15984     @@@: infoset|prefix
15985     @@enDesc:
15986     The namespace prefix.
15987     @ecore:hasParameter:
15988     @@@: infoset|namespaceName
15989     @@enDesc:
15990     The namespace name bound to or an empty string for undeclaring.
15991    
15992     NSCErrDef:
15993     @QName: xp|nsc-reserved-namespace-name-xmlns
15994     @enDesc:
15995     Namespace prefixes <kwd:MUST-NOT> be bound
15996     to the namespace name <URI::http://www.w3.org/2000/xmlns/>.
15997     @enMufDef:
15998     Namespace prefix |%p (name => {<Q::infoset|prefix>});| cannot be
15999     bound to namespace name |http://www.w3.org/2000/xmlns/|
16000     @enImplNote:
16001     The XMLNames spec does not prohibit the URI bound to
16002     the default namespace (!)
16003     @ecore:hasParameter: xp|error-token
16004     @ecore:hasParameter:
16005     @@@: infoset|prefix
16006     @@enDesc:
16007     The namespace prefix or <DOM::null> for default namespace.
16008     @ecore:hasParameter:
16009     @@@: infoset|namespaceName
16010     @@enDesc:
16011     The namespace name bound to.
16012    
16013     NSCErrDef:
16014     @QName: xp|nsc-prefix-declared
16015     @enDesc:
16016     A namespace prefix other than <XML::xml> or <XML::xmlns>
16017     <kwd:MUST> have been declared in a namespace declaration
16018     attribute in either the start or empty element tag of the
16019     element where the prefix is used or in an ancestor
16020     element. Furthermore, the attribute value in the innermost
16021     such declaration <kwd:MUST-NOT> be an empty string.
16022     @enMufDef:
16023     Namespace prefix |%p (name => {<Q::infoset|prefix>});| in
16024     qualified name |%p (name => {<Q::xp|name>});| is not declared
16025     @ecore:hasParameter: xp|error-token
16026     @ecore:hasParameter:
16027     @@@: infoset|prefix
16028     @@enDesc:
16029     The namespace prefix.
16030     @ecore:hasParameter:
16031     @@@: xp|name
16032     @@enDesc:
16033     The qualified name.
16034    
16035     NSFatalErrDef:
16036     @QName: xp|nswf-empty-namespace-name
16037     @enDesc:
16038     If the XML version of the document is 1.0 and the
16039     normalized value of the prefixed namespace declaration attribute is empty.
16040     @enMufDef:
16041     Namespace |%p (name => {<Q::infoset|prefix>});| cannot be
16042     undeclared in XML 1.0
16043     @ecore:hasParameter: xp|error-token
16044     @ecore:hasParameter:
16045     @@@: infoset|prefix
16046     @@enDesc:
16047     The namespace prefix.
16048     @ecore:hasParameter:
16049     @@@: infoset|namespaceName
16050     @@enDesc:
16051     An empty string.
16052    
16053     NSFatalErrDef:
16054     @QName: xp|nswf-unique-att-spec-expanded-name
16055     @enDesc:
16056     No element may have two attributes that have qualified name
16057     with the same local part and with namespace prefixes
16058     that have been bound to namespace names that are identical.
16059     @enMufDef:
16060     Attribute |%p (name => {<Q::infoset|localName>});| in
16061     namespace |%p (name => {<Q::infoset|namespaceName>});| is
16062     attached to the same element more than once (as
16063     |%p (name => {<Q::xp|name>});| and
16064     |%p (name => {<Q::xp|another-attribute-name>});|)
16065     @enImplNote:
16066     The XMLNames spec doesn't mention default attributes
16067     for this constraint...
16068     @ecore:hasParameter: xp|error-token
16069     @ecore:hasParameter:
16070     @@@: infoset|localName
16071     @@enDesc:
16072     The local part of the attribute.
16073     @ecore:hasParameter:
16074     @@@: infoset|namespaceName
16075     @@enDesc:
16076     The namespace URI of the attribute.
16077     @ecore:hasParameter:
16078     @@@: xp|name
16079     @@enDesc:
16080     The name, i.e. a qualified name consist of <Q::infoset:localName>
16081     and <Q::infoset:namespaceName> parameter values.
16082     @ecore:hasParameter:
16083     @@@: xp|another-attribute-name
16084     @@enDesc:
16085     Another attribute qualified name expanded to the same expanded name
16086     as <Q::xp|name>.
16087    
16088     XWParam:
16089     @QName: xp|another-attribute-name
16090 wakaba 1.24
16091     XWParam:
16092     @QName: xp|replacement-text
16093     @enDesc:
16094     The replacement text.
16095 wakaba 1.1
16096 wakaba 1.3 XWParam:
16097 wakaba 1.1 @QName: xp|error-token
16098     @enDesc:
16099     The token where the parser found an error.
16100    
16101 wakaba 1.3 XWParam:
16102     @QName: xp|name
16103     @enDesc:
16104     A name.
16105    
16106     XWParam:
16107     @QName: xp|parent
16108     @enDesc:
16109     The parent node in which the error occurs.
16110    
16111     XWParam:
16112     @QName: xp|node
16113     @enDesc:
16114     The current node.
16115    
16116     XWParam:
16117     @QName: xp|actual-element-type
16118     @enDesc:
16119     The actual element type name occured in the source.
16120    
16121     XWParam:
16122     @QName: xp|expected-element-type
16123 wakaba 1.1 @enDesc:
16124 wakaba 1.3 The element type name expected.
16125    
16126     XWParam:
16127     @QName: xp|character-number
16128     @enDesc:
16129     The character code position.
16130    
16131     ElementTypeBinding:
16132     @Name: XWParam
16133     @ElementType:
16134     dis:ResourceDef
16135     @ShadowContent:
16136     @@For: =ManakaiDOM|all
16137     @@rdf:type: ecore|Parameter
16138 wakaba 1.1
16139     ElementTypeBinding:
16140     @Name:enMufDef
16141     @ElementType:
16142     ecore:defaultMessage
16143     @ShadowContent:
16144     @@lang:en
16145     @@ContentType:
16146     lang:muf
16147    
16148     ResourceDef:
16149     @QName: DOMImpl
16150     @AliasFor: DOMCore|DOMImplementation
16151     @For: ManakaiDOM|DOM
16152    
16153 wakaba 1.27 ResourceDef:
16154     @QName: LSInput
16155     @AliasFor: DOMLS|LSInput
16156     @For: ManakaiDOM|DOM
16157    
16158     ResourceDef:
16159     @QName: LSParser
16160     @AliasFor: DOMLS|LSParser
16161     @For: ManakaiDOM|DOM
16162    
16163 wakaba 1.1 ElementTypeBinding:
16164     @Name: Attr
16165     @ElementType:
16166     dis:ResourceDef
16167     @ShadowContent:
16168     @@rdf:type: DISLang|Attribute
16169     @@ForCheck: !=ManakaiDOM|ManakaiDOM
16170    
16171     ElementTypeBinding:
16172     @Name: Get
16173     @ElementType:
16174     dis:ResourceDef
16175     @ShadowContent:
16176     @@rdf:type: DISLang|AttributeGet
16177    
16178     ElementTypeBinding:
16179     @Name: Set
16180     @ElementType:
16181     dis:ResourceDef
16182     @ShadowContent:
16183     @@rdf:type: DISLang|AttributeSet
16184    
16185     ElementTypeBinding:
16186     @Name: enDesc
16187     @ElementType:
16188     dis:Description
16189     @ShadowContent:
16190     @@lang:en
16191    
16192     ElementTypeBinding:
16193     @Name: Method
16194     @ElementType:
16195     dis:ResourceDef
16196     @ShadowContent:
16197     @@rdf:type: DISLang|Method
16198     @@For: !=ManakaiDOM|ManakaiDOM
16199    
16200     ElementTypeBinding:
16201     @Name: Return
16202     @ElementType:
16203     dis:ResourceDef
16204     @ShadowContent:
16205     @@rdf:type: DISLang|MethodReturn
16206    
16207     ElementTypeBinding:
16208     @Name: Param
16209     @ElementType:
16210     dis:ResourceDef
16211     @ShadowContent:
16212     @@rdf:type: DISLang|MethodParameter
16213    
16214     ElementTypeBinding:
16215     @Name: PerlDef
16216     @ElementType:
16217     dis:Def
16218     @ShadowContent:
16219     @@ContentType: lang|Perl
16220    
16221     ElementTypeBinding:
16222 wakaba 1.27 @Name: PerlDefC
16223     @ElementType:
16224     dis:Def
16225     @ShadowContent:
16226     @@ContentType: lang|Perl
16227    
16228     ElementTypeBinding:
16229 wakaba 1.1 @Name: PropDef
16230     @ElementType:
16231     dis:ResourceDef
16232     @ShadowContent:
16233     @@rdf:type: rdf|Property
16234    
16235     ClsDef:
16236     @ClsQName: ManakaiXMLParserExceptionFormatter
16237    
16238     @ClsISA: ecore|MUErrorFormatter||ManakaiDOM|Perl
16239    
16240     @RuleDef:
16241     @@Name: xp-error-token-type
16242     @@enDesc:
16243     The type of the token the parser is encountered.
16244    
16245     @@Method:
16246     @@@Name: after
16247     @@@Param:
16248     @@@@Name: name
16249     @@@@Type: DOMString
16250     @@@@enDesc: The name of the method.
16251     @@@Param:
16252     @@@@Name: p
16253     @@@@Type: DISPerl|HASH
16254     @@@@enDesc: The set of the parameters to the method.
16255     @@@Param:
16256     @@@@Name: o
16257     @@@@Type: DISPerl|HASH
16258     @@@@enDesc: The option value.
16259     @@@Return:
16260     @@@@PerlDef:
16261     $p->{-result} = $o->{<H::xp|error-token>}->{type}
16262     if defined $o->{<H::xp|error-token>}->{type};
16263    
16264     @RuleDef:
16265     @@Name: xp-error-token-value
16266     @@enDesc:
16267     The value of the token the parser is encountered, if any.
16268    
16269     @@Method:
16270     @@@Name: after
16271     @@@Param:
16272     @@@@Name: name
16273     @@@@Type: DOMString
16274     @@@@enDesc: The name of the method.
16275     @@@Param:
16276     @@@@Name: p
16277     @@@@Type: DISPerl|HASH
16278     @@@@enDesc: The set of the parameters to the method.
16279     @@@Param:
16280     @@@@Name: o
16281     @@@@Type: DISPerl|HASH
16282     @@@@enDesc: The option value.
16283     @@@Return:
16284     @@@@PerlDef:
16285     $p->{-result} = $o->{<H::xp|error-token>}->{value}
16286     if defined $o->{<H::xp|error-token>}->{value};
16287    
16288     @RuleDef:
16289     @@Name: xp-error-lines
16290     @@enDesc:
16291     A copy of fragment of the source text that contains the line
16292     where the error occurred, if available.
16293    
16294     @@Method:
16295     @@@Name: after
16296     @@@Param:
16297     @@@@Name: name
16298     @@@@Type: DOMString
16299     @@@@enDesc: The name of the method.
16300     @@@Param:
16301     @@@@Name: p
16302     @@@@Type: DISPerl|HASH
16303     @@@@enDesc: The set of the parameters to the method.
16304     @@@Param:
16305     @@@@Name: o
16306     @@@@Type: DISPerl|HASH
16307     @@@@enDesc: The option value.
16308     @@@Return:
16309     @@@@PerlDef:
16310     my $pos = $o-><AG::DOMCore|DOMError.location>
16311     -><AG::DOMCore|DOMLocator.utf32Offset>;
16312 wakaba 1.27 my $src = $o->{<H::ecore|object>}->{entity}->[-1]->{reptxt};
16313     if (defined $src and $pos > -1) {
16314 wakaba 1.1 my $start = $pos;
16315     $start = rindex ($$src, "\x0A", $start - 1) for 0..2;
16316     $start++;
16317     my $end = $pos;
16318     $end = index ($$src, "\x0A", $end + 1) for 0..2;
16319     $end = length $$src if $end < 0;
16320     $p->{-result} = substr $$src, $start, $end - $start;
16321     }
16322 wakaba 1.3
16323     @RuleDef:
16324     @@Name: character-code-point
16325     @@enDesc:
16326     The character code position, in <CODE::U+<VAR::HHHH>> notation.
16327    
16328     @@Method:
16329     @@@Name: after
16330     @@@Param:
16331     @@@@Name: name
16332     @@@@Type: DOMString
16333     @@@@enDesc: The name of the method.
16334     @@@Param:
16335     @@@@Name: p
16336     @@@@Type: DISPerl|HASH
16337     @@@@enDesc: The set of the parameters to the method.
16338     @@@Param:
16339     @@@@Name: o
16340     @@@@Type: DISPerl|HASH
16341     @@@@enDesc: The option value.
16342     @@@RuleParam:
16343     @@@@Name: v
16344     @@@@Type: DISPerl|Number
16345     @@@@enDesc:
16346     The name of the error parameter that contains the character code.
16347     @@@Return:
16348     @@@@PerlDef:
16349     $p->{-result} = sprintf 'U+%04X', $o->{$p->{v}};
16350 wakaba 1.1 ##XMLParserExceptionFormatter
16351 wakaba 1.27
16352     ElementTypeBinding:
16353     @Name: CParam
16354     @ElementType:
16355     dis:ResourceDef
16356     @ShadowContent:
16357     @@rdf:type:
16358     @@@@: c|DOMConfigurationParameter
16359     @@@For: ManakaiDOM|DOM
16360     @@rdf:type:
16361 wakaba 1.33 @@@@: DISSource|ResourceProperty
16362 wakaba 1.27 @@@For: =ManakaiDOM|all
16363     @@For: ManakaiDOM|DOM3
16364     @@For: =ManakaiDOM|all
16365 wakaba 1.33 @@subsetOf:
16366     @@@@: c|anyDOMConfigurationParameter
16367     @@@For: =ManakaiDOM|all
16368 wakaba 1.34 @@multipleProperties:
16369     @@@@: DISCore|Single
16370     @@@For: =ManakaiDOM|all
16371 wakaba 1.27
16372     ElementTypeBinding:
16373     @Name: CParamApp
16374     @ElementType:
16375     dis:ResourceDef
16376     @ShadowContent:
16377     @@rdf:type:
16378     @@@@: c|DOMConfigurationParameterApplication
16379     @@@For: ManakaiDOM|DOM
16380     @@For: ManakaiDOM|DOM3
16381 wakaba 1.30
16382 wakaba 1.34 ElementTypeBinding:
16383     @Name: boolCParam
16384     @ElementType:
16385     dis:ResourceDef
16386     @ShadowContent:
16387     @@DISCore:resourceType:
16388     @@@@: c|DOMConfigurationParameter
16389     @@@For: ManakaiDOM|DOM
16390     @@DISCore:resourceType:
16391     @@@@: DISSource|ResourceProperty
16392     @@@For: =ManakaiDOM|all
16393     @@For: ManakaiDOM|DOM3
16394     @@For: =ManakaiDOM|all
16395     @@Type: idl|boolean||ManakaiDOM|all
16396     @@subsetOf:
16397     @@@@: c|anyDOMConfigurationParameter
16398     @@@For: =ManakaiDOM|all
16399     @@multipleProperties:
16400     @@@@: DISCore|Single
16401     @@@For: =ManakaiDOM|all
16402     @@dataType:
16403     @@@@: DISCore|Boolean
16404     @@@For: =ManakaiDOM|all
16405    
16406 wakaba 1.30 CParamApp:
16407     @QName: xml-id
16408     @c:domConfigurationParameter: cfg|xml-id
16409     @c:targetType: xp|ManakaiXMLParser
16410 wakaba 1.34 @TrueCase:
16411     @@c:isSupported: 1
16412     @FalseCase:
16413     @@c:isSupported: 1
16414 wakaba 1.27
16415     CParamApp:
16416     @QName: error-handler
16417     @c:domConfigurationParameter: c|error-handler
16418     @c:targetType: xp|ManakaiXMLParser
16419 wakaba 1.34
16420     boolCParam:
16421     @QName: cfg|entity-replacement-tree
16422     @DOMLS:lsKey:
16423     @@@: erep
16424     @@For: =ManakaiDOM|all
16425     @Type: idl|boolean||ManakaiDOM|all
16426     @c:targetType: xp|ManakaiXMLParser
16427     @IsSupportRequired: 1
16428     @c:isSupported: 1
16429     @TrueCase:
16430     @@c:isSupported: 1
16431     @@enDesc:
16432     The parser <kwd:MUST> cnstruct the replacement subtree of
16433     a general parsed <IF::x|Entity> node if the replacement text
16434     for the node is available.
16435    
16436     If this value is set to the parameter, then a fatal error
16437     might be reported even if the entire document is well-formed
16438     in case a general parsed entity has replacement text that is
16439     not well-formed when evaluated as if it has been referenced
16440     in the content of an element, except that undeclared namespace prefixes
16441     do not result in namespace well-formedness error.
16442     @FalseCase:
16443     @@IsDefault: 1
16444     @@c:isSupported: 1
16445     @@IsSupportRequired: 1
16446     @@enDesc:
16447     The parser don't have to construct <IF::x|Entity> replacement
16448     subtrees.
16449    
16450     @Test:
16451     @@QName: cfg.entity-replacement-tree.test
16452     @@PerlDef:
16453     my $xp;
16454     __CODE{createParserForTest:: $xp => $xp}__;
16455     my $cfg = $xp-><AG::LSInput.domConfig>;
16456    
16457     my $pname = <Q::cfg|entity-replacement-tree>;
16458    
16459     $test->id ('default.false');
16460     $test->assert_false ($cfg-><M::c|DOMConfiguration.getParameter> ($pname));
16461    
16462     $test->id ('false.to.true');
16463     $cfg-><M::c|DOMConfiguration.setParameter> ($pname => true);
16464     $test->assert_false ($cfg-><M::c|DOMConfiguration.getParameter> ($pname));
16465    
16466     $test->id ('true.to.false');
16467     $cfg-><M::c|DOMConfiguration.setParameter> ($pname => false);
16468     $test->assert_false ($cfg-><M::c|DOMConfiguration.getParameter> ($pname));
16469    
16470     $test->id ('reset');
16471     $cfg-><M::c|DOMConfiguration.setParameter> ($pname => true);
16472     $cfg-><M::c|DOMConfiguration.setParameter> ($pname => null);
16473     $test->assert_false ($cfg-><M::c|DOMConfiguration.getParameter> ($pname));
16474 wakaba 1.27
16475     CParam:
16476     @QName: xp|ls-input-to-input-file
16477     @DOMLS:lsKey:
16478     @@@: i2i
16479     @@For: =ManakaiDOM|all
16480     @Type: ManakaiDOMLSInputToInputFile
16481     @c:targetType: xp|ManakaiXMLParser
16482     @IsSupportRequired: 1
16483     @c:isSupported: 1
16484     @enDesc:
16485     An <IF::LSInput> to Perl filehandle converter.
16486    
16487     @Method:
16488     @@rdf:type: c|DOMConfigurationParameterDefaultGetter
16489     @@Param:
16490     @@@Name: name
16491     @@@Type: DOMString
16492     @@@dis:actualType: c|DOMConfigurationParameterName
16493     @@@enDesc: The parameter name.
16494     @@Return:
16495     @@@Type: ManakaiDOMLSInputToInputFile
16496     @@@enDesc:
16497     The default resolver.
16498     @@@PerlDefC:
16499     $r = sub {
16500     my ($self, $input, $errorHandler) = @_;
16501     ## As defined in DOM Level 3 LS |LSInput| interface
16502    
16503     my $r = {};
16504    
16505     __DEEP{
16506    
16507     FH: {
16508     ## 1. |characterStream|
16509     my $v = $input-><AG::LSInput.characterStream>;
16510     if (defined $v) {
16511     $r->{filehandle} = $v;
16512     last FH;
16513     }
16514    
16515     ## 2. |byteStream|
16516     $v = $input-><AG::LSInput.byteStream>;
16517     if (defined $v) {
16518     ## TODO: Support byte filehandle
16519     ## |encoding|
16520     ## TODO: How to guess?
16521     return null;
16522     }
16523    
16524     ## 3. |stringData|
16525     $v = $input-><AG::LSInput.stringData>;
16526     if (defined $v) {
16527     require IO::String;
16528     $r->{filehandle} = IO::String->new ($v);
16529     last FH;
16530     }
16531    
16532     ## 4. |systemId|
16533     ## TODO:
16534     ## resolve relative URI
16535     ## open
16536     ## set document_uri
16537    
16538     ## 5. |publicId|
16539     ## The default resolver does not support only-|publicId| input.
16540    
16541     return null;
16542     } # FH
16543    
16544     DURI: {
16545     last DURI if defined $r->{document_uri};
16546    
16547     my $v = $input-><AG::LSInput.systemId>;
16548     if (defined $v) {
16549 wakaba 1.29 $r->{base_uri} = $input-><AG::LSInput.baseURI>
16550     unless defined $r->{base_uri};
16551     if (defined $r->{base_uri}) {
16552     $r->{document_uri}
16553     = <ClassM::urigen|ManakaiURIReference.new> (\$v)
16554     -><M::urigen|URIReference.getAbsoluteReference>
16555     ($r->{base_uri})
16556     -><AG::urigen|URIReference.uriReference>;
16557     } else {
16558     $r->{document_uri} = $v;
16559     }
16560 wakaba 1.27 last DURI;
16561     }
16562    
16563     ## TODO: pubid -> pubid URN -> document_uri
16564     } # DURI
16565    
16566     BURI: {
16567     last BURI if defined $r->{base_uri};
16568    
16569     my $v = $input-><AG::LSInput.baseURI>;
16570     if (defined $v) {
16571     $r->{base_uri} = $v;
16572     last BURI;
16573     }
16574    
16575     if (defined $r->{document_uri}) {
16576     $r->{base_uri} = $r->{document_uri};
16577     }
16578     } # BURI
16579    
16580     }__;
16581    
16582     ## ISSUE: Is |certifiedText| required by parsers?
16583    
16584     return $r;
16585     };
16586     @Method:
16587     @@rdf:type: c|DOMConfigurationParameterSetter
16588     @@Param:
16589     @@@Name: name
16590     @@@Type: DOMString
16591     @@@dis:actualType: c|DOMConfigurationParameterName
16592     @@@enDesc: The parameter name.
16593     @@Param:
16594     @@@Name: value
16595     @@@Type: DOMMain|DOMUserData
16596     @@@dis:actualType: ManakaiDOMLSInputToInputFile
16597     @@@enDesc: The new value.
16598     @@Return:
16599     @@@Type: idl|void||ManakaiDOM|all
16600     @@@PerlDefC:
16601     $self->[1]->{<H::xp|ls-input-to-input-file>} = $value;
16602     @@enImplNote:
16603     Implied input processor converts non-blessed code references
16604     into a <Class::ManakaiDOMLSInputToInputFile> object.
16605     @Method:
16606     @@rdf:type: c|DOMConfigurationParameterChecker
16607     @@Param:
16608     @@@Name: name
16609     @@@Type: DOMString
16610     @@@dis:actualType: c|DOMConfigurationParameterName
16611     @@@enDesc: The parameter name.
16612     @@Param:
16613     @@@Name: value
16614     @@@Type: DOMMain|DOMUserData
16615     #@@@dis:actualType: ManakaiDOMLSInputToInputFile
16616     @@@enDesc: The new value.
16617     @@Return:
16618     @@@Type: idl|boolean||ManakaiDOM|all
16619     @@@PerlDefC:
16620     $r = UNIVERSAL::isa ($value, 'CODE') or
16621     UNIVERSAL::isa ($value, <ClassName::ManakaiDOMLSInputToInputFile>);
16622    
16623     @@Test:
16624     @@@QName: cp.ls-input-to-input-file.test
16625     @@@PerlDefC:
16626     my $xp;
16627     __CODE{createParserForTest:: $xp => $xp}__;
16628     my $cfg = $xp-><AG::LSInput.domConfig>;
16629    
16630     my $cp = <Q::xp|ls-input-to-input-file>;
16631    
16632     $test->id ('default');
16633     my $default = $cfg-><M::c|DOMConfiguration.getParameter> ($cp);
16634     $test->assert_isa ($default,
16635     <ClassName::ManakaiDOMLSInputToInputFile>);
16636    
16637     $test->id ('set');
16638     my $sub1 = sub { };
16639     $cfg-><M::c|DOMConfiguration.setParameter> ($cp => $sub1);
16640     my $sub2 = $cfg-><M::c|DOMConfiguration.getParameter> ($cp);
16641     $test->assert_isa ($sub2, <ClassName::ManakaiDOMLSInputToInputFile>);
16642     $test->assert_equals ($sub2, $sub1);
16643    
16644     $test->id ('reset');
16645     $cfg-><M::c|DOMConfiguration.setParameter> ($cp => null);
16646     my $sub3 = $cfg-><M::c|DOMConfiguration.getParameter> ($cp);
16647     $test->assert_isa ($sub3, <ClassName::ManakaiDOMLSInputToInputFile>);
16648     $test->assert_equals ($sub3, $default);
16649 wakaba 1.29
16650     @@Test:
16651     @@@QName: cp.ls-input-to-input-file.default.test
16652     @@@PerlDefC:
16653     my $xp;
16654     __CODE{createParserForTest:: $xp => $xp}__;
16655     my $cfg = $xp-><AG::LSInput.domConfig>;
16656     my $cp = <Q::xp|ls-input-to-input-file>;
16657     my $default = $cfg-><M::c|DOMConfiguration.getParameter> ($cp);
16658    
16659     my $err = sub {}; # dummy error handler
16660    
16661     my $cs = \*STDOUT; # dummy input
16662    
16663     $test->id ('cs.sysid');
16664     my $r1 = $default->resolve_ls_input ({
16665     character_stream => $cs,
16666     system_id => q<http://example.com/sysid>,
16667     }, $err);
16668     $test->assert_equals
16669     ($r1->document_uri, q<http://example.com/sysid>);
16670     $test->assert_equals
16671     ($r1->base_uri, q<http://example.com/sysid>);
16672    
16673     $test->id ('cs.baseuri.sysid');
16674     my $r1 = $default->resolve_ls_input ({
16675     character_stream => $cs,
16676     system_id => q<sysid>,
16677     base_uri => q<http://example.com/>,
16678     }, $err);
16679     $test->assert_equals
16680     ($r1->document_uri, q<http://example.com/sysid>);
16681     $test->assert_equals
16682     ($r1->base_uri, q<http://example.com/>);
16683 wakaba 1.27 ##ls-input-to-input-file
16684    
16685     ClsDef:
16686     @ClsQName: ManakaiDOMLSInputToInputFile
16687     @enDesc:
16688     An <Class::ManakaiDOMLSInputToInputFile> object is used to covert
16689     a <IF::LSInput> object into a Perl filehandle.
16690    
16691     {ISSUE::
16692     In which module this class should be placed?
16693    
16694     Better interface name?
16695     }
16696    
16697     @enDesc:
16698     @@ddid: perl
16699     @@ForCheck: ManakaiDOM|ManakaiDOM
16700     @@@:
16701     For Perl binding, any parameter that accepts
16702     a <Class::ManakaiDOMLSInputToInputFile> would also accept a Perl code
16703     reference (subroutine reference). The code reference
16704     will be blessed as a <Class::ManakaiDOMLSInputToInputFile> whose
16705     <M::ManakaiDOMLSInputToInputFile.resolveLSInput> method invokes the code.
16706    
16707     @ResourceDef:
16708     @@rdf:type: DISLang|InputProcessor
16709     @@rdf:type: DISLang|OutputProcessor
16710     @@PerlDef:
16711     $INPUT = bless $INPUT, <ClassName::ManakaiDOMLSInputToInputFile>
16712     if ref $INPUT eq 'CODE';
16713    
16714     @Method:
16715     @@Name: resolveLSInput
16716     @@enDesc:
16717     Converts a <IF::LSInput> into a Perl filehandle.
16718     @@Param:
16719     @@@Name: input
16720     @@@Type: LSInput
16721     @@@enDesc:
16722     The input.
16723     @@Param:
16724     @@@Name: errorHandler
16725     @@@Type: c|DOMErrorHandler
16726     @@@enDesc:
16727     An error handler. If the method encounters an error
16728     or warning, it <kwd:MAY> notify it to application
16729     via this handler.
16730     @@Return:
16731     @@@Type: ManakaiDOMInputFile
16732     @@@enDesc:
16733     A <Class::ManakaiDOMInputFile> object created from <P::input>.
16734     @@@nullCase:
16735     @@@@enDesc:
16736     If the method was unable to resolve the <P::input>.
16737    
16738     {ISSUE::
16739     Should we allow the method to throw exceptions?
16740     }
16741     @@@PerlDef:
16742     __DEEP{
16743     $r = $self->($self, $input, $errorHandler);
16744     }__;
16745     @@@enImplNote:
16746     Notet that the input / output processor for <CODE::$input>
16747     and return value might or might not be inserted in
16748     the <Perl::$self> code.
16749     ##LSInputToInputFile
16750    
16751     ClsDef:
16752     @ClsQName: ManakaiDOMInputFile
16753     @enDesc:
16754     A set of information on the input, including filehandle.
16755    
16756     @enDesc:
16757     @@ddid: perl
16758     @@ForCheck: ManakaiDOM|ManakaiDOM
16759     @@@:
16760     For Perl binding, any parameter that accepts
16761     a <Class::ManakaiDOMInputFile> would also accept a Perl hash reference.
16762     If a hash reference is given to parameter that expects
16763     a <Class::ManakaiDOMInputFile> object, then it
16764     bless the hash with the class.
16765    
16766     Each attributes defined
16767     in the class is associated to the hash value with the
16768     key equals to the attribut name. Each method defined in
16769     the class will invoke the code reference retrieved
16770     from the hash by the key equals to the method name.
16771    
16772     If there is no value in the hash for an attribute,
16773     then its value is <DOM::null>.
16774    
16775     @ResourceDef:
16776     @@rdf:type: DISLang|InputProcessor
16777     @@rdf:type: DISLang|OutputProcessor
16778     @@PerlDef:
16779     $INPUT = bless $INPUT, <ClassName::ManakaiDOMInputFile>
16780     if ref $INPUT eq 'HASH';
16781    
16782     @Attr:
16783     @@Name: filehandle
16784     @@Type: DISPerl|filehandle||ManakaiDOM|all
16785     @@enDesc:
16786     The input filehandle.
16787    
16788     It <kwd:MUST> be an <Perl::open>ed (and not <Perl::close>d)
16789     filehandle. Note that
16790     it does not have to be associated with an actual file
16791     in the local file system.
16792    
16793     It <kwd:MUST> return a character (rather than byte)
16794     by <Perl::getc>.
16795     @@Get:
16796     @@@PerlDef: $r = $self->{filehandle};
16797     @@Set:
16798     @@@PerlDef: $self->{filehandle} = $given;
16799    
16800     @Attr:
16801     @@Name: baseURI
16802     @@enDesc:
16803     The base URI of the input.
16804    
16805     It <kwd:MUST> be an absolute DOM URI or <DOM::null>.
16806     Otherwise, the result is undefined.
16807     @@Type: DOMString
16808     @@nullCase:
16809     @@@enDesc:
16810     If the base URI is not available.
16811     @@Get:
16812     @@@PerlDef: $r = $self->{base_uri};
16813     @@Set:
16814     @@@PerlDef: $self->{base_uri} = $given;
16815    
16816     @Attr:
16817     @@Name: documentURI
16818     @@enDesc:
16819     The URI of the document.
16820    
16821     It <kwd:MUST> be an absolute DOM URI or <DOM::null>.
16822     Otherwise, the result is undefined.
16823     @@Type: DOMString
16824     @@nullCase:
16825     @@@enDesc:
16826     If the document URI is not available.
16827     @@Get:
16828     @@@PerlDef: $r = $self->{document_uri};
16829     @@Set:
16830     @@@PerlDef: $self->{document_uri} = $given;
16831    
16832     @Method:
16833     @@Name: close
16834     @@enDesc:
16835     Closes the file.
16836    
16837     Since when the Perl's destructor is invoked is unreliable,
16838     this method is explicitly called when the file is no longer
16839     in use.
16840    
16841     If the <Class::ManakaiDOMInputFile> is given as a hash
16842     reference and whose value for <CODE::close> is not defined,
16843     then the statement <Perl::close $filehandle> is done
16844     (where <Perl::$filehandle> is the <A::ManakaiDOMInputFile.filehandle>
16845     value).
16846     @@Return:
16847     @@@PerlDef:
16848     __DEEP{
16849     if ($self->{close}) {
16850     $self->{close}->($self);
16851     } else {
16852     close $self->{filehandle};
16853     }
16854     }__;
16855     ##ManakaiDOMInputFile
16856    
16857    
16858    

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24