[Pywikipedia-l] SVN: [5747] trunk/pywikipedia/reflinks.py

nicdumz at svn.wikimedia.org nicdumz at svn.wikimedia.org
Wed Jul 23 15:37:34 UTC 2008


Revision: 5747
Author:   nicdumz
Date:     2008-07-23 15:37:34 +0000 (Wed, 23 Jul 2008)

Log Message:
-----------
* Replace all the named refs when a name is changed
* Regex fix

Modified Paths:
--------------
    trunk/pywikipedia/reflinks.py

Modified: trunk/pywikipedia/reflinks.py
===================================================================
--- trunk/pywikipedia/reflinks.py	2008-07-21 20:35:21 UTC (rev 5746)
+++ trunk/pywikipedia/reflinks.py	2008-07-23 15:37:34 UTC (rev 5747)
@@ -229,7 +229,7 @@
     """
     def __init__(self):
         # Match references
-        self.REFS = re.compile(u'(?i)<ref(?P<name>[^>]*)>(?P<content>.*?)</ref>')
+        self.REFS = re.compile(u'(?i)<ref(?P<name>[^>/]*)>(?P<content>.*?)</ref>')
         self.NAMES = re.compile(u'(?i).*name\s*=\s*(?P<quote>"?)\s*(?P<name>.*?)\s*(?P=quote).*')
         self.GROUPS = re.compile(u'(?i).*group\s*=\s*(?P<quote>"?)\s*(?P<group>.*?)\s*(?P=quote).*')
 
@@ -240,6 +240,8 @@
         #   values are [name, [list of full ref matches]]
         foundRefs = {}
         foundRefNames = []
+        # Replace key by value
+        namedRepl = {}
 
         for match in self.REFS.finditer(text):
             content = match.group('content')
@@ -257,12 +259,14 @@
                 v[1].append(match.group())
             else:
                 v = [None, [match.group()]]
-            if not v[0]:
-                n = self.NAMES.match(name)
-                if n:
-                    n = n.group('name')
+            n = self.NAMES.match(name)
+            if n:
+                n = n.group('name')
+                if v[0]:
+                    namedRepl[n] = v[0]
+                else:
                     v[0] = n
-                    foundRefNames.append(n)
+                foundRefNames.append(n)
             groupdict[content] = v
     
         id = 1
@@ -294,6 +298,10 @@
                 for ref in v[1][1:]:
                     end = end.replace(ref, unnamed)
                 text = header + end 
+        
+        for (k,v) in namedRepl.iteritems():
+            # TODO : Support ref groups
+            text = re.sub(u'<ref name\s*=\s*(?P<quote>"?)\s*%s\s*(?P=quote)\s*/>' % k, u'<ref name="%s" />' % v, text)
         return text        
 
 class ReferencesRobot:





More information about the Pywikipedia-l mailing list