Difference between revisions 11037637 and 11888950 on frwiktionary

[[Catégorie:JackBot]]
<source lang=python>
#!/usr/bin/env python
# coding: utf-8

# Ce script formate les pages du Wiktionnaire, tous les jours après minuit depuis le Toolserver :
# 1) Retire certains doublons.
# 2) Ajoute les clés de tris, prononciations vides, et certains liens vers les conjugaisons.
# 3) Met à jour les liens vers les traductions (modèles trad, trad+, trad-, trad-début et trad-fin), et les classe par ordre alphabétique.
# 4) Ajoute les codes langues appropriés dans les modèles du Wiktionnaire du namespace 0 et paragraphes appropriés.
# 5) Complète les flexions de verbes à vérifier.
# 6) Traduit les importations de en.wikt.
# 7) Gestion des modèles {{voir}} en début de page.

# Importation des modules
import catlib, pagegenerators, os, codecs, urllib, re, collections
from wikipedia import *

# Déclaration
language = "fr"
family = "wiktionary"
mynick = "JackBot"
site = getSite(language,family)
summary = u'[[Wiktionnaire:Structure des articles|Autoformatage]]'

# Modèles du site à traiter
limit56=91307
Modele = range(1, limit56+1)
# http://fr.wiktionary.org/wiki/Cat%C3%A9gorie:Mod%C3%A8les_de_type_de_mot_du_Wiktionnaire
Modele[1] = u'-adj-'
Modele[2] = u'-flex-adj-indéf-'
Modele[3] = u'-adj-dém-'
Modele[4] = u'-adj-excl-'
Modele[5] = u'-adj-indéf-'
Modele[6] = u'-adj-int-'
(contracted; show full)Modele[115] = u'-inf-'
Modele[116] = u'-onoma-'
Modele[117] = u'-onoma-'
Modele[118] = u'-flex-loc-verbe-'
Modele[119] = u'-class-'
Modele[120] = u'-sinogramme-'
limit1 = 121 # Paragraphes avec modèle catégorisant



# http://fr.wiktionary.org/wiki/Cat%C3%A9gorie:Mod%C3%A8les_de_contexte
Modele[121] = u'-trad-'
Modele[122] = u'-drv-int-'
Modele[123] = u'-étym-'
Modele[124] = u'-exp-'
Modele[125] = u'-faux-amis-'
Modele[126] = u'-gent-'
Modele[127] = u'-hist-'
(contracted; show full)Modele[157] = u'-apr-'
Modele[158] = u'-cit-'
Modele[159] = u'-compos-'
Modele[160] = u'-conjug-'
Modele[161] = u'-décl-'
Modele[162] = u'-dial-'
limit2 = 163 # Paragraphes sans modèle catégorisant
Modele[16
43] = u'ébauchtitre alt'
Modele[164] = u'titre mis en forme'
Modele[165] = u'ébauche-transtitre incorrect'
Modele[166] = u'ébauche-défformater'
Modele[167] = u'ébauche-étymsuppression'
Modele[168] = u'ébauche-pronsupp'
Modele[169] = u'ébauche-étym-nom-scientifiquePàS'
Modele[170] = u'vérifier'
#Modele[1701] = u'ébauche-exe'voir'	# et u'voir/' sont gérés individuellement
limit3 = 172 # Paragraphes sans modèle catégorisant pouvant contenir des modèles

Modele[1712] = u'ébauche-prontrans'
Modele[1723] = u'ébauche-syn'
limit3 = 173déf'
Modele[174] = u'b-pl-courébauche-étym'
Modele[175] = u'cardinalébauche-pron'
Modele[176] = u'comparatif'
Modele[177] = u'contemporain'
Modele[178] = u'courant'
Modele[179] = u'dérision'
Modele[180] = u'désuet'ébauche-étym-nom-scientifique'
Modele[177] = u'ébauche-exe'
Modele[178] = u'ébauche-pron'
Modele[179] = u'ébauche-syn'
Modele[180] = u'ébauche'
limit4 = 181	# ébauches

# http://fr.wiktionary.org/wiki/Cat%C3%A9gorie:Mod%C3%A8les_de_domaine_d%E2%80%99utilisation
Modele[181] = u'déterminé'
Modele[182] = u'didactique'
Modele[183] = u'dim-lex'
Modele[184] = u'diminutif'
Modele[185] = u'diplomatie'
Modele[186] = u'informatique'
Modele[187] = u'diptote'
(contracted; show full)Modele[232] = u'poétique'
Modele[233] = u'populaire'
Modele[234] = u'propre'
Modele[235] = u'proverbial'
Modele[236] = u'rare'
Modele[237] = u'sigle'
Modele[238] = u'soutenu'

#Modele[239] = u'spécialemendésuet'
Modele[240] = u'saccusatif'
Modele[241] = u'sdatif'
Modele[242] = u'très familier'
Modele[243] = u'vieilli'
Modele[244] = u'vulgaire'
Modele[245] = u'wiki'
Modele[246] = u'popu'
Modele[247] = u'vx'
Modele[248] = u'dés'
Modele[249] = u'fam'
Modele[250] = u'péj'
Modele[251] = u'vulg'
# http://fr.wiktionary.org/wiki/Cat%C3%A9gorie:Mod%C3%A8les_de_domaine_d%E2%80%99utilisation
Modele[252] = u'télé'
Modele[253] = u'administration'
Modele[254] = u'aéronautique'
Modele[255] = u'agriculture'
Modele[256] = u'alpinisme'
Modele[257] = u'anatomie'
Modele[258] = u'anthropologie'
Modele[259] = u'architecture'
(contracted; show full)Modele[421] = u'typographie'
Modele[422] = u'télécommunications'
Modele[423] = u'urbanisme'
Modele[424] = u'vêtements'
Modele[425] = u'virologie'
Modele[426] = u'viticulture'
Modele[427] = u'zoologie'

#Modele[] = 'vérifier' Pas de langue
Modele[428] = u'b-pl-cour'
Modele[429] = u'cardinal'
Modele[430] = u'comparatif'
Modele[431] = u'contemporain'
Modele[432] = u'courant'
Modele[433] = u'dérision'
Modele[434] = u'jazz'
Modele[435] = u'tennis de table'
Modele[436] = u'volley-ball'
Modele[437] = u'volley'
Modele[438] = u'badminton'
Modele[438] = u'bases de données'
Modele[439] = u'BDD'
Modele[440] = u'pharma'
Modele[441] = u'apiculture'
Modele[442] = u'coiffure'
Modele[443] = u'astronautique'
Modele[444] = u'animaux'
Modele[445] = u'plantes'
Modele[446] = u'marketing'
Modele[447] = u'aphérèse'
Modele[448] = u'apocope'
Modele[449] = u'argot'
Modele[450] = u'b-m-cour'
Modele[451] = u'escalade'
Modele[452] = u'archéo'
Modele[453] = u'armement'
Modele[454] = u'astrol'
Modele[455] = u'astron'
Modele[456] = u'audiovis'
Modele[457] = u'automo'
Modele[458] = u'aviat'
(contracted; show full)Modele[735] = u'dessin'
Modele[736] = u'-prénom-'
Modele[737] = u'-flex-prénom-'
Modele[738] = u'('
Modele[739] = u')'
Modele[740] = u'trad-début'
Modele[741] = u'trad-fin'

#Modele[742] = u'Treliure'
Modele[743] = u'gravure'
Modele[744] = u'livre'
Modele[745] = u'canoe'
Modele[746] = u'footing'
Modele[747] = u'jogging'
Modele[748] = u'running'
Modele[749] = u'course à pied'
Modele[750] = u'Mexique'
Modele[750] = u'programmation'
Modele[751] = u'prog'
Modele[752] = u'jeux vidéo'
Modele[753] = u'judo'
Modele[754] = u'gén-indén'
Modele[755] = u'reliure'
Modele[756] = u'Liban'
Modele[757] = u'caténatif'
Modele[758] = u'fam.'
Modele[759] = u'formater'
Modele[760] = u'aphérèse'
Modele[761] = u'apocope'
Modele[762] = u'argot'
Modele[763] = u'b-m-cour'
Modele[764] = u'escalade'
Modele[760] = u'aphérèse'
Modele[761] = u'apocope'
Modele[762] = u'argot'
Modele[763] = u'b-m-cour'
Modele[764] = u'escalade'
Modele[765] = u'm'
Modele[766] = u'f'
Modele[767] = u'n'
Modele[768] = u'c'
Modele[769] = u'mf'
Modele[770] = u'mf?'
Modele[770] = u'impers'
Modele[771] = u'impersonnel'
Modele[772] = u'pharma'
Modele[773] = u'apiculture'
Modele[774] = u'coiffure'
Modele[775] = u'animaux'
Modele[776] = u'plantes'
Modele[777] = u'astronautique'
Modele[779] = u'marketing'
Modele[780] = u'région'
Modele[781] = u'régio'
limit4 = 782
Liban'
Modele[756] = u'caténatif'
Modele[757] = u'fam.'
Modele[758] = u'm'
Modele[759] = u'f'
Modele[760] = u'n'
Modele[761] = u'c'
Modele[762] = u'mf'
Modele[763] = u'mf?'
Modele[764] = u'impers'
Modele[765] = u'impersonnel'
Modele[766] = u'région'
Modele[767] = u'régio'
Modele[768] = u'CB'
Modele[769] = u'mah-jong'
Modele[770] = u'mahjong'
Modele[771] = u'majong'
Modele[772] = u'réseau'
Modele[773] = u'réseaux informatiques'
limit5 = 774
# non traités
#Modele[] = u'spécialement' 
#Modele[] = u'T'

# Abréviations (python pagegenerators.py -redirectonly:Template:!)
Modele[775] = u'US'
Modele[776] = u'USA'
Modele[777] = u'UK'
Modele[778] = u'GB'
Modele[779] = u'AU'
Modele[780] = u'NZ'
Modele[781] = u'IE'
# Modèles régionaux, pb du nocat pour les prononciations
Modele[782] = u'Acadie'
Modele[783] = u'Afrique'
Modele[784] = u'Afrique du Sud'
Modele[785] = u'Algérie'
Modele[786] = u'Allemagne'
Modele[787] = u'Alsace'
(contracted; show full)Modele[893] = u'Tunisie'
Modele[894] = u'Uruguay'
Modele[895] = u'Valence'
Modele[896] = u'Var'
Modele[897] = u'Velay'
Modele[898] = u'Venezuela'
Modele[899] = u'Viêt Nam'

# Abréviations (python pagegenerators.py -redirectonly:Template:!)
Modele[900] = u'FR'
Modele[901] = u'BE'
Modele[902] = u'CH'
Modele[903] = u'QC'
Modele[904] = u'CA'
Modele[905] = u'US'
Modele[906] = u'USA'
Modele[907] = u'UK'
Modele[908] = u'GB'
Modele[909] = u'AU'
Modele[910] = u'NZ'
Modele[911] = u'IE'
Modele[912] = u'EUModele[900] = u'EU'
Modele[901] = u'FR'
Modele[902] = u'BE'
Modele[903] = u'CH'
Modele[904] = u'QC'
Modele[905] = u'CA'

# Modèles des autres Wiktionnaires à convertir
LimitTemplate = 66
Template = range(1, LimitTemplate+1)
TemplateFR = range(1, LimitTemplate+1)
Template[1] = u'===Adjective==='
TemplateFR[1] = u'{{-adj-}}'
(contracted; show full)

	# Nettoyage
	if PageTemp.find(u'{{voir}}\n') != -1: PageTemp = PageTemp[0:PageTemp.find(u'{{voir}}\n')] + PageTemp[PageTemp.find(u'{{voir}}\n')+len(u'{{voir}}\n'):len(PageTemp)]
	if PageTemp.find(u'{{voir}}') != -1: PageTemp = PageTemp[0:PageTemp.find(u'{{voir}}')] + PageTemp[PageTemp.find(u'{{voir}}')+len(u'{{voir}}'):len(PageTemp)]
	

	if (PageTemp.find(u'{{vérifier') != -1 and (PageTemp.find(u'{{vérifier') < PageTemp.find(u'{{=') and PageTemp.find(u'{{=') != -1) or PageTemp.find(u'{{vérifier') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1) or PageTemp.find(u'{{PàS') != -1:
		PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'==')-1]
		PageTemp = PageTemp[PageTemp.find(u'==')-1:len(PageTemp)]

	# Clés de tri
	if PageTemp.find(u'{{clé de tri}}') != -1:
		PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri}}')] + PageTemp[PageTemp.find(u'{{clé de tri}}')+len(u'{{clé de tri}}'):len(PageTemp)]
	if PageTemp.find(u'{{clé de tri|' + PageHS.lower() + u'}}') != -1:
(contracted; show full)
	while PageTemp.find(u'— {{source|') != -1:
		PageTemp = PageTemp[0:PageTemp.find(u'— {{source|')] + PageTemp[PageTemp.find(u'— {{source|')+2:len(PageTemp)]
	while PageTemp.find(u'\n#*') != -1 and PageTemp.find(u'—') != -1:
		PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'\n#*')+len(u'\n#*')]
		PageTemp =  PageTemp[PageTemp.find(u'\n#*')+len(u'\n#*'):len(PageTemp)]
		
if PageTemp.find(u'—') !=-1 and PageTemp.find(u'—') < PageTemp.find(u'\n'):
			PageTemp2 = PageTemp[PageTemp.find(u'—')+1:len(PageTemp)]
			if PageTemp2.find(u'{{') < PageTemp2.find(u'}}'):
				while PageTemp2.find(u'\'\'') != -1 and PageTemp2.find(u'\'\'') < PageTemp2.find(u'{') and PageTemp2.find(u'\'\'') < PageTemp2.find(u'#*'):
					PageTemp = PageTemp[0:PageTemp.find(u'—')+1+PageTemp2.find(u'\'\'')] + PageTemp[PageTemp.find(u'—')+1+PageTemp2.find(u'\'\'')+2:len(PageTemp)]
					PageTemp2 = PageTemp[PageTemp.find(u'—')+1:len(PageTemp2)]
				while PageTemp[PageTemp.find(u'—')+1:PageTemp.find(u'—')+2] == u' ':
					PageTemp = PageTemp[0:PageTemp.find(u'—')+1] + PageTemp[PageTemp.find(u'—')+2:len(PageTemp)]
					PageTemp2 = PageTemp[PageTemp.find(u'—')+1:len(PageTemp2)]
				PageTemp =  PageTemp[0:PageTemp.find(u'—')] + u'\n#*:' + PageTemp[PageTemp.find(u'—')+1:PageTemp.find(u'—')+2].upper() + PageTemp[PageTemp.find(u'—')+2:len(PageTemp)]'''if PageTemp.find(u'—') !=-1 and PageTemp.find(u'—') < PageTemp.find(u'\n'):
			PageTemp2 = PageTemp[0:PageTemp.find(u'—')]
			if PageTemp2.rfind(u'{{langue|') != PageTemp2.rfind(u'{{langue|fr'):
				PageTemp2 = PageTemp[PageTemp.find(u'—')+1:len(PageTemp)]
				if PageTemp2.find(u'{{') < PageTemp2.find(u'}}'):
					while PageTemp2.find(u'\'\'') != -1 and PageTemp2.find(u'\'\'') < PageTemp2.find(u'{') and PageTemp2.find(u'\'\'') < PageTemp2.find(u'#*'):
						PageTemp = PageTemp[0:PageTemp.find(u'—')+1+PageTemp2.find(u'\'\'')] + PageTemp[PageTemp.find(u'—')+1+PageTemp2.find(u'\'\'')+2:len(PageTemp)]
						PageTemp2 = PageTemp[PageTemp.find(u'—')+1:len(PageTemp2)]
					while PageTemp[PageTemp.find(u'—')+1:PageTemp.find(u'—')+2] == u' ':
						PageTemp = PageTemp[0:PageTemp.find(u'—')+1] + PageTemp[PageTemp.find(u'—')+2:len(PageTemp)]
						PageTemp2 = PageTemp[PageTemp.find(u'—')+1:len(PageTemp2)]
					PageTemp =  PageTemp[0:PageTemp.find(u'—')] + u'\n#*:' + PageTemp[PageTemp.find(u'—')+1:PageTemp.find(u'—')+2].upper() + PageTemp[PageTemp.find(u'—')+2:len(PageTemp)]'''

	PageTemp = PageEnd + PageTemp
	PageEnd = u''

	#raw_input(PageTemp.encode(config.console_encoding, 'replace')[0:1000])
	while PageTemp.find(u'Catégorie:Villes') != -1:
		PageTemp = PageTemp[0:PageTemp.find(u'Catégorie:Villes')] + u'Catégorie:Localités' + PageTemp[PageTemp.find(u'Catégorie:Villes')+len(u'Catégorie:Villes'):len(PageTemp)]
