User-fixes.py

# -*- coding: utf-8 -*-

#--------------------------------------------------------------------------------------------------------------------------------------------------------------------

# cd pywikibot/core_stable
# python3.9 pwb.py login
# ./login

# 

# https://www.mediawiki.org/wiki/Manual:Pywikibot

# shift + ctrl + click to edit multiple lines

#--------------------------------------------------------------------------------------------------------------------------------------------------------------------

# python3.9 pwb.py replace
# python3.9 pwb.py touch (mass null edit)
# python3.9 pwb.py movepages

# -pt:0 -- prevents cooldown between bot edits


# Namespace - https://community.fandom.com/wiki/Help:Namespace#What_namespaces_do_all_communities_have.3F
# -ns:0 -- main
# -ns:1 -- main talk
# -ns:2 -- user
# -ns:3 -- user talk
# -ns:6 -- file
# -ns:7 -- file talk
# -ns:8 -- MediaWiki
# -ns:9 -- MediaWiki talk
# -ns:10 -- template
# -ns:11 -- template talk
# -ns:14 -- category
# -ns:15 -- category talk
# -ns:110 -- forum
# -ns:111 -- forum talk
# -ns:-2,-1,0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,110,111 -- needed to avoid User namespace


# -xml:starwars_pages_current.xml
# -page:
# -ref:
# -file:bot.txt
# -cat -- all pages in a category
# -catr -- all pages in a category and subcats
# -subcats -- all sub categories

# -regex
# -dotall -- (.) now works for line breaks
# -fix:general

# -exceptinside:
# -recursive -- recurse replacement until possible

#--------------------------------------------------------------------------------------------------------------------------------------------------------------------

# python3.9 pwb.py replace -pt:0 -xml:starwars_pages_current.xml -fix:general
# python3.9 pwb.py replace -pt:0 -ref:"Musical instrument" -fix:general
# python3.9 pwb.py replace -pt:0 -page:"User:Tommy-Macaroni/Bot tests" -fix:general -dotall

# python3.9 pwb.py category move -from:" " -to:" " (more commands here - https://www.mediawiki.org/wiki/Manual:Pywikibot/category.py)

#--------------------------------------------------------------------------------------------------------------------------------------------------------------------

#        (r'______', '________'),

#--------------------------------------------------------------------------------------------------------------------------------------------------------------------

# General
# python3.9 pwb.py replace -pt:0 -ns:0 -xml:starwars_pages_current.xml -fix:general
# python3.9 pwb.py replace -pt:0 -ns:-2,-1,0,1,3,4,5,6,7,8,9,10,11,12,13,14,15 -xml:starwars_pages_current.xml -fix:general
# python3.9 pwb.py replace -pt:0 -ns:-2,-1,0,1,3,4,5,6,7,8,9,10,11,12,13,14,15 -ref:"Wookieepedia:WookieeProject" -fix:general

fixes['general'] = {
    'regex': True,
    'msg': {
        '_default': 'Redirect fixes',
    },
    'replacements': [
        
        
        (r'\[\[Wookieepedia\:WookieeProject\]\]', '[[Wookieepedia:WookieeProjects]]'),
        (r'\[\[Wookieepedia\:WookieeProject\|', '[[Wookieepedia:WookieeProjects|'),
        (r'Wookieepedia\:WookieeProject\}\}', 'Wookieepedia:WookieeProjects}}'),
        
        
    ]
}

# .+ -> everything (with -dotall)

#        (r'\{\{Top(.*?)\}\}(.*?)\_\_NOTOC\_\_\n', '{{Top\\1|notoc=1}}\\2'),


#Ordering ID and Tcresult


# [[Inner Rim ]]
#[[Nevoota Bee/Legends|''Nevoota Bee'']]

# == (.*?)==



#        (r'\[\[Anakin Solo \(Imperial II\-class\)\|', '[[Anakin Solo (Imperial II-class Star Destroyer)|'),




#        (r'\{\{Top\|(.*?)\}\}(.*?)\_\_NOTOC\_\_\n', '{{Top|\\1|notoc=1}}\\2'),
#        (r'\{\{Top\|(.*?)\}\}(.*?)\_\_NOTOC\_\_', '{{Top|\\1|notoc=1}}\\2'),

#        (r' \'\'(.*?)\<nowiki\>\'s\<\/nowiki\>\'\'', ' \'\'\\1\'\'{{\'s}}'),
#        (r' \'\'(.*?)\<nowiki\>\'\<\/nowiki\>s\'\'', ' \'\'\\1\'\'{{\'s}}'),
#        (r' \'\'(.*?)\'s\'\' ', ' \'\'\\1\'\'{{\'s}} '),
#        (r' \'\'(.*?)\<nowiki\/\>\'s\'\' ', ' \'\'\\1\'\'{{\'s}} '),


# python3.9 pwb.py replace -pt:0 -cat:"Marvel Star Wars" -fix:general
#        (r'\{\{Top(.*)\|title\=\'\'(.*)\'\'\|', '{{Top\\1|title=\'\'{{PAGENAME}}\'\'|'),
#        (r'\{\{Top(.*)\|title\=\'\'(.*)\'\'\}', '{{Top\\1|title=\'\'{{PAGENAME}}\'\'}'),

#--------------------------------------------------------------------------------------------------------------------------------------------------------------------


# Formatting fixes
# python3.9 pwb.py replace -pt:0 -ns:0 -xml:starwars_pages_current.xml -fix:formatting
# python3.9 pwb.py replace -pt:0 -ns:14 -xml:starwars_pages_current.xml -fix:formatting
# python3.9 pwb.py replace -pt:0 -ns:0 -ref:"Template:Top" -fix:formatting
# python3.9 pwb.py replace -pt:0 -page:"Onager-class Star Destroyer" -fix:formatting

