UNPKG

tree-sitter-4dcatalog

Version:
112 lines (92 loc) 1.98 kB
module.exports = grammar({ name: 'fourdxmlcatalog', extras: $ => [ $.comment, /\s+/, ], externals: $ => [ $._start_tag_name, $._end_tag_name, $.erroneous_end_tag_name, '/>', $._implicit_end_tag, $.raw_text, $.comment, ], rules: { fragment: $ => repeat($._node), doctype: $ => seq( '<!', alias($._doctype, 'doctype'), /[^>]+/, '>' ), declaration: $ => seq( '<?', alias($._xml, 'declaration'), /[^?>]+/, '?>' ), _xml: $ => /[Xx][Mm][Ll]/, _doctype: $ => /[Dd][Oo][Cc][Tt][Yy][Pp][Ee]/, _node: $ => choice( $.declaration, $.doctype, $.text, $.element, $.erroneous_end_tag ), element: $ => choice( seq( $.start_tag, repeat($._node), choice($.end_tag, $._implicit_end_tag) ), $.self_closing_tag ), start_tag: $ => seq( '<', alias($._start_tag_name, $.tag_name), repeat($.attribute), '>' ), self_closing_tag: $ => seq( '<', alias($._start_tag_name, $.tag_name), repeat($.attribute), '/>' ), end_tag: $ => seq( '</', alias($._end_tag_name, $.tag_name), '>' ), erroneous_end_tag: $ => seq( '</', $.erroneous_end_tag_name, '>' ), attribute: $ => seq( $.attribute_name, optional(seq( '=', choice( $.attribute_value, $.quoted_attribute_value_empty, $.quoted_attribute_value ) )) ), attribute_name: $ => /[^<>"'/=\s]+/, attribute_value: $ => /[^<>"'=\s]+/, quoted_attribute_value: $ => choice( seq("'", optional(alias(/[^']+/, $.attribute_value)), "'"), seq('"', optional(alias(/[^"]+/, $.attribute_value)), '"') ), quoted_attribute_value_empty: $ => choice( seq("''"), seq('""') ), text: $ => /[^<>]+/ } });