(contracted; show full)
			codelangue = u'conv'
			EstCodeLangue = u'false'
		elif position == PageTemp.find(u'{{='):
			PageTemp2 = PageTemp[position+3:len(PageTemp)]
			if PageTemp2.find("}}") < PageTemp2.find("|") or PageTemp2.find("|") == -1:
				if PageTemp.find("{{=") < PageTemp.find("=}}"):
					codelangue = PageTemp[PageTemp.find("{{=")+3:PageTemp.find("=}}")]

					EstCodeLangue = u'true'
				else:
					print u'Problème de section dans ' + PageHS.encode(config.console_encoding, 'replace')
					return
			else:
				codelangue = PageTemp[PageTemp.find("{{=")+3:PageTemp.find("{{=")+3+PageTemp2.find("=|")]
				EstCodeLangue = u'true'
			PageTemp = PageTemp[0:position+2] + u'langue|' + codelangue + PageTemp[position+3+PageTemp2.find("}}"):len(PageTemp)]
			position = PageTemp.find("}}")
		elif position == PageTemp.find(u'{{langue|'):
			#print (PageEnd.encode(config.console_encoding, 'replace')[0:1000])
			#raw_input (PageTemp[0:position].encode(config.console_encoding, 'replace'))
			PageTemp2 = PageTemp[position+len(u'{{langue|'):len(PageTemp)]
			if PageTemp2.find("}}") < PageTemp2.find("|") or PageTemp2.find("|") == -1:
				if PageTemp.find(u'{{langue|') < PageTemp.find("}}"):
					codelangue = PageTemp[PageTemp.find(u'{{langue|')+len(u'{{langue|'):PageTemp.find("}}")]
					EstCodeLangue = u'true'
				else:
					PageTemp2 = PageTemp[PageTemp.find(u'}}')+2:len(PageTemp)]
					codelangue = PageTemp[PageTemp.find(u'{{langue|')+len(u'{{langue|'):PageTemp.find(u'}}')+2+PageTemp2.find(u'}}')]
					EstCodeLangue = u'true'
			else:
				codelangue = PageTemp[PageTemp.find(u'{{langue|')+len(u'{{langue|'):PageTemp.find(u'{{langue|')+len(u'{{langue|')+PageTemp2.find("}}")]
				EstCodeLangue = u'true'
				position = PageTemp.find("}}")
		elif position == PageTemp.find(u'{{langue}}'):
			# Recherche d'un codelangue à préciser
			PageTemp2 = PageTemp[PageTemp.find(u'}}')+2:len(PageTemp)]
			PageTemp2 = PageTemp[PageTemp.find(u'{{')+2:len(PageTemp)]
			PageTemp2 = PageTemp[0:PageTemp.find(u'}}')]
			if PageTemp2.find("|") != -1:
				codelangue = PageTemp2[PageTemp2.find("|")+1:len(PageTemp2)]
				EstCodeLangue = u'true'
				PageTemp = PageTemp[0:PageTemp.find(u'{{langue}}')] + u'{{langue|' + codelangue + u'}}' + PageTemp[PageTemp.find(u'{{langue}}')+len(u'{{langue}}'):len(PageTemp)]
				position = PageTemp.find("}}")
						
		position = position + 2
		PageEnd = PageEnd + PageTemp[0:position]		# Transfert vers la page finale de l'article jusqu'au modèle en traitement exclu
		PageTemp = PageTemp[position:len(PageTemp)]
		if PageTemp.find(" }}") < PageTemp.find("}}") and PageTemp.find(" }}") != -1 : # Détermination du caractère délimitant la fin du nom du modèle
			PageTemp = PageTemp[0:PageTemp.find(" }}")] + PageTemp[PageTemp.find(" }}")+1:len(PageTemp)]while PageTemp.find(" }}") < PageTemp.find("}}") and PageTemp.find(" }}") != -1 :
			PageTemp = PageTemp[0:PageTemp.find(" }}")] + PageTemp[PageTemp.find(" }}")+1:len(PageTemp)]
		# Modèles imbriqués
		if PageTemp.find("}}") > PageTemp.find("{{") and PageTemp.find("{{") != -1 :
			PageEnd = PageEnd + PageTemp[0:PageTemp.find("}}")+2]
			PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
			break
		if PageTemp.find("|") > PageTemp.find("}}"):
			position = PageTemp.find("}}")
		elif PageTemp.find("|") == -1:
			position = PageTemp.find("}}")
		else:
			position = PageTemp.find("|")
		# Nettoyage de la ponctuation en français
		while PageTemp.find(u' ,') != -1 and codelangue == u'fr':
			PageTemp = PageTemp[0:PageTemp.find(u' ,')] + PageTemp[PageTemp.find(u' ,')+1:len(PageTemp)]
		while PageTemp.find(u' .') != -1 and codelangue == u'fr':
			PageTemp = PageTemp[0:PageTemp.find(u' .')] + PageTemp[PageTemp.find(u' .')+1:len(PageTemp)]

		# Nettoyage de certains modèles
		if PageTemp[0:position] == u'en-conj-rég':
			PageTemp2 = PageTemp[position+1:len(PageTemp)]
			if PageTemp2.find(u'|') < PageTemp2.find(u'}}') and PageTemp2.find(u'|') != -1:
				if PageTemp2[0:PageTemp2.find(u'|')] == PageHS:
					PageTemp = PageTemp[0:position] + PageTemp[position+1+PageTemp2.find(u'|'):len(PageTemp)]
			else:
				if PageTemp2[0:PageTemp2.find(u'}}')] == PageHS:
					PageTemp = PageTemp[0:position] + PageTemp[position+1+PageTemp2.find(u'}}'):len(PageTemp)]
			
		#raw_input(PageEnd.encode(config.console_encoding, 'replace')[0:1000])
		# Comparaison avec chaque modèle connu
		#print PageTemp[0:position].encode(config.console_encoding, 'replace')
		for p in range(1,limit5):
			if Modele[p] == PageTemp[0:position]:
				#raw_input(codelangue)
				# Modèles spéciaux
				if not codelangue:
					#print(PageTemp.encode(config.console_encoding, 'replace')[0:1000])
					#raw_input("codelangue nul")
					if Modele[p] == u'formater':
						return
					elif Modele[p] == u'ébauche':
						return
					else:
						print u'Code langue manquant dans :'
						print Modele[p].encode(config.console_encoding, 'replace')
						PageEnd = u'{{formater|Code langue manquantprint (PageEnd.encode(config.console_encoding, 'replace')[0:1000])
		#print (PageTemp[0:position].encode(config.console_encoding, 'replace'))
		# Comparaison avec chaque modèle connu
		for p in range(1,limit6):
			if Modele[p] == PageTemp[0:position]:
				#print (Modele[p].encode(config.console_encoding, 'replace'))
				# Modèles spéciaux
				if not codelangue:
					if p < limit1 or p >= limit3:
						PageEnd = u'{{formater|Code langue manquant dans ' + Modele[p] + u'}}\n' + PageBegin
						sauvegarde(page,PageEnd)
						return

				if Modele[p] == u'term' or Modele[p] == u'terme' or Modele[p] == u'régio' or Modele[p] == u'région':
					ModeleT = PageTemp[PageTemp.find("|")+1:PageTemp.find("}}")]
					for p2 in range(1,limit56):
						if Modele[p2] == ModeleT or Modele[p2] == ModeleT[0:1].lower() + ModeleT[1:len(ModeleT)]:
							if EstCodeLangue == "false":
								PageEnd = PageEnd + Modele[p2] + "|nocat=1}}"
							else:
								PageEnd = PageEnd + Modele[p2] + "|" + codelangue + "}}"
							PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
							break							
					break
				elif Modele[p] == u'pron' or Modele[p] == u'dénominal de' or Modele[p] == u'déverbal de' or Modele[p] == u'superlatif de':
					# Trie des lettres de l'API
					if Modele[p] == u'pron':
						while PageTemp.find(u'\'') != -1 and PageTemp.find(u'\'') < PageTemp.find(u'}}'): PageTemp = PageTemp[0:PageTemp.find("\'")] + u'ˈ' + PageTemp[PageTemp.find(u'\'')+1:len(PageTemp)]
						while PageTemp.find(u'ε') != -1 and PageTemp.find(u'ε') < PageTemp.find(u'}}'): PageTemp = PageTemp[0:PageTemp.find(u'ε')] + u'ɛ' + PageTemp[PageTemp.find(u'ε')+1:len(PageTemp)]
						while PageTemp.find(u'ε̃') != -1 and PageTemp.find(u'ε̃') < PageTemp.find(u'}}'): PageTemp = PageTemp[0:PageTemp.find(u'ε̃')] + u'ɛ̃' + PageTemp[PageTemp.find(u'ε̃')+1:len(PageTemp)]
					if PageTemp[0:8] == u'pron||}}':
						PageEnd = PageEnd + PageTemp[0:PageTemp.find("}}")] + codelangue + "}}"
						PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
						break
					elif PageTemp[position:position+3] == u'|}}' or PageTemp[position:position+4] == u'| }}':
						PageEnd = PageEnd + PageTemp[0:position] + "||" + codelangue + "}}"
						PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
						break
					elif (PageTemp.find("lang=") != -1 and PageTemp.find("lang=") < PageTemp.find("}}")):
						PageEnd = PageEnd + PageTemp[0:PageTemp.find("}}")+2]
						PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
						break
					elif position == PageTemp.find(u'|'):
						PageTemp2 = PageTemp[position+1:PageTemp.find("}}")]
						if PageTemp2.find(u'|') == -1:
							PageEnd = PageEnd + PageTemp[0:PageTemp.find("}}")] + "|" + codelangue + "}}"
							PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
						else:
							PageEnd = PageEnd + PageTemp[0:PageTemp.find("}}")+2]
							PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
						break
					elif position == PageTemp.find("}}"):
						PageEnd = PageEnd + PageTemp[0:position] + "||" + codelangue + "}}"
						PageTemp = PageTemp[position+2:len(PageTemp)]
						break
					else:
						PageEnd = PageEnd + PageTemp[0:PageTemp.find("}}")] + "|" + codelangue + "}}"
						PageTemp = PageTemp[PageTemp.find("}}"if codelangue != u'conv':
						# Trie des lettres de l'API
						if Modele[p] == u'pron':
							while PageTemp.find(u'\'') != -1 and PageTemp.find(u'\'') < PageTemp.find(u'}}'): PageTemp = PageTemp[0:PageTemp.find(u'\'')] + u'ˈ' + PageTemp[PageTemp.find(u'\'')+1:len(PageTemp)]
							while PageTemp.find(u'ˈˈˈ') != -1 and PageTemp.find(u'ˈˈˈ') < PageTemp.find(u'}}'): PageTemp = PageTemp[0:PageTemp.find(u'ˈˈˈ')] + u'\'\'\'' + PageTemp[PageTemp.find(u'ˈˈˈ')+3:len(PageTemp)]	
							while PageTemp.find(u'ε') != -1 and PageTemp.find(u'ε') < PageTemp.find(u'}}'): PageTemp = PageTemp[0:PageTemp.find(u'ε')] + u'ɛ' + PageTemp[PageTemp.find(u'ε')+1:len(PageTemp)]
							while PageTemp.find(u'ε̃') != -1 and PageTemp.find(u'ε̃') < PageTemp.find(u'}}'): PageTemp = PageTemp[0:PageTemp.find(u'ε̃')] + u'ɛ̃' + PageTemp[PageTemp.find(u'ε̃')+1:len(PageTemp)]
						if PageTemp[0:8] == u'pron||}}':
							PageEnd = PageEnd + PageTemp[0:PageTemp.find("}}")] + codelangue + "}}"
							PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
							break
						elif PageTemp[position:position+3] == u'|}}' or PageTemp[position:position+4] == u'| }}':
							PageEnd = PageEnd + PageTemp[0:position] + "||" + codelangue + "}}"
							PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
							break
						elif (PageTemp.find("lang=") != -1 and PageTemp.find("lang=") < PageTemp.find("}}")):
							PageEnd = PageEnd + PageTemp[0:PageTemp.find("}}")+2]
							PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
							break
						elif position == PageTemp.find(u'|'):
							PageTemp2 = PageTemp[position+1:PageTemp.find("}}")]
							if PageTemp2.find(u'|') == -1:
								PageEnd = PageEnd + PageTemp[0:PageTemp.find("}}")] + "|" + codelangue + "}}"
								PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
							else:
								PageEnd = PageEnd + PageTemp[0:PageTemp.find("}}")+2]
								PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
							break
						elif position == PageTemp.find("}}"):
							PageEnd = PageEnd + PageTemp[0:position] + "||" + codelangue + "}}"
							PageTemp = PageTemp[position+2:len(PageTemp)]
							break
						else:
							PageEnd = PageEnd + PageTemp[0:PageTemp.find("}}")] + "|" + codelangue + "}}"
							PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
							break
					else:
						PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'}}')+2]
						PageTemp = PageTemp[PageTemp.find(u'}}')+2:len(PageTemp)]
						break
						
				#elif Modele[p] == u'fr-rég' or Modele[p] == u'fr-inv': synchro de la pronociation avec {{pron|
				elif Modele[p] == u'm' or Modele[p] == u'f':
					if trad == u'true' or (codelangue != u'en' and codelangue != u'zh' and codelangue != u'ja' and codelangue != u'ko'):
						PageEnd = PageEnd + PageTemp[0:PageTemp.find("}}")+2]
					else:
