IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres IDE Pascal Discussion :

Liste des fonctions dans Notepad++


Sujet :

Autres IDE Pascal

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 823
    Points : 13 662
    Points
    13 662
    Billets dans le blog
    8
    Par défaut Liste des fonctions dans Notepad++
    Bonjour !

    Je relaie une question qui m'a été posée par message privé. Quelqu'un aurait-il une idée de ce qu'il faudrait faire pour que la liste des fonctions... fonctionne dans Notepad++, pour un fichier source en Pascal ? Pour le moment la liste est toujours vide, alors qu'avec du C (par exemple), ça marche très bien.
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 823
    Points : 13 662
    Points
    13 662
    Billets dans le blog
    8

  3. #3
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    (Aparté: le RegExp est toujours aussi imbuvable ...).

    Juste pour le fun et comme "proof of concept", voici des modifications pour un début de reconnaissance des fonctions et procédures Pascal dans Notepad++.


    Ajouter la ligne suivante vers le début du fichier "functionList.xml" dans "<associationMap>...</associationMap>", pour ajouter la reconnaissance du pascal:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    			<association id=   "pascal_function"      langID="11"                          />

    Et voici le corps, à ajouter dans le même fichier dans "<parsers>...</parsers>":
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    			<!-- ========================================= [ Pascal ] -->
     
    			<parser
    				displayName="Pascal"
    				id         ="pascal_function"
    			>
    				<function
    					mainExpr="^\s*(procedure|function)\s+[A-Za-z_][\w.]*\s*(\(|:|;)"
    				>
    					<functionName>
    						<nameExpr expr="[A-Za-z_][\w.]*\s*(\(|:|;)" />
    						<nameExpr expr="[A-Za-z_][\w.]*" />
    					</functionName>
    				</function>
    			</parser>
     
    			<!-- ================================================================= -->


    Je précise que c'est loin d'être fonctionnel. J'ai notamment shunté plusieurs choses comme les commentaires, les paramètres, les classes, les constructor/destructor etc ... De plus, je ne vois pas trop comment faire la distinction au niveau des sections "interface" et "implémentation" du fichier source concerné. Mais encore une fois, c'est juste pour prouver que c'est, au moins théoriquement, faisable ...


    PS. Comme indiqué dans la documentation, faire les modifs dans le "bon" fichier "functionList.xml": celui dans dans %APPDATA%\roaming\notepad++\ (pour Windows 7 par exemple).
    PS2. Corps modifié (simplification).

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 823
    Points : 13 662
    Points
    13 662
    Billets dans le blog
    8
    Par défaut
    @FChrisF

    Cela semble fonctionner. Bravo ! et merci.

  5. #5
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Cela semble fonctionner. Bravo ! et merci.
    Je vous en prie. Ceci étant, encore une fois c'est plus une ébauche qu'autre chose.


    Voici une version, un peu plus complète et également simplifiée (i.e. acceptant certains identifiants non acceptés par le compilateur), avec l'ajout des constructor/destructor et la prise en compte des classes (affichage sous forme de nœuds - cf. capture).

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    			<!-- ========================================= [ Pascal ] -->
     
    			<parser
    				displayName="Pascal"
    				id         ="pascal_function"
    			>
    				<function
    					mainExpr="^\s*(procedure|function|constructor|destructor)\s+\w+(|\.\w+)\s*(\(|:|;)"
    				>
    					<functionName>
    						<nameExpr expr="\w+\s*(\(|:|;)" />
    						<nameExpr expr="\w+" />
    					</functionName>
    					<className>
    						<nameExpr expr="\w+\.\w+\s*(\(|:|;)" />
    						<nameExpr expr="\w+" />
    					</className>
    				</function>
    			</parser>
     
    			<!-- ================================================================= -->



    Nom : CaptureNotepad++PascalFunc.png
