[tiled] r658 - in trunk: . examples src/tiled/io/xml

svn@biggeruniverse.com svn at biggeruniverse.com
Mon Jun 5 14:06:21 PDT 2006


Author: bjorn
Date: 2006-06-05 16:06:20 -0500 (Mon, 05 Jun 2006)
New Revision: 658

Modified:
   trunk/CHANGES
   trunk/examples/tilebmp-test.tmx
   trunk/src/tiled/io/xml/XMLMapTransformer.java
   trunk/src/tiled/io/xml/XMLMapWriter.java
   trunk/src/tiled/io/xml/XMLWriterException.java
Log:
Properties now stored in a "properties" element, loading of maps is backwards compatible.
XMLWriterException changed to a RuntimeException.

Modified: trunk/CHANGES
===================================================================
--- trunk/CHANGES	2006-06-05 20:22:10 UTC (rev 657)
+++ trunk/CHANGES	2006-06-05 21:06:20 UTC (rev 658)
@@ -44,6 +44,7 @@
 * Cleaned up TileSet (removed checksumming and rotation/orienation code)
 * Removed experimental hexagonal mapview from new map dialog
 * Removed option to not automatically create tiles from a tileset image
+* Changed map format to store properties within a single "properties" element
 
 0.5.1 - June 15th, 2005
 

Modified: trunk/examples/tilebmp-test.tmx
===================================================================
--- trunk/examples/tilebmp-test.tmx	2006-06-05 20:22:10 UTC (rev 657)
+++ trunk/examples/tilebmp-test.tmx	2006-06-05 21:06:20 UTC (rev 658)
@@ -1,14 +1,20 @@
 <?xml version="1.0"?>
-<map version="0.99a" orientation="orthogonal" width="64" height="64" tilewidth="24" tileheight="24">
- <property name="test" value="value"/>
+<map version="0.99b" orientation="orthogonal" width="64" height="64" tilewidth="24" tileheight="24">
+ <properties>
+  <property name="test" value="value"/>
+ </properties>
  <tileset name="Sewers" firstgid="1" tilewidth="24" tileheight="24">
   <image source="sewer_tileset.png" trans="ff00ff"/>
   <tile id="0">
-   <property name="obstacle" value="1"/>
+   <properties>
+    <property name="obstacle" value="1"/>
+   </properties>
   </tile>
  </tileset>
  <layer name="Layer 0" width="64" height="64">
-  <property name="test2" value="value2"/>
+  <properties>
+   <property name="test2" value="value2"/>
+  </properties>
   <data encoding="base64" compression="gzip">
    H4sIAAAAAAAAAO3POwoCMRiF0cHOJ/jAahpHLNT9788r5IfgCiSc4kBuIJBvnqZp7txiF/s4xNLturv/vBnJt/8Sq7i2/tp1N3r/Ojaxbf21y+j9xzjFufXXLiP3P+PVPLpz7/0H/wQAAAAAAAAAAAAAAAAAgBF9AJgOlPoAQAAA
   </data>

Modified: trunk/src/tiled/io/xml/XMLMapTransformer.java
===================================================================
--- trunk/src/tiled/io/xml/XMLMapTransformer.java	2006-06-05 20:22:10 UTC (rev 657)
+++ trunk/src/tiled/io/xml/XMLMapTransformer.java	2006-06-05 21:06:20 UTC (rev 658)
@@ -148,10 +148,10 @@
                 return child;
             }
         }
-        
+
         return null;
     }
-    
+
     private Object unmarshalClass(Class reflector, Node node)
         throws InstantiationException, IllegalAccessException,
                InvocationTargetException {
@@ -335,7 +335,7 @@
 
             boolean hasTilesetImage = false;
             NodeList children = t.getChildNodes();
-            
+
             //if we have a tileset image, load it (tileset can have only one image element)
             Node child = findChild(t, "image");
             if(child != null) {
@@ -344,7 +344,7 @@
                 String transStr = getAttributeValue(child, "trans");
 
                 hasTilesetImage = true;
-                
+
                 if (imgSource != null && id == null) {
                     // Not a shared image, but an entire set in one image
                     // file
@@ -391,7 +391,7 @@
                             Integer.parseInt(getAttributeValue(child, "id")));
                 }
             }
-            
+
             //spin through and find tile elements
             for (int i = 0; i < children.getLength(); i++) {
                 Node c = children.item(i);
@@ -422,18 +422,31 @@
             return obj;
         }
 
