Skip to content

Commit e190170

Browse files
committed
Update quick-xml to 0.38
1 parent 74388f1 commit e190170

File tree

4 files changed

+43
-10
lines changed

4 files changed

+43
-10
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Unreleased
44

55
- Enables the parsing of elements defined in another namespace in Person constructs [`#91`](https://github.com/rust-syndication/atom/pull/91)
6+
- Update `quick-xml` to `0.38` [`#92`](https://github.com/rust-syndication/atom/pull/92)
67

78
## 0.12.7 - 2025-02-16
89

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ categories = ["parser-implementations"]
1313

1414
[dependencies]
1515
diligent-date-parser = "0.1.3"
16-
quick-xml = { version = "0.37", features = ["encoding"] }
16+
quick-xml = { version = "0.38", features = ["encoding"] }
1717
chrono = { version = "0.4", default-features = false, features = ["alloc"] }
1818
derive_builder = { version = "0.20", optional = true }
1919
never = { version = "0.1", optional = true }

src/extension/util.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
use std::collections::BTreeMap;
22
use std::io::BufRead;
33

4-
use quick_xml::events::attributes::Attributes;
5-
use quick_xml::events::Event;
6-
use quick_xml::Reader;
4+
use quick_xml::{
5+
escape::resolve_predefined_entity,
6+
events::{attributes::Attributes, Event},
7+
Reader,
8+
};
79

810
use crate::error::{Error, XmlError};
911
use crate::extension::{Extension, ExtensionMap};
@@ -87,7 +89,19 @@ fn parse_extension_element<R: BufRead>(
8789
text.push_str(decode(&element, reader)?.as_ref());
8890
}
8991
Event::Text(element) => {
90-
text.push_str(element.unescape().map_err(XmlError::new)?.as_ref());
92+
text.push_str(element.decode().map_err(XmlError::new)?.as_ref());
93+
}
94+
Event::GeneralRef(gref) => {
95+
let entity = gref.decode().map_err(XmlError::new)?;
96+
if let Some(resolved_entity) = resolve_predefined_entity(&entity) {
97+
text.push_str(resolved_entity);
98+
} else if let Some(ch) = gref.resolve_char_ref().map_err(XmlError::new)? {
99+
text.push(ch);
100+
} else {
101+
text.push('&');
102+
text.push_str(&entity);
103+
text.push(';');
104+
}
91105
}
92106
Event::End(element) => {
93107
extension.name = decode(element.name().as_ref(), reader)?.into();

src/util.rs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use quick_xml::{
2-
escape::escape,
2+
escape::{escape, resolve_predefined_entity},
33
events::{attributes::Attribute, Event},
44
name::QName,
55
Reader,
@@ -86,11 +86,23 @@ pub fn atom_text<B: BufRead>(reader: &mut Reader<B>) -> Result<Option<String>, E
8686
result.push_str(decode(&text, reader)?.as_ref());
8787
}
8888
Event::Text(text) => {
89-
let decoded = text.unescape().map_err(XmlError::new)?;
89+
let decoded = text.decode().map_err(XmlError::new)?;
9090
result.push_str(&decoded);
9191
}
92+
Event::GeneralRef(gref) => {
93+
let entity = gref.decode().map_err(XmlError::new)?;
94+
if let Some(resolved_entity) = resolve_predefined_entity(&entity) {
95+
result.push_str(resolved_entity);
96+
} else if let Some(ch) = gref.resolve_char_ref().map_err(XmlError::new)? {
97+
result.push(ch);
98+
} else {
99+
result.push('&');
100+
result.push_str(&entity);
101+
result.push(';');
102+
}
103+
}
92104
Event::Comment(text) => {
93-
let decoded = text.unescape().map_err(XmlError::new)?;
105+
let decoded = text.decode().map_err(XmlError::new)?;
94106
result.push_str("<!--");
95107
result.push_str(&decoded);
96108
result.push_str("-->");
@@ -145,11 +157,17 @@ pub fn atom_xhtml<B: BufRead>(reader: &mut Reader<B>) -> Result<Option<String>,
145157
result.push_str(escape(decode(&text, reader)?.as_ref()).as_ref());
146158
}
147159
Event::Text(text) => {
148-
let decoded = text.unescape().map_err(XmlError::new)?;
160+
let decoded = text.decode().map_err(XmlError::new)?;
149161
result.push_str(escape(decoded.as_ref()).as_ref());
150162
}
163+
Event::GeneralRef(gref) => {
164+
let entity = gref.decode().map_err(XmlError::new)?;
165+
result.push('&');
166+
result.push_str(&entity);
167+
result.push(';');
168+
}
151169
Event::Comment(text) => {
152-
let decoded = text.unescape().map_err(XmlError::new)?;
170+
let decoded = text.decode().map_err(XmlError::new)?;
153171
result.push_str("<!--");
154172
result.push_str(&decoded);
155173
result.push_str("-->");

0 commit comments

Comments
 (0)