Exceptions aren't ignored but it looks like a bad idea to assume templates or links with that snippet:
if item[n] == '{':
                            inTemplate.append(True)
                        elif item[n] == '[':
                            inLink.append(True)
One idea would be using Page.templatesWithParam() and recombine the template source.
Best
Xqt

Am 10.05.2016 um 11:25 schrieb Jan Dudík <jan.dudik@gmail.com>:

Hello, 

[[cs:User:Dvorapa]] wrote script for cosmetic changes in infoboxes.
https://cs.wikipedia.org/wiki/Wikipedie:WikiProjekt_Strojové_zpracování/Skripty

 This is great tool, but there is very annoying bug: script sometimes destroys table 
https://cs.wikipedia.org/w/index.php?title=Petr_Bříza&diff=prev&oldid=13643587
or external link
https://cs.wikipedia.org/w/index.php?title=Jaroslav_Maxmilián_Kašparů&diff=next&oldid=13643059

It looks like script ignores 'Exceptions'




Can somebody repair it?

JAnD
-----------





   def beautifyInfoboxes(self, text):
       """Cleanup multiple or trailing spaces."""
       exceptions = ['comment', 'math', 'nowiki', 'pre', 'table', 'link']
       items = [i for i in text.split('|')]
       newitems = []
       inInfobox = [False]
       inTemplate = [False]
       inLink = [False]
       for item in items:
           if inInfobox[-1] and not inLink[-1] and not inTemplate[-1]:
               item = textlib.replaceExcept(item.lstrip(), r'^', r' ', exceptions, site=self.site)
               # TODO: nahradit re.sub za textlib.replaceExcept po vyřešení T125307
               item = re.sub(r' *= *', r' = ', item, count=1)
           if re.search(r'(?i)\{{2}(Infobox|NFPA 704)[^\}]*$', item) != None:
               inInfobox.append(True)
           elif inInfobox[-1]:
               brackets = [m.start() for m in re.finditer("}}",item)]
               brackets += [m.start() for m in re.finditer("{{",item)]
               brackets += [m.start() for m in re.finditer("]]",item)]
               brackets += [m.start() for m in re.finditer(r"\[{2}",item)]
               brackets.sort(key=int)
               if not brackets == []:
                   endInfobox = []
                   for n in brackets:
                       if item[n] == '{':
                           inTemplate.append(True)
                       elif item[n] == '[':
                           inLink.append(True)
                       elif item[n] == ']':
                           inLink.pop()
                       else:
                           if inTemplate[-1]:
                               inTemplate.pop()
                           elif inInfobox[-1]:
                               endInfobox.append(n)
                               inInfobox.pop()
                               if not inInfobox[-1]:
                                   break
                   for n in reversed(endInfobox):
                       before = item[:n]
                       before = textlib.replaceExcept(before.rstrip(), r'$', r'\n', exceptions, site=self.site)
                       after = item[n:]
                       if not inInfobox[-1]:
                           after = textlib.replaceExcept(after, r'^}}\s*', r'}}\n', exceptions, site=self.site)
                       item = before + after
           if inInfobox[-1] and not inLink[-1] and not inTemplate[-1]:
               item = textlib.replaceExcept(item.rstrip(), r'$', r'\n ', exceptions, site=self.site)
           newitems.append(item)
       return '|'.join(newitems)
_______________________________________________
pywikibot mailing list
pywikibot@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/pywikibot