Skip to content
Snippets Groups Projects
Unverified Commit b9a27679 authored by David M's avatar David M
Browse files

Refactor multiline string parsing and fix a test failing.

parent 1e58ec32
No related branches found
No related tags found
No related merge requests found
...@@ -15,6 +15,11 @@ ...@@ -15,6 +15,11 @@
<properties> <properties>
<property name="prop1" value="12"/> <property name="prop1" value="12"/>
<property name="prop2" value="some text"/> <property name="prop2" value="some text"/>
<property name="prop3">Line 1
Line 2
Line 3,
etc
</property>
</properties> </properties>
<data encoding="base64" compression="zstd"> <data encoding="base64" compression="zstd">
KLUv/WBAm6UFAPgjAAAAIREtLgAAAC8RACMfHy0tLi0tLSMjIyMjIyMjSaBguwAAg0JmtQEFA2qvb+Al6lHUO91VvxpMveegXVabfkkjaEj1wZVZeNWPbSrdISdZk1b145uYEEFAvQmwiF5zTMi2QsOb9Vhv7ZxsK27ZJBXC9lYf2mVdhuqWjb8/hITgZAMw1ctxfXIOXBaofKbranfWDTtJ/Xyz7E2ZNWzVKauthC4r26Ry1TnnDqtmvUfyDw== KLUv/WBAm6UFAPgjAAAAIREtLgAAAC8RACMfHy0tLi0tLSMjIyMjIyMjSaBguwAAg0JmtQEFA2qvb+Al6lHUO91VvxpMveegXVabfkkjaEj1wZVZeNWPbSrdISdZk1b145uYEEFAvQmwiF5zTMi2QsOb9Vhv7ZxsK27ZJBXC9lYf2mVdhuqWjb8/hITgZAMw1ctxfXIOXBaofKbranfWDTtJ/Xyz7E2ZNWzVKauthC4r26Ry1TnnDqtmvUfyDw==
......
...@@ -87,7 +87,7 @@ pub(crate) fn parse_properties<R: Read>( ...@@ -87,7 +87,7 @@ pub(crate) fn parse_properties<R: Read>(
let mut p = HashMap::new(); let mut p = HashMap::new();
parse_tag!(parser, "properties", { parse_tag!(parser, "properties", {
"property" => |attrs:Vec<OwnedAttribute>| { "property" => |attrs:Vec<OwnedAttribute>| {
let ((t, mut v), k) = get_attrs!( let ((t, v_attr), k) = get_attrs!(
attrs, attrs,
optionals: [ optionals: [
("type", property_type, |v| Some(v)), ("type", property_type, |v| Some(v)),
...@@ -99,19 +99,19 @@ pub(crate) fn parse_properties<R: Read>( ...@@ -99,19 +99,19 @@ pub(crate) fn parse_properties<R: Read>(
TiledError::MalformedAttributes("property must have a name and a value".to_string()) TiledError::MalformedAttributes("property must have a name and a value".to_string())
); );
let t = t.unwrap_or("string".into()); let t = t.unwrap_or("string".into());
if v.is_none() {
v = Some(match parser.next().map_err(TiledError::XmlDecodingError)? { let v = match v_attr {
XmlEvent::Characters(s) => { Some(val) => val,
Ok(s) None => {
} // if the "value" attribute was missing, might be a multiline string
XmlEvent::EndElement { name, .. } => { match parser.next().map_err(TiledError::XmlDecodingError)? {
Err(TiledError::MalformedAttributes("property must have a name and a value".to_string())) XmlEvent::Characters(s) => Ok(s),
} _ => Err(TiledError::MalformedAttributes(format!("property '{}' is missing a value", k))),
_ => Err(TiledError::MalformedAttributes("?".to_string())) }?
}?); }
} };
p.insert(k, PropertyValue::new(t, v.expect("Missing value"))?); p.insert(k, PropertyValue::new(t, v)?);
Ok(()) Ok(())
}, },
}); });
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment