Support xml-model & xml-stylesheet instructions

pull/504/merge
ObserverOfTime 2023-08-05 18:19:42 +07:00
parent 1b9749175d
commit 9e8ce35817
No known key found for this signature in database
GPG Key ID: 8A2DEA1DBAEBCA9E
12 changed files with 7829 additions and 6802 deletions

@ -19,5 +19,6 @@ jobs:
- run: npm install - run: npm install
name: Install dependencies name: Install dependencies
- run: >- - run: >-
npm test-dtd && npm test-xml npm run test-dtd &&
npm run test-xml
name: Run tests name: Run tests

@ -26,16 +26,29 @@ module.exports.NAME_CHAR = '[\-.0-9\xB7' +
'\u0300-\u036F\u203F-\u2040' + '\u0300-\u036F\u203F-\u2040' +
module.exports.NAME_START_CHAR.substring(1); module.exports.NAME_START_CHAR.substring(1);
/** @param {"'" | ''} q */ /**
* @param {"'" | ''} q
* @see {@link https://www.w3.org/TR/xml/#NT-PubidChar}
*/
module.exports.pubid_char = (q) => module.exports.pubid_char = (q) =>
new RegExp(`[\x20\x0D\x0Aa-zA-Z0-9\-${q}()+,./:=?;!*#@$_%]*`); new RegExp(`[ \\r\\na-zA-Z0-9\\-${q}()+,./:=?;!*#@$_%]*`);
/** /**
* @param {GrammarSymbols<any>} $ * @param {GrammarSymbols<any>} $
* @param {'"' | "'"} q * @param {'"' | "'"} q
*/ */
module.exports.att_value = ($, q) => module.exports.att_value = ($, q) =>
seq(q, repeat(choice(new RegExp(`[^<&${q}]`), $._Reference)), q); seq(
q,
field(
'content',
repeat(choice(
new RegExp(`[^<&${q}]`),
$._Reference
))
),
q
);
/** /**
* @param {GrammarSymbols<any>} $ * @param {GrammarSymbols<any>} $
@ -44,11 +57,14 @@ module.exports.att_value = ($, q) =>
module.exports.entity_value = ($, q) => module.exports.entity_value = ($, q) =>
seq( seq(
q, q,
field(
'content',
repeat(choice( repeat(choice(
new RegExp(`[^<%&${q}]`), new RegExp(`[^<%&${q}]`),
$.PEReference, $.PEReference,
$._Reference $._Reference
)), ))
),
q q
); );

@ -2,7 +2,7 @@
* @file Tree-sitter grammar definition for DTD * @file Tree-sitter grammar definition for DTD
* @author ObserverOfTime * @author ObserverOfTime
* @license MIT * @license MIT
* @see {@link https://www.w3.org/TR/xml/|W3C standard} * @see {@link https://www.w3.org/TR/xml/|XML standard}
*/ */
const c = require('../common'); const c = require('../common');
@ -44,7 +44,8 @@ module.exports = grammar({
O($._S), O($._S),
'[', '[',
repeat($._extSubsetDecl), repeat($._extSubsetDecl),
']]>' ']',
']>'
), ),
_markupdecl: $ => choice( _markupdecl: $ => choice(
@ -265,7 +266,7 @@ module.exports = grammar({
_Char: _ => /[\u0001-\uD7FF\uE000-\uFFFD\u{10000}-\u{10FFFF}]/u, _Char: _ => /[\u0001-\uD7FF\uE000-\uFFFD\u{10000}-\u{10FFFF}]/u,
_S: _ => /[\x20\x09\x0D\x0A]+/, _S: _ => /[ \t\r\n]+/,
Name: _ => new RegExp(`${c.NAME_START_CHAR}${c.NAME_CHAR}*`, 'u'), Name: _ => new RegExp(`${c.NAME_START_CHAR}${c.NAME_CHAR}*`, 'u'),
@ -332,20 +333,17 @@ module.exports = grammar({
EncName: _ => /[A-Za-z][A-Za-z0-9._\-]*/, EncName: _ => /[A-Za-z][A-Za-z0-9._\-]*/,
// TODO: parse attributes
PI: $ => seq( PI: $ => seq(
'<?', '<?',
// FIXME: disallow /xml/i // FIXME: disallow /^xml$/i
alias($.Name, $.PITarget), alias($.Name, $.PITarget),
O(seq($._S, /([^?]|\?[^>])*/)), O(seq($._S, /([^?]|\?[^>])*/)),
'?>' '?>'
), ),
Comment: _ => token(seq( Comment: _ => token(
'<!--', seq('<!--', /([^-]|-[^-])*/, '-->')
/([^-]|-[^-])*/, ),
'-->'
)),
_Eq: $ => seq(O($._S), '=', O($._S)) _Eq: $ => seq(O($._S), '=', O($._S))
} }

@ -104,7 +104,11 @@
}, },
{ {
"type": "STRING", "type": "STRING",
"value": "]]>" "value": "]"
},
{
"type": "STRING",
"value": "]>"
} }
] ]
}, },
@ -1129,6 +1133,9 @@
"value": "\"" "value": "\""
}, },
{ {
"type": "FIELD",
"name": "content",
"content": {
"type": "REPEAT", "type": "REPEAT",
"content": { "content": {
"type": "CHOICE", "type": "CHOICE",
@ -1147,6 +1154,7 @@
} }
] ]
} }
}
}, },
{ {
"type": "STRING", "type": "STRING",
@ -1162,6 +1170,9 @@
"value": "'" "value": "'"
}, },
{ {
"type": "FIELD",
"name": "content",
"content": {
"type": "REPEAT", "type": "REPEAT",
"content": { "content": {
"type": "CHOICE", "type": "CHOICE",
@ -1180,6 +1191,7 @@
} }
] ]
} }
}
}, },
{ {
"type": "STRING", "type": "STRING",
@ -1305,7 +1317,7 @@
}, },
"_S": { "_S": {
"type": "PATTERN", "type": "PATTERN",
"value": "[\\x20\\x09\\x0D\\x0A]+" "value": "[ \\t\\r\\n]+"
}, },
"Name": { "Name": {
"type": "PATTERN", "type": "PATTERN",
@ -1395,6 +1407,9 @@
"value": "\"" "value": "\""
}, },
{ {
"type": "FIELD",
"name": "content",
"content": {
"type": "REPEAT", "type": "REPEAT",
"content": { "content": {
"type": "CHOICE", "type": "CHOICE",
@ -1409,6 +1424,7 @@
} }
] ]
} }
}
}, },
{ {
"type": "STRING", "type": "STRING",
@ -1424,6 +1440,9 @@
"value": "'" "value": "'"
}, },
{ {
"type": "FIELD",
"name": "content",
"content": {
"type": "REPEAT", "type": "REPEAT",
"content": { "content": {
"type": "CHOICE", "type": "CHOICE",
@ -1438,6 +1457,7 @@
} }
] ]
} }
}
}, },
{ {
"type": "STRING", "type": "STRING",
@ -1605,7 +1625,7 @@
"name": "content", "name": "content",
"content": { "content": {
"type": "PATTERN", "type": "PATTERN",
"value": "[ \\r\\na-zA-Z0-9-'()+,./:=?;!*#@$_%]*" "value": "[ \\r\\na-zA-Z0-9\\-'()+,./:=?;!*#@$_%]*"
} }
}, },
{ {
@ -1634,7 +1654,7 @@
"name": "content", "name": "content",
"content": { "content": {
"type": "PATTERN", "type": "PATTERN",
"value": "[ \\r\\na-zA-Z0-9-()+,./:=?;!*#@$_%]*" "value": "[ \\r\\na-zA-Z0-9\\-()+,./:=?;!*#@$_%]*"
} }
}, },
{ {

@ -119,8 +119,8 @@
{ {
"type": "AttValue", "type": "AttValue",
"named": true, "named": true,
"fields": {}, "fields": {
"children": { "content": {
"multiple": true, "multiple": true,
"required": false, "required": false,
"types": [ "types": [
@ -130,6 +130,7 @@
} }
] ]
} }
}
}, },
{ {
"type": "AttlistDecl", "type": "AttlistDecl",
@ -192,8 +193,8 @@
{ {
"type": "EntityValue", "type": "EntityValue",
"named": true, "named": true,
"fields": {}, "fields": {
"children": { "content": {
"multiple": true, "multiple": true,
"required": false, "required": false,
"types": [ "types": [
@ -207,6 +208,7 @@
} }
] ]
} }
}
}, },
{ {
"type": "Enumeration", "type": "Enumeration",
@ -746,7 +748,11 @@
"named": false "named": false
}, },
{ {
"type": "]]>", "type": "]",
"named": false
},
{
"type": "]>",
"named": false "named": false
}, },
{ {

File diff suppressed because it is too large Load Diff

@ -2,7 +2,9 @@
* @file Tree-sitter grammar definition for XML * @file Tree-sitter grammar definition for XML
* @author ObserverOfTime * @author ObserverOfTime
* @license MIT * @license MIT
* @see {@link https://www.w3.org/TR/xml/|W3C standard} * @see {@link https://www.w3.org/TR/xml/|XML standard}
* @see {@link https://www.w3.org/TR/xml-model/|XML model}
* @see {@link https://www.w3.org/TR/xml-stylesheet/|XML stylesheet}
*/ */
const c = require('../common'); const c = require('../common');
@ -20,23 +22,34 @@ module.exports = grammar(DTD, {
], ],
rules: { rules: {
document: $ => seq( document: $ => prec(2, seq(
optional($._S),
optional($.prolog), optional($.prolog),
repeat($._Misc),
field('root', $.element), field('root', $.element),
repeat($._Misc), repeat($._Misc),
), )),
prolog: $ => prec.right(choice( prolog: $ => prec.right(choice(
seq(
$.XMLDecl, $.XMLDecl,
repeat($._Misc),
),
seq( seq(
O($.XMLDecl), O($.XMLDecl),
repeat($._Misc), repeat($._Misc),
$.doctypedecl $.doctypedecl,
) repeat($._Misc),
),
repeat1($._Misc)
)), )),
_Misc: $ => choice($.PI, $.Comment, $._S), _Misc: $ => choice(
$.PI,
$.StyleSheetPI,
$.XmlModelPI,
$.Comment,
$._S
),
XMLDecl: $ => seq( XMLDecl: $ => seq(
'<?', '<?',
@ -56,7 +69,8 @@ module.exports = grammar(DTD, {
), ),
doctypedecl: $ => seq( doctypedecl: $ => seq(
'<!DOCTYPE', '<!',
'DOCTYPE',
$._S, $._S,
$.Name, $.Name,
O(seq($._S, $.ExternalID)), O(seq($._S, $.ExternalID)),
@ -118,6 +132,29 @@ module.exports = grammar(DTD, {
seq('<![CDATA[', $.CData, ']]>') seq('<![CDATA[', $.CData, ']]>')
), ),
CData: _ => /([^\]]|][^\]]|]][^>])*/ CData: _ => /([^\]]|][^\]]|]][^>])*/,
StyleSheetPI: $ => seq(
'<?',
'xml-stylesheet',
c.rseq($._S, $.PseudoAtt),
O($._S),
'?>'
),
XmlModelPI: $ => seq(
'<?',
'xml-model',
c.rseq($._S, $.PseudoAtt),
O($._S),
'?>'
),
PseudoAtt: $ => seq($.Name, $._Eq, $.PseudoAttValue),
PseudoAttValue: $ => choice(
c.att_value($, '"'),
c.att_value($, "'")
)
} }
}); });

@ -3,6 +3,9 @@
"word": "Name", "word": "Name",
"rules": { "rules": {
"document": { "document": {
"type": "PREC",
"value": 2,
"content": {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
{ {
@ -10,7 +13,7 @@
"members": [ "members": [
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "prolog" "name": "_S"
}, },
{ {
"type": "BLANK" "type": "BLANK"
@ -18,11 +21,16 @@
] ]
}, },
{ {
"type": "REPEAT", "type": "CHOICE",
"content": { "members": [
{
"type": "SYMBOL", "type": "SYMBOL",
"name": "_Misc" "name": "prolog"
},
{
"type": "BLANK"
} }
]
}, },
{ {
"type": "FIELD", "type": "FIELD",
@ -40,6 +48,7 @@
} }
} }
] ]
}
}, },
"_extSubsetDecl": { "_extSubsetDecl": {
"type": "CHOICE", "type": "CHOICE",
@ -119,7 +128,11 @@
}, },
{ {
"type": "STRING", "type": "STRING",
"value": "]]>" "value": "]"
},
{
"type": "STRING",
"value": "]>"
} }
] ]
}, },
@ -170,7 +183,11 @@
"members": [ "members": [
{ {
"type": "STRING", "type": "STRING",
"value": "<!ELEMENT" "value": "<!"
},
{
"type": "STRING",
"value": "ELEMENT"
}, },
{ {
"type": "SYMBOL", "type": "SYMBOL",
@ -400,26 +417,30 @@
}, },
"children": { "children": {
"type": "SEQ", "type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [ "members": [
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "_choice" "name": "_choice"
}, },
{ {
"type": "SYMBOL", "type": "CHOICE",
"name": "_seq" "members": [
}
]
},
{ {
"type": "CHOICE", "type": "CHOICE",
"members": [ "members": [
{ {
"type": "SYMBOL", "type": "STRING",
"name": "_occurences" "value": "?"
},
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "+"
}
]
}, },
{ {
"type": "BLANK" "type": "BLANK"
@ -434,9 +455,6 @@
"content": { "content": {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
{
"type": "CHOICE",
"members": [
{ {
"type": "CHOICE", "type": "CHOICE",
"members": [ "members": [
@ -444,107 +462,45 @@
"type": "SYMBOL", "type": "SYMBOL",
"name": "Name" "name": "Name"
}, },
{
"type": "SYMBOL",
"name": "PEReference"
}
]
},
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "_choice" "name": "_choice"
}, },
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "_seq" "name": "PEReference"
} }
] ]
}, },
{ {
"type": "CHOICE", "type": "CHOICE",
"members": [ "members": [
{
"type": "SYMBOL",
"name": "_occurences"
},
{
"type": "BLANK"
}
]
}
]
}
},
"_choice": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{ {
"type": "CHOICE", "type": "CHOICE",
"members": [ "members": [
{ {
"type": "SYMBOL", "type": "STRING",
"name": "_S" "value": "?"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_cp"
}, },
{ {
"type": "REPEAT1", "type": "STRING",
"content": { "value": "*"
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_S"
}, },
{ {
"type": "BLANK" "type": "STRING",
"value": "+"
} }
] ]
}, },
{
"type": "STRING",
"value": "|"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_S"
},
{ {
"type": "BLANK" "type": "BLANK"
} }
] ]
},
{
"type": "SYMBOL",
"name": "_cp"
} }
] ]
} }
}, },
{ "_choice": {
"type": "STRING",
"value": ")"
}
]
},
"_seq": {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
{ {
@ -584,9 +540,18 @@
} }
] ]
}, },
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "|"
},
{ {
"type": "STRING", "type": "STRING",
"value": "," "value": ","
}
]
}, },
{ {
"type": "CHOICE", "type": "CHOICE",
@ -618,7 +583,11 @@
"members": [ "members": [
{ {
"type": "STRING", "type": "STRING",
"value": "<!ATTLIST" "value": "<!"
},
{
"type": "STRING",
"value": "ATTLIST"
}, },
{ {
"type": "SYMBOL", "type": "SYMBOL",
@ -1040,7 +1009,11 @@
"members": [ "members": [
{ {
"type": "STRING", "type": "STRING",
"value": "<!ENTITY" "value": "<!"
},
{
"type": "STRING",
"value": "ENTITY"
}, },
{ {
"type": "SYMBOL", "type": "SYMBOL",
@ -1116,7 +1089,11 @@
"members": [ "members": [
{ {
"type": "STRING", "type": "STRING",
"value": "<!ENTITY" "value": "<!"
},
{
"type": "STRING",
"value": "ENTITY"
}, },
{ {
"type": "SYMBOL", "type": "SYMBOL",
@ -1180,6 +1157,9 @@
"value": "\"" "value": "\""
}, },
{ {
"type": "FIELD",
"name": "content",
"content": {
"type": "REPEAT", "type": "REPEAT",
"content": { "content": {
"type": "CHOICE", "type": "CHOICE",
@ -1198,6 +1178,7 @@
} }
] ]
} }
}
}, },
{ {
"type": "STRING", "type": "STRING",
@ -1213,6 +1194,9 @@
"value": "'" "value": "'"
}, },
{ {
"type": "FIELD",
"name": "content",
"content": {
"type": "REPEAT", "type": "REPEAT",
"content": { "content": {
"type": "CHOICE", "type": "CHOICE",
@ -1231,6 +1215,7 @@
} }
] ]
} }
}
}, },
{ {
"type": "STRING", "type": "STRING",
@ -1275,7 +1260,11 @@
"members": [ "members": [
{ {
"type": "STRING", "type": "STRING",
"value": "<!NOTATION" "value": "<!"
},
{
"type": "STRING",
"value": "NOTATION"
}, },
{ {
"type": "SYMBOL", "type": "SYMBOL",
@ -1346,30 +1335,13 @@
} }
] ]
}, },
"_occurences": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "?"
},
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "+"
}
]
},
"_Char": { "_Char": {
"type": "PATTERN", "type": "PATTERN",
"value": "[\\u0001-\\uD7FF\\uE000-\\uFFFD\\u{10000}-\\u{10FFFF}]" "value": "[\\u0001-\\uD7FF\\uE000-\\uFFFD\\u{10000}-\\u{10FFFF}]"
}, },
"_S": { "_S": {
"type": "PATTERN", "type": "PATTERN",
"value": "[\\x20\\x09\\x0D\\x0A]+" "value": "[ \\t\\r\\n]+"
}, },
"Name": { "Name": {
"type": "PATTERN", "type": "PATTERN",
@ -1459,6 +1431,9 @@
"value": "\"" "value": "\""
}, },
{ {
"type": "FIELD",
"name": "content",
"content": {
"type": "REPEAT", "type": "REPEAT",
"content": { "content": {
"type": "CHOICE", "type": "CHOICE",
@ -1473,6 +1448,7 @@
} }
] ]
} }
}
}, },
{ {
"type": "STRING", "type": "STRING",
@ -1488,6 +1464,9 @@
"value": "'" "value": "'"
}, },
{ {
"type": "FIELD",
"name": "content",
"content": {
"type": "REPEAT", "type": "REPEAT",
"content": { "content": {
"type": "CHOICE", "type": "CHOICE",
@ -1502,6 +1481,7 @@
} }
] ]
} }
}
}, },
{ {
"type": "STRING", "type": "STRING",
@ -1669,7 +1649,7 @@
"name": "content", "name": "content",
"content": { "content": {
"type": "PATTERN", "type": "PATTERN",
"value": "[ \\r\\na-zA-Z0-9-'()+,./:=?;!*#@$_%]*" "value": "[ \\r\\na-zA-Z0-9\\-'()+,./:=?;!*#@$_%]*"
} }
}, },
{ {
@ -1698,7 +1678,7 @@
"name": "content", "name": "content",
"content": { "content": {
"type": "PATTERN", "type": "PATTERN",
"value": "[ \\r\\na-zA-Z0-9-()+,./:=?;!*#@$_%]*" "value": "[ \\r\\na-zA-Z0-9\\-()+,./:=?;!*#@$_%]*"
} }
}, },
{ {
@ -1992,11 +1972,23 @@
"value": 0, "value": 0,
"content": { "content": {
"type": "CHOICE", "type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [ "members": [
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "XMLDecl" "name": "XMLDecl"
}, },
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_Misc"
}
}
]
},
{ {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
@ -2022,8 +2014,22 @@
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "doctypedecl" "name": "doctypedecl"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_Misc"
}
} }
] ]
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_Misc"
}
} }
] ]
} }
@ -2035,6 +2041,14 @@
"type": "SYMBOL", "type": "SYMBOL",
"name": "PI" "name": "PI"
}, },
{
"type": "SYMBOL",
"name": "StyleSheetPI"
},
{
"type": "SYMBOL",
"name": "XmlModelPI"
},
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "Comment" "name": "Comment"
@ -2124,7 +2138,11 @@
"members": [ "members": [
{ {
"type": "STRING", "type": "STRING",
"value": "<!DOCTYPE" "value": "<!"
},
{
"type": "STRING",
"value": "DOCTYPE"
}, },
{ {
"type": "SYMBOL", "type": "SYMBOL",
@ -2468,6 +2486,184 @@
"CData": { "CData": {
"type": "PATTERN", "type": "PATTERN",
"value": "([^\\]]|][^\\]]|]][^>])*" "value": "([^\\]]|][^\\]]|]][^>])*"
},
"StyleSheetPI": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<?"
},
{
"type": "STRING",
"value": "xml-stylesheet"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_S"
},
{
"type": "SYMBOL",
"name": "PseudoAtt"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_S"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "?>"
}
]
},
"XmlModelPI": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<?"
},
{
"type": "STRING",
"value": "xml-model"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_S"
},
{
"type": "SYMBOL",
"name": "PseudoAtt"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_S"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "?>"
}
]
},
"PseudoAtt": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "Name"
},
{
"type": "SYMBOL",
"name": "_Eq"
},
{
"type": "SYMBOL",
"name": "PseudoAttValue"
}
]
},
"PseudoAttValue": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "FIELD",
"name": "content",
"content": {
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<&\"]"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
}
}
},
{
"type": "STRING",
"value": "\""
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "FIELD",
"name": "content",
"content": {
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<&']"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
}
}
},
{
"type": "STRING",
"value": "'"
}
]
}
]
} }
}, },
"extras": [], "extras": [],
@ -2475,7 +2671,6 @@
"precedences": [], "precedences": [],
"externals": [], "externals": [],
"inline": [ "inline": [
"_occurences",
"_extSubsetDecl", "_extSubsetDecl",
"conditionalSect" "conditionalSect"
], ],