fixes['formatting'] = {
    'regex': True,
    'msg': {
        '_default': 'Formatting fixes',
    },
    'replacements': [
        (r'\{\{a(.*)', '{{A\\1'),
        (r'\{\{b(.*)', '{{B\\1'),
        (r'\{\{c(.*)', '{{C\\1'),
        (r'\{\{d(.*)', '{{D\\1'),
        (r'\{\{e(.*)', '{{E\\1'),
        (r'\{\{f(.*)', '{{F\\1'),
        (r'\{\{g(.*)', '{{G\\1'),
        (r'\{\{h(.*)', '{{H\\1'),
        (r'\{\{i(.*)', '{{I\\1'),
        (r'\{\{j(.*)', '{{J\\1'),
        (r'\{\{k(.*)', '{{K\\1'),
        (r'\{\{l(.*)', '{{L\\1'),
        (r'\{\{m(.*)', '{{M\\1'),
        (r'\{\{n(.*)', '{{N\\1'),
        (r'\{\{o(.*)', '{{O\\1'),
        (r'\{\{p(.*)', '{{P\\1'),
        (r'\{\{q(.*)', '{{Q\\1'),
        (r'\{\{r(.*)', '{{R\\1'),
        (r'\{\{s(.*)', '{{S\\1'),
        (r'\{\{t(.*)', '{{T\\1'),
        (r'\{\{u(.*)', '{{U\\1'),
        (r'\{\{v(.*)', '{{V\\1'),
        (r'\{\{w(.*)', '{{W\\1'),
        (r'\{\{x(.*)', '{{X\\1'),
        (r'\{\{y(.*)', '{{Y\\1'),
        (r'\{\{z(.*)', '{{Z\\1'),
        
        (r'\{\{(T|t)emplate\:(.*?)\}\}', '{{\\2}}'),
        
        (r'\{\{Otheruses(.*?)\}\}\n\n', '{{Otheruses\\1}}\n'),
        (r'\{\{Youmay(.*?)\}\}\n\n', '{{Youmay\\1}}\n'),
        (r'\{\{Youmayd(.*?)\}\}\n\n', '{{Youmayd\\1}}\n'),
        (r'\{\{Youmayredirect(.*?)\}\}\n\n', '{{Youmayredirect\\1}}\n'),
        
        (r'(\[\[[Ff]ile:[^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*\.[A-z]+[\|\]])', '\\1_\\2_\\3_\\4_\\5_\\6_\\7'),
        (r'(\[\[[Ff]ile:[^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*\.[A-z]+[\|\]])', '\\1_\\2_\\3_\\4_\\5_\\6'),
        (r'(\[\[[Ff]ile:[^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*\.[A-z]+[\|\]])', '\\1_\\2_\\3_\\4_\\5'),
        (r'(\[\[[Ff]ile:[^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*\.[A-z]+[\|\]])', '\\1_\\2_\\3_\\4'),
        (r'(\[\[[Ff]ile:[^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*\.[A-z]+[\|\]])', '\\1_\\2_\\3'),
        (r'(\[\[[Ff]ile:[^\.\n\|\]]*) ([^\.\n\|\]]*\.[A-z]+[\|\]])', '\\1_\\2'),
        
        (r'(audio\=[^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*\.[A-z]+[\|\]])', '\\1_\\2_\\3_\\4_\\5_\\6_\\7'),
        (r'(audio\=[^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*\.[A-z]+[\|\]])', '\\1_\\2_\\3_\\4_\\5_\\6'),
        (r'(audio\=[^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*\.[A-z]+[\|\]])', '\\1_\\2_\\3_\\4_\\5'),
        (r'(audio\=[^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*\.[A-z]+[\|\]])', '\\1_\\2_\\3_\\4'),
        (r'(audio\=[^\.\n\|\]]*) ([^\.\n\|\]]*) ([^\.\n\|\]]*\.[A-z]+[\|\]])', '\\1_\\2_\\3'),
        (r'(audio\=[^\.\n\|\]]*) ([^\.\n\|\]]*\.[A-z]+[\|\]])', '\\1_\\2'),

        (r'\{\{(c|C)ite( |_)web', '{{Cite_web'),

        (r'         \n', '\n'),
        (r'        \n', '\n'),
        (r'       \n', '\n'),
        (r'      \n', '\n'),
        (r'     \n', '\n'),
        (r'    \n', '\n'),
        (r'   \n', '\n'),
        (r'  \n', '\n'),
        (r' \n', '\n'),
        
        (r'\n\n\n\n\n\n\n', '\n\n'),
        (r'\n\n\n\n\n\n', '\n\n'),
        (r'\n\n\n\n\n', '\n\n'),
        (r'\n\n\n\n', '\n\n'),
        (r'\n\n\n', '\n\n'),
        
        (r'\<ref name\=\"(.*?)\"\/\>', '<ref name="\\1" />'),
        (r'\'\'\[\[(.*?) \(audiobook\)\]\]\'\'', '[[\\1 (audiobook)|\'\'\\1\'\' audiobook]]'),

        (r'{{\'}}s', '{{\'s}}'),
        (r' \'\'(.*?)\'\'\<nowiki\>\'s\<\/nowiki\>', ' \'\'\\1\'\'{{\'s}}'),
        (r' \'\'(.*?)\'\'\<nowiki\>\'\<\/nowiki\>s', ' \'\'\\1\'\'{{\'s}}'),
        (r' \'\'(.*?)\'\'\'s ', ' \'\'\\1\'\'{{\'s}} '),
        (r' \'\'(.*?)\'\'\<nowiki\/\>\'s ', ' \'\'\\1\'\'{{\'s}} '),
        
        (r'\'\'\[\[(.*?)\]\]\{\{\'\}\}s\'\'', '\'\'[[\\1]]\'\'{{\'s}}'),
        (r'\'\'\[\[(.*?)\]\]\{\{\'s\}\}\'\'', '\'\'[[\\1]]\'\'{{\'s}}'),
        
        (r'\[\[(.*?)\|\1\]\]', '[[\\1]]'),
        (r'\[\[(.*?)\|\1s\]\]', '[[\\1]]s'),
        (r'\[\[(.*?)\|\1\'s\]\]', '[[\\1]]\'s'),
        
        (r'\[\[A(.*?)\|a\1\]\]', '[[a\\1]]'),
        (r'\[\[B(.*?)\|b\1\]\]', '[[b\\1]]'),
        (r'\[\[C(.*?)\|c\1\]\]', '[[c\\1]]'),
        (r'\[\[D(.*?)\|d\1\]\]', '[[d\\1]]'),
        (r'\[\[E(.*?)\|e\1\]\]', '[[e\\1]]'),
        (r'\[\[F(.*?)\|f\1\]\]', '[[f\\1]]'),
        (r'\[\[G(.*?)\|g\1\]\]', '[[g\\1]]'),
        (r'\[\[H(.*?)\|h\1\]\]', '[[h\\1]]'),
        (r'\[\[I(.*?)\|i\1\]\]', '[[i\\1]]'),
        (r'\[\[J(.*?)\|j\1\]\]', '[[j\\1]]'),
        (r'\[\[K(.*?)\|k\1\]\]', '[[k\\1]]'),
        (r'\[\[L(.*?)\|l\1\]\]', '[[l\\1]]'),
        (r'\[\[M(.*?)\|m\1\]\]', '[[m\\1]]'),
        (r'\[\[N(.*?)\|n\1\]\]', '[[n\\1]]'),
        (r'\[\[O(.*?)\|o\1\]\]', '[[o\\1]]'),
        (r'\[\[P(.*?)\|p\1\]\]', '[[p\\1]]'),
        (r'\[\[Q(.*?)\|q\1\]\]', '[[q\\1]]'),
        (r'\[\[R(.*?)\|r\1\]\]', '[[r\\1]]'),
        (r'\[\[S(.*?)\|s\1\]\]', '[[s\\1]]'),
        (r'\[\[T(.*?)\|t\1\]\]', '[[t\\1]]'),
        (r'\[\[U(.*?)\|u\1\]\]', '[[u\\1]]'),
        (r'\[\[V(.*?)\|v\1\]\]', '[[v\\1]]'),
        (r'\[\[W(.*?)\|w\1\]\]', '[[w\\1]]'),
        (r'\[\[X(.*?)\|x\1\]\]', '[[x\\1]]'),
        (r'\[\[Y(.*?)\|y\1\]\]', '[[y\\1]]'),
        (r'\[\[Z(.*?)\|z\1\]\]', '[[z\\1]]'),
        
        (r'\[\[A(.*?)\|a\1s\]\]', '[[a\\1]]s'),
        (r'\[\[B(.*?)\|b\1s\]\]', '[[b\\1]]s'),
        (r'\[\[C(.*?)\|c\1s\]\]', '[[c\\1]]s'),
        (r'\[\[D(.*?)\|d\1s\]\]', '[[d\\1]]s'),
        (r'\[\[E(.*?)\|e\1s\]\]', '[[e\\1]]s'),
        (r'\[\[F(.*?)\|f\1s\]\]', '[[f\\1]]s'),
        (r'\[\[G(.*?)\|g\1s\]\]', '[[g\\1]]s'),
        (r'\[\[H(.*?)\|h\1s\]\]', '[[h\\1]]s'),
        (r'\[\[I(.*?)\|i\1s\]\]', '[[i\\1]]s'),
        (r'\[\[J(.*?)\|j\1s\]\]', '[[j\\1]]s'),
        (r'\[\[K(.*?)\|k\1s\]\]', '[[k\\1]]s'),
        (r'\[\[L(.*?)\|l\1s\]\]', '[[l\\1]]s'),
        (r'\[\[M(.*?)\|m\1s\]\]', '[[m\\1]]s'),
        (r'\[\[N(.*?)\|n\1s\]\]', '[[n\\1]]s'),
        (r'\[\[O(.*?)\|o\1s\]\]', '[[o\\1]]s'),
        (r'\[\[P(.*?)\|p\1s\]\]', '[[p\\1]]s'),
        (r'\[\[Q(.*?)\|q\1s\]\]', '[[q\\1]]s'),
        (r'\[\[R(.*?)\|r\1s\]\]', '[[r\\1]]s'),
        (r'\[\[S(.*?)\|s\1s\]\]', '[[s\\1]]s'),
        (r'\[\[T(.*?)\|t\1s\]\]', '[[t\\1]]s'),
        (r'\[\[U(.*?)\|u\1s\]\]', '[[u\\1]]s'),
        (r'\[\[V(.*?)\|v\1s\]\]', '[[v\\1]]s'),
        (r'\[\[W(.*?)\|w\1s\]\]', '[[w\\1]]s'),
        (r'\[\[X(.*?)\|x\1s\]\]', '[[x\\1]]s'),
        (r'\[\[Y(.*?)\|y\1s\]\]', '[[y\\1]]s'),
        (r'\[\[Z(.*?)\|z\1s\]\]', '[[z\\1]]s'),
        
        (r'\[\[A(.*?)\|a\1\'s\]\]', '[[a\\1]]\'s'),
        (r'\[\[B(.*?)\|b\1\'s\]\]', '[[b\\1]]\'s'),
        (r'\[\[C(.*?)\|c\1\'s\]\]', '[[c\\1]]\'s'),
        (r'\[\[D(.*?)\|d\1\'s\]\]', '[[d\\1]]\'s'),
        (r'\[\[E(.*?)\|e\1\'s\]\]', '[[e\\1]]\'s'),
        (r'\[\[F(.*?)\|f\1\'s\]\]', '[[f\\1]]\'s'),
        (r'\[\[G(.*?)\|g\1\'s\]\]', '[[g\\1]]\'s'),
        (r'\[\[H(.*?)\|h\1\'s\]\]', '[[h\\1]]\'s'),
        (r'\[\[I(.*?)\|i\1\'s\]\]', '[[i\\1]]\'s'),
        (r'\[\[J(.*?)\|j\1\'s\]\]', '[[j\\1]]\'s'),
        (r'\[\[K(.*?)\|k\1\'s\]\]', '[[k\\1]]\'s'),
        (r'\[\[L(.*?)\|l\1\'s\]\]', '[[l\\1]]\'s'),
        (r'\[\[M(.*?)\|m\1\'s\]\]', '[[m\\1]]\'s'),
        (r'\[\[N(.*?)\|n\1\'s\]\]', '[[n\\1]]\'s'),
        (r'\[\[O(.*?)\|o\1\'s\]\]', '[[o\\1]]\'s'),
        (r'\[\[P(.*?)\|p\1\'s\]\]', '[[p\\1]]\'s'),
        (r'\[\[Q(.*?)\|q\1\'s\]\]', '[[q\\1]]\'s'),
        (r'\[\[R(.*?)\|r\1\'s\]\]', '[[r\\1]]\'s'),
        (r'\[\[S(.*?)\|s\1\'s\]\]', '[[s\\1]]\'s'),
        (r'\[\[T(.*?)\|t\1\'s\]\]', '[[t\\1]]\'s'),
        (r'\[\[U(.*?)\|u\1\'s\]\]', '[[u\\1]]\'s'),
        (r'\[\[V(.*?)\|v\1\'s\]\]', '[[v\\1]]\'s'),
        (r'\[\[W(.*?)\|w\1\'s\]\]', '[[w\\1]]\'s'),
        (r'\[\[X(.*?)\|x\1\'s\]\]', '[[x\\1]]\'s'),
        (r'\[\[Y(.*?)\|y\1\'s\]\]', '[[y\\1]]\'s'),
        (r'\[\[Z(.*?)\|z\1\'s\]\]', '[[z\\1]]\'s'),

        (r'\[\[(.*?)\|\'\'\1\'\'\]\]', '\'\'[[\\1]]\'\''),
        
        (r'\'\'\[\[(.*?) \((.*)\)\|\1\]\]\'\' ', '[[\\1 (\\2)|\'\'\\1\'\']] '),
        (r' \'\'\[\[(.*?) \((.*)\)\|\1\]\]\'\'', ' [[\\1 (\\2)|\'\'\\1\'\']]'),

        (r'\{\{(q|Q)uote\|(.*)\|(.*)\|audio\=(.*)\.ogg\}\}', '{{Quote|\\2|audio=\\4.ogg|\\3}}'),
        (r'\{\{(d|D)ialogue\|(.*)\|src=(.*)\|audio\=(.*)\.ogg\}\}', '{{Dialogue|\\2|audio=\\4.ogg|src=\\3}}'),
        (r'\{\{(q|Q)uotetrans\|(.*)\|(.*)\|audio\=(.*)\.ogg\}\}', '{{Quotetrans|\\2|audio=\\4.ogg|\\3}}'),
        
        (r'\.\n{\{(.*)(s|S)tub', '.\n\n{{\\1\\2tub'),
        (r'\>\n{\{(.*)(s|S)tub', '>\n\n{{\\1\\2tub'),
        
        (r'\{\{Mediacat\|imagecat\=(.*)\|soundcat\=(.*)\}\}', '{{Mediacat|soundcat=\\2|imagecat=\\1}}'),
        
        (r'\{\{(s|S)croll( |_)box(\n|)\|( |)content( |)\=(\n|)\*(.*?)', '{{Scroll_box|content=\n*\\7'),
        (r'\{\{(s|S)croll( |_)box(\n|)\|( |)content( |)\=(\n|)\[(.*?)', '{{Scroll_box|content=\n[\\7'),
        (r'\{\{(s|S)croll( |_)box(\n|)\|( |)content( |)\=(\n|)\{\{Reflist\}\}(\n|)\}\}', '{{Scroll_box|content={{Reflist}}}}'),
        (r'\{\{(s|S)croll( |_)box(\n|)\|( |)content( |)\=', '{{Scroll_box|content='),

        (r'\{\{(C|c)\|(F|f)irst mentioned\, albeit indirectly\}\}', '{{1stm}} {{Imo}}'),

        (r'\=\= (.*?) \=\=', '==\\1=='),
        
        (r'\=\=\n\n', '==\n'),

        (r'(\=\=\=|\=\=)(N|n)on(\-| )(C|c)anon (A|a)ppearances(\=\=\=|\=\=)', '===Non-canon appearances==='),
        (r'\=\=(A|a)ppearances\=\=\n\{\{(E|e)xpandsect\}\}', '==Appearances==\n{{Incomplete_list}}'),
        (r'\=\=(A|a)ppearances\=\=\n\{\{(E|e)xpand\}\}', '==Appearances==\n{{Incomplete_list}}'),

        (r'\=\=( |)Notes (A|a)nd (R|r)eferences( |)\=\=', '==Notes and references=='),
        (r'\=\=( |)References( |)\=\=', '==Notes and references=='),
        (r'\=\=( |)Notes \& (R|r)eferences( |)\=\=', '==Notes and references=='),
        
        (r'\=\=Behind (T|t)he (S|s)cenes\=\=', '==Behind the scenes=='),

        (r'\{\{(.*?)\}\}\{\{Interlang', '{{\\1}}\n\n{{Interlang'),
        (r'\{\{(.*?)\}\} \{\{Interlang', '{{\\1}}\n\n{{Interlang'),
        (r'\{\{(.*?)\}\}\n\{\{Interlang', '{{\\1}}\n\n{{Interlang'),
        (r'\[\[(.*?)\]\]\{\{Interlang', '[[\\1]]\n\n{{Interlang'),
        (r'\[\[(.*?)\]\] \{\{Interlang', '[[\\1]]\n\n{{Interlang'),
        (r'\[\[(.*?)\]\]\n\{\{Interlang', '[[\\1]]\n\n{{Interlang'),
        (r'\'\'\{\{Interlang', '\'\'\n\n{{Interlang'),
        (r'\'\' \{\{Interlang', '\'\'\n\n{{Interlang'),
        (r'\'\'\n\{\{Interlang', '\'\'\n\n{{Interlang'),
        
        (r'\|( |)bg( |)\=( |)', '|bg='),
        (r'\|( |)cs( |)\=( |)', '|cs='),
        (r'\|( |)da( |)\=( |)', '|da='),
        (r'\|( |)de( |)\=( |)', '|de='),
        (r'\|( |)el( |)\=( |)', '|el='),
        (r'\|( |)es( |)\=( |)', '|es='),
        (r'\|( |)fr( |)\=( |)', '|fr='),
        (r'\|( |)ko( |)\=( |)', '|ko='),
        (r'\|( |)hr( |)\=( |)', '|hr='),
        (r'\|( |)id( |)\=( |)', '|id='),
        (r'\|( |)it( |)\=( |)', '|it='),
        (r'\|( |)ka( |)\=( |)', '|ka='),
        (r'\|( |)la( |)\=( |)', '|la='),
        (r'\|( |)hu( |)\=( |)', '|hu='),
        (r'\|( |)nl( |)\=( |)', '|nl='),
        (r'\|( |)ja( |)\=( |)', '|ja='),
        (r'\|( |)no( |)\=( |)', '|no='),
        (r'\|( |)pl( |)\=( |)', '|pl='),
        (r'\|( |)pt( |)\=( |)', '|pt='),
        (r'\|( |)ro( |)\=( |)', '|ro='),
        (r'\|( |)ru( |)\=( |)', '|ru='),
        (r'\|( |)sl( |)\=( |)', '|sl='),
        (r'\|( |)sr( |)\=( |)', '|sr='),
        (r'\|( |)fi( |)\=( |)', '|fi='),
        (r'\|( |)sv( |)\=( |)', '|sv='),
        (r'\|( |)tr( |)\=( |)', '|tr='),
        (r'\|( |)uk( |)\=( |)', '|uk='),
        (r'\|( |)zh( |)\=( |)', '|zh='),

        (r'CA( |)\=( |)1', 'CA=1'),
        (r'GA( |)\=( |)1', 'GA=1'),
        (r'FA( |)\=( |)1', 'FA=1'),

        (r'\{\{Interlang\|\n\|', '{{Interlang\n|'),
        (r'\{\{Interlang\|\n', '{{Interlang\n|'),
        (r'\{\{Interlang\|', '{{Interlang\n|'),
        
        (r'\{\{Interlang\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n|\\7\n|\\8\n}}'),
        (r'\{\{Interlang\n\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n|\\7\n|\\8\n}}'),
        (r'\{\{Interlang\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n|\\7\n|\\8\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n|\\7\n|\\8\n}}'),
        (r'\{\{Interlang\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n|\\7\n|\\8\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n|\\7\n|\\8\n}}'),
        
        (r'\{\{Interlang\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n|\\7\n}}'),
        (r'\{\{Interlang\n\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n|\\7\n}}'),
        (r'\{\{Interlang\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n|\\7\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n|\\7\n}}'),
        (r'\{\{Interlang\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n|\\7\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n|\\7\n}}'),
        
        (r'\{\{Interlang\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n}}'),
        (r'\{\{Interlang\n\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n}}'),
        (r'\{\{Interlang\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n}}'),
        (r'\{\{Interlang\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n|\\6\n}}'),

        (r'\{\{Interlang\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n}}'),
        (r'\{\{Interlang\n\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n}}'),
        (r'\{\{Interlang\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n}}'),
        (r'\{\{Interlang\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n|\\5\n}}'),
        
        (r'\{\{Interlang\|(.*)\|(.*)\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n}}'),
        (r'\{\{Interlang\n\|(.*)\|(.*)\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n}}'),
        (r'\{\{Interlang\|(.*)\|(.*)\|(.*)\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n}}'),
        (r'\{\{Interlang\n\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\n\|(.*)\n\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n|\\4\n}}'),
        
        (r'\{\{Interlang\|(.*)\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n}}'),
        (r'\{\{Interlang\n\|(.*)\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n}}'),
        (r'\{\{Interlang\|(.*)\|(.*)\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n}}'),
        (r'\{\{Interlang\n\|(.*)\n\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\n\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n|\\3\n}}'),

        (r'\{\{Interlang\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n}}'),
        (r'\{\{Interlang\n\|(.*)\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n}}'),
        (r'\{\{Interlang\|(.*)\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n}}'),
        (r'\{\{Interlang\n\|(.*)\n\|(.*)\}\}', '{{Interlang\n|\\1\n|\\2\n}}'),
        (r'\{\{Interlang\|(.*)\n\|(.*)\n\}\}', '{{Interlang\n|\\1\n|\\2\n}}'),

        (r'\{\{Interlang\|(.*)\}\}', '{{Interlang\n|\\1\n}}'),
        (r'\{\{Interlang\n\|(.*)\}\}', '{{Interlang\n|\\1\n}}'),
        (r'\{\{Interlang\|(.*)\n\}\}', '{{Interlang\n|\\1\n}}'),

        (r'\{\{Interlang( |)\|', '{{Interlang\n|'),

        (r'\|(bg|cs|da|de|el|es|fr|ko|hr|id|it|ka|la|hu|nl|ja|no|pl|pt|ro|ru|sl|sr|fi|sv|tr|uk|zh)\=(.*)(\n|)\}\}\[\[Category', '|\\1=\\2\n}}\n\n[[Category'),
        (r'\|(bg|cs|da|de|el|es|fr|ko|hr|id|it|ka|la|hu|nl|ja|no|pl|pt|ro|ru|sl|sr|fi|sv|tr|uk|zh)\=(.*)(\n|)\}\} \[\[Category', '|\\1=\\2\n}}\n\n[[Category'),
        (r'\|(bg|cs|da|de|el|es|fr|ko|hr|id|it|ka|la|hu|nl|ja|no|pl|pt|ro|ru|sl|sr|fi|sv|tr|uk|zh)\=(.*)(\n|)\}\}\n\[\[Category', '|\\1=\\2\n}}\n\n[[Category'),
        
        (r'\|(bg|cs|da|de|el|es|fr|ko|hr|id|it|ka|la|hu|nl|ja|no|pl|pt|ro|ru|sl|sr|fi|sv|tr|uk|zh)\=(.*)(\n|)\}\}\{\{DEFAULTSORT', '|\\1=\\2\n}}\n\n{{DEFAULTSORT'),
        (r'\|(bg|cs|da|de|el|es|fr|ko|hr|id|it|ka|la|hu|nl|ja|no|pl|pt|ro|ru|sl|sr|fi|sv|tr|uk|zh)\=(.*)(\n|)\}\} \{\{DEFAULTSORT', '|\\1=\\2\n}}\n\n{{DEFAULTSORT'),
        (r'\|(bg|cs|da|de|el|es|fr|ko|hr|id|it|ka|la|hu|nl|ja|no|pl|pt|ro|ru|sl|sr|fi|sv|tr|uk|zh)\=(.*)(\n|)\}\}\n\{\{DEFAULTSORT', '|\\1=\\2\n}}\n\n{{DEFAULTSORT'),
        
        (r'\{\{(.*?)\}\}\{\{DEFAULTSORT', '{{\\1}}\n\n{{DEFAULTSORT'),
        (r'\{\{(.*?)\}\} \{\{DEFAULTSORT', '{{\\1}}\n\n{{DEFAULTSORT'),
        (r'\{\{(.*?)\}\}\n\{\{DEFAULTSORT', '{{\\1}}\n\n{{DEFAULTSORT'),

        (r'\[\[(.*?)\]\]\{\{DEFAULTSORT', '[[\\1]]\n\n{{DEFAULTSORT'),
        (r'\[\[(.*?)\]\] \{\{DEFAULTSORT', '[[\\1]]\n\n{{DEFAULTSORT'),
        (r'\[\[(.*?)\]\]\n\{\{DEFAULTSORT', '[[\\1]]\n\n{{DEFAULTSORT'),
        
        (r'\#(redirect|Redirect) \[\[(.*?)\]\]', '#REDIRECT [[\\2]]'),
        (r'\#(REDIRECT|redirect|Redirect) \[\[(.*?)\|(.*?)\]\]', '#REDIRECT [[\\2]]'),
        
        
        
        (r'\{\{WEGCite\|book\=(.*?)\|text\=\'\'\1\'\'\|', '{{WEGCite|book=\\1|'),
        (r'http\:\/\/web\.archive\.org', 'https://web.archive.org'),
        (r'http\:\/\/www\.rebelscum\.com', 'https://www.rebelscum.com'),
    ]
}


#--------------------------------------------------------------------------------------------------------------------------------------------------------------------


# Talkpages:


# python3.9 pwb.py add_text -pt:0 -start:Talk:! -text:"{{Talkheader}}" -except:"\{\{([Tt]emplate:|)[Tt]alkheader" -up

# python3.9 pwb.py replace -pt:0 -start:Talk:! -fix:talkheader
fixes['talkheader'] = {
    'regex': True,
    'msg': {
        '_default': 'Removing {{Talkheader}} from talk page archives',
    },
    'replacements': [
      
        (r'\{\{Talkheader\}\}\n\<div id\=\"old\-forum\-warning\"', '<div id="old-forum-warning"'),
    ]
}





# python3.9 pwb.py replace -pt:0 -ns:1 -xml:starwars_pages_current.xml -fix:talkdotall

fixes['talkdotall'] = {
    'regex': True,
    'msg': {
        '_default': 'Formatting fixes',
    },
    'replacements': [
    
        (r'\{\{(.*?)\n\{\{(T|t)alkheader(.*?)\}\}', '{{Talkheader\\3}}\n{{\\1'),
        
        (r'\{\{Talkheader(.*?)\}\}(.*?)\n\{\{(CA|GA|FA|FormerCA|FormerGA|FormerFA)(.*?)\}\}\n\{\{Ahh(.*?)\{\{Ahf(.*?)\}\}', '{{Talkheader\\1}}\n{{\\3\\4}}\n{{Ahh\\5{{Ahf\\6}}\\2'),
        
        (r'\{\{Talkheader(.*?)\}\}\n\{\{(CA|GA|FA|FormerCA|FormerGA|FormerFA)(.*?)\}\}(.*?)\n\{\{Ahh(.*?)\{\{Ahf(.*?)\}\}', '{{Talkheader\\1}}\n{{\\2\\3}}\n{{Ahh\\5{{Ahf\\6}}\\4'),
        
    ]
}
        
        
        
        
# python3.9 pwb.py replace -pt:0 -ns:1 -xml:starwars_pages_current.xml -fix:talk

fixes['talk'] = {
    'regex': True,
    'msg': {
        '_default': 'Formatting fixes',
    },
    'replacements': [
    
        (r'\{\{(FormerCA|FormerGA|FormerFA)(.*?)\}\}\n\{\{(CA|GA|FA)\}\}', '{{\\3}}'),
        (r'\{\{(CA|GA|FA)\}\}\n\{\{(FormerCA|FormerGA|FormerFA)(.*?)\}\}', '{{\\1}}'),
        
        (r'\}\}\n\=\=', '}}\n\n=='),
    
        (r'\{\{a(.*)', '{{A\\1'),
        (r'\{\{b(.*)', '{{B\\1'),
        (r'\{\{c(.*)', '{{C\\1'),
        (r'\{\{d(.*)', '{{D\\1'),
        (r'\{\{e(.*)', '{{E\\1'),
        (r'\{\{f(.*)', '{{F\\1'),
        (r'\{\{g(.*)', '{{G\\1'),
        (r'\{\{h(.*)', '{{H\\1'),
        (r'\{\{i(.*)', '{{I\\1'),
        (r'\{\{j(.*)', '{{J\\1'),
        (r'\{\{k(.*)', '{{K\\1'),
        (r'\{\{l(.*)', '{{L\\1'),
        (r'\{\{m(.*)', '{{M\\1'),
        (r'\{\{n(.*)', '{{N\\1'),
        (r'\{\{o(.*)', '{{O\\1'),
        (r'\{\{p(.*)', '{{P\\1'),
        (r'\{\{q(.*)', '{{Q\\1'),
        (r'\{\{r(.*)', '{{R\\1'),
        (r'\{\{s(.*)', '{{S\\1'),
        (r'\{\{t(.*)', '{{T\\1'),
        (r'\{\{u(.*)', '{{U\\1'),
        (r'\{\{v(.*)', '{{V\\1'),
        (r'\{\{w(.*)', '{{W\\1'),
        (r'\{\{x(.*)', '{{X\\1'),
        (r'\{\{y(.*)', '{{Y\\1'),
        (r'\{\{z(.*)', '{{Z\\1'),
        
        (r'\{\{(T|t)emplate\:(.*?)\}\}', '{{\\2}}'),

        (r'         \n', '\n'),
        (r'        \n', '\n'),
        (r'       \n', '\n'),
        (r'      \n', '\n'),
        (r'     \n', '\n'),
        (r'    \n', '\n'),
        (r'   \n', '\n'),
        (r'  \n', '\n'),
        (r' \n', '\n'),
        
        (r'\n\n\n\n\n\n\n', '\n\n'),
        (r'\n\n\n\n\n\n', '\n\n'),
        (r'\n\n\n\n\n', '\n\n'),
        (r'\n\n\n\n', '\n\n'),
        (r'\n\n\n', '\n\n'),
        
        (r'\[\[(.*?)\|\1\]\]', '[[\\1]]'),
        (r'\[\[(.*?)\|\1s\]\]', '[[\\1]]s'),
        (r'\[\[(.*?)\|\1\'s\]\]', '[[\\1]]\'s'),
        
        (r'\[\[A(.*?)\|a\1\]\]', '[[a\\1]]'),
        (r'\[\[B(.*?)\|b\1\]\]', '[[b\\1]]'),
        (r'\[\[C(.*?)\|c\1\]\]', '[[c\\1]]'),
        (r'\[\[D(.*?)\|d\1\]\]', '[[d\\1]]'),
        (r'\[\[E(.*?)\|e\1\]\]', '[[e\\1]]'),
        (r'\[\[F(.*?)\|f\1\]\]', '[[f\\1]]'),
        (r'\[\[G(.*?)\|g\1\]\]', '[[g\\1]]'),
        (r'\[\[H(.*?)\|h\1\]\]', '[[h\\1]]'),
        (r'\[\[I(.*?)\|i\1\]\]', '[[i\\1]]'),
        (r'\[\[J(.*?)\|j\1\]\]', '[[j\\1]]'),
        (r'\[\[K(.*?)\|k\1\]\]', '[[k\\1]]'),
        (r'\[\[L(.*?)\|l\1\]\]', '[[l\\1]]'),
        (r'\[\[M(.*?)\|m\1\]\]', '[[m\\1]]'),
        (r'\[\[N(.*?)\|n\1\]\]', '[[n\\1]]'),
        (r'\[\[O(.*?)\|o\1\]\]', '[[o\\1]]'),
        (r'\[\[P(.*?)\|p\1\]\]', '[[p\\1]]'),
        (r'\[\[Q(.*?)\|q\1\]\]', '[[q\\1]]'),
        (r'\[\[R(.*?)\|r\1\]\]', '[[r\\1]]'),
        (r'\[\[S(.*?)\|s\1\]\]', '[[s\\1]]'),
        (r'\[\[T(.*?)\|t\1\]\]', '[[t\\1]]'),
        (r'\[\[U(.*?)\|u\1\]\]', '[[u\\1]]'),
        (r'\[\[V(.*?)\|v\1\]\]', '[[v\\1]]'),
        (r'\[\[W(.*?)\|w\1\]\]', '[[w\\1]]'),
        (r'\[\[X(.*?)\|x\1\]\]', '[[x\\1]]'),
        (r'\[\[Y(.*?)\|y\1\]\]', '[[y\\1]]'),
        (r'\[\[Z(.*?)\|z\1\]\]', '[[z\\1]]'),
        
        (r'\[\[A(.*?)\|a\1s\]\]', '[[a\\1]]s'),
        (r'\[\[B(.*?)\|b\1s\]\]', '[[b\\1]]s'),
        (r'\[\[C(.*?)\|c\1s\]\]', '[[c\\1]]s'),
        (r'\[\[D(.*?)\|d\1s\]\]', '[[d\\1]]s'),
        (r'\[\[E(.*?)\|e\1s\]\]', '[[e\\1]]s'),
        (r'\[\[F(.*?)\|f\1s\]\]', '[[f\\1]]s'),
        (r'\[\[G(.*?)\|g\1s\]\]', '[[g\\1]]s'),
        (r'\[\[H(.*?)\|h\1s\]\]', '[[h\\1]]s'),
        (r'\[\[I(.*?)\|i\1s\]\]', '[[i\\1]]s'),
        (r'\[\[J(.*?)\|j\1s\]\]', '[[j\\1]]s'),
        (r'\[\[K(.*?)\|k\1s\]\]', '[[k\\1]]s'),
        (r'\[\[L(.*?)\|l\1s\]\]', '[[l\\1]]s'),
        (r'\[\[M(.*?)\|m\1s\]\]', '[[m\\1]]s'),
        (r'\[\[N(.*?)\|n\1s\]\]', '[[n\\1]]s'),
        (r'\[\[O(.*?)\|o\1s\]\]', '[[o\\1]]s'),
        (r'\[\[P(.*?)\|p\1s\]\]', '[[p\\1]]s'),
        (r'\[\[Q(.*?)\|q\1s\]\]', '[[q\\1]]s'),
        (r'\[\[R(.*?)\|r\1s\]\]', '[[r\\1]]s'),
        (r'\[\[S(.*?)\|s\1s\]\]', '[[s\\1]]s'),
        (r'\[\[T(.*?)\|t\1s\]\]', '[[t\\1]]s'),
        (r'\[\[U(.*?)\|u\1s\]\]', '[[u\\1]]s'),
        (r'\[\[V(.*?)\|v\1s\]\]', '[[v\\1]]s'),
        (r'\[\[W(.*?)\|w\1s\]\]', '[[w\\1]]s'),
        (r'\[\[X(.*?)\|x\1s\]\]', '[[x\\1]]s'),
        (r'\[\[Y(.*?)\|y\1s\]\]', '[[y\\1]]s'),
        (r'\[\[Z(.*?)\|z\1s\]\]', '[[z\\1]]s'),
        
        (r'\[\[A(.*?)\|a\1\'s\]\]', '[[a\\1]]\'s'),
        (r'\[\[B(.*?)\|b\1\'s\]\]', '[[b\\1]]\'s'),
        (r'\[\[C(.*?)\|c\1\'s\]\]', '[[c\\1]]\'s'),
        (r'\[\[D(.*?)\|d\1\'s\]\]', '[[d\\1]]\'s'),
        (r'\[\[E(.*?)\|e\1\'s\]\]', '[[e\\1]]\'s'),
        (r'\[\[F(.*?)\|f\1\'s\]\]', '[[f\\1]]\'s'),
        (r'\[\[G(.*?)\|g\1\'s\]\]', '[[g\\1]]\'s'),
        (r'\[\[H(.*?)\|h\1\'s\]\]', '[[h\\1]]\'s'),
        (r'\[\[I(.*?)\|i\1\'s\]\]', '[[i\\1]]\'s'),
        (r'\[\[J(.*?)\|j\1\'s\]\]', '[[j\\1]]\'s'),
        (r'\[\[K(.*?)\|k\1\'s\]\]', '[[k\\1]]\'s'),
        (r'\[\[L(.*?)\|l\1\'s\]\]', '[[l\\1]]\'s'),
        (r'\[\[M(.*?)\|m\1\'s\]\]', '[[m\\1]]\'s'),
        (r'\[\[N(.*?)\|n\1\'s\]\]', '[[n\\1]]\'s'),
        (r'\[\[O(.*?)\|o\1\'s\]\]', '[[o\\1]]\'s'),
        (r'\[\[P(.*?)\|p\1\'s\]\]', '[[p\\1]]\'s'),
        (r'\[\[Q(.*?)\|q\1\'s\]\]', '[[q\\1]]\'s'),
        (r'\[\[R(.*?)\|r\1\'s\]\]', '[[r\\1]]\'s'),
        (r'\[\[S(.*?)\|s\1\'s\]\]', '[[s\\1]]\'s'),
        (r'\[\[T(.*?)\|t\1\'s\]\]', '[[t\\1]]\'s'),
        (r'\[\[U(.*?)\|u\1\'s\]\]', '[[u\\1]]\'s'),
        (r'\[\[V(.*?)\|v\1\'s\]\]', '[[v\\1]]\'s'),
        (r'\[\[W(.*?)\|w\1\'s\]\]', '[[w\\1]]\'s'),
        (r'\[\[X(.*?)\|x\1\'s\]\]', '[[x\\1]]\'s'),
        (r'\[\[Y(.*?)\|y\1\'s\]\]', '[[y\\1]]\'s'),
        (r'\[\[Z(.*?)\|z\1\'s\]\]', '[[z\\1]]\'s'),

        (r'\[\[(.*?)\|\'\'\1\'\'\]\]', '\'\'[[\\1]]\'\''),
        
        (r'\'\'\[\[(.*?) \((.*)\)\|\1\]\]\'\' ', '[[\\1 (\\2)|\'\'\\1\'\']] '),
        (r' \'\'\[\[(.*?) \((.*)\)\|\1\]\]\'\'', ' [[\\1 (\\2)|\'\'\\1\'\']]'),

        (r'\=\= (.*?) \=\=', '==\\1=='),
        
        (r'\=\=\n\n', '==\n'),
    ]
}



#--------------------------------------------------------------------------------------------------------------------------------------------------------------------


# Files:


# python3.9 pwb.py replace -pt:0 -ns:6 -xml:starwars_pages_current.xml -fix:image
# OR
# python3.9 pwb.py replace -pt:0 -ns:6 -ref:"Template:Information" -fix:image

fixes['image'] = {
    'regex': True,
    'msg': {
        '_default': 'Formatting fixes',
    },
    'replacements': [
        (r'\=\= Summary \=\=\n\=\=Summary\=\=', '==Summary=='),
        (r'\=\= Summary \=\=', '==Summary=='),
        (r'\=\=Summary\=\=\n\{\{AurebeshArialBold\}\}', '{{AurebeshArialBold}}'),
    ]
}


# python3.9 pwb.py add_text -pt:0 -ns:6 -start:File:! -text:"==Summary==" -except:"\=\=( |)(S|s)ummary( |)\=\=" -up
# ---- mind out for {{AurebeshArialBold}}



#--------------------------------------------------------------------------------------------------------------------------------------------------------------------


# Stolen formatting fixes - https://github.com/wikimedia/pywikibot/blob/master/pywikibot/fixes.py#L241


Other useful bot code

Comics:

        (r'\{\{IDWAdventuresCite\|issue\=', '{{IDWAdventuresCite|year=2017|issue='),

        (r'\[\[Title Number\|\'\'Title\'\' Number\]\]', '[[Title (Year) Number|\'\'Title\'\' Number]]'),
        (r'\'\'\[\[Title Number\]\]\'\'', '[[Title (Year) Number|\'\'Title\'\' Number]]'),
        (r'\[\[Title Number\|', '[[Title (Year) Number|'),
        (r'\[\[Title Number\]\]', '[[Title (Year) Number]]'),
        (r'Title Number\}\}', 'Title (Year) Number}}'),
        
        (r'Images from Title Number', 'Images from Title (Year) Number'),


Removing navboxes:


        (r'\}\}\n\{\{Sith(_| )Empire(_| )organizations\}\}\n', '}}\n'),
        (r'\n\{\{Sith(_| )Empire(_| )organizations\}\}\n\{\{', '\n{{'),
        (r'\n\n\{\{Sith(_| )Empire(_| )organizations\}\}\n', '\n'),
        (r'\{\{Sith(_| )Empire(_| )organizations\}\}', ''),

Random bot stuff I never finished

Appearances sections removing spaces

Redoing current formatting fixes with ( |)

Line breaks around {{Stub}}

title=''{{PAGENAME}}''

Images with ( |) OR ( |_)

\'\'\[\[(.*)\|(.*)\]\]\'\' -> [[\\1|\'\'\\2\'\']]

[[(.)|\\1{2,}]] -> [[(.)|\\1{2,}]]

-dotall
\{\{Interlang(.*)\|(.*) \= (.*) -> |\\1=\\2

— -> —
 — -> —

\[\[(.*?)\|(.*?)\]\]?

[[(<incorrect thing>|(.*)]]

|(de|ja|es| etc)\=(.*?)\n|(de|ja|es| etc)\=(.*?) -> |de=\\1|es=\\1

        (r'\'\'\[\[Star Wars Helmet Collection ([1-9]+)\]\]\'\'', '[[Star Wars Helmet Collection \\1|\'\'Star Wars Helmet Collection\'\' \\1]]'),
        (r'\'\'\[\[Star Wars Bust Collection ([1-9]+)\]\]\'\'', '[[Star Wars Bust Collection \\1|\'\'Star Wars Bust Collection\'\' \\1]]'),
        

        (r'\'\'\[\[Star Wars\: Build the Millennium Falcon‎ ([1-9]+)\]\]\'\'', '[[Star Wars: Build the Millennium Falcon‎ \\1|\'\'Star Wars: Build the Millennium Falcon‎\'\' \\1]]'),
        (r'\'\'\[\[Star Wars\: Build Your Own R2-D2‎ ([1-9]+)\]\]\'\'', '[[Star Wars: Build Your Own R2-D2‎ \\1|\'\'Star Wars: Build Your Own R2-D2‎\'\' \\1]]'),
        (r'\'\'\[\[Star Wars\: Build Your Own X-Wing‎ ([1-9]+)\]\]\'\'', '[[Star Wars: Build Your Own X-Wing‎ \\1|\'\'Star Wars: Build Your Own X-Wing‎\'\' \\1]]'),

Other stuff I was planning on doing

  • See User:Tommy-Macaroni/To-do