use anyhow::{anyhow, bail}; use crate::get_attribute; use self::tileset::TileSetElement; pub mod map; pub mod property; pub mod tileset; pub mod image; pub mod data; pub mod layer; pub mod layer_tile; pub(crate) mod macros; pub mod wangset; pub fn parse_map(input: &str) -> anyhow::Result { let doc = roxmltree::Document::parse(input).unwrap(); map::Map::from_xml(doc) } pub fn parse_tileset(input: &str) -> anyhow::Result { let doc = roxmltree::Document::parse(input).unwrap(); let elem = doc.root_element(); tileset::TileSet::from_xml(&elem) } pub fn get_tile_set_elements_from_map(input: &str) -> anyhow::Result> { let doc = roxmltree::Document::parse(input).unwrap(); let node = doc.root_element(); let mut tilesets = Vec::new(); for tileset_node in node.children().filter(|n| n.has_tag_name("tileset")) { tilesets.push(TileSetElement::from_xml(tileset_node)?); } Ok(tilesets) } /// The Tiled version used to save the file (since Tiled 1.0.1). May be a date (for snapshot builds). (optional) fn parse_tiled_version(node: &roxmltree::Node) -> anyhow::Result> { if !node.is_root() { bail!("not a root node") } Ok(match get_attribute!(node, "tiledversion") { Ok(v) => Some(v.to_owned()), Err(_) => None, }) }