-        Properties objProps = obj.getProperties();
-        NodeList children = t.getChildNodes();
+        readProperties(t.getChildNodes(), obj.getProperties());
+        return obj;
+    }
 
+    /**
+     * Reads properties from amongst the given children. When a "properties"
+     * element is encountered, it recursively calls itself with the children
+     * of this node. This function ensures backward compatibility with tmx
+     * version 0.99a.
+     *
+     * @param children the children amongst which to find properties
+     * @param props    the properties object to set the properties of
+     */
+    private static void readProperties(NodeList children, Properties props) {
         for (int i = 0; i < children.getLength(); i++) {
             Node child = children.item(i);
             if ("property".equalsIgnoreCase(child.getNodeName())) {
-                objProps.setProperty(
+                props.setProperty(
                         getAttributeValue(child, "name"),
                         getAttributeValue(child, "value"));
             }
+            else if ("properties".equals(child.getNodeName())) {
+                readProperties(child.getChildNodes(), props);
+            }
         }
-        return obj;
     }
 
     private Tile unmarshalTile(TileSet set, Node t, String baseDir)
@@ -458,14 +471,14 @@
                 tile = (Tile)unmarshalClass(Tile.class, t);
             }
         } catch (Exception e) {
-        	logger.error("failed creating tile: "+e.getLocalizedMessage());
+            logger.error("failed creating tile: "+e.getLocalizedMessage());
             //e.printStackTrace();
             return tile;
         }
 
         tile.setTileSet(set);
 
-        Properties tileProps = tile.getProperties();
+        readProperties(children, tile.getProperties());
 
         for (int i = 0; i < children.getLength(); i++) {
             Node child = children.item(i);
@@ -476,10 +489,6 @@
                     id = set.addImage(img);
                 }
                 tile.setImage(id);
-            } else if ("property".equalsIgnoreCase(child.getNodeName())) {
-                tileProps.setProperty(
-                        getAttributeValue(child, "name"),
-                        getAttributeValue(child, "value"));
             } else if ("animation".equalsIgnoreCase(child.getNodeName())) {
                 // TODO: fill this in once XMLMapWriter is complete
             }
@@ -532,7 +541,7 @@
             ml.setOpacity(Float.parseFloat(opacity));
         }
 
-        Properties mlProps = ml.getProperties();
+        readProperties(t.getChildNodes(), ml.getProperties());
 
         for (Node child = t.getFirstChild(); child != null;
                 child = child.getNextSibling())
@@ -600,9 +609,6 @@
                         }
                     }
                 }
-            } else if ("property".equalsIgnoreCase(child.getNodeName())) {
-                mlProps.setProperty(getAttributeValue(child, "name"),
-                        getAttributeValue(child, "value"));
             }
         }
 
@@ -661,7 +667,7 @@
             setOrientation("orthogonal");
         }
 