(contracted; show full)
					elif PageTemp[position+5:position+8] == "num" and PageTemp[position+5:position+9] != "num}":
						PageEnd = PageEnd + PageTemp[0:position] + "|" + codelangue + "|" + PageTemp[position+5:position+10] + "}}"
					else:
						PageEnd = PageEnd + PageTemp[0:position] + "|" + codelangue + "}}"
				elif p < limit2:	# 
Si on est dans un autre paragraphParagraphe sans code langue
					EstCodeLangue = "false"
					trad = u'false'
					PageEnd = PageEnd + PageTemp[0:position] + "}}"
				elif p < limit3:	# Si on est dans une ébauche
					PageEnd = PageEnd + PageTemp[0:position] + "|" + codelangue + "}}"
				elif p < limit4:Paragraphe sans code langue contenant un modèle
					EstCodeLangue = "false"
					trad = u'false'
					if PageTemp.find(u'}}') > PageTemp.find(u'{{') and PageTemp.find(u'{{') != -1:
						PageTemp2 = PageTemp[PageTemp.find(u'}}')+2:len(PageTemp)]
						PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'}}')+2+PageTemp2.find(u'}}')+2]
						PageTemp = PageTemp[PageTemp.find(u'}}')+2+PageTemp2.find(u'}}')+2:len(PageTemp)]
						break
					else:
						PageEnd = PageEnd + PageTemp[0:position] + "}}"
				elif p < limit4:	# ébauche : catégorisée quel que soit EstCodeLangue
					if codelangue:
						PageEnd = PageEnd + PageTemp[0:position] + "|" + codelangue + "}}"
					else:
						PageEnd = PageEnd + PageTemp[0:position] + "|nocat=1}}"		
				elif p < limit5:	# Paragraphe avec code langue
					if EstCodeLangue == "true":
						PageEnd = PageEnd + PageTemp[0:position] + "|" + codelangue + "}}"
					else:
						PageEnd = PageEnd + PageTemp[0:position] + "|nocat=1}}"					
				else:				# Paragraphe régional
					if PageEnd.rfind(u'{{') != -1:
						PageEnd2 = PageEnd[0:PageEnd.rfind(u'{{')]
						if EstCodeLangue == "true" and (PageEnd2.rfind(u'{{') != PageEnd2.rfind(u'{{pron|') or PageEnd.rfind(u'{{pron|') < PageEnd.rfind(u'\n') or PageEnd2.rfind(u'{{pron|') == -1) and ((PageTemp.find(u'{{') != PageTemp.find(u'{{pron|') or PageTemp.find(u'{{pron|') > PageTemp.find(u'\n')) or PageTemp.(contracted; show full)		except wikipedia.IsRedirectPage: return
		except wikipedia.LockedPage: return
		except pywikibot.EditConflict: return
		except wikipedia.ServerError: return
		except wikipedia.BadTitle: return
	
# Lancement

TraitementPage = modification(u'Utilisateur:JackBot/test')
'''
TraitementCategorie = crawlerCat(u'Catégorie:Wiktionnaire:Codes langue manquants',True,u'')
TraitementCategorie = crawlerCat(u'Catégorie:Wiktionnaire:Flexions à vérifier',True,u'')
TraitementLiens = crawlerLink(u'Modèle:1ergroupe',u'')
TraitementLiens = crawlerLink(u'Modèle:2egroupe',u'')
TraitementLiens = crawlerLink(u'Modèle:3egroupe',u'')
TraitementLiens = crawlerLink(u'Modèle:trad',u'')
TraitementCategorie = crawlerCat(u'Catégorie:Appels de modèles incorrects:fr-verbe-flexion incomplet',False,u'')

TraitementLiens = crawlerLink(u'Modèle:trad-début',u'putréfaction')
TraitementLiens = crawlerLink(u'Modèle:(',u'')
TraitementLiens = crawlerLink(u'Modèle:-flex-nom-',u'')
TraitementLiens = crawlerLink(u'Modèle:clé de tri',u'')

'''
TraitementLiens = crawlerLink(u'Modèle:(',u'impero')
TraitementLiens = crawlerLink(u'Modèle:-flex-nom-',u'')
TraitementLiens = crawlerLink(u'Modèle:clé de tri',u'')
TraitementLiens = crawlerLink(u'Modèle:trad-début',u'')

TraitementPage = modification(u'ejicio')
TraitementPage = modification(u'Utilisateur:JackBot/test')
TraitementFichier = crawlerFile('articles_list.txt')
TraitementUtilisateur = crawlerUser(u'User:JackBot')
TraitementCategorie = crawlerCat(u'Catégorie:Appels de modèles incorrects',True)
TraitementRecherche = crawlerSearch(u'chinois')
TraitementUtilisateur = crawlerUser(u'Utilisateur:JackBot')
TraitementTout = crawlerAll(u'')
while 1:
	TraitementRC = crawlerRC()
'''
</source>