diff options
author | Andrei Karas <akaras@inbox.ru> | 2011-01-22 20:12:38 +0200 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2011-01-22 20:23:12 +0200 |
commit | 525e672fb9b1ea5cf6e8398cb9119ad6398934b9 (patch) | |
tree | 93e52a8b94249f8466e936aa4e4061c86cb08b0a | |
parent | 29e360742bf6f9ce4b0c30d895a6c5df2b8bd592 (diff) | |
download | evol-tools-525e672fb9b1ea5cf6e8398cb9119ad6398934b9.tar.gz evol-tools-525e672fb9b1ea5cf6e8398cb9119ad6398934b9.tar.bz2 evol-tools-525e672fb9b1ea5cf6e8398cb9119ad6398934b9.tar.xz evol-tools-525e672fb9b1ea5cf6e8398cb9119ad6398934b9.zip |
testxml: add additional checking for map layers.
-rwxr-xr-x | testxml/testxml.py | 62 |
1 files changed, 59 insertions, 3 deletions
diff --git a/testxml/testxml.py b/testxml/testxml.py index 4f6cedb..e10ef31 100755 --- a/testxml/testxml.py +++ b/testxml/testxml.py @@ -1,12 +1,14 @@ #! /usr/bin/env python2.6 # -*- coding: utf8 -*- +import base64 import os import re import xml import ogg.vorbis from xml.dom import minidom from PIL import Image +import zlib filt = re.compile(".+[.](xml|tmx)", re.IGNORECASE) filtmaps = re.compile(".+[.]tmx", re.IGNORECASE) @@ -975,10 +977,31 @@ def testMap(file, path): if layers == None or len(layers) == 0: showMsgFile(file, "map dont have layers", True) return + + fringe = None + collision = None + lowLayers = [] + overLayers = [] + beforeFringe = True + for layer in layers: name = readAttr(layer, "name", None, "layer dont have name", True) if name == None: continue + if name.lower() == "fringe": + if fringe is not None: + showMsgFile(file, "duplicate Fringe layer", True) + fringe = layer + beforeFringe = False + elif name.lower() == "collision": + if collision is not None: + showMsgFile(file, "duplicate Collision layer", True) + collision = layer + elif beforeFringe == True: + lowLayers.append(layer) + else: + overLayers.append(layer) + width = readAttrI(layer, "width", 0, "error: missing layer width: " + name + \ ", " + file, True) height = readAttrI(layer, "height", 0, "error: missing layer height: " + name + \ @@ -993,8 +1016,41 @@ def testMap(file, path): showMsgFile(file, "layer height " + str(height) + " more then map height " + \ str(mapHeight) + ": " + name, True) + testLayer(file, layer, name, width, height) + + if fringe == None: + showMsgFile(file, "missing fringe layer", True) + if collision == None: + showMsgFile(file, "missing collision layer", True) + if len(lowLayers) < 1: + showMsgFile(file, "missing low layers", False) + if len(overLayers) < 1: + showMsgFile(file, "missing over layers", False) +def testLayer(file, node, name, width, height): + datas = node.getElementsByTagName("data") + if datas == None or len(datas) == 0: + showMsgFile(file, "missing data tag in layer: " + name, True) + return + for data in datas: + try: + encoding = data.attributes["encoding"].value + except: + encoding = "" + try: + compression = data.attributes["compression"].value + except: + compression = "" + if encoding == "base64": + if compression != "gzip": + showMsgFile(file, "invalid compression " + compression + \ + " in layer: " + name, True) + continue + #todo here need oncompress and check layer + #str = data.childNodes[0].data.strip() + #str = str.decode('base64') + #zlib.decompress(str) def testMaps(dir): @@ -1039,8 +1095,8 @@ detectClientData([".", "..", parentDir]) print "Checking xml file syntax" enumDirs(parentDir) loadPaths() -testItems("/items.xml", iconsDir) -testMonsters("/monsters.xml") -testNpcs("/npcs.xml") +#testItems("/items.xml", iconsDir) +#testMonsters("/monsters.xml") +#testNpcs("/npcs.xml") testMaps(mapsDir) showFooter() |