diff options
Diffstat (limited to 'src/lowlevel/mod.rs')
-rw-r--r-- | src/lowlevel/mod.rs | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/src/lowlevel/mod.rs b/src/lowlevel/mod.rs index 824c693..2eb951e 100644 --- a/src/lowlevel/mod.rs +++ b/src/lowlevel/mod.rs @@ -1,3 +1,9 @@ +use anyhow::{anyhow, bail}; + +use crate::get_attribute; + +use self::tileset::TileSetElement; + pub mod map; pub mod property; @@ -9,7 +15,41 @@ pub mod image; pub mod data; pub mod layer; +pub mod layer_tile; pub(crate) mod macros; -pub mod wangset;
\ No newline at end of file +pub mod wangset; + +pub fn parse_map(input: &str) -> anyhow::Result<map::Map> { + let doc = roxmltree::Document::parse(input).unwrap(); + map::Map::from_xml(doc) +} + +pub fn parse_tileset(input: &str) -> anyhow::Result<tileset::TileSet> { + 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<Vec<tileset::TileSetElement>> { + 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<Option<String>> { + if !node.is_root() { + bail!("not a root node") + } + + Ok(match get_attribute!(node, "tiledversion") { + Ok(v) => Some(v.to_owned()), + Err(_) => None, + }) +} |