Skip to content
Snippets Groups Projects
Commit ebf61a5e authored by Matthew Hall's avatar Matthew Hall
Browse files

Add csv parsing

parent 5968d975
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
......@@ -475,7 +475,7 @@ fn parse_data<B: Buffer>(parser: &mut EventReader<B>, attrs: Vec<OwnedAttribute>
(Some(e),None) =>
match e.as_slice() {
"base64" => return parse_base64(parser).map(|v| convert_to_u32(&v,width)),
"csv" => return Err(TiledError::Other("csv encoding is currently not supported".to_string())),
"csv" => return decode_csv(parser),
e => return Err(TiledError::Other(format!("Unknown encoding format {}",e))),
},
(Some(e),Some(c)) =>
......@@ -527,6 +527,29 @@ fn decode_gzip(data : Vec<u8>) -> Result<Vec<u8>, TiledError> {
Ok(data)
}
fn decode_csv<B: Buffer>(parser: &mut EventReader<B>) -> Result<Vec<Vec<u32>>, TiledError> {
loop {
match parser.next() {
Characters(s) => {
let mut rows: Vec<Vec<u32>> = Vec::new();
for row in s.split('\n') {
if row.trim() == "" {
continue;
}
rows.push(row.split(',').filter(|v| v.trim() != "").map(|v| v.parse().unwrap()).collect());
}
return Ok(rows);
}
EndElement {name, ..} => {
if name.local_name == "data" {
return Ok(Vec::new());
}
}
_ => {}
}
}
}
fn convert_to_u32(all : &Vec<u8>,width : u32) -> Vec<Vec<u32>> {
let mut data = Vec::new();
for chunk in all.chunks((width * 4) as usize) {
......
......@@ -14,6 +14,7 @@ fn test_gzip_and_zlib_encoded_and_raw_are_the_same() {
let z = read_from_file(&Path::new("assets/tiled_base64_zlib.tmx")).unwrap();
let g = read_from_file(&Path::new("assets/tiled_base64_gzip.tmx")).unwrap();
let r = read_from_file(&Path::new("assets/tiled_base64.tmx")).unwrap();
let c = read_from_file(&Path::new("assets/tiled_csv.tmx")).unwrap();
assert_eq!(z, g);
assert_eq!(z, r);
}
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