diff --git a/CHANGES.md b/CHANGES.md index d7559c2ef6..7fbcb33472 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,35 +1,37 @@ # jsoup Changelog -## 1.17.2 (Pending) +## 1.17.2 (2023-Dec-29) ### Improvements -* Added `Element.attribute(String)` and `Attributes.attribute(String)` to more simply obtain an `Attribute` object. - [2069](https://github.com/jhy/jsoup/issues/2069) -* If source tracking is on, and an Attribute's key is changed (via `Attribute.setKey(String)`), the source range is - now still tracked in `Attribute.sourceRange()`. [2070](https://github.com/jhy/jsoup/issues/2070) -* Added support for the `[*]` element with any attribute selector. And also restored support for selecting by an empty - attribute name prefix (`[^]`). [2079](https://github.com/jhy/jsoup/issues/2079) +* **Attribute object accessors**: Added `Element.attribute(String)` and `Attributes.attribute(String)` to more simply + obtain an `Attribute` object. [2069](https://github.com/jhy/jsoup/issues/2069) +* **Attribute source tracking**: If source tracking is on, and an Attribute's key is changed ( + via `Attribute.setKey(String)`), the source range is now still tracked + in `Attribute.sourceRange()`. [2070](https://github.com/jhy/jsoup/issues/2070) +* **Wildcard attribute selector**: Added support for the `[*]` element with any attribute selector. And also restored + support for selecting by an empty attribute name prefix (`[^]`). [2079](https://github.com/jhy/jsoup/issues/2079) ### Bug Fixes -* When tracking the source position of attributes, if source attribute name was mix-cased but the parser was - lower-case normalizing attribute names, the source position for that attribute was not tracked - correctly. [2067](https://github.com/jhy/jsoup/issues/2067) -* When tracking the source position of a body fragment parse, a null pointer exception was - thrown. [2068](https://github.com/jhy/jsoup/issues/2068) -* A multi-point encoded emoji entity may be incorrectly decoded to the replacement +* **Mixed-cased source position**: When tracking the source position of attributes, if the source attribute name was + mix-cased but the parser was lower-case normalizing attribute names, the source position for that attribute was not + tracked correctly. [2067](https://github.com/jhy/jsoup/issues/2067) +* **Source position NPE**: When tracking the source position of a body fragment parse, a null pointer + exception was thrown. [2068](https://github.com/jhy/jsoup/issues/2068) +* **Multi-point emoji entity**: A multi-point encoded emoji entity may be incorrectly decoded to the replacement character. [2074](https://github.com/jhy/jsoup/issues/2074) -* (Regression) in a selector like `parent [attr=va], other`, the `, OR` was binding to `[attr=va]` instead of - `parent [attr=va]`, causing incorrect selections. The fix includes a EvaluatorDebug class that generates a sexpr - to represent the query, allowing simpler and more thorough query parse +* **Selector sub-expressions**: (Regression) in a selector like `parent [attr=va], other`, the `, OR` was binding + to `[attr=va]` instead of `parent [attr=va]`, causing incorrect selections. The fix includes a EvaluatorDebug class + that generates a sexpr to represent the query, allowing simpler and more thorough query parse tests. [2073](https://github.com/jhy/jsoup/issues/2073) -* When generating XML-syntax output from parsed HTML, script nodes containing (pseudo) CData sections would have an - extraneous CData section added, causing script execution errors. Now, the data content is emitted in a HTML/XML/XHTML - polyglot format, if the data is not already within a CData section. [2078](https://github.com/jhy/jsoup/issues/2078) -* The `:has` evaluator held a non-thread-safe Iterator, and so if an Evaluator object was shared across multiple - concurrent threads, a NoSuchElement exception may be thrown, and the selected results may be incorrect. Now, the - iterator object is a thread-local. [2088](https://github.com/jhy/jsoup/issues/2088) +* **XML CData output**: When generating XML-syntax output from parsed HTML, script nodes containing (pseudo) CData + sections would have an extraneous CData section added, causing script execution errors. Now, the data content is + emitted in a HTML/XML/XHTML polyglot format, if the data is not already within a CData + section. [2078](https://github.com/jhy/jsoup/issues/2078) +* **Thread safety**: The `:has` evaluator held a non-thread-safe Iterator, and so if an Evaluator object was + shared across multiple concurrent threads, a NoSuchElement exception may be thrown, and the selected results may be + incorrect. Now, the iterator object is a thread-local. [2088](https://github.com/jhy/jsoup/issues/2088) --- Older changes for versions 0.1.1 (2010-Jan-31) through 1.17.1 (2023-Nov-27) may be found in