summaryrefslogtreecommitdiff
path: root/src/lowlevel/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lowlevel/mod.rs')
-rw-r--r--src/lowlevel/mod.rs42
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,
+ })
+}