Affichages : 1719
Taille : 17,3 Ko

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 823
    Points : 13 662
    Points
    13 662
    Billets dans le blog
    8
    Par défaut
    Merci pour la nouvelle version. Je vais de ce pas l'essayer.

    Citation Envoyé par FChrisF Voir le message
    Ceci étant, encore une fois c'est plus une ébauche qu'autre chose.
    Oui, j'ai bien noté cela.

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 823
    Points : 13 662
    Points
    13 662
    Billets dans le blog
    8
    Par défaut
    J'ai fait quelques essais de la nouvelle version : ça paraît fonctionner correctement. Pour moi j'en suis content.

  8. #8
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    Merci pour les tests. Je vais laisser les choses en l'état ...

    Pour infos, en dehors du problème de la non reconnaissance (?) des sections interface/implémentation, les 2 "bugs" les plus communs avec cette version sont:

    - l'acceptation incorrecte des noms de classe et de fonction/procédure commençant par un chiffre. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function 1titi: boolean;
    begin
    end;
    La correction est facile: il suffit de remplacer toutes les instances de "\w+" en "[A-Za-z_]\w*". Ceci étant, je pense personnellement que cela alourdit les paramètres et ralentit inutilement le traitement d'analyse; de mon point de vue - mais ce n'est que mon point de vue-, ce n'est pas à l'éditeur de faire le travail du compilateur.

    - l'analyse incorrecte dans les commentaires: les fonctions/procédures "acceptables" dans les commentaires sont incorrectement traitées et acceptées. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (*
    function titi73: boolean;
    begin
    end;
    *)
    La correction passe là probablement par l'utilisation - restant à faire- du champ "commentExpr" du "parser".

  9. #9
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 823
    Points : 13 662
    Points
    13 662
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par FChrisF Voir le message
    - l'acceptation incorrecte des noms de classe et de fonction/procédure commençant par un chiffre. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function 1titi: boolean;
    begin
    end;
    La correction est facile: il suffit de remplacer toutes les instances de "\w+" en "[A-Za-z_]\w*". Ceci étant, je pense personnellement que cela alourdit les paramètres et ralentit inutilement le traitement d'analyse; de mon point de vue - mais ce n'est que mon point de vue-, ce n'est pas à l'éditeur de faire le travail du compilateur.
    Je pense aussi comme vous que ce n'est pas un problème. Le code est supposé être valide.

    Citation Envoyé par FChrisF Voir le message
    - l'analyse incorrecte dans les commentaires: les fonctions/procédures "acceptables" dans les commentaires sont incorrectement traitées et acceptées. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (*
    function titi73: boolean;
    begin
    end;
    *)
    La correction passe là probablement par l'utilisation - restant à faire- du champ "commentExpr" du "parser".
    Bon, je vais faire ma part du travail : je vais m'occuper de cette partie-là.

    P.-S. Pour la différence entre interface et implémentation, là je ne pense pas qu'on puisse résoudre ce problème par les expressions régulières. D'ailleurs je n'ai pas fait attention à la façon dont se comporte le logiciel dans ce cas-là. Est-ce qu'il liste deux fois les mêmes fonctions ? Je vais regarder ça de plus près.

  10. #10
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    Je n'avais pas vu (il faut dire que je n'avais pas fait de recherche préalable), mais cela a déjà été abordé: cf. https://github.com/notepad-plus-plus...ull/3663/files

    Même si d'après son auteur, ce n'est pas non plus complètement OK: cf. https://github.com/notepad-plus-plus...ment-354602383 .

    PS. Je n'ai pas fait de test.

  11. #11
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 823
    Points : 13 662
    Points
    13 662
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par FChrisF Voir le message
    Je n'avais pas vu (il faut dire que je n'avais pas fait de recherche préalable), mais cela a déjà été abordé: cf. https://github.com/notepad-plus-plus...ull/3663/files
    Ah tiens, intéressant. Moi non plus je n'avais pas vu ça.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2017
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    @FChrisF

    Bravo, votre solution fonctionne mieux que la solution elaboree au GitHub. Plus elegante, beaucoup plus petite.....BRAVO !!!

    Pouvez vous perfectionner en incluant "IMPLEMENTATION" dans la liste, entre les 2 sets des noms des functions? Ils apparaisen 2 fois et je pense que "IMPLEMENTATION" doit etre aussi present dans la liste.

    Aussi, si on a des functions/procedures a l'interieur d'une function/procedure, la liste doit presenter les noms arborescent (comme tControl le fait dans votre capture d'ecran).
    J'ai vu que les petits symboles a l'avant de tControl est different que celle des functions. Ou peut on changer ces symboles?

    Pouvez vous, si'l i a pas trop de boulot pour vous, ajouter le parser?

    Je pense aussi que les devs de N++ doivent inclure cet parser dans leur "functionList.xml". J'ai essaie de les contacter par e-mail mais pas de reponse.

    Encore une fois...MERCI BEAUCOUP.
    Bon travail.

  13. #13
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    Merci.

    En ce qui concerne vos questions :


    Citation Envoyé par TeDDy-Portos Voir le message
    Pouvez vous perfectionner en incluant "IMPLEMENTATION" dans la liste, entre les 2 sets des noms des functions? Ils apparaisen 2 fois et je pense que "IMPLEMENTATION" doit etre aussi present dans la liste.
    Je ne suis pas certain de comprendre votre demande.

    Si elle porte sur la possibilité de distinguer les deux sections interface et implementation, je n'ai a priori pas de solution simple pour le moment. J'avais bien pensé essayer de créer 2 "super-classes" qui auraient pour but de créer un premier niveau de 2 "super-nodes", avec ensuite les fonctions et les classes à l'intérieur: tout cela en essayant de "détourner" la section classRange de sa fonction première. Mais je n'ai pas réussi à le faire fonctionner; en fait, je n'arrive même pas à faire fonctionner la section classRange du tout ...

    A priori, distinguer ces 2 sections sans l'aide de Notepad++ (i.e. avec un paramètre dédié, et donc du code en plus) me semble peu probable. L'auteur de la proposition sur Github s'y est essayé, en parsant la zone des paramètres et en analysant ce qui se trouve juste après. Le résultat est désastreux pour les fonctions et procédures imbriquées, qui ne sont alors plus reconnues du tout (plus d'autres anomalies plus anecdotiques).

    Si elle porte par contre juste sur la possibilité d'ajouter les 2 noms "interface" et "implementation" dans la la liste des fonctions, cela est faisable, bien que le résultat est, de mon point de vue, peu probant (i.e. ces deux noms sont un peu "noyés" dans la liste des fonctions et procédures).

    Voici le code avec les modifications nécessaires:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
                <!-- ========================================= [ Pascal ] -->
     
                <parser
                    displayName="Pascal"
                    id         ="pascal_function"
                >
                    <function
                        mainExpr="^\s*((procedure|function|constructor|destructor)\s+\w+(|\.\w+)\s*(\(|:|;))|interface|implementation"
                    >
                        <functionName>
                            <nameExpr expr="(\w+\s*(\(|:|;))|interface|implementation" />
                            <nameExpr expr="\w+" />
                        </functionName>
                        <className>
                            <nameExpr expr="\w+\.\w+\s*(\(|:|;)" />
                            <nameExpr expr="\w+" />
                        </className>
                    </function>
                </parser>
     
                <!-- ================================================================= -->





    Citation Envoyé par TeDDy-Portos Voir le message
    Aussi, si on a des functions/procedures a l'interieur d'une function/procedure, la liste doit presenter les noms arborescent (comme tControl le fait dans votre capture d'ecran).
    Là, honnêtement je ne vois pas comment. Il me semble a apriori impossible (enfin disons très, très difficile) de distinguer une zone de déclaration de fonctions et de procédures, de fonctions/procédures imbriquées.

    Exemple (notez la grande similarité du code):

    Déclarations dans la zone interface (ou éventuellement implementation, mais avec la mention forward en plus dans ce dernier cas):
    Code PASCAL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function MyFonc1(const param1: integer;  var param2: integer): integer;
    function MyFonc2(const param1: integer;  var param2: integer): integer;
    function MyFonc3(const param1: integer;  var param2: integer): integer;

    Fonctions imbriquées dans la zone implementation:
    Code PASCAL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function MyFonc1(const param1: integer;  var param2: integer): integer;
      function MyFonc2(const param1: integer;  var param2: integer): integer;
        function MyFonc3(const param1: integer;  var param2: integer): integer;
        begin
          ...
        end;
      begin
        ...
      end;
    begin
     ...
    end;





    Citation Envoyé par TeDDy-Portos Voir le message
    J'ai vu que les petits symboles a l'avant de tControl est different que celle des functions. Ou peut on changer ces symboles?
    Je n'en sais rien, mais à vue de nez je dirais que c'est probablement "hardcodé" au niveau de Notepad++. Il y bien un paramètre displayMode, mais il semble a priori pour le moment non fonctionnel; et de toute façon, il ne répond pas vraiment à votre demande.



    Citation Envoyé par TeDDy-Portos Voir le message
    Pouvez vous, si'l i a pas trop de boulot pour vous, ajouter le parser?
    Désolé, je ne comprends pas cette demande. Pourriez-vous préciser SVP ?

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2017
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    Pouvez vous perfectionner en incluant "IMPLEMENTATION" dans la liste, entre les 2 sets des noms des functions? Ils apparaisen 2 fois et je pense que "IMPLEMENTATION" doit etre aussi present dans la liste.
    Dans une unit, on a:
    func1
    func2
    proc1
    IMPLEMENTATION
    func1
    func2
    proc1

    La liste des fonctions affiche maintenant, dans l'ordre dapparition en fichier:
    func1
    func2
    proc1
    <---------------IMPLEMENTATION (preferable avec autre couleur)
    func1
    func2
    proc1
    (autrement dit, de reconaitre et aficher le mot IMPLEMENTATION dans la liste)

    Aussi, si on a des functions/procedures a l'interieur d'une function/procedure, la liste doit presenter les noms arborescent (comme tControl le fait dans votre capture d'ecran).
    Si dans le fichier on a:

    Procedure/function boo;
    Function 1
    Function 2
    Function 3
    BEGIN
    END; {Procedure/function boo}

    la liste d'aficher
    -Procedure/function boo;
    --Function 1
    --Function 2
    --Function 3
    (expandable tree, comme vous avez dans votre capture d'ecran pour TCONTROL, TNonVisualControl......)


    Dans votre exemple 1, les fonctions sont suivies(au meme niveau), pas imbriques(pas de "expandable tree" pour eux.
    C'est pour ex. 2 que "expandable tree" doit copier la facon d'afichage du tControl (classe ou object).

    Pouvez vous, si'l i a pas trop de boulot pour vous, ajouter le parser?
    Vous avez deja ajoute le parser, je desirais vous encourager de le perfectionner, tenant compte si possible des suggestions expliquees

  15. #15
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    Précision:

    Je n'ai aucun contact particulier avec le développeur de Notepad++. Je ne suis qu'un utilisateur ordinateur de cet éditeur de texte. En conséquence, je ne peux proposer que ce qui est possible avec l'utilisation de la liste des fonctions prévues au sein de Notepad++ (cf. http://notepad-plus-plus.org/feature...tion-list.html).



    L'utilisation de couleur pour différencier les mots "interface" et "implémentation" au sein de la liste des fonctions/procédures est certes une bonne idée; mais il n'existe aucun moyen actuellement pour le faire. Il faudra donc se contenter de la couleur "normale" (avec ma dernière version du parser), ce qui rend malheureusement ces termes peu visibles en effet:

    Nom : CaptureNotepad++PascalFunc2.png
Affichages : 1317
Taille : 15,3 Ko



    J'ai par ailleurs bien compris votre demande en ce qui concerne les fonctions/procédure imbriquées: mais cela n'est pas possible (de mon point de vue). Comme je l'ai indiqué dans mon message précédent, les expressions sont trop similaires entre les déclarations et les imbrications. L'outil d'analyse de fonctions au sein de Notepad++ utilise uniquement les RegEx lors de sa reconnaissance: il n'est pas question ici d'analyse de code ou de toute autre chose aussi complexe.

Discussions similaires

  1. [Python 3.X] Mettre des fonctions dans une liste sans qu'elles soient lancées
    Par darkslights dans le forum Général Python
    Réponses: 3
    Dernier message: 07/05/2018, 12h41
  2. Stocker des fonctions dans une liste ou un dico
    Par Mistervanhalen dans le forum Général Python
    Réponses: 2
    Dernier message: 21/01/2009, 13h33
  3. Enchainer des fonctions dans un onclick d'un bouton
    Par jpg dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/10/2004, 16h51
  4. [VBA-E] Ajouter des fonctions dans Excel
    Par Clezio dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/03/2004, 01h18
  5. Liste des fonctions
    Par Mookie dans le forum C
    Réponses: 2
    Dernier message: 22/09/2003, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo