Commit Graph

281 Commits

Author SHA1 Message Date
40c5973d5a feat(html): SVG element-name case adjustment in foreign content (#83) 2026-06-09 05:29:14 +02:00
d084e3521f Merge #83 (stage 2): HTML foreign content namespaces 2026-06-09 05:22:38 +02:00
d64bcaf2fa feat(html): SVG/MathML foreign-content namespace switching (#83) 2026-06-09 05:22:37 +02:00
acf1efe366 Merge #83 (stage 1): HTML table tree construction 2026-06-09 05:18:13 +02:00
b7f7e15fbc feat(html): table tree construction with implied tbody/tr (#83) 2026-06-09 05:18:13 +02:00
e978da9b41 Merge #84 (partial): HTML tokenizer states and reference handling 2026-06-09 05:11:18 +02:00
e86c87af3c feat(html): numeric-ref validation, NUL, RCDATA decoding, semicolon-less refs (#84) 2026-06-09 05:11:18 +02:00
704370c779 Merge: HTML conformance validator in the Validation idiom 2026-06-09 04:39:03 +02:00
3a55eeeaa6 feat(html): conformance validator as composable Validation rules 2026-06-09 04:39:03 +02:00
31c6fb6e0b Merge #101: DTD attribute rule decomposition 2026-06-09 04:28:04 +02:00
506c502602 refactor(validation): decompose DTD attribute checks into per-constraint rules (#101) 2026-06-09 04:28:03 +02:00
3391f595a2 Merge #87: XInclude range inclusion 2026-06-09 04:19:38 +02:00
ecb9b8c881 feat(xinclude): range inclusion via XPointer range model (#87) 2026-06-09 04:19:38 +02:00
3bd810dc2c Merge #88: XPointer range model 2026-06-09 04:16:23 +02:00
8871fee977 feat(xpointer): range(), range-to(), and string-range() schemes (#88) 2026-06-09 04:16:23 +02:00
47d071ab8e Merge #85: C14N node-subset, xml:* inheritance, C14N 2.0 prefix rewrite and selection 2026-06-09 04:06:11 +02:00
b3bbacb4e8 feat(canonical): C14N 2.0 sequential prefix rewrite, QName-aware values, node-set selection (#85) 2026-06-09 04:06:02 +02:00
e77b39a449 feat(canonical): node-subset C14N with ancestor namespace and xml:* inheritance (#85) 2026-06-09 03:55:54 +02:00
aca0181be9 Merge #91: serialization round-trip text escaping 2026-06-09 03:48:21 +02:00
87fd7ba889 feat(emitting): textEscaping round-trip option to preserve carriage returns (#91) 2026-06-09 03:48:20 +02:00
a8cf4d2d76 Merge #90: DOM node kinds, ownerDocument, adoption 2026-06-09 03:43:32 +02:00
46131bff1b feat(model): first-class doctype/entity-reference/namespace nodes, ownerDocument, adoption (#90) 2026-06-09 03:43:24 +02:00
a71178ba9b docs: move closed Schematron #80 to done in roadmap 2026-06-09 03:31:29 +02:00
5c9c6366bd docs: refresh test count to 666 2026-06-09 03:30:44 +02:00
4256670758 Merge: Schematron key/document/current functions (#80) 2026-06-09 03:30:44 +02:00
2db9915fb2 feat(schematron): support key(), document(), and current() in tests
Schematron tests, lets, and message expressions can now use key() backed
by xsl:key declarations parsed from the schema, document() loading an
external file through an injected documentLoader, and current() resolving
to the rule context node. A node-keyed function-table factory threads
through the evaluation. Completes the Schematron audit.
2026-06-09 03:30:43 +02:00
e1a0b5698c docs: move closed RELAX NG #79 to done in roadmap 2026-06-09 03:21:37 +02:00
259aa251fd docs: refresh test count to 662 2026-06-09 03:20:48 +02:00
7487f50e0e Merge: RNC follow-annotations (#79) 2026-06-09 03:20:48 +02:00
dbdf98e231 feat(relaxng): skip RNC >> follow-annotations, completing #79
A >> follow-annotation after a pattern (a foreign element name with
optional [ ... ] content) is skipped, chaining and combining with leading
annotations; neither carries schema semantics. Namespace declarations
inside annotations were already dropped by the annotation skipper, so the
RNC compact syntax is now fully covered.
2026-06-09 03:20:47 +02:00
45001f3422 docs: bring the shipped-overview roadmap node current with catalog #86 and XSLT #81 #82 2026-06-09 03:16:05 +02:00
0865fac3f9 docs: move closed XSLT #82 to done in roadmap 2026-06-09 03:14:01 +02:00
47d4390020 docs: refresh test count to 658 2026-06-09 03:12:50 +02:00
5a9a75ee35 Merge: XSLT document() fragments and base-URI (#82) 2026-06-09 03:12:49 +02:00
7c24ada92b feat(xslt): document() fragments and base-URI resolution, completing #82
A document() reference with a #fragment selects a subset of the loaded
document via XPointer; a node-set first argument unions the documents
named by each node's string value; and a relative URI is resolved against
a caller-supplied baseURI (the loader is wrapped so xsl:include/xsl:import
resolve the same way). Closes the XSLT function/output audit.
2026-06-09 03:12:49 +02:00
a65668d1fc docs: refresh test count to 654 2026-06-09 03:04:56 +02:00
95073da7ed Merge: XSLT result-tree fragment as node-set (#82) 2026-06-09 03:04:56 +02:00
4ea84b3d58 feat(xslt): make result-tree fragments usable as node-sets
An xsl:variable with a body now binds a queryable document fragment (its
instantiated result converted to a TreeNode document) instead of a plain
string, so count($rtf/*), $rtf/child, and for-each over $rtf/... work.
It still has its concatenated text as a string value, so existing string
uses are unchanged. Part of #82.
2026-06-09 03:04:56 +02:00
aa65842bcc docs: refresh test count to 649 2026-06-09 02:58:35 +02:00
421eda4e78 Merge: XSLT cdata-section-elements (#82) 2026-06-09 02:58:35 +02:00
3fec78da51 feat(xslt): implement xsl:output cdata-section-elements
The text content of the named result elements is emitted in CDATA
sections rather than escaped: the result tree's text children of those
elements are converted to CDATA nodes before serialization, leaving
nested and other elements unaffected. Part of #82.
2026-06-09 02:58:34 +02:00
9b07a5901d docs: refresh test count to 645 2026-06-09 02:53:51 +02:00
f1113c7787 Merge: XSLT output doctype (#82) 2026-06-09 02:53:51 +02:00
2a40300479 feat(xslt): emit xsl:output doctype-public/doctype-system
When doctype-system (optionally with doctype-public) is set on xsl:output,
a <!DOCTYPE> for the result's root element is emitted before the
serialized output: PUBLIC when both identifiers are given, SYSTEM
otherwise. Works for the XML and HTML output methods. Part of #82.
2026-06-09 02:53:50 +02:00
9545802be6 docs: refresh test count to 642 2026-06-09 02:50:24 +02:00
f00c9086cf Merge: XSLT key() node-set argument (#82) 2026-06-09 02:50:24 +02:00
47b88f19b2 feat(xslt): key() over a node-set second argument
key(name, node-set), including key('k', .), now unions the indexed nodes
for every value node's string value and de-duplicates, instead of using
only the first node's string value. A string value still works directly.
Part of #82.
2026-06-09 02:50:24 +02:00
73f8fb74af docs: refresh test count to 639 2026-06-09 02:48:01 +02:00
f9b82bb749 Merge: XSLT method=html output (#82) 2026-06-09 02:48:00 +02:00
41a48d3130 feat(xslt): serialize method=html output by the HTML rules
An xsl:output method=html result is serialized through PureXML.HTML
(void elements emitted without a self-closing slash, raw-text elements
like script/style left unescaped) instead of as XML. Part of #82.
2026-06-09 02:48:00 +02:00