parse_googlemap now optionally returns the start and end position of the found map.
authorphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Sun, 8 Sep 2013 21:12:50 +0000 (21:12 +0000)
committerphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Sun, 8 Sep 2013 21:12:50 +0000 (21:12 +0000)
git-svn-id: http://www.winterrodeln.org/svn/wrpylib/trunk@1535 7aebc617-e5e2-0310-91dc-80fb5f6d2477

tests/test_mwmarkup.py
wrpylib/mwmarkup.py

index b8a12a2d7bf39082c2c5e75c861e2d08c9ab4aa8..df3eb01a3cf3499b3cbb5e72ad5055bd1b26c748 100644 (file)
@@ -110,3 +110,9 @@ def test_parse_googlemap():
             (11.269322, 47.113421, None, None),
             (11.269979, 47.11277, None, None),
             (11.271119, 47.112408, None, None)])]
+    center, zoom, coords, paths, start, end = wrpylib.mwmarkup.parse_googlemap(wikitext, detail=True)
+    assert start == 5
+    assert end == 344
+    result = wrpylib.mwmarkup.parse_googlemap(wikitext.replace('<googlemap', '|googlemap'), detail=True)
+    assert result is None
+
index 96e704998c0953567f770703d0aae5ff5260d78e..dbe9baeda64b321939c3fb9d09561a2bb4fe8535 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.
     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 <googlemaps>...</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."""
@@ -159,6 +162,8 @@ def parse_googlemap(wikitext):
     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)