Coucou les mecs,
Voulant convertir le code du Pybraces issu de edsharp et N'aimant pas me
faire ch... plus que ça, j'ai recherché s'il n'existait pas en ligne des
convertisseurs que je pourrais utiliser pour traduire instantanément du C#
en python.
Et apparemment les convertisseurs de code source en tout genre sont
foisonnant sur le net, si on en croit mon moteur de recherche favorit.
Néanmoins après avoir fait face à quelques enquiquinants problèmes
d'accessibilité, ce n'est qu'à mon troisième site visité que j'ai finalement
pu réalisé ce que je cherchais.
Certes c'est un outil qui a converti du C# au iron python à partir du
framework .net 4, mais je ne vais pas faire la fine bouche car ça me
facilite grandement le travail.
Ce site que ma foi je retiens pour mes futurs besoins de convertion en .net
se trouve à l'adresse:
http://codeconverter.sharpdevelop.net/SnippetConverter.aspx
Le code qu'il m'a produit est le suivant:
Début du code iron python
class pyBraces():
# InvokeSnippet method
def PyDent2Brace(self, sText):
sText = Util.RegExpReplaceCase(sText, @"^\t*\# end \w+$", "")
sOld = sText
while True:
sText = Util.RegExpReplaceCase(sText, @"^(\t*) ", "$1\t")
if sText == sOld:
break
else:
sOld = sText
# does not work
#
# sText = Util.RegExpReplaceCase(sText, @"^\t*\#", "#");
# sText = Util.RegExpReplaceCase(sText, @"^\#([^ ])", "# $1");
# string[] aIndent = Util.RegExpExtractCase(sText, @"^\t+");
# int iMax = 0;
# int iMin = 1000;
# foreach (string s in aIndent) {
# iLength = s.Length;
# if (iLength > iMax) iMax = iLength;
# if (iLength < iMin) iMin = iLength;
# }
#
# if (iMin > 0) {
# string sMin = "\t".PadRight(iMin, '\t');
# string sAbbrev = "\t".PadRight(iMin - 1, '\t');
# for (int n = 1; n <= iMax / iMin; n++) {
# sText = Util.RegExpReplaceCase(sText, @"^" + sMin, sAbbrev);
# }
# }
#
hl = HomerList(sText.Split('\n'))
i = 0
iOldLevel = 0
iCount = 0
a =
hlCode = HomerList()
hlLevel = HomerList()
bTripleQuote = False
iBrace = 0
iBracket = 0
iParen = 0
iTripleQuote = 0
iDoubleQuote = 0
iSingleQuote = 0
bQuote = False
while i < hl.Count:
sLine = hl[i]
sTrim = sLine.TrimEnd()
sPack = sTrim.TrimStart()
iTrim = sTrim.Length
iPack = sPack.Length
if not bTripleQuote and (iPack == 0 or sPack.StartsWith("#")):
hl[i] = sPack
else:
iParen = 0
iBracket = 0
iBrace = 0
iSingleQuote = 0
iDoubleQuote = 0
while True:
iCharCount = iPack
iChar = 0
while iChar < iCharCount:
if sPack[iChar] == '"':
if iChar > 0 and sPack[iChar - 1] == '\\':
break
if (iChar + 2 < iCharCount) and sPack[iChar + 1] == '"' and
sPack[iChar + 2] == '"':
if bTripleQuote and iTripleQuote > 0:
bTripleQuote = False
bQuote = False
iTripleQuote -= 1
iSingleQuote = 0
iDoubleQuote = 0
elif not bQuote and not bTripleQuote and iTripleQuote == 0:
bTripleQuote = True
bQuote = True
iTripleQuote += 1
iSingleQuote = 0
iDoubleQuote = 0
iChar += 2
elif bQuote and iDoubleQuote > 0:
bQuote = False
iDoubleQuote -= 1
elif not bQuote and iDoubleQuote == 0:
bQuote = True
iDoubleQuote += 1
elif sPack[iChar] == '\'':
if iChar > 0 and sPack[iChar - 1] == '\\':
break
if bQuote and iSingleQuote > 0:
bQuote = False
iSingleQuote -= 1
elif not bQuote and iSingleQuote == 0:
bQuote = True
iSingleQuote += 1
elif sPack[iChar] == '(':
if not bQuote:
iParen += 1
elif sPack[iChar] == ')':
if not bQuote:
iParen -= 1
elif sPack[iChar] == '[':
if not bQuote:
iBracket += 1
elif sPack[iChar] == ']':
if not bQuote:
iBracket -= 1
elif sPack[iChar] == '{':
if not bQuote:
iBrace += 1
elif sPack[iChar] == '}':
if not bQuote:
iBrace -= 1
iChar += 1
if (iParen + iBracket + iBrace == 0) or bTripleQuote:
break
hl[i] = sPack + @" \"
while i < hl.Count and (hl[i].Trim().Length == 0 or
hl[i].TrimStart().StartsWith("#")):
i += 1
if i == hl.Count:
break
sLine = hl[i]
sTrim = sLine.TrimEnd()
iTrim = sTrim.Length
sPack = sTrim.TrimStart()
iPack = sPack.Length
if i == hl.Count:
break
if bTripleQuote:
hl[i] = sTrim
else:
iNewLevel = iTrim - iPack
#if (i == 75 || i == 76) Dialog.Show(iNewLevel, hl[i]);
iDelta = iOldLevel - iNewLevel
k = i - 1
while k >= 0 and hl[k].StartsWith("#"):
k -= 1
k += 1
while hlCode.Count > 0 and iDelta > 0 and
Int32.Parse(hlLevel[hlLevel.Max]) >= iNewLevel:
hl.Insert(k, "} end " + hlCode.Pop())
hlLevel.Pop()
iCount -= 1
i += 1
k += 1
iDelta -= 1
if iOldLevel > iNewLevel:
hl.Insert(k, "")
i += 1
iOldLevel = iNewLevel
if sPack.EndsWith(":"):
sPack = sPack.TrimEnd(a) + " {"
iCount += 1
aCode = sPack.Split(' ')
hlCode.Add(aCode[0].TrimEnd('{'))
hlLevel.Add(iNewLevel.ToString())
elif sPack.EndsWith(@"\"):
hl[i] = sPack
i += 1
if i == iCount:
break
sPack = hl[i].Trim()
hl[i] = sPack
i += 1
while iCount > 0:
hl.Add("} end " + hlCode.Pop())
iCount -= 1
sText = String.Join("\n", hl.ToArray()).Trim() + "\n"
sText = Util.RegExpReplaceCase(sText, @"\n\n+", "\n\n")
sText = Util.RegExpReplaceCase(sText, @"\n+\n\}", "\n}")
sText = Util.RegExpReplaceCase(sText, @"\n+el", "\nel")
return sText
# PyDent2Brace method
def PyBrace2Dent(self, sText):
sText = Util.RegExpReplaceCase(sText, @"^\t*\# end \w+$", "")
#sText = Util.RegExpReplaceCase(sText, @"^\t*\#", "#");
#sText = Util.RegExpReplaceCase(sText, @"^\#([^ ])", "# $1");
hl = HomerList(sText.Split('\n'))
i = 0
iCount = 0
a =
hlCode = HomerList()
sIndent = App.ReadOption("IndentUnit", " ")
sIndent = Util.Literalize(sIndent)
while i < hl.Count:
sPack = hl[i].Trim()
#if (iCount > 0) sLine = "\t".PadLeft(iCount, '\t') + sPack;
if iCount > 0:
sLine = Util.Replicate(sIndent, iCount) + sPack
else:
sLine = sPack
if sPack.EndsWith("{"):
sLine = sLine.TrimEnd(a) + ":"
iCount += 1
aCode = sPack.Split(' ')
hlCode.Add(aCode[0].TrimEnd('{'))
elif sPack.StartsWith("}"):
sLine = "# end " + hlCode.Pop()
#if (iCount > 1) sLine = "\t".PadLeft(iCount - 1, '\t') + sLine;
if iCount > 1:
sLine = Util.Replicate(sIndent, iCount - 1) + sLine
iCount -= 1
hl[i] = sLine
i += 1
sText = String.Join("\n", hl.ToArray()).Trim() + "\n"
sText = Util.RegExpReplaceCase(sText, @"\n+\n", "\n\n")
#sText = Util.RegExpReplaceCase(sText, @"\n+(\t*)el", "\n$1el");
sText = Util.RegExpReplaceCase(sText, @"\n+(" + sIndent + ")el", "\n$1el")
return sText
# PyBrace2Dent method
Fin du code iron python
Faudra maintenant trouver les équivalant d'objets .net en python classique.
Yannick Daniel Youalé
La programmation est une religion. Aimez-la, ou quittez-la.
www.visuweb.net
----- Original Message -----
From: "_Abdel_" <[email protected]>
To: <[email protected]>
Sent: Tuesday, January 26, 2016 11:45 PM
Subject: [progliste] Re: Extension pour 6pad++
Ouais ouais JF,
En fait, je pense que le PB que tu rencontres est lié au fait que tu as
déjà un événement "pageOpened" dans ton fichier "6pad++.py", puisque tu
m'as dis que tu en avais programmé 1.
Le PB est donc parfaitement logique, si tu utilise l'extension forPython,
étant-donné que cette extension l'utilise aussi, ca a du faire un conflit
d'événement "pageOpened".
Pour solutionner le PB, à mon avis, il faudrait tout simplement réunir
tout ce que tu veux faire dans une seule et unique fonction événementielle
"pageOpened", et ça devrait rouler.
Pour les constantes, Quentin vient de nous les donner, merci à lui.
Bien amicalement,
Abdel.
----- Original Message -----
From: "Jean-François Colas" <[email protected]>
To: <[email protected]>
Sent: Tuesday, January 26, 2016 10:41 PM
Subject: [progliste] Re: Extension pour 6pad++
Salut Abdel et tous,
Ah OK, donc c'est le même secret que celui que je m'apprête à mettre en
place. Ne pourrait-on pas fabriquer un fichier de constantes, un dico, un
truc qui permettrait de savoir directement que 38 c'est la flèche bas ou
je ne sais trop quoi... Bon ça c'est pour le côté pauvre progra mmeur,
l'ordi n'en a rien à carrer... Puis ya pas d'urgence.
Pour le plantage, tu as sans doute raison, mais ya trop de choses qui ont
changé entre hier et aujourd'hui, aujourd'hui ton module n'est pas
activable et je ne sais pas pourquoi parce que je n'ai pas gardé celui
d'hier... Ce qui est sûr, c'est que je suis assez près de débusquer un
zoh-oli plantage, il sera certainement dû à un truc qu'on devrait pas
faire mais il plante 6Pad++ sérieux. Je continue mes investigations
demain. Je crois que c'est lié à la gestion des instances de la classe
Page, décidément j'ai quelques soucis avec celle-là lol.
J.-F.
Le 25/01/2016 23:49, _Abdel_ a écrit :
Salut JF et la liste,
Pour les scan codes, voici mon secret :
def onKeyDown(activePage, vk):
sp.say(str(vk), True)
return True
Tu es obligé de retourner True si tu veux pouvoir refermer le programme
avec Alt F4, sinon, il ne voudra pas se fermer.
C'est normal, on ne retourne False que si l'on souhaite que la touche en
question fasse une action différente de celle par défaut.
Pour le plantage, je ne pense pas qu'il vienne de là, car ici, sur trois
PC, je n'ai eu aucun plantage...
En faite, si je n'avais pas associé un événement "pageOpened", le PB que
j'avais, c'est que l'événement "keyDown" que j'ai utilisé ne
fonctionnait qu'à Louverture de 6pad++, mais pas si j'ouvrais une
nouvelle page...
Apparemment, selon les tests que j'ai fait, l'événement "keyDown"
personnalisé ne fonctionne que lors de l'ouverture de 6pad++, mais il ne
fonctionne pas si l'on ouvre une nouvelle page avec Contrôle O, c'est
pourquoi je l'ai appelé également dans la fonction callback de
l'événement "pageOpened".
Sinon, je m'excuse pour le double postage de mon dernier mail, ne
l'ayant pas vu passer sur la liste, je l'ai envoyé à nouveaux...
Voila, bonne soirée et à bientôt.
Bien amicalement,
Abdel.
----- Original Message ----- From: "Jean-François Colas"
<[email protected]>
To: <[email protected]>
Sent: Monday, January 25, 2016 10:59 PM
Subject: [progliste] Re: Extension pour 6pad++
Hello tous,
Petit passage rapide sur mon adresse du soir...
Juste deux petits points à aborder, dont un qui me semble pas mal
d'actualité si on parle de développements communs.
Abdel, en regardant la fonction onKeyDown de ton module, je crois piger
que le paramètre vk correspond aux "scan codes" des touches. Quelle est
ta source pour déterminer ces scan codes? Je crois qu'il y a longtemps,
j'avais une référence, mais apparemment, je ne la retrouve pas...
Sinon, quand j'ai mis la nouvelle version de forPython, j'ai eu droit à
un vieux plantage:
6pad++.exe
6pad++.exe ne répond pas
Windows peut rechercher une solution en ligne. Si vous fermez le
programme, vous risquez de
perdre des informations.
Rechercher une solution et fermer le programme
Fermer le programme
Attendre que le programme réponde.
Voir des détails sur ce problème
Pour une raison apparemment toute bête: A la fois dans ce module et
dans mon 6Pad++.py, se trouve une ligne
sp.window.addEvent ("pageOpened", uneFonctionAssociée)
Ca me paraît pas systématique à 100%, alors peut-être déjà, est-ce que
c'est plausible en soi, ou bien est-ce que le problème vient forcément
d'ailleurs?
Voilà, ce sera mon dernier mot du soir...
J.-F.
Le 23/01/2016 18:17, _Abdel_ a écrit :
Salut JF et la liste,
Merci, je te joins ce que j'ai pu faire jusqu'à présent.
Avec CTRL + F8, on bascule désormais entre le mode "Dire les numéros
de
lignes", "Dire les niveaux", "Dire les numéros de lignes et les
niveaux", et "Ne rien dire", qui est le choix par défaut.
PS :
Ta méthode pour la lecture des entêtes et très précise, car elle prend
en considération les doubles ou multiples tabulations.
On verra par la suite comment créer un menu, et proposer la
modifications des touches de racourcis.
Vous pouvez me dire ce que vous en pensez, et vous êtes tout à fait
autorisés à modifier le code comme vous voulez, c'est un travail de
partage et d'entraide.
Bien amicalement,
Abdel.
----- Original Message ----- From: "Jean-François Colas"
<[email protected]>
To: <[email protected]>
Sent: Saturday, January 23, 2016 2:39 PM
Subject: [progliste] Re: Extension pour 6pad++
Hello,
Avec, pourquoi pas, à terme, un module permettant de modifier un jeu
de raccourcis clavier, avec liste des fonctions disponibles,
détection
de conflits de raccourcis... histoire de ne pas s'y perdre. Comme ça,
tu distribue ton module, je modifie le jeu de raccourcis, tu
distribues une nouvelle version de ton module, plutôt que de tout
reprendre je réapplique chez moi mon jeu de raccourcis si besoin...
J.-F.
Le 21/01/2016 14:12, _Abdel_ a écrit :
OK Mathieu, super !
En fait, pour que tout le monde y trouve son compte, ne vous
inquiétez pas pour les raccourcis clavier, chacun pourra très bien
modifier ses sixpad.window.addAccelerator comme bon lui semble.
Le plus important, ce serait de réussir à créer une extension digne
de ce nom, qui permette à chacun d'entre nous de créer des
programmes
Python en toute accessibilité, avec ce super éditeur qu'est 6pad++ !
Bien amicalement,
Abdel.
----- Original Message ----- From: "Mathieu Barbe"
<[email protected]>
To: <[email protected]>
Sent: Thursday, January 21, 2016 1:53 PM
Subject: [progliste] Re: Extension pour 6pad++
C'est bon, ça marche.
C'est pas grâce à ta technique.
Je suis trop nul, pour mes tests j'avais ouvert des fichier python
sans fonctions.
Le boulait!
Merci.
Le 21/01/2016 12:24, _Abdel_ a écrit :
Salut Mathieu,
C'est vrai que j'ai aussi eu un peu de mal pour faire reconnaître
l'extension.
Essaie ce qui suit:
1. Tu ouvres l'éditeur 6pad++.
2. Tu presses la touche F12 pour afficher la console.
3. Dans la console, tu écris ce qui suit, sans les guillemets bien
entendu, puis tu valides avec entrée :
"sixpad.setConfig("extension", "plugins/forPython.py")
Après, pour vérifier l'activation, toujours dans la console, tu
écris ce qui suit, puis tu valides sur entrée :
"print(sixpad.getConfig("extension"))"
Attention, pour ceux qui ne sont pas familiers avec Python 3.4, le
paramètre de print doit être entre parenthèses.
Bien amicalement,
Abdel.
----- Original Message ----- From: "Mathieu Barbe"
<[email protected]>
To: <[email protected]>
Sent: Thursday, January 21, 2016 12:13 PM
Subject: [progliste] Re: Extension pour 6pad++
+1.
J'ai installé le plugins, mais cela ne fonctionne pas.
Puis-je voir si le plugins est bien lancé?
Math
Le 21/01/2016 12:12, QuentinC a écrit :
Salut,
En fait il faudrait utiliser des raccourcis genre Alt+Haut/Bas
pour aller de fonction en fonction ou de classe en classe. C'est
beaucoup plus pratique que de chercher F2.
Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe
Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille
est limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou
en
privé, je vous répondrez en privé.
--
Mathieu Barbe
Research Engineer at CEA-LETI
DRT/LETI/DACLE/ LIALP
Laboratoire Infrastructures et Ateliers pour le Logiciel sur
Puces
Commissariat à l’énergie atomique et aux énergies alternatives
MINATEC Campus | 17 rue des Martyrs | 38054 Grenoble Cedex 9
Tel : +33 (0)4 38 78 30 08
[email protected]
Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe
Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille
est limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en
privé, je vous répondrez en privé.
Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe
Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille
est
limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en
privé, je vous répondrez en privé.
--
Mathieu Barbe
Research Engineer at CEA-LETI
DRT/LETI/DACLE/ LIALP
Laboratoire Infrastructures et Ateliers pour le Logiciel sur Puces
Commissariat à l’énergie atomique et aux énergies alternatives
MINATEC Campus | 17 rue des Martyrs | 38054 Grenoble Cedex 9
Tel : +33 (0)4 38 78 30 08
[email protected]
Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe
Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille est
limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en
privé, je vous répondrez en privé.
Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe
Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille est
limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en
privé, je vous répondrez en privé.
Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe
Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille est
limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en
privé, je vous répondrez en privé.
Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe
Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille est
limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en
privé, je vous répondrez en privé.
Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe
Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille est
limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en privé,
je vous répondrez en privé.
Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe
Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille est
limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en privé,
je vous répondrez en privé.
Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe
Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille est limité
à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en privé,
je vous répondrez en privé.
Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe
Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille est limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en privé, je
vous répondrez en privé.