This release focuses on bugfixes.
What's Changed
- Fix escaped id selectors in the simple-selector fast path by @dylanpulver in #411
- Add optional contributor tasks and CI coverage for stacked fixes by @aehlke in #412
- Keep DOM identity hashes and OrderedSet membership stable across mutation by @aehlke in #413
- Fix Unicode matcher captures and reuse compiled patterns by @aehlke in #414
- Batch entity serialization and skip unnecessary CSS comment scanning by @aehlke in #415
- Preserve token boundaries and batch byte and text operations by @aehlke in #416
- Preserve DOM ownership, mutation invariants and cache lifetimes by @aehlke in #417
- Correct CSS selector parsing, indexing and relative has matching by @aehlke in #418
- Add reproducible optimization benchmarks and qualification reports by @aehlke in #419
- Preserve Document state across clone entry points by @aehlke in #421
- Reset HTML tree-builder state between parser inputs by @aehlke in #422
- Use RAWTEXT tokenizer state for raw-text fragments by @aehlke in #423
- Match selectors correctly in detached element trees by @aehlke in #424
- Avoid wrap crash for non-element wrapper markup by @aehlke in #425
- Preserve source syntax provenance across document adoption by @aehlke in #426
- Preserve text spacing after non-ASCII fast-path nodes by @rupayon123 in #427
- Prevent plaintext tokenizer stalls on byte 0xFF by @aehlke in #429
- Preserve literal text when parsing plaintext fragments by @aehlke in #430
- Avoid crashes on malformed XML processing instructions by @aehlke in #428
- Support Xcode 27 macOS builds and validate the Xcode project by @aehlke in #431
- Return an empty selection for negative Elements.eq indexes by @aehlke in #454
- Honor textarea value semantics for preserved tag case by @aehlke in #455
- Fix wildcard namespace matching and combinator precedence by @aehlke in #456
- Recognize XML name starts in opening and closing tags by @aehlke in #457
- Avoid crashes when root selectors query empty documents by @aehlke in #432
- Validate all configured cleaner sections without assuming a body by @aehlke in #433
- Reserve parse error storage without consuming the error budget by @aehlke in #434
- Prevent nested XML declaration conversion by @aehlke in #435
- Keep cloned form controls independent from the original document by @aehlke in #436
- Match Unicode character-reader prefixes by decoded scalars by @aehlke in #437
- Align containing-text selectors with normalized text getters by @aehlke in #438
- Require the semicolon when decoding apos references by @aehlke in #440
- Escape nonbreaking spaces after other two-byte characters by @aehlke in #441
- Keep Unicode reader scans and rewind aligned to scalar boundaries by @aehlke in #442
- Preserve RCDATA content in textarea and mixed-case closing tags by @aehlke in #443
- Bound entity escaping copies to the supplied UTF-8 buffer by @aehlke in #444
- Preserve traversal order for custom selector evaluators by @aehlke in #445
- Handle empty reader delimiters without trapping by @aehlke in #447
- Honor output settings when reusing parsed source by @aehlke in #448
- Preserve fragment mutations in compact document output by @aehlke in #449
- Honor case-sensitive chompTo consumption when delimiters are absent by @aehlke in #450
- Preserve XML declaration versions when updating charset by @aehlke in #451
- Honor the case-insensitive Pattern compile option by @aehlke in #452
- Include SYSTEM for constructed system-only doctypes by @aehlke in #453
- Normalize HTML numeric references without changing XML values by @aehlke in #439
- Preserve literal raw-text content through parsing and serialization by @aehlke in #446
- Fix XML auto-detection and borrowed-buffer initialization by @aehlke in #458
- Fix sibling type selectors for mixed self-closing syntax by @aehlke in #459
- Avoid quadratic ancestor marking in has selectors by @aehlke in #460
- Fix empty selectors and inherited text whitespace by @aehlke in #461
- Fix deep HTML traversal with bounded serialization frames by @aehlke in #466
New Contributors
- @dylanpulver made their first contribution in #411
- @rupayon123 made their first contribution in #427
Full Changelog: 2.13.9...2.14.0