Revision: 7834
Author:   xqt
Date:     2009-12-28 10:32:45 +0000 (Mon, 28 Dec 2009)

Log Message:
-----------
Fix for #2920675

Modified Paths:
--------------
    trunk/pywikipedia/cosmetic_changes.py
    trunk/pywikipedia/wikipedia.py

Modified: trunk/pywikipedia/cosmetic_changes.py
===================================================================
--- trunk/pywikipedia/cosmetic_changes.py       2009-12-28 09:24:21 UTC (rev 
7833)
+++ trunk/pywikipedia/cosmetic_changes.py       2009-12-28 10:32:45 UTC (rev 
7834)
@@ -186,14 +186,43 @@
 
 nn_iw_msg = u'<!--interwiki (no, sv, da first; then other languages 
alphabetically by name)-->'
 
+# This is from interwiki.py;
+# move it to family file and implement global instances
+moved_links = {
+    'ca' : (u'ús de la plantilla', u'/ús'),
+    'cs' : (u'dokumentace',   u'/doc'),
+    'de' : (u'dokumentation', u'/Meta'),
+    'en' : ([u'documentation',
+             u'template documentation',
+             u'template doc',
+             u'doc',
+             u'documentation, template'], u'/doc'),
+    'es' : ([u'documentación', u'documentación de plantilla'], u'/doc'),
+    'fr' : (u'/documentation', u'/Documentation'),
+    'hu' : (u'sablondokumentáció', u'/doc'),
+    'id' : (u'template doc',  u'/doc'),
+    'ja' : (u'documentation', u'/doc'),
+    'ka' : (u'თარგის ინფო',   u'/ინფო'),
+    'ko' : (u'documentation', u'/설명문서'),
+    'ms' : (u'documentation', u'/doc'),
+    'pl' : (u'dokumentacja',  u'/opis'),
+    'pt' : ([u'documentação', u'/doc'],  u'/doc'),
+    'ro' : (u'documentaţie',  u'/doc'),
+    'ru' : (u'doc',           u'/doc'),
+    'sv' : (u'dokumentation', u'/dok'),
+    'vi' : (u'documentation', u'/doc'),
+    'zh' : ([u'documentation', u'doc'], u'/doc'),
+}
+
 class CosmeticChangesToolkit:
-    def __init__(self, site, debug=False, redirect=False, namespace=None):
+    def __init__(self, site, debug=False, redirect=False, namespace=None, 
pageTitle=None):
         self.site = site
         self.debug = debug
         self.redirect = redirect
         self.namespace = namespace
         self.template = (self.namespace == 10)
         self.talkpage = self.namespace >= 0 and self.namespace % 2 == 1