-        Properties mapProps = map.getProperties();
+        readProperties(mapNode.getChildNodes(), map.getProperties());
 
         // Load the tilesets, properties, layers and objectgroups
         for (Node sibs = mapNode.getFirstChild(); sibs != null;
@@ -670,10 +676,6 @@
             if ("tileset".equals(sibs.getNodeName())) {
                 map.addTileset(unmarshalTileset(sibs));
             }
-            else if ("property".equals(sibs.getNodeName())) {
-                mapProps.setProperty(getAttributeValue(sibs, "name"),
-                        getAttributeValue(sibs, "value"));
-            }
             else if ("layer".equals(sibs.getNodeName())) {
                 MapLayer layer = readLayer(sibs);
                 if (layer != null) {

Modified: trunk/src/tiled/io/xml/XMLMapWriter.java
===================================================================
--- trunk/src/tiled/io/xml/XMLMapWriter.java	2006-06-05 20:22:10 UTC (rev 657)
+++ trunk/src/tiled/io/xml/XMLMapWriter.java	2006-06-05 21:06:20 UTC (rev 658)
@@ -12,9 +12,9 @@
 
 package tiled.io.xml;
 
+import java.awt.Color;
 import java.awt.Image;
 import java.awt.Rectangle;
-import java.awt.Color;
 import java.io.*;
 import java.util.Enumeration;
 import java.util.Iterator;
@@ -24,9 +24,12 @@
 import java.util.zip.GZIPOutputStream;
 
 import tiled.core.*;
-import tiled.io.*;
+import tiled.io.ImageHelper;
+import tiled.io.MapWriter;
+import tiled.io.PluginLogger;
 import tiled.mapeditor.selection.SelectionLayer;
-import tiled.util.*;
+import tiled.util.Base64;
+import tiled.util.TiledConfiguration;
 
 /**
  * @version $Id$
@@ -102,60 +105,60 @@
     }
 
     private static void writeMap(Map map, XMLWriter w, String wp) throws IOException {
-        try {
-            w.startElement("map");
+        w.startElement("map");
 
-            w.writeAttribute("version", "0.99a");
+        w.writeAttribute("version", "0.99b");
 
-            switch (map.getOrientation()) {
-                case Map.MDO_ORTHO:
-                    w.writeAttribute("orientation", "orthogonal"); break;
-                case Map.MDO_ISO:
-                    w.writeAttribute("orientation", "isometric"); break;
-                case Map.MDO_OBLIQUE:
-                    w.writeAttribute("orientation", "oblique"); break;
-                case Map.MDO_HEX:
-                    w.writeAttribute("orientation", "hexagonal"); break;
-                case Map.MDO_SHIFTED:
-                    w.writeAttribute("orientation", "shifted"); break;
-            }
+        switch (map.getOrientation()) {
+            case Map.MDO_ORTHO:
+                w.writeAttribute("orientation", "orthogonal"); break;
+            case Map.MDO_ISO:
+                w.writeAttribute("orientation", "isometric"); break;
+            case Map.MDO_OBLIQUE:
+                w.writeAttribute("orientation", "oblique"); break;
+            case Map.MDO_HEX:
+                w.writeAttribute("orientation", "hexagonal"); break;
+            case Map.MDO_SHIFTED:
+                w.writeAttribute("orientation", "shifted"); break;
+        }
 
-            w.writeAttribute("width", map.getWidth());
-            w.writeAttribute("height", map.getHeight());
-            w.writeAttribute("tilewidth", map.getTileWidth());
-            w.writeAttribute("tileheight", map.getTileHeight());
+        w.writeAttribute("width", map.getWidth());
+        w.writeAttribute("height", map.getHeight());
+        w.writeAttribute("tilewidth", map.getTileWidth());
+        w.writeAttribute("tileheight", map.getTileHeight());
 
-            writeProperties(map.getProperties(), w);
+        writeProperties(map.getProperties(), w);
 
-            int firstgid = 1;
-            Iterator itr = map.getTilesets().iterator();
-            while (itr.hasNext()) {
-                TileSet tileset = (TileSet)itr.next();
-                tileset.setFirstGid(firstgid);
-                writeTilesetReference(tileset, w, wp);
-                firstgid += tileset.getMaxTileId() + 1;
-            }
+        int firstgid = 1;
+        Iterator itr = map.getTilesets().iterator();
+        while (itr.hasNext()) {
+            TileSet tileset = (TileSet)itr.next();
+            tileset.setFirstGid(firstgid);
+            writeTilesetReference(tileset, w, wp);
+            firstgid += tileset.getMaxTileId() + 1;
+        }
 
-            Iterator ml = map.getLayers();
-            while (ml.hasNext()) {
-                MapLayer layer = (MapLayer)ml.next();
-                writeMapLayer(layer, w);
-            }
-
-            w.endElement();
-        } catch (XMLWriterException e) {
-            e.printStackTrace();
+        Iterator ml = map.getLayers();
+        while (ml.hasNext()) {
+            MapLayer layer = (MapLayer)ml.next();
+            writeMapLayer(layer, w);
         }
+
+        w.endElement();
     }
 
     private static void writeProperties(Properties props, XMLWriter w) throws
-            IOException, XMLWriterException
+            IOException
     {
-        for (Enumeration keys = props.keys(); keys.hasMoreElements();) {
-            String key = (String)keys.nextElement();
-            w.startElement("property");
-            w.writeAttribute("name", key);
-            w.writeAttribute("value", props.getProperty(key));
+        if (!props.isEmpty()) {
+            w.startElement("properties");
+            for (Enumeration keys = props.keys(); keys.hasMoreElements();) {
+                String key = (String)keys.nextElement();
+                w.startElement("property");
+                w.writeAttribute("name", key);
+                w.writeAttribute("value", props.getProperty(key));
+                w.endElement();
+            }
             w.endElement();
         }
     }
@@ -168,156 +171,148 @@
     private static void writeTilesetReference(TileSet set, XMLWriter w, String wp)
         throws IOException {
 
-        try {
-            String source = set.getSource();
+        String source = set.getSource();
 
-            if (source == null) {
-                writeTileset(set, w, wp);
-            } else {
-                w.startElement("tileset");
-                try {
-                    w.writeAttribute("firstgid", set.getFirstGid());
-                    w.writeAttribute("source", source.substring(
-                                source.lastIndexOf(File.separatorChar) + 1));
-                    if (set.getBaseDir() != null) {
-                        w.writeAttribute("basedir", set.getBaseDir());
-                    }
-                } finally {
-                    w.endElement();
+        if (source == null) {
+            writeTileset(set, w, wp);
+        } else {
+            w.startElement("tileset");
+            try {
+                w.writeAttribute("firstgid", set.getFirstGid());
+                w.writeAttribute("source", source.substring(
+                            source.lastIndexOf(File.separatorChar) + 1));
+                if (set.getBaseDir() != null) {
+                    w.writeAttribute("basedir", set.getBaseDir());
                 }
+            } finally {
+                w.endElement();
             }
-        } catch (XMLWriterException e) {
-            e.printStackTrace();
         }
     }
 
     private static void writeTileset(TileSet set, XMLWriter w, String wp)
         throws IOException {
 
-        try {
-            String tilebmpFile = set.getTilebmpFile();
-            String name = set.getName();
+        String tilebmpFile = set.getTilebmpFile();
+        String name = set.getName();
 
-            w.startElement("tileset");
+        w.startElement("tileset");
 
-            if (name != null) {
-                w.writeAttribute("name", name);
-            }
+        if (name != null) {
+            w.writeAttribute("name", name);
+        }
 
-            w.writeAttribute("firstgid", set.getFirstGid());
+        w.writeAttribute("firstgid", set.getFirstGid());
 
-            if (tilebmpFile != null) {
-                w.writeAttribute("tilewidth", set.getTileWidth());
-                w.writeAttribute("tileheight", set.getTileHeight());
+        if (tilebmpFile != null) {
+            w.writeAttribute("tilewidth", set.getTileWidth());
+            w.writeAttribute("tileheight", set.getTileHeight());
 
-                int tileSpacing = set.getTileSpacing();
-                if (tileSpacing != 0) {
-                    w.writeAttribute("spacing", tileSpacing);
-                }
+            int tileSpacing = set.getTileSpacing();
+            if (tileSpacing != 0) {
+                w.writeAttribute("spacing", tileSpacing);
             }
+        }
 
-            if (set.getBaseDir() != null) {
-                w.writeAttribute("basedir", set.getBaseDir());
-            }
+        if (set.getBaseDir() != null) {
+            w.writeAttribute("basedir", set.getBaseDir());
+        }
 
-            if (tilebmpFile != null) {
-                w.startElement("image");
-                w.writeAttribute("source", getRelativePath(wp, tilebmpFile));
+        if (tilebmpFile != null) {
+            w.startElement("image");
+            w.writeAttribute("source", getRelativePath(wp, tilebmpFile));
 
-                Color trans = set.getTransparentColor();
-                if (trans != null) {
-                    w.writeAttribute("trans", Integer.toHexString(
-                                trans.getRGB()).substring(2));
-                }
-                w.endElement();
+            Color trans = set.getTransparentColor();
+            if (trans != null) {
+                w.writeAttribute("trans", Integer.toHexString(
+                            trans.getRGB()).substring(2));
+            }
+            w.endElement();
 
-                // Write tile properties when necessary.
-                Iterator tileIterator = set.iterator();
+            // Write tile properties when necessary.
+            Iterator tileIterator = set.iterator();
 
-                while (tileIterator.hasNext()) {
-                    Tile tile = (Tile) tileIterator.next();
-                    // todo: move the null check back into the iterator?
-                    if (tile != null && !tile.getProperties().isEmpty()) {
-                        w.startElement("tile");
-                        w.writeAttribute("id", tile.getId());
-                        writeProperties(tile.getProperties(), w);
-                        w.endElement();
-                    }
+            while (tileIterator.hasNext()) {
+                Tile tile = (Tile) tileIterator.next();
+                // todo: move the null check back into the iterator?
+                if (tile != null && !tile.getProperties().isEmpty()) {
+                    w.startElement("tile");
+                    w.writeAttribute("id", tile.getId());
+                    writeProperties(tile.getProperties(), w);
+                    w.endElement();
                 }
-            } else {
-                // Embedded tileset
-                Preferences prefs = TiledConfiguration.node("saving");
+            }
+        } else {
+            // Embedded tileset
+            Preferences prefs = TiledConfiguration.node("saving");
 
-                boolean embedImages = prefs.getBoolean("embedImages", true);
-                boolean tileSetImages = prefs.getBoolean("tileSetImages", false);
+            boolean embedImages = prefs.getBoolean("embedImages", true);
+            boolean tileSetImages = prefs.getBoolean("tileSetImages", false);
 
-                if (tileSetImages) {
-                    Enumeration ids = set.getImageIds();
-                    while (ids.hasMoreElements()) {
-                        String id = (String)ids.nextElement();
-                        w.startElement("image");
-                        w.writeAttribute("format", "png");
-                        w.writeAttribute("id", id);
-                        w.startElement("data");
-                        w.writeAttribute("encoding", "base64");
-                        w.writeCDATA(new String(Base64.encode(
-                                        ImageHelper.imageToPNG(
-                                            set.getImageById(Integer.parseInt(id))))));
-                        w.endElement();
-                        w.endElement();
-                    }
-                } else if (!embedImages) {
-                    String imgSource =
-                            prefs.get("tileImagePrefix", "tile") + "set.png";
-
+            if (tileSetImages) {
+                Enumeration ids = set.getImageIds();
+                while (ids.hasMoreElements()) {
+                    String id = (String)ids.nextElement();
                     w.startElement("image");
-                    w.writeAttribute("source", imgSource);
-
-                    String tilesetFilename = wp.substring(0,
-                            wp.lastIndexOf(File.separatorChar) + 1) + imgSource;
-                    FileOutputStream fw = new FileOutputStream(new File(
-                                tilesetFilename));
-                    //byte[] data = ImageHelper.imageToPNG(setImage);
-                    //fw.write(data, 0, data.length);
+                    w.writeAttribute("format", "png");
+                    w.writeAttribute("id", id);
+                    w.startElement("data");
+                    w.writeAttribute("encoding", "base64");
+                    w.writeCDATA(new String(Base64.encode(
+                                    ImageHelper.imageToPNG(
+                                        set.getImageById(Integer.parseInt(id))))));
                     w.endElement();
-
-                    fw.close();
+                    w.endElement();
                 }
+            } else if (!embedImages) {
+                String imgSource =
+                        prefs.get("tileImagePrefix", "tile") + "set.png";
 
-                // Check to see if there is a need to write tile elements
-                Iterator tileIterator = set.iterator();
-                boolean needWrite = !set.isOneForOne();
+                w.startElement("image");
+                w.writeAttribute("source", imgSource);
 
-                if (embedImages) {
-                    needWrite = true;
-                } else {
-                    while (tileIterator.hasNext()) {
-                        Tile tile = (Tile)tileIterator.next();
-                        if (!tile.getProperties().isEmpty()) {
-                            needWrite = true;
-                            break;
-                            // As long as one has properties, they all
-                            // need to be written.
-                            // TODO: This shouldn't be necessary
-                        }
+                String tilesetFilename = wp.substring(0,
+                        wp.lastIndexOf(File.separatorChar) + 1) + imgSource;
+                FileOutputStream fw = new FileOutputStream(new File(
+                            tilesetFilename));
+                //byte[] data = ImageHelper.imageToPNG(setImage);
+                //fw.write(data, 0, data.length);
+                w.endElement();
+
+                fw.close();
+            }
+
+            // Check to see if there is a need to write tile elements
+            Iterator tileIterator = set.iterator();
+            boolean needWrite = !set.isOneForOne();
+
+            if (embedImages) {
+                needWrite = true;
+            } else {
+                while (tileIterator.hasNext()) {
+                    Tile tile = (Tile)tileIterator.next();
+                    if (!tile.getProperties().isEmpty()) {
+                        needWrite = true;
+                        break;
+                        // As long as one has properties, they all
+                        // need to be written.
+                        // TODO: This shouldn't be necessary
                     }
                 }
+            }
 
-                if (needWrite) {
-                    tileIterator = set.iterator();
-                    while (tileIterator.hasNext()) {
-                        Tile tile = (Tile)tileIterator.next();
-                        // todo: move this check back into the iterator?
-                        if (tile != null) {
-                            writeTile(tile, w);
-                        }
+            if (needWrite) {
+                tileIterator = set.iterator();
+                while (tileIterator.hasNext()) {
+                    Tile tile = (Tile)tileIterator.next();
+                    // todo: move this check back into the iterator?
+                    if (tile != null) {
+                        writeTile(tile, w);
                     }
                 }
             }
-            w.endElement();
-        } catch (XMLWriterException e) {
-            e.printStackTrace();
         }
+        w.endElement();
     }
 
     private static void writeObjectGroup(ObjectGroup o, XMLWriter w)
@@ -335,206 +330,190 @@
      * gids to be written to the layer data.
      */
     private static void writeMapLayer(MapLayer l, XMLWriter w) throws IOException {
-        try {
-            Preferences prefs = TiledConfiguration.node("saving");
-            boolean encodeLayerData =
-                    prefs.getBoolean("encodeLayerData", true);
-            boolean compressLayerData =
-                    prefs.getBoolean("layerCompression", true) &&
-                            encodeLayerData;
+        Preferences prefs = TiledConfiguration.node("saving");
+        boolean encodeLayerData =
+                prefs.getBoolean("encodeLayerData", true);
+        boolean compressLayerData =
+                prefs.getBoolean("layerCompression", true) &&
+                        encodeLayerData;
 
-            Rectangle bounds = l.getBounds();
+        Rectangle bounds = l.getBounds();
 
-            if (l.getClass() == SelectionLayer.class) {
-                w.startElement("selection");
-            } else if(l instanceof ObjectGroup){
-                w.startElement("objectgroup");
-            } else {
-                w.startElement("layer");
-            }
+        if (l.getClass() == SelectionLayer.class) {
+            w.startElement("selection");
+        } else if(l instanceof ObjectGroup){
+            w.startElement("objectgroup");
+        } else {
+            w.startElement("layer");
+        }
 
-            w.writeAttribute("name", l.getName());
-            w.writeAttribute("width", bounds.width);
-            w.writeAttribute("height", bounds.height);
-            if (bounds.x != 0) {
-                w.writeAttribute("xoffset", bounds.x);
-            }
-            if (bounds.y != 0) {
-                w.writeAttribute("yoffset", bounds.y);
-            }
+        w.writeAttribute("name", l.getName());
+        w.writeAttribute("width", bounds.width);
+        w.writeAttribute("height", bounds.height);
+        if (bounds.x != 0) {
+            w.writeAttribute("xoffset", bounds.x);
+        }
+        if (bounds.y != 0) {
+            w.writeAttribute("yoffset", bounds.y);
+        }
 
-            if (!l.isVisible()) {
-                w.writeAttribute("visible", "0");
-            }
-            if (l.getOpacity() < 1.0f) {
-                w.writeAttribute("opacity", l.getOpacity());
-            }
+        if (!l.isVisible()) {
+            w.writeAttribute("visible", "0");
+        }
+        if (l.getOpacity() < 1.0f) {
+            w.writeAttribute("opacity", l.getOpacity());
+        }
 
-            writeProperties(l.getProperties(), w);
+        writeProperties(l.getProperties(), w);
 
-            if (l instanceof ObjectGroup){
-                writeObjectGroup((ObjectGroup)l, w);
-            } else {
-                w.startElement("data");
-                if (encodeLayerData) {
-                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                    OutputStream out;
+        if (l instanceof ObjectGroup){
+            writeObjectGroup((ObjectGroup)l, w);
+        } else {
+            w.startElement("data");
+            if (encodeLayerData) {
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                OutputStream out;
 
-                    w.writeAttribute("encoding", "base64");
+                w.writeAttribute("encoding", "base64");
 
-                    if (compressLayerData) {
-                        w.writeAttribute("compression", "gzip");
-                        out = new GZIPOutputStream(baos);
-                    } else {
-                        out = baos;
-                    }
+                if (compressLayerData) {
+                    w.writeAttribute("compression", "gzip");
+                    out = new GZIPOutputStream(baos);
+                } else {
+                    out = baos;
+                }
 
-                    for (int y = 0; y < l.getHeight(); y++) {
-                        for (int x = 0; x < l.getWidth(); x++) {
-                            Tile tile = ((TileLayer)l).getTileAt(x, y);
-                            int gid = 0;
+                for (int y = 0; y < l.getHeight(); y++) {
+                    for (int x = 0; x < l.getWidth(); x++) {
+                        Tile tile = ((TileLayer)l).getTileAt(x, y);
+                        int gid = 0;
 
-                            if (tile != null) {
-                                gid = tile.getGid();
-                            }
-
-                            out.write(gid       & LAST_BYTE);
-                            out.write(gid >> 8  & LAST_BYTE);
-                            out.write(gid >> 16 & LAST_BYTE);
-                            out.write(gid >> 24 & LAST_BYTE);
+                        if (tile != null) {
+                            gid = tile.getGid();
                         }
-                    }
 
-                    if (compressLayerData) {
-                        ((GZIPOutputStream)out).finish();
+                        out.write(gid       & LAST_BYTE);
+                        out.write(gid >> 8  & LAST_BYTE);
+                        out.write(gid >> 16 & LAST_BYTE);
+                        out.write(gid >> 24 & LAST_BYTE);
                     }
+                }
 
-                    w.writeCDATA(new String(Base64.encode(baos.toByteArray())));
-                } else {
-                    for (int y = 0; y < l.getHeight(); y++) {
-                        for (int x = 0; x < l.getWidth(); x++) {
-                            Tile tile = ((TileLayer)l).getTileAt(x, y);
-                            int gid = 0;
+                if (compressLayerData) {
+                    ((GZIPOutputStream)out).finish();
+                }
 
-                            if (tile != null) {
-                                gid = tile.getGid();
-                            }
+                w.writeCDATA(new String(Base64.encode(baos.toByteArray())));
+            } else {
+                for (int y = 0; y < l.getHeight(); y++) {
+                    for (int x = 0; x < l.getWidth(); x++) {
+                        Tile tile = ((TileLayer)l).getTileAt(x, y);
+                        int gid = 0;
 
-                            w.startElement("tile");
-                            w.writeAttribute("gid", gid);
-                            w.endElement();
+                        if (tile != null) {
+                            gid = tile.getGid();
                         }
+
+                        w.startElement("tile");
+                        w.writeAttribute("gid", gid);
+                        w.endElement();
                     }
                 }
-                w.endElement();
             }
             w.endElement();
-        } catch (XMLWriterException e) {
-            e.printStackTrace();
         }
+        w.endElement();
     }
 
     private static void writeTile(Tile tile, XMLWriter w) throws IOException {
-        try {
-            w.startElement("tile");
+        w.startElement("tile");
 
-            int tileId = tile.getId();
+        int tileId = tile.getId();
 
-            w.writeAttribute("id", tileId);
+        w.writeAttribute("id", tileId);
 
-            //if (groundHeight != getHeight()) {
-            //    w.writeAttribute("groundheight", "" + groundHeight);
-            //}
+        //if (groundHeight != getHeight()) {
+        //    w.writeAttribute("groundheight", "" + groundHeight);
+        //}
 
-            writeProperties(tile.getProperties(), w);
+        writeProperties(tile.getProperties(), w);
 
-            Image tileImage = tile.getImage();
+        Image tileImage = tile.getImage();
 
-            Preferences prefs = TiledConfiguration.node("saving");
+        Preferences prefs = TiledConfiguration.node("saving");
 
-            boolean embedImages = prefs.getBoolean("embedImages", true);
-            boolean tileSetImages = prefs.getBoolean("tileSetImages", false);
+        boolean embedImages = prefs.getBoolean("embedImages", true);
+        boolean tileSetImages = prefs.getBoolean("tileSetImages", false);
 
-            // Write encoded data
-            if (tileImage != null && !tileSetImages) {
-                if (embedImages && !tileSetImages) {
-                    w.startElement("image");
-                    w.writeAttribute("format", "png");
-                    w.startElement("data");
-                    w.writeAttribute("encoding", "base64");
-                    w.writeCDATA(new String(Base64.encode(
-                                    ImageHelper.imageToPNG(tileImage))));
-                    w.endElement();
-                    w.endElement();
-                } else if (tileSetImages) {
-                    w.startElement("image");
-                    w.writeAttribute("id", tile.getImageId());
-                    w.endElement();
-                } else {
-                    String prefix = prefs.get("tileImagePrefix", "tile");
-                    String filename = prefs.get("maplocation", "") +
-                        prefix + tileId + ".png";
-                    w.startElement("image");
-                    w.writeAttribute("source", prefix + tileId + ".png");
-                    FileOutputStream fw = new FileOutputStream(
-                            new File(filename));
-                    byte[] data = ImageHelper.imageToPNG(tileImage);
-                    fw.write(data, 0, data.length);
-                    fw.close();
-                    w.endElement();
-                }
+        // Write encoded data
+        if (tileImage != null && !tileSetImages) {
+            if (embedImages && !tileSetImages) {
+                w.startElement("image");
+                w.writeAttribute("format", "png");
+                w.startElement("data");
+                w.writeAttribute("encoding", "base64");
+                w.writeCDATA(new String(Base64.encode(
+                                ImageHelper.imageToPNG(tileImage))));
+                w.endElement();
+                w.endElement();
+            } else if (tileSetImages) {
+                w.startElement("image");
+                w.writeAttribute("id", tile.getImageId());
+                w.endElement();
+            } else {
+                String prefix = prefs.get("tileImagePrefix", "tile");
+                String filename = prefs.get("maplocation", "") +
+                    prefix + tileId + ".png";
+                w.startElement("image");
+                w.writeAttribute("source", prefix + tileId + ".png");
+                FileOutputStream fw = new FileOutputStream(
+                        new File(filename));
+                byte[] data = ImageHelper.imageToPNG(tileImage);
+                fw.write(data, 0, data.length);
+                fw.close();
+                w.endElement();
             }
+        }
 
-            if (tile instanceof AnimatedTile) {
-                writeAnimation(((AnimatedTile)tile).getSprite(), w);
-            }
-
-            w.endElement();
-        } catch (XMLWriterException e) {
-            e.printStackTrace();
+        if (tile instanceof AnimatedTile) {
+            writeAnimation(((AnimatedTile)tile).getSprite(), w);
         }
+
+        w.endElement();
     }
 
     private static void writeAnimation(Sprite s, XMLWriter w) throws IOException {
-        try {
-            w.startElement("animation");
-            for (int k = 0; k < s.getTotalKeys(); k++) {
-                Sprite.KeyFrame key = s.getKey(k);
-                w.startElement("keyframe");
-                w.writeAttribute("name", key.getName());
-                for (int it = 0; it < key.getTotalFrames(); it++) {
-                    Tile stile = key.getFrame(it);
-                    w.startElement("tile");
-                    w.writeAttribute("gid", stile.getGid());
-                    w.endElement();
-                }
+        w.startElement("animation");
+        for (int k = 0; k < s.getTotalKeys(); k++) {
+            Sprite.KeyFrame key = s.getKey(k);
+            w.startElement("keyframe");
+            w.writeAttribute("name", key.getName());
+            for (int it = 0; it < key.getTotalFrames(); it++) {
+                Tile stile = key.getFrame(it);
+                w.startElement("tile");
+                w.writeAttribute("gid", stile.getGid());
                 w.endElement();
             }
             w.endElement();
-        } catch (XMLWriterException e) {
-            e.printStackTrace();
         }
+        w.endElement();
     }
 
     private static void writeObject(MapObject m, ObjectGroup o, XMLWriter w)
         throws IOException
     {
-        try {
-            Rectangle b = o.getBounds();
-            w.startElement("object");
-            w.writeAttribute("x", m.getX() + b.x);
-            w.writeAttribute("y", m.getY() + b.y);
-            w.writeAttribute("type", m.getType());
-            if (m.getSource() != null) {
-                w.writeAttribute("source", m.getSource());
-            }
+        Rectangle b = o.getBounds();
+        w.startElement("object");
+        w.writeAttribute("x", m.getX() + b.x);
+        w.writeAttribute("y", m.getY() + b.y);
+        w.writeAttribute("type", m.getType());
+        if (m.getSource() != null) {
+            w.writeAttribute("source", m.getSource());
+        }
 
-            writeProperties(m.getProperties(), w);
+        writeProperties(m.getProperties(), w);
 
-            w.endElement();
-        } catch (XMLWriterException e) {
-            e.printStackTrace();
-        }
+        w.endElement();
     }
 
     /**

Modified: trunk/src/tiled/io/xml/XMLWriterException.java
===================================================================
--- trunk/src/tiled/io/xml/XMLWriterException.java	2006-06-05 20:22:10 UTC (rev 657)
+++ trunk/src/tiled/io/xml/XMLWriterException.java	2006-06-05 21:06:20 UTC (rev 658)
@@ -5,15 +5,17 @@
  *  it under the terms of the GNU General Public License as published by
  *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- * 
+ *
  *  Adam Turk <aturk at biggeruniverse.com>
  *  Bjorn Lindeijer <b.lindeijer at xs4all.nl>
  */
 
 package tiled.io.xml;
 
-
-public class XMLWriterException extends Exception
+/**
+ * @version $Id$
+ */
+public class XMLWriterException extends RuntimeException
 {
     public XMLWriterException(String error) {
         super(error);




More information about the tiled-commit mailing list