|
1 | 1 | use quick_xml::{ |
2 | | - escape::escape, |
| 2 | + escape::{escape, resolve_predefined_entity}, |
3 | 3 | events::{attributes::Attribute, Event}, |
4 | 4 | name::QName, |
5 | 5 | Reader, |
@@ -86,11 +86,23 @@ pub fn atom_text<B: BufRead>(reader: &mut Reader<B>) -> Result<Option<String>, E |
86 | 86 | result.push_str(decode(&text, reader)?.as_ref()); |
87 | 87 | } |
88 | 88 | Event::Text(text) => { |
89 | | - let decoded = text.unescape().map_err(XmlError::new)?; |
| 89 | + let decoded = text.decode().map_err(XmlError::new)?; |
90 | 90 | result.push_str(&decoded); |
91 | 91 | } |
| 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 | + } |
92 | 104 | Event::Comment(text) => { |
93 | | - let decoded = text.unescape().map_err(XmlError::new)?; |
| 105 | + let decoded = text.decode().map_err(XmlError::new)?; |
94 | 106 | result.push_str("<!--"); |
95 | 107 | result.push_str(&decoded); |
96 | 108 | result.push_str("-->"); |
@@ -145,11 +157,17 @@ pub fn atom_xhtml<B: BufRead>(reader: &mut Reader<B>) -> Result<Option<String>, |
145 | 157 | result.push_str(escape(decode(&text, reader)?.as_ref()).as_ref()); |
146 | 158 | } |
147 | 159 | Event::Text(text) => { |
148 | | - let decoded = text.unescape().map_err(XmlError::new)?; |
| 160 | + let decoded = text.decode().map_err(XmlError::new)?; |
149 | 161 | result.push_str(escape(decoded.as_ref()).as_ref()); |
150 | 162 | } |
| 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 | + } |
151 | 169 | Event::Comment(text) => { |
152 | | - let decoded = text.unescape().map_err(XmlError::new)?; |
| 170 | + let decoded = text.decode().map_err(XmlError::new)?; |
153 | 171 | result.push_str("<!--"); |
154 | 172 | result.push_str(&decoded); |
155 | 173 | result.push_str("-->"); |
|
0 commit comments