Hello,
[[cs:User:Dvorapa]] wrote script for cosmetic changes in infoboxes. https://cs.wikipedia.org/wiki/Wikipedie:WikiProjekt_Strojov%C3%A9_zpracov%C3...
This is great tool, but there is very annoying bug: script sometimes destroys table https://cs.wikipedia.org/w/index.php?title=Petr_B%C5%99%C3%ADza&diff=pre... or external link https://cs.wikipedia.org/w/index.php?title=Jaroslav_Maxmili%C3%A1n_Ka%C5%A1p...
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)
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%C3%A9_zpracov%C3...
This is great tool, but there is very annoying bug: script sometimes destroys table https://cs.wikipedia.org/w/index.php?title=Petr_B%C5%99%C3%ADza&diff=pre... or external link https://cs.wikipedia.org/w/index.php?title=Jaroslav_Maxmili%C3%A1n_Ka%C5%A1p...
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