Användare:Skalbot/update userlang categories.py

Hej, du har kommit hit för att leta efter betydelsen av ordet Användare:Skalbot/update userlang categories.py. I DICTIOUS hittar du inte bara alla ordboksbetydelser av ordet Användare:Skalbot/update userlang categories.py, utan du får också veta mer om dess etymologi, dess egenskaper och hur man säger Användare:Skalbot/update userlang categories.py i singular och plural. Allt du behöver veta om ordet Användare:Skalbot/update userlang categories.py finns här. Definitionen av ordet Användare:Skalbot/update userlang categories.py hjälper dig att vara mer exakt och korrekt när du talar eller skriver dina texter. Genom att känna till definitionen avAnvändare:Skalbot/update userlang categories.py och andra ord berikar du ditt ordförråd och får tillgång till fler och bättre språkliga resurser.
# -*- coding: utf-8  -*-

from __future__ import print_function

import time
import re
import pywikibot
import pywikibot.bot
from pywikibot.pagegenerators import PrefixingPageGenerator
from pywikibot.page import Page
from pywikibot.exceptions import NoPage, IsRedirectPage

cat_prefix = u'Kategori:Wiktionary:Användare '
main_cat = u'Kategori:Wiktionary:Användare per språk'
cats_to_process_prefix = cat_prefix + ''

pywikibot.bot.handleArgs()
site = pywikibot.Site('sv', 'wiktionary')

cats = PrefixingPageGenerator(cats_to_process_prefix, content=True)

re_end = '(?!)'

re_lang_title = re.compile(cat_prefix + '+' + re_end)
re_lvl_title = re.compile(cat_prefix + '(+)\-' + re_end)

re_lang_can_autofix = re.compile(
    u'^(Användare i den här kategorin visar att de har kunskap i språket +?.)\n?' +
    # iws
    u'((\n\+:]+\]\])*)\n?' +
    re_end
)
re_lang_fixed = re.compile(
    u'^Användare i den här kategorin visar att de har kunskap i språket +?.\n\n' +
    # cat
    '\\]\n?'
    # iws
    '((\n\+:]+\]\])*)\n?' +
    re_end
)
re_lvl_can_autofix = re.compile(
    u'^(Användare i den här kategorin visar att de kan språket +? på en kunskapsnivå av .)\n?' +
    # iws
    '((\n\+:]+\]\])*)\n?' +
    re_end
)
re_lvl_fixed = re.compile(
    u'^Användare i den här kategorin visar att de ' +
    u'(inte kan språket +?' +
    u'|har språket +? som modersmål' +
    u'|kan språket +? på en kunskapsnivå av ).\n\n'
    # cat
    '\+\]\]\n?'
    # iws
    '((\n\+:]+\]\])*)\n?' +
    re_end
)


def p(str):
    print(str)


def indent(str):
    print('\t' + str.replace('\n', '\n\t'))


for cat in cats:

    title = cat.title()
    text = cat.get()

    # level
    if re.match(re_lvl_title, title):
        if re_lvl_fixed.match(text):
            p('] skipped: already fixed')
        elif not re_lvl_can_autofix.match(text):
            p('] skipped: cannot autofix:')
            indent(text)
            break
        else:
            lang_code = re_lvl_title.match(title).group(1)
            # add cat
            text = re_lvl_can_autofix.sub(
                '\\1\n\n]\n\n\\2', text)
            if title.endswith('N'):
                text = text.replace(
                    u'de kan språket', u'de har språket').replace(
                    u'på en kunskapsnivå av N', u'som modersmål')
            elif title.endswith('0'):
                text = text.replace(
                    u'de kan språket', u'de inte kan språket').replace(
                    u' på en kunskapsnivå av 0', '')

            cat.text = text
            cat.save(
                comment=u'Lägger till kategori',
                botflag=True)
            # p('] (would save):')
            # indent(text)
    # lang
    elif re.match(re_lang_title, title):
        if re_lang_fixed.match(text):
            p('] skipped: already fixed')
        elif not re_lang_can_autofix.match(text):
            p('] skipped: cannot autofix:')
            indent(text)
            break
        else:
            text = re_lang_can_autofix.sub(
                '\\1\n\n]\n\n\\2', text)
            cat.text = text
            cat.save(
                comment=u'Lägger till kategori',
                botflag=True)
            # p('] (would save):')
            # indent(text)
    else:
        known_titles = [
            u'Kategori:Wiktionary:Användare',
            u'Kategori:Wiktionary:Användare per språk',
        ]
        if title in known_titles:
            p('] skipped')
        else:
            p('] skipped: unexpected title')
            break

p('DONE')