conversion-mediawiki-to-bbcode.py
Cet article a été mis à jour, vous consultez ici une archive de cet article!
version 3.8.1# Ce programme python contient dans le meme repertoire :
# texte a convertir.txt : le code mediawiki a traduire
# texte converti.txt : le bbcode cms obtenu après exécution du script
B=[]
#tableaux
B =B + ['[table style=" ','"]','<table','>']
B =B + ['[row]','','<tr>','']
B =B + ['[/row]','','</tr>','']
B =B + ['[col]','','<td>','']
B =B + ['[col style=" ','"]','<td ','>']
B =B + ['[/col]','','</td>','']
B =B + ['width: ',';','width="','"']
B =B + ['border-spacing: ','; ','border="','"']
B =B + ['margin: ','; ','cellspacing="','"']
B =B + ['padding: ','; ','cellpadding="','"']
B =B + ['','', '<div align="center">', '']# alignement déjà au centre par defaut
B =B + ['','', '<div align="right">', '']# non-géré !
B =B + ['','', '<div align="left">', '']# non-géré !
B =B + ['','','</div>','']# inutile
B =B + ['[/table]','','</table>','']
# termes non-geres, a eliminer
B =B + ['', '', '<br/>', ''] # ? saut de ligne ?
B =B + ['', '', '[[Catégorie:', ']]'] # + supprimer le texte associe
B =B + ['', '', '<Gallery>', '']
B =B + ['', '', '</Gallery>', '']
B =B + ['', '', '|frameless', '']
# Le cas des miniatures
B =B + ['[/img]', '', '|thumb|', ']]' ]
B =B + ['[img]/upload/mw_images/', '', '[[Image:', '']
B =B + ['', '', '|thumb', '']
# voir pour faire [img style="max-width: 150px;"]/upload/mw_images/...[/img]
B =B + ['', '', '|left', '']
B =B + ['', '', '|none', '']
B =B + ['', '', '{|', '']
B =B + ['', '', '|}', '']
B =B + ['', '', '|500px', ''] # Réglage img à dégager
B =B + ['', '', '|450px', ''] # Réglage img à dégager
B =B + ['', '', '|300px', ''] # Réglage img à dégager
B =B + ['', '', '|200px', ''] # Réglage img à dégager
B =B + ['', '', '|150px', ''] # Réglage img à dégager
B =B + [' ', '', '*', ''] # Suppression les puces mw
# plan du texte
B =B + [' ----- ', '', '=====', ''] # Toujours la plus longue chaine en 1er
B =B + [' ---- ', '', '====', ''] # pour éviter la recursivite
B =B + [' --- ', '', '===', '']
B =B + [' -- ', '', '==', '']
B =B + ['-- ', '', '-- ', ''] # mise en forme des
B =B + [' --', '', ' --', ''] # chapitres(un seul espace avant/après)
#divers
B =B + ['
Code :
', '<nowiki>', '</nowiki>']
', '
B =B + ['[youtube=560,315]https://www.youtube.com/watch?v=', '[/youtube]', '[https://www.youtube.com/watch?v=', ' Voir la vidéo]']
B =B + ['[dm]', '[/dm]', '[https://www.dailymotion.com/video/', ' Voir la vidéo]']
B =B + ['[vimeo]', '[/vimeo]', '[https://vimeo.com/', ' Voir la vidéo]']
B =B + ['[size=', ']', '<p style="font-size:', ';">']
B =B + ['[/size]', '', '</p>', '']
B =B + ['
Citation :
', '', '</blockquote>', '']', '', '<blockquote>', '']
B =B + ['
B =B + ['
#styles gras, italique souligne
B =B + ['', '','<b>','']
B =B + ['', '','<i>','']
B =B + ['', '','<u>','']
B =B + ['', '','</b>','']
B =B + ['', '','</i>','']
B =B + ['', '','</u>','']
B =B + ['', '', "'''", "'''"]
B =B + ['', '', "''", "''"]
B =B + ['', '', '<u>', '</u>']
#couleurs
B =B + ['[color=#', ']', '<span style="color:#', ';">']
B =B + ['[/color]', '', '</span>', '']
#smileys
B =B + ['
![:D](/cms/images/smileys/icon_biggrin.gif)
B =B + ['
![:)](/cms/images/smileys/icon_smile.gif)
B =B + ['
![:(](/cms/images/smileys/icon_sad.gif)
B =B + ['
![:shock:](/cms/images/smileys/icon_eek.gif)
B =B + ['8)', '', '[[image:icon_cool.gif]]', '']
B =B + ['
![:lol:](/cms/images/smileys/icon_lol.gif)
B =B + ['
![:mad:](/cms/images/smileys/icon_mad.gif)
B =B + ['
![:P](/cms/images/smileys/icon_razz.gif)
B =B + ['
![:oops:](/cms/images/smileys/icon_redface.gif)
B =B + ['
![:o](/cms/images/smileys/icon_surprised.gif)
B =B + ['
![:cry](/cms/images/smileys/icon_cry.gif)
B =B + ['
![:evil:](/cms/images/smileys/icon_evil.gif)
B =B + ['
![:twisted:](/cms/images/smileys/icon_twisted.gif)
B =B + ['
![:roll:](/cms/images/smileys/icon_rolleyes.gif)
B =B + ['
![:wink:](/cms/images/smileys/icon_wink.gif)
B =B + ['
![:!:](/cms/images/smileys/icon_exclaim.gif)
B =B + ['
![:???:](/cms/images/smileys/icon_confused2.gif)
B =B + ['
![:?:](/cms/images/smileys/icon_question.gif)
B =B + [':?', '', '[[image:icon_confused.gif]]', '']
B =B + ['
![:idea:](/cms/images/smileys/icon_idea.gif)
B =B + ['
![:arrow:](/cms/images/smileys/icon_arrow.gif)
B =B + ['
![:|](/cms/images/smileys/icon_neutral.gif)
B =B + ['
![:mrgreen:](/cms/images/smileys/icon_mrgreen.gif)
B =B + ['
![:hang:](/cms/images/smileys/icon_hangloose.gif)
B =B + ['
![:/:](/cms/images/smileys/icon_unhappy.gif)
B =B + ['
![:zyeuxkipic:](/cms/images/smileys/icon_exorbite.gif)
B =B + ['
![:help](/cms/images/smileys/icon_helpme.gif)
B =B + ['
![:love](/cms/images/smileys/icon_love.gif)
B =B + ['
![:mdr-f](/cms/images/smileys/icon_mdr-f.gif)
B =B + ['
![:bravo](/cms/images/smileys/icon_bravo.gif)
B =B + ['
![:tongue](/cms/images/smileys/icon_tongue.gif)
B =B + ['
![:jmincline](/cms/images/smileys/icon_remarquable.gif)
B =B + ['
![:gna:](/cms/images/smileys/icon_neztourne-f.gif)
B =B + ['
![:excitee:](/cms/images/smileys/icon_excitee.gif)
B =B + ['
![:ptdr](/cms/images/smileys/icon_ptdr.gif)
B =B + ['
![:pong](/cms/images/smileys/icon_pong.gif)
B =B + ['
![:meaculpa](/cms/images/smileys/icon_mea-culpa.gif)
B =B + ['
![:top:](/cms/images/smileys/icon_top.gif)
B =B + ['
![:dcroises](/cms/images/smileys/icon_jcroiselesdoigts.gif)
B =B + ['
![:respect](/cms/images/smileys/icon_respect.gif)
B =B + ['
![:hangf:](/cms/images/smileys/icon_hangloose-f.gif)
B =B + ['
![:sante](/cms/images/smileys/ahoy.gif)
B =B + ['
![:tchin](/cms/images/smileys/tchin.gif)
B =B + ['
![:ahyo](/cms/images/smileys/ahoy2.gif)
B =B + ['
![:joke](/cms/images/smileys/icon_joke.gif)
B =B + ['
![:cartonjaune:](/cms/images/smileys/foot-carton-jaune.gif)
B =B + ['
![:cartonrouge](/cms/images/smileys/foot-carton-rouge.gif)
B =B + ['
![:nrv](/cms/images/smileys/icon_nrv.gif)
B =B + ['
![:furax](/cms/images/smileys/icon_furax.gif)
B =B + ['
![:idea](/cms/images/smileys/icon_idea2.gif)
B =B + ['
![:wtf](/cms/images/smileys/icon_wtf.gif)
B =B + ['
![:think](/cms/images/smileys/icon_think.gif)
B =B + ['
![:cramer](/cms/images/smileys/Cramer.gif)
B =B + ['
![:CramerJ](/cms/images/smileys/CramerJ.gif)
B =B + ['
![:merci](/cms/images/smileys/pancarte-merci.gif)
B =B + ['
![:+1:](/cms/images/smileys/pancarte-plus1.gif)
B =B + ['
![:poups](/cms/images/smileys/pancarte-oops.png)
B =B + ['
![:tusort](/cms/images/smileys/pancarte-tusort.gif)
B =B + ['
![:tgenial](/cms/images/smileys/icon_tgenial.gif)
B =B + ['
![:upup](/cms/images/smileys/pancarte-upup.gif)
B =B + ['
![:gne?](/cms/images/smileys/pancarte-gne.gif)
B =B + ['
![:bienvwenue:](/cms/images/smileys/bienvwenue.gif)
B =B + ['
![:vatependre](/cms/images/smileys/pancarte-va-te-pendre.gif)
B =B + ['
![:fuck](/cms/images/smileys/pancarte-fuck.gif)
B =B + ['
![:dejadehors](/cms/images/smileys/pancarte-deja-dehors.gif)
B =B + ['
![:heh-hee:](/cms/images/smileys/icon_heh-hee.gif)
#images
B =B + ['[img]/upload/mw_images/', '[/img]', '[[image:', ']]'] # balise image "classique"
B =B + ['[img]/upload/mw_images/', '[/img]', 'image:', '|'] # le cas particulier gallery : pas de [[ mais separateurlien externe
#Fichier
B =B + ['[img]/upload/mw_images/', '[/img]', '[[Fichier:', ']]']
B =B + ['[img]/upload/mw_images/', '[/img]','[img]/upload/mw_images/',']]']
#lien externe
B =B + ['[url]http', '[/url]', '[http', ']']
#lien interne
B =B + ['[link]', '[/link]', '[[', ']]']
# conversion des caracteres speciaux
H=[]
H=H+[' ','_'] #supprimer espaces
H=H+[':','_']
H=H+[',','_']
H=H+[';','_']
H=H+['à','a']
H=H+['â','a']
H=H+['ä','a']
H=H+['ç','c']
H=H+['é','e']
H=H+['è','e']
H=H+['ê','e']
H=H+['ë','e']
H=H+['ï','i']
H=H+['î','i']
H=H+['ô','o']
H=H+['ö','o']
H=H+['ù','u']
H=H+['û','u']
H=H+['ü','u']
H=H+['__','_'] # suppression des
H=H+['__','_'] # espaces multiples
#try: (pas utilise pour debug)
if 1==1:
# la conversion peut commencer !
destination = open('texte converti.txt', "w")
with open('texte a convertir.txt','r')as source:
nblignevide=0
for ligne in source:
A=(ligne.strip('\n'))
if A=='':
nblignevide= nblignevide +1
else:
nblignevide =0
# recherche mots clé
for i in range(0,len(B),4):
for j in range(0,10):
C=A.lower().find(B[i+2].lower()) # 1er mot cle (insensible a la casse)
if C<0: # introuvable dans cette ligne :
break # abandon
if len(B[i+3])>0:
D=A.lower().find(B[i+3].lower(),C+len(B[i+2])) # 2e mot cle présent ?
else:
D=-1
if D<0: #un seul remplacement ?
A=A[:C]+B[i]+A[C+len(B[i+2]):]
else: # 2 remplacements
A=A[:C]+B[i]+A[C+len(B[i+2])
![:D](/cms/images/smileys/icon_biggrin.gif)
C=C+len(B[i])
D=D+len(B[i])-len(B[i+2]) # Mots clé remplacés. Ils contiennent une chaîne entre C et D
# Cas particuliers
if B[i+2]=='[[Catégorie:':
A=A[:C]+ A[D:] #supprimer les catégories
if B[i+1]=='[/url]' or B[i+1]=='[/link]' or B[i+1]=='[/img]': #recherche lien (separateur + texte)
if B[i+1]=='[/url]':
S=' ' # separateur lien externe
else:
S='|' # separateur lien interne
E=A.find(S,C) # rechercher le separateur lien/texte
if E<0 and B[i+1]=='[/link]': # pas de texte associe au lien interne ? il-apparaitrait-comme-ca-pas-beau
G='|'+A[C
![:D](/cms/images/smileys/icon_biggrin.gif)
F=G.replace('_',' ') # supprimer les _ du texte pour la lisibilite
A=A[
![:D](/cms/images/smileys/icon_biggrin.gif)
E=D # actualiser position du |separateur
D=D+len(F) # actualiser longueur de chaîne
if E>0 and E<(D): # si le texte alternatif existe
A=A[:C-5]+'='+A[C-4:]# remplacer [ par =
A=A[:E]+']'+A[E+1:]# remplacer espace par ]
D=E
print (A)
# formater le lien interne : en minuscules, ni espace ni accents
if S=='|':
G=A[C
![:D](/cms/images/smileys/icon_biggrin.gif)
F=G.strip(" ") # supprimer espaces parasites eventuels
for k in range(0,len(H),2):
G=F.replace(H[k],H[k+1]) # liste des modifs voir la table 'H = H + ...' plus haut
F=G
if B[i+1]=='[/link]': #liens internes:
G=F.lower() # en minuscules
F=G.replace('_','-') # tiret remplace underscore
A=A[:C] + F + A[D:]
if nblignevide< 2:
destination.write(A+"\n")
#print (A)
destination.close()
print('Conversion terminée !')
print('Le résultat de la conversion se trouve dans le fichier suivant :')
print('"texte converti.txt"')
#except:
if 1==0:
if 1==0:
print('Le fichier à traiter:')
print('"texte a convertir.txt"')
print('est introuvable. Il doit être dans le même répertoire que ce programme !')
else:
print(Exception)