Now the width and height of the map are parsed from <googlemap> as well.
[philipp/winterrodeln/wrpylib.git] / wrpylib / mwmarkup.py
index 026e4cde0da070cea00c38f56a0943faca1ba33e..ace7362f78bd0322fa3d8eddbf6b8bb74bf6b962 100644 (file)
@@ -175,12 +175,12 @@ def parse_googlemap(wikitext):
     47.112408,11.271119
     </googlemap>
     '''
-    :returns: the tuple (center, zoom, coords, paths).
-        center is the tuple (lon, lat) of the google maps or (None, None) if not provided
-        zoom is the google zoom level as integer or None if not provided
+    :returns: The tuple (attributes, coords, paths) is returned.
+        attributes is a dict that contains the attribues that are present
+        (e.g. lon, lat, zoom, width, height) converted to float (lon, lat) or int.
         coords is a list of (lon, lat, symbol, title) tuples.
         paths is a list of (style, coords) tuples.
-        coords is again a list of (lot, lat, symbol, title) tuples."""
+        coords is again a list of (lon, lat, symbol, title) tuples."""
 
     def is_coord(line):
         """Returns True if the line contains a coordinate."""
@@ -206,7 +206,7 @@ def parse_googlemap(wikitext):
 
     start, content, endtag, end = find_tag(wikitext, 'googlemap')
     if start is None:
-        raise ParseError('<googlemap> tag not found.')
+        raise ParseError(u'<googlemap> tag not found.')
     if content is None:
         xml_only = wikitext[start:endtag]
     else:
@@ -216,15 +216,21 @@ def parse_googlemap(wikitext):
         gm = xml.etree.ElementTree.XML(xml_only.encode('UTF8'))
     except xml.etree.ElementTree.ParseError as e:
         row, column = e.position
-        raise ParseError("XML parse error in <googlemap ...>.")
-    zoom = gm.get('zoom')
-    lon = gm.get('lon')
-    lat = gm.get('lat')
-    if not zoom is None: zoom = int(zoom)
-    if not lon is None: lon = float(lon)
-    if not lat is None: lat = float(lat)
-    center = (lon, lat)
+        raise ParseError(u"XML parse error in <googlemap ...>.")
 
+    # parse attributes
+    attributes = {}
+    try:
+        for key in ['lon', 'lat']:
+            if gm.get(key) is not None:
+                attributes[key] = float(gm.get(key))
+        for key in ['zoom', 'width', 'height']:
+            if gm.get(key) is not None:
+                attributes[key] = int(gm.get(key))
+    except ValueError as error:
+        raise ParseError(u'Error at parsing attribute {0} of <googlemap>: {1}'.format(key, unicode(error)))
+
+    # parse points and lines
     coords = []
     paths = []
     lines = wikitext[content:endtag].split("\n")
@@ -267,5 +273,6 @@ def parse_googlemap(wikitext):
             continue
 
         raise ParseError(u'Unknown line syntax: ' + line)
-    return (center, zoom, coords, paths)
+
+    return (attributes, coords, paths)