+        self.title = pageTitle
 
     def change(self, text):
         """
@@ -260,7 +289,17 @@
             categories = pywikibot.getCategoryLinks(text, site = self.site)
 
         if not self.talkpage:# and pywikibot.calledModuleName() <> 'interwiki':
-            interwikiLinks = pywikibot.getLanguageLinks(text, insite = 
self.site)
+            subpage = False
+            if self.template:
+                loc = None
+                try:
+                    tmpl, loc = moved_links[self.site.lang]
+                    del tmpl
+                except KeyError:
+                    pass
+                if loc != None and loc in self.title:
+                    subpage = True
+            interwikiLinks = pywikibot.getLanguageLinks(text, 
insite=self.site, template_subpage=subpage)
 
             # Removing the interwiki
             text = pywikibot.removeLanguageLinks(text, site = self.site)
@@ -301,7 +340,7 @@
                     pywikibot.output(u'%s' %element.strip())
         # Adding the interwiki
         if interwikiLinks != None:
-            text = pywikibot.replaceLanguageLinks(text, interwikiLinks, site = 
self.site, template = self.template)
+            text = pywikibot.replaceLanguageLinks(text, interwikiLinks, site = 
self.site, template = self.template, template_subpage = subpage)
         return text
 
     def translateAndCapitalizeNamespaces(self, text):
@@ -560,7 +599,7 @@
             # Show the title of the page we're working on.
             # Highlight the title in purple.
             pywikibot.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % 
page.title())
-            ccToolkit = CosmeticChangesToolkit(page.site(), debug = True, 
namespace = page.namespace())
+            ccToolkit = CosmeticChangesToolkit(page.site(), debug = True, 
namespace = page.namespace(), pageTitle=page.title())
             changedText = ccToolkit.change(page.get())
             if changedText.strip() != page.get().strip():
                 if not self.acceptall:

Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py      2009-12-28 09:24:21 UTC (rev 7833)
+++ trunk/pywikipedia/wikipedia.py      2009-12-28 10:32:45 UTC (rev 7834)
@@ -1628,7 +1628,7 @@
                 if verbose:
                     output(u'Cosmetic Changes for %s-%s enabled.' % 
(self.site().family.name, self.site().lang))
                 import cosmetic_changes
-                ccToolkit = 
cosmetic_changes.CosmeticChangesToolkit(self.site(), 
redirect=self.isRedirectPage(), namespace = self.namespace())
+                ccToolkit = 
cosmetic_changes.CosmeticChangesToolkit(self.site(), 
redirect=self.isRedirectPage(), namespace = self.namespace(), 
pageTitle=self.title())
                 newtext = ccToolkit.change(newtext)
                 if comment and old.strip().replace('\r\n', '\n') != 
newtext.strip().replace('\r\n', '\n'):
                     comment += translate(self.site(), 
cosmetic_changes.msg_append)
@@ -4587,7 +4587,7 @@
 #        or change links to a different project, or any that are formatted
 #        as in-line interwiki links (e.g., "[[:es:Articulo]]".  (CONFIRM)
 
-def getLanguageLinks(text, insite = None, pageLink = "[[]]"):
+def getLanguageLinks(text, insite = None, pageLink="[[]]", 
template_subpage=False):
     """
     Return a dict of interlanguage links found in text.
 
@@ -4601,7 +4601,10 @@
     result = {}
     # Ignore interwiki links within nowiki tags, includeonly tags, pre tags,
     # and HTML comments
-    text = removeDisabledParts(text)
+    tags = ['comments', 'nowiki', 'pre', 'source']
+    if not template_subpage:
+        tags += ['includeonly']
+    text = removeDisabledParts(text, tags)
 
     # This regular expression will find every link that is possibly an
     # interwiki link.
@@ -4669,7 +4672,7 @@
     else:
         return removeLanguageLinks(text, site, marker)
 
-def replaceLanguageLinks(oldtext, new, site = None, addOnly = False, template 
= False):
+def replaceLanguageLinks(oldtext, new, site = None, addOnly = False, template 
= False, template_subpage = False):
     """Replace interlanguage links in the text with a new set of links.
 
     'new' should be a dict with the Site objects as keys, and Page objects
@@ -4712,17 +4715,23 @@
                 s = separator + s + separator
                 newtext = s2[:firstafter].replace(marker,'') + s + 
s2[firstafter:]
             else:
-                if template:
+                if template or template_subpage:
+                    if template_subpage:
+                        includeOn  = '<includeonly>'
+                        includeOff = '</includeonly>'
+                    else:
+                        includeOn  = '<noinclude>'
+                        includeOff = '</noinclude>'
                     # Do we have a noinclude at the end of the template?
-                    parts = s2.split('</noinclude>')
+                    parts = s2.split(includeOff)
                     lastpart = parts[-1]
                     if re.match('\s*%s' % marker, lastpart):
                         # Put the langlinks back into the noinclude's
-                        regexp = re.compile('</noinclude>\s*%s' % marker)
-                        newtext = regexp.sub(s + '</noinclude>', s2)
+                        regexp = re.compile('%s\s*%s' % (includeOff, marker))
+                        newtext = regexp.sub(s + includeOff, s2)
                     else:
                         # Put the langlinks at the end, inside noinclude's
-                        newtext = s2.replace(marker,'').strip() + separator + 
u'<noinclude>\n%s</noinclude>\n' % s
+                        newtext = s2.replace(marker,'').strip() + separator + 
u'%s\n%s%s\n' % (includeOn, s, includeOff)
                 else:
                     newtext = s2.replace(marker,'').strip() + separator + s
     else:



_______________________________________________
Pywikipedia-svn mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-svn

Reply via email to