The googlemap extension tag is googlemap, not googlemaps.
[philipp/winterrodeln/wrpylib.git] / wrpylib / mwmarkup.py
index 96e704998c0953567f770703d0aae5ff5260d78e..30b2f654fa4236190a17fb3b631a116a2c304365 100644 (file)
@@ -106,12 +106,14 @@ def create_template(template_title, anonym_params=[], named_param_keys=[], named
     return pipe_char.join(parts) + end_char
 
 
-def parse_googlemap(wikitext):
+def parse_googlemap(wikitext, detail=False):
     """Parses the (unicode) u'<googlemap ...>content</googlemap>' of the googlemap extension
-    out of a page. If wikitext does not contain the googlemaps extension text None is returned.
+    out of a page. If wikitext does not contain the googlemap extension text None is returned.
     If the googlemap contains invalid formatted lines, a RuntimeError is raised.
 
     :param wikitext: wikitext containing the template. Example:
+    :param detail: bool. If True, start and end position of <googlemap>...</googlemap> is
+        returned additionally.
 
     wikitext = '''
     <googlemap version="0.9" lat="47.113291" lon="11.272337" zoom="15">
@@ -132,7 +134,8 @@ def parse_googlemap(wikitext):
         zoom is the google zoom level as integer or None if not provided
         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 (lot, lat, symbol, title) tuples.
+        If detail is True, (center, zoom, coords, paths, start, end) is returned."""
 
     def is_coord(line):
         """Returns True if the line contains a coordinate."""
@@ -156,9 +159,11 @@ def parse_googlemap(wikitext):
         if not match is None: return (float(match.group(2)), float(match.group(1)), None, None)
         return RuntimeError(u'Could not parse line ' + line)
 
-    regexp = re.compile(u"(<googlemap[^>]*>)(.*)(</googlemap>)", re.DOTALL)
+    regexp = re.compile(u"(<googlemap[^>]*>)(.*?)(</googlemap>)", re.DOTALL)
     match = regexp.search(wikitext)
     if match is None: return None
+    start = match.start()
+    end = match.end()
     content = match.group(2)
     gm = xml.etree.ElementTree.XML((match.group(1)+match.group(3)).encode('UTF8'))
     zoom = gm.get('zoom')
@@ -211,5 +216,7 @@ def parse_googlemap(wikitext):
             continue
 
         raise RuntimeError(u'Unknown line syntax: ' + line)
+    if detail:
+        return (center, zoom, coords, paths, start, end)
     return (center, zoom, coords, paths)