@ -119,8 +119,8 @@
{ {
"type": "AttValue", "type": "AttValue",
"named": true, "named": true,
"fields": {}, "fields": {
"children": { "content": {
"multiple": true, "multiple": true,
"required": false, "required": false,
"types": [ "types": [
@ -130,6 +130,7 @@
} }
] ]
} }
}
}, },
{ {
"type": "AttlistDecl", "type": "AttlistDecl",
@ -260,8 +261,8 @@
{ {
"type": "EntityValue", "type": "EntityValue",
"named": true, "named": true,
"fields": {}, "fields": {
"children": { "content": {
"multiple": true, "multiple": true,
"required": false, "required": false,
"types": [ "types": [
@ -275,6 +276,7 @@
} }
] ]
} }
}
}, },
{ {
"type": "Enumeration", "type": "Enumeration",
@ -478,6 +480,41 @@
] ]
} }
}, },
{
"type": "PseudoAtt",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "Name",
"named": true
},
{
"type": "PseudoAttValue",
"named": true
}
]
}
},
{
"type": "PseudoAttValue",
"named": true,
"fields": {
"content": {
"multiple": true,
"required": false,
"types": [
{
"type": "_Reference",
"named": true
}
]
}
}
},
{ {
"type": "PubidLiteral", "type": "PubidLiteral",
"named": true, "named": true,
@ -521,6 +558,21 @@
] ]
} }
}, },
{
"type": "StyleSheetPI",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "PseudoAtt",
"named": true
}
]
}
},
{ {
"type": "SystemLiteral", "type": "SystemLiteral",
"named": true, "named": true,
@ -545,6 +597,21 @@
] ]
} }
}, },
{
"type": "XmlModelPI",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "PseudoAtt",
"named": true
}
]
}
},
{ {
"type": "children", "type": "children",
"named": true, "named": true,
@ -676,6 +743,14 @@
"type": "PI", "type": "PI",
"named": true "named": true
}, },
{
"type": "StyleSheetPI",
"named": true
},
{
"type": "XmlModelPI",
"named": true
},
{ {
"type": "prolog", "type": "prolog",
"named": true "named": true
@ -739,7 +814,7 @@
"fields": {}, "fields": {},
"children": { "children": {
"multiple": true, "multiple": true,
"required": true, "required": false,
"types": [ "types": [
{ {
"type": "Comment", "type": "Comment",
@ -749,10 +824,18 @@
"type": "PI", "type": "PI",
"named": true "named": true
}, },
{
"type": "StyleSheetPI",
"named": true
},
{ {
"type": "XMLDecl", "type": "XMLDecl",
"named": true "named": true
}, },
{
"type": "XmlModelPI",
"named": true
},
{ {
"type": "doctypedecl", "type": "doctypedecl",
"named": true "named": true
@ -833,23 +916,7 @@
"named": false "named": false
}, },
{ {
"type": "<!ATTLIST", "type": "<!",
"named": false
},
{
"type": "<!DOCTYPE",
"named": false
},
{
"type": "<!ELEMENT",
"named": false
},
{
"type": "<!ENTITY",
"named": false
},
{
"type": "<!NOTATION",
"named": false "named": false
}, },
{ {
@ -888,6 +955,10 @@
"type": "ANY", "type": "ANY",
"named": false "named": false
}, },
{
"type": "ATTLIST",
"named": false
},
{ {
"type": "CData", "type": "CData",
"named": true "named": true
@ -900,10 +971,22 @@
"type": "Comment", "type": "Comment",
"named": true "named": true
}, },
{
"type": "DOCTYPE",
"named": false
},
{
"type": "ELEMENT",
"named": false
},
{ {
"type": "EMPTY", "type": "EMPTY",
"named": false "named": false
}, },
{
"type": "ENTITY",
"named": false
},
{ {
"type": "EncName", "type": "EncName",
"named": true "named": true
@ -964,6 +1047,10 @@
"type": "]", "type": "]",
"named": false "named": false
}, },
{
"type": "]>",
"named": false
},
{ {
"type": "]]>", "type": "]]>",
"named": false "named": false
@ -988,6 +1075,14 @@
"type": "xml", "type": "xml",
"named": false "named": false
}, },
{
"type": "xml-model",
"named": false
},
{
"type": "xml-stylesheet",
"named": false
},
{ {
"type": "yes", "type": "yes",
"named": false "named": false

File diff suppressed because it is too large Load Diff

@ -0,0 +1,119 @@
================================================================================
XML Model
================================================================================
<?xml version="1.0"?>
<?xml-model href="http://www.docbook.org/xml/5.0/rng/docbook.rng"?>
<?xml-model href="http://www.docbook.org/xml/5.0/xsd/docbook.xsd"?>
<book xmlns="http://docbook.org/ns/docbook">
</book>
--------------------------------------------------------------------------------
(document
(prolog
(XMLDecl
(VersionNum))
(XmlModelPI
(PseudoAtt
(Name)
(PseudoAttValue)))
(XmlModelPI
(PseudoAtt
(Name)
(PseudoAttValue))))
(element
(STag
(Name)
(Attribute
(Name)
(AttValue)))
(content
(CharData))
(ETag
(Name))))
================================================================================
XML Stylesheet
================================================================================
<?xml-stylesheet href="common.css"?>
<?xml-stylesheet href="default.css" title="Default style"?>
<?xml-stylesheet alternate="yes" href="alt.css" title="Alternative style"?>
<?xml-stylesheet href="single-col.css" media="all and (max-width: 30em)"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Example with xml-stylesheet processing instructions</title>
</head>
<body>
...
</body>
</html>
--------------------------------------------------------------------------------
(document
(prolog
(StyleSheetPI
(PseudoAtt
(Name)
(PseudoAttValue)))
(StyleSheetPI
(PseudoAtt
(Name)
(PseudoAttValue))
(PseudoAtt
(Name)
(PseudoAttValue)))
(StyleSheetPI
(PseudoAtt
(Name)
(PseudoAttValue))
(PseudoAtt
(Name)
(PseudoAttValue))
(PseudoAtt
(Name)
(PseudoAttValue)))
(StyleSheetPI
(PseudoAtt
(Name)
(PseudoAttValue))
(PseudoAtt
(Name)
(PseudoAttValue))))
(element
(STag
(Name)
(Attribute
(Name)
(AttValue)))
(content
(CharData)
(element
(STag
(Name))
(content
(CharData)
(element
(STag
(Name))
(content
(CharData))
(ETag
(Name)))
(CharData))
(ETag
(Name)))
(CharData)
(element
(STag
(Name))
(content
(CharData))
(ETag
(Name)))
(CharData))
(ETag
(Name))))

@ -39,7 +39,8 @@ Comment
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
(document (document
(Comment) (prolog
(Comment))
(element (element
(EmptyElemTag (EmptyElemTag
(Name)))) (Name))))