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
name: Install dependencies
- run: >-
npm test-dtd && npm test-xml
npm run test-dtd &&
npm run test-xml
name: Run tests

@ -26,16 +26,29 @@ module.exports.NAME_CHAR = '[\-.0-9\xB7' +
'\u0300-\u036F\u203F-\u2040' +
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) =>
new RegExp(`[\x20\x0D\x0Aa-zA-Z0-9\-${q}()+,./:=?;!*#@$_%]*`);
new RegExp(`[ \\r\\na-zA-Z0-9\\-${q}()+,./:=?;!*#@$_%]*`);
/**
* @param {GrammarSymbols<any>} $
* @param {'"' | "'"} 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>} $
@ -44,11 +57,14 @@ module.exports.att_value = ($, q) =>
module.exports.entity_value = ($, q) =>
seq(
q,
repeat(choice(
new RegExp(`[^<%&${q}]`),
$.PEReference,
$._Reference
)),
field(
'content',
repeat(choice(
new RegExp(`[^<%&${q}]`),
$.PEReference,
$._Reference
))
),
q
);

@ -2,7 +2,7 @@
* @file Tree-sitter grammar definition for DTD
* @author ObserverOfTime
* @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');
@ -44,7 +44,8 @@ module.exports = grammar({
O($._S),
'[',
repeat($._extSubsetDecl),
']]>'
']',
']>'
),
_markupdecl: $ => choice(
@ -265,7 +266,7 @@ module.exports = grammar({
_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'),
@ -332,20 +333,17 @@ module.exports = grammar({
EncName: _ => /[A-Za-z][A-Za-z0-9._\-]*/,
// TODO: parse attributes
PI: $ => seq(
'<?',
// FIXME: disallow /xml/i
// FIXME: disallow /^xml$/i
alias($.Name, $.PITarget),
O(seq($._S, /([^?]|\?[^>])*/)),
'?>'
),
Comment: _ => token(seq(
'<!--',
/([^-]|-[^-])*/,
'-->'
)),
Comment: _ => token(
seq('<!--', /([^-]|-[^-])*/, '-->')
),
_Eq: $ => seq(O($._S), '=', O($._S))
}

@ -104,7 +104,11 @@
},
{
"type": "STRING",
"value": "]]>"
"value": "]"
},
{
"type": "STRING",
"value": "]>"
}
]
},
@ -1129,23 +1133,27 @@
"value": "\""
},
{
"type": "REPEAT",
"type": "FIELD",
"name": "content",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<%&\"]"
},
{
"type": "SYMBOL",
"name": "PEReference"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<%&\"]"
},
{
"type": "SYMBOL",
"name": "PEReference"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
}
}
},
{
@ -1162,23 +1170,27 @@
"value": "'"
},
{
"type": "REPEAT",
"type": "FIELD",
"name": "content",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<%&']"
},
{
"type": "SYMBOL",
"name": "PEReference"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<%&']"
},
{
"type": "SYMBOL",
"name": "PEReference"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
}
}
},
{
@ -1305,7 +1317,7 @@
},
"_S": {
"type": "PATTERN",
"value": "[\\x20\\x09\\x0D\\x0A]+"
"value": "[ \\t\\r\\n]+"
},
"Name": {
"type": "PATTERN",
@ -1395,19 +1407,23 @@
"value": "\""
},
{
"type": "REPEAT",
"type": "FIELD",
"name": "content",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<&\"]"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<&\"]"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
}
}
},
{
@ -1424,19 +1440,23 @@
"value": "'"
},
{
"type": "REPEAT",
"type": "FIELD",
"name": "content",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<&']"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<&']"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
}
}
},
{
@ -1605,7 +1625,7 @@
"name": "content",
"content": {
"type": "PATTERN",
"value": "[ \\r\\na-zA-Z0-9-'()+,./:=?;!*#@$_%]*"
"value": "[ \\r\\na-zA-Z0-9\\-'()+,./:=?;!*#@$_%]*"
}
},
{
@ -1634,7 +1654,7 @@
"name": "content",
"content": {
"type": "PATTERN",
"value": "[ \\r\\na-zA-Z0-9-()+,./:=?;!*#@$_%]*"
"value": "[ \\r\\na-zA-Z0-9\\-()+,./:=?;!*#@$_%]*"
}
},
{

@ -119,16 +119,17 @@
{
"type": "AttValue",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "_Reference",
"named": true
}
]
"fields": {
"content": {
"multiple": true,
"required": false,
"types": [
{
"type": "_Reference",
"named": true
}
]
}
}
},
{
@ -192,20 +193,21 @@
{
"type": "EntityValue",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "PEReference",
"named": true
},
{
"type": "_Reference",
"named": true
}
]
"fields": {
"content": {
"multiple": true,
"required": false,
"types": [
{
"type": "PEReference",
"named": true
},
{
"type": "_Reference",
"named": true
}
]
}
}
},
{
@ -746,7 +748,11 @@
"named": false
},
{
"type": "]]>",
"type": "]",
"named": false
},
{
"type": "]>",
"named": false
},
{

File diff suppressed because it is too large Load Diff

@ -2,7 +2,9 @@
* @file Tree-sitter grammar definition for XML
* @author ObserverOfTime
* @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');
@ -20,23 +22,34 @@ module.exports = grammar(DTD, {
],
rules: {
document: $ => seq(
document: $ => prec(2, seq(
optional($._S),
optional($.prolog),
repeat($._Misc),
field('root', $.element),
repeat($._Misc),
),
)),
prolog: $ => prec.right(choice(
$.XMLDecl,
seq(
$.XMLDecl,
repeat($._Misc),
),
seq(
O($.XMLDecl),
repeat($._Misc),
$.doctypedecl
)
$.doctypedecl,
repeat($._Misc),
),
repeat1($._Misc)
)),
_Misc: $ => choice($.PI, $.Comment, $._S),
_Misc: $ => choice(
$.PI,
$.StyleSheetPI,
$.XmlModelPI,
$.Comment,
$._S
),
XMLDecl: $ => seq(
'<?',
@ -56,7 +69,8 @@ module.exports = grammar(DTD, {
),
doctypedecl: $ => seq(
'<!DOCTYPE',
'<!',
'DOCTYPE',
$._S,
$.Name,
O(seq($._S, $.ExternalID)),
@ -118,6 +132,29 @@ module.exports = grammar(DTD, {
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,43 +3,52 @@
"word": "Name",
"rules": {
"document": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PREC",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_S"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "prolog"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "root",
"content": {
"type": "SYMBOL",
"name": "prolog"
},
{
"type": "BLANK"
"name": "element"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_Misc"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_Misc"
}
},
{
"type": "FIELD",
"name": "root",
"content": {
"type": "SYMBOL",
"name": "element"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_Misc"
}
}
]
]
}
},
"_extSubsetDecl": {
"type": "CHOICE",
@ -119,7 +128,11 @@
},
{
"type": "STRING",
"value": "]]>"
"value": "]"
},
{
"type": "STRING",
"value": "]>"
}
]
},
@ -170,7 +183,11 @@
"members": [
{
"type": "STRING",
"value": "<!ELEMENT"
"value": "<!"
},
{
"type": "STRING",
"value": "ELEMENT"
},
{
"type": "SYMBOL",
@ -402,24 +419,28 @@
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_choice"
},
{
"type": "SYMBOL",
"name": "_seq"
}
]
"type": "SYMBOL",
"name": "_choice"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_occurences"
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "?"
},
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "+"
}
]
},
{
"type": "BLANK"
@ -438,17 +459,8 @@
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "Name"
},
{
"type": "SYMBOL",
"name": "PEReference"
}
]
"type": "SYMBOL",
"name": "Name"
},
{
"type": "SYMBOL",
@ -456,7 +468,7 @@
},
{
"type": "SYMBOL",
"name": "_seq"
"name": "PEReference"
}
]
},
@ -464,8 +476,21 @@
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_occurences"
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "?"
},
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "+"
}
]
},
{
"type": "BLANK"
@ -499,7 +524,7 @@
"name": "_cp"
},
{
"type": "REPEAT1",
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
@ -515,79 +540,19 @@
}
]
},
{
"type": "STRING",
"value": "|"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_S"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_cp"
}
]
}
},
{
"type": "STRING",
"value": ")"
}
]
},
"_seq": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_S"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_cp"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_S"
"type": "STRING",
"value": "|"
},
{
"type": "BLANK"
"type": "STRING",
"value": ","
}
]
},
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
@ -618,7 +583,11 @@
"members": [
{
"type": "STRING",
"value": "<!ATTLIST"
"value": "<!"
},
{
"type": "STRING",
"value": "ATTLIST"
},
{
"type": "SYMBOL",
@ -1040,7 +1009,11 @@
"members": [
{
"type": "STRING",
"value": "<!ENTITY"
"value": "<!"
},
{
"type": "STRING",
"value": "ENTITY"
},
{
"type": "SYMBOL",
@ -1116,7 +1089,11 @@
"members": [
{
"type": "STRING",
"value": "<!ENTITY"
"value": "<!"
},
{
"type": "STRING",
"value": "ENTITY"
},
{
"type": "SYMBOL",
@ -1180,23 +1157,27 @@
"value": "\""
},
{
"type": "REPEAT",
"type": "FIELD",
"name": "content",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<%&\"]"
},
{
"type": "SYMBOL",
"name": "PEReference"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<%&\"]"
},
{
"type": "SYMBOL",
"name": "PEReference"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
}
}
},
{
@ -1213,23 +1194,27 @@
"value": "'"
},
{
"type": "REPEAT",
"type": "FIELD",
"name": "content",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<%&']"
},
{
"type": "SYMBOL",
"name": "PEReference"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<%&']"
},
{
"type": "SYMBOL",
"name": "PEReference"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
}
}
},
{
@ -1275,7 +1260,11 @@
"members": [
{
"type": "STRING",
"value": "<!NOTATION"
"value": "<!"
},
{
"type": "STRING",
"value": "NOTATION"
},
{
"type": "SYMBOL",
@ -1346,30 +1335,13 @@
}
]
},
"_occurences": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "?"
},
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "+"
}
]
},
"_Char": {
"type": "PATTERN",
"value": "[\\u0001-\\uD7FF\\uE000-\\uFFFD\\u{10000}-\\u{10FFFF}]"
},
"_S": {
"type": "PATTERN",
"value": "[\\x20\\x09\\x0D\\x0A]+"
"value": "[ \\t\\r\\n]+"
},
"Name": {
"type": "PATTERN",
@ -1459,19 +1431,23 @@
"value": "\""
},
{
"type": "REPEAT",
"type": "FIELD",
"name": "content",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<&\"]"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<&\"]"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
}
}
},
{
@ -1488,19 +1464,23 @@
"value": "'"
},
{
"type": "REPEAT",
"type": "FIELD",
"name": "content",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<&']"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^<&']"
},
{
"type": "SYMBOL",
"name": "_Reference"
}
]
}
}
},
{
@ -1669,7 +1649,7 @@
"name": "content",
"content": {
"type": "PATTERN",
"value": "[ \\r\\na-zA-Z0-9-'()+,./:=?;!*#@$_%]*"
"value": "[ \\r\\na-zA-Z0-9\\-'()+,./:=?;!*#@$_%]*"
}
},
{
@ -1698,7 +1678,7 @@
"name": "content",
"content": {
"type": "PATTERN",
"value": "[ \\r\\na-zA-Z0-9-()+,./:=?;!*#@$_%]*"
"value": "[ \\r\\na-zA-Z0-9\\-()+,./:=?;!*#@$_%]*"
}
},
{
@ -1994,8 +1974,20 @@
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "XMLDecl"
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "XMLDecl"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_Misc"
}
}
]
},
{
"type": "SEQ",
@ -2022,8 +2014,22 @@
{
"type": "SYMBOL",
"name": "doctypedecl"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_Misc"
}
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_Misc"
}
}
]
}
@ -2035,6 +2041,14 @@
"type": "SYMBOL",
"name": "PI"
},
{
"type": "SYMBOL",
"name": "StyleSheetPI"
},
{
"type": "SYMBOL",
"name": "XmlModelPI"
},
{
"type": "SYMBOL",
"name": "Comment"
@ -2124,7 +2138,11 @@
"members": [
{
"type": "STRING",
"value": "<!DOCTYPE"
"value": "<!"
},
{
"type": "STRING",
"value": "DOCTYPE"
},
{
"type": "SYMBOL",
@ -2468,6 +2486,184 @@
"CData": {
"type": "PATTERN",
"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": [],
@ -2475,7 +2671,6 @@
"precedences": [],
"externals": [],
"inline": [
"_occurences",
"_extSubsetDecl",
"conditionalSect"
],

@ -119,16 +119,17 @@
{
"type": "AttValue",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "_Reference",
"named": true
}
]
"fields": {
"content": {
"multiple": true,
"required": false,
"types": [
{
"type": "_Reference",
"named": true
}
]
}
}
},
{
@ -260,20 +261,21 @@
{
"type": "EntityValue",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "PEReference",
"named": true
},
{
"type": "_Reference",
"named": true
}
]
"fields": {
"content": {
"multiple": true,
"required": false,
"types": [
{
"type": "PEReference",
"named": true
},
{
"type": "_Reference",
"named": true
}
]
}
}
},
{
@ -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",
"named": true,
@ -521,6 +558,21 @@
]
}
},
{
"type": "StyleSheetPI",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "PseudoAtt",
"named": true
}
]
}
},
{
"type": "SystemLiteral",
"named": true,
@ -545,6 +597,21 @@
]
}
},
{
"type": "XmlModelPI",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "PseudoAtt",
"named": true
}
]
}
},
{
"type": "children",
"named": true,
@ -676,6 +743,14 @@
"type": "PI",
"named": true
},
{
"type": "StyleSheetPI",
"named": true
},
{
"type": "XmlModelPI",
"named": true
},
{
"type": "prolog",
"named": true
@ -739,7 +814,7 @@
"fields": {},
"children": {
"multiple": true,
"required": true,
"required": false,
"types": [
{
"type": "Comment",
@ -749,10 +824,18 @@
"type": "PI",
"named": true
},
{
"type": "StyleSheetPI",
"named": true
},
{
"type": "XMLDecl",
"named": true
},
{
"type": "XmlModelPI",
"named": true
},
{
"type": "doctypedecl",
"named": true
@ -833,23 +916,7 @@
"named": false
},
{
"type": "<!ATTLIST",
"named": false
},
{
"type": "<!DOCTYPE",
"named": false
},
{
"type": "<!ELEMENT",
"named": false
},
{
"type": "<!ENTITY",
"named": false
},
{
"type": "<!NOTATION",
"type": "<!",
"named": false
},
{
@ -888,6 +955,10 @@
"type": "ANY",
"named": false
},
{
"type": "ATTLIST",
"named": false
},
{
"type": "CData",
"named": true
@ -900,10 +971,22 @@
"type": "Comment",
"named": true
},
{
"type": "DOCTYPE",
"named": false
},
{
"type": "ELEMENT",
"named": false
},
{
"type": "EMPTY",
"named": false
},
{
"type": "ENTITY",
"named": false
},
{
"type": "EncName",
"named": true
@ -964,6 +1047,10 @@
"type": "]",
"named": false
},
{
"type": "]>",
"named": false
},
{
"type": "]]>",
"named": false
@ -988,6 +1075,14 @@
"type": "xml",
"named": false
},
{
"type": "xml-model",
"named": false
},
{
"type": "xml-stylesheet",
"named": false
},
{
"type": "yes",
"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
(Comment)
(prolog
(Comment))
(element
(EmptyElemTag
(Name))))