Tutoriel: Documenter un code avec Doxygen

Introduction à Doxygen

    A l'instar de Javadoc, Doxygen est un lgociel libre de documentation de code possédant des capacités de génération de documentation à partir du code source d'un programme. Pour cela il tient compte de la syntaxe et de la structure du langage du programme ainsi que des commentaires associés à condition que ceux-ci soient écrit dans un format adapté. C'est cette manière de commenter que nous allons étudier dans cet article.
    La génération de documentation peut être faite à partir de code dans les langages suivants: C, C++, Java, Objective C, Python, IDL, VHDL et dans une certaine mesure PHP, C# et D. Le résultat final est une documentation complète générée en HTML (compressé ou non), LaTeX, RTF, PostScript, PDF avec hyperliens, et XML.
 
Les logiciels nécessaires à cette génération sont:
    - Doxygen, pour la génération de documentation au format HTML, LaTex, PostScript et XML...
                Installation sous windows:
                   télécharger la dernière version et puis lancer doxygen-xxx-setup.exe
                Installation sous Linux:
                   sudo apt-get install doxygen doxygen-gui
 
    - Graphviz, pour la génération de graphes (graphes d'appel, de dépendances, ...).
                Installation sous windows:
                   télécharger la dernière version et puis lancer graphviz-xxx.msi
                Installation sous Linux:
                   sudo apt-get install graphviz
 
    - MikTex pour la génération de documentation au format pdf avec hyperliens.
                Installation sous windows:
                   télécharger la dernière version et puis lancer basic-miktex-xxx.exe
 
    - HTML WorkShop, pour la génération de documentation au format HTML compressé.
                Installation sous windows:
                   télécharger la dernière version et puis lancer htmlhelp.exe

Commenter son code avec Doxygen

Généralités dans les commentaires

    Afin de différencier dans un fichier les commentaires à l'intention de Doxygen de ceux qui ne sont pas à prendre en compte, Doxygen possède sa propre norme de documentation, ou plutôt ses propres normes puiqu'il vous permet le choix entre l'une ou l'autre de ses différentes formes suivantes:
                     /**
                      * Ceci est un commentaire multiligne compris par Doxygen.
                      * C'est cette convention que nous utiliserons par la suite....
                      */
 
                     /*!
                      * ... Remarquez toutefois que suivant votre propre goût,
                      * vous pouvez utilisez celle-ci.....
                      */
 
                     //!
                     //! ... ou celle-là. L'important comme souligné dans l'article précédent de ce dossier,
                     //! c'est de concerver la même convention tout au long de votre programme....
                     //!
 
                     ///
                     /// ... Toutes ces formes de commentaires multilignes
                     /// peuvent toutefois être utilisez de façon monoligne...
                     ///
 
                     int iValeur = 5; /** ... et ce même après une ligne de code. */
 
                     /* En revanche, les formes de commentaires conventionnelles */
                     // ne seront pas pris en compte par Doxygen.

Listes des attributs

    Afin de préciser et de donner du sens aux commentaires, chaque information essentielle dispose d'une balise pour en préciser la nature. Une balise peut s'écrire \balise ou @balise. Par la suite, nous utiliserons la convention \balise.
Voici la liste des balises Doxygen les plus courantes (par ordre alphabétique):
    \a           Utiliser pour faire ressortir un paramètre dans sa description.
                      ex:   /** ...les coordonnées \a x et \a y du point.... */
                             donne 
                             ...les coordonnées x et y du point....
    \author  {liste d'auteur}    
                   Utiliser pour indiquer l'auteur du fichier ou de la fonction, structure ou de la chose décrite.
                       ex:   /** \author Miroslav */
    \b           Utiliser pour mettre en gras un mot dans une description; équivalent à mot en HTML.
                      ex:   /** ...il est \b important que.... */   donne   ...il est important que....
    \brief     Utiliser pour créer un résumé de description.
                      ex:    /**
                                 * \brief Ici le résumé de la description...
                                 *...qui peut prendre plusieurs lignes (mais rester bref)
                                 *
                                 * Ici la description complète...
                                 */
    \bug       Utiliser pour indiquer un bug dans une fonction ou un morceau de programme.
                      ex:   /** \bug La probabilité calculée dépasse parfois 1. */
    \class [] []    
                  Utiliser pour décrire une classe. Le premier paramètre est obligatoire, les suivants optionnels.
                  Attention toutefois à ce que les paramètres soit corrects, la casse est prise en compte.
                      ex:   /** \class Voiture voiture.h "inc/voiture.h" */
                             class Voiture { };
    \date     Utiliser pour indiquer la date de création de la partie commentée.
                     ex:    /**  \date 7 juin 1954 */
    \def       Utiliser pour indiquer un commentaire pour une macro #define.
                     ex:   /**  \def  MAX(x,y)  */
    \e          Utiliser pour emphasier un mot dans une phrase. Equivalent à la balise HTML em.
                     ex:   /** ....ceci constitue un \e vraiment bon exemple.... */  
                            donne 
                            ...ceci constitue un vraiment bon exemple...
    \enum     Uiliser pour introduire la description d'une énumération de type enum.
                                     ex:   /** \enum COULEUR */
    \file        Utiliser pour décrire un fichier.
                                L'attribut doit être exact et fourni avec l'extension.
                                     ex:   /** \file mon_fichier.c */
    \fn                       Utiliser pour introduire la description d'une fonction. 
                                Peut-être omis si la description est placée immédiatement
                                sous la déclaration de la fonction et sans saut de ligne.
                                     ex:   /** \fn Cette fonction calcul le..... */
    \namespace    Utiliser pour introduire la description d'un espace de nommage.
                                          L'attribut doit être exact.
                                              ex:    /** \namespace maths */
    \param {description}
                  Utiliser pour lister et décrire les paramètres d'une fonction.
                  Le nom doit être exact et la description optionnelle peut-être multiligne.
                  Peut être suivi de [in], [out] ou [in,ou] pour indiquer si les paramètres sont input-output.
                      ex:   /** Cette fonction copie les \a n premiers caractères d'une chaîne dans une autre.
                               * \param[out]   dst   la chaîne de destination
                               * \param[in]     src    la chaîne à copier
                               * \param          n      le nombre de caractère à copier
                               */
                               char *strncpy (char *dst, const char *src, size_t n);
    \return {description}
                  Utiliser pour décrire le paramètre renvoyé par une fonction. La description peut-être multiligne.
                       ex:  il suffit d'ajouter à l'exemple précédent la ligne:
                              * \return       renvoit la chaîne de caractère contenu dans src.
    \struct [] []    

                   Utiliser pour décrire une structure. Le premier paramètre est obligatoire, les suivants optionnels.
                   Attention toutefois à ce que les paramètres soit corrects, la casse est prise en compte.
                       ex:   /** \struct Pixel pixel.h "inc/pixel.h" */
                               struct Pixel{ };
    \todo {description}
                   Utiliser pour indiquer ce qu'il reste à faire. La description peut être multiligne.
                        ex:   /**
                                 * \todo  Finir l'implémentation des accesseurs de la classe...
                                 *              ...et encore détails nécessitant plusieurs lignes
                                 */
    \typedef      Utiliser pour introduire la description d'un typedef.
                            ex:  /**  \typedef  Voiture: la classe voiture  */
    \union [] []    

                        Utiliser pour décrire une union. Le premier paramètre est obligatoire, les suivants optionnels.
                        Attention toutefois à ce que les paramètres soit corrects, la casse est prise en compte.
                            ex:   /** \union Couleurs couleurs.h "inc/couleurs.h" */
                                    union Couleurs{ };
    \version      Utiliser pour définir la version d'un fichier.
                            ex:  /** \version 1.0beta */
    \@ \& \\ \< \~ \# \% ...
                         Utiliser pour insérer le caractère correspondant dans une description.
                             ex:   /** Applique aux attributs \#1 et \#2 parsé en XML.
                                       *{cf fichier \~.tmp; en cas de problème contacter l'@auteur}  */
                                    donne
                                    Applique aux attributs #1 et #2 parsé en XML.
                                    {cf fichier ~.tmp  en cas de problème contacter l'@uteur}
 
Le lecteur est évidement invité à consulter la liste complète de toutes les balises Doxygen pour documenter au mieux son projet.

Commenter un fichier

    Voici un exemple de commentaire d'en-tête de fichier s'appliquant au fichier module_modeleVoiture.c .  L'ordre des balises n'a pas d'importance.
/**
 * \file          module_modeleVoiture.c
 * \author    Miroslav
 * \version   1.0
 * \date       12 Novembre 2009
 * \brief       Définit les modèles de voiture et leur particularités.
 *
 * \details    Cette classe surcharge les accesseurs standards du module_voiture pour
 *                  convenir aux spécificités des différents modèles possibles.
 */
La documentation résultante après analyse simple (pas de graphe d'appel ni de dépendance) par Doxygen:
exemple de documentation résultant du traitement Doxygen

Commenter une fonction ou une méthode

    Voici un exemple de commentaire de fonction ou de méthode.  L'ordre des balises n'a pas d'importance mais les balises \param ne peuvent être omises.
/**
 * \brief       Calcule la distance entre deux points
 * \details    La distance entre les \a point1 et \a point2 est calculée par l'intermédiaire
 *                  des coordonnées des points. (cf #Point)
 * \param    point1         Point 1 pour le calcul de distance.
 * \param    point2         Point 2 pour le calcul de distance.
 * \return    Un \e float représentant la distance calculée.
 */
La documentation résultante après analyse simple (pas de graphe d'appel ni de dépendance) par Doxygen:
exemple de documentation de fonction résultant du traitement par Doxygen

Commenter une structure ou une union

    Voici un exemple de commentaire de structure ou d'union.  L'ordre des balises n'a pas d'importance. Comme vous le remarquerez, nous introduisons ici l'opération < permettant d'insérer un commentaire pour un membre de la structure ou de l'union.
/**
 * \brief      Couleur possible pour un Point.
 * \details   La table de correspondance de couleurs est disponible en modification par les accesseurs.
 */
typedef enum
{
   COLOR_BLUE,               /*!< Couleur bleu (0,0,255)               */
   COLOR_DARK_RED,      /*!< Couleur rouge sombre (64,0,0)  */
   COLOR_OLIVE              /*!< Couleur olive (51,51,0)               */
}
Color;
La documentation résultante après analyse simple par Doxygen:
exemple de documentation d'énumération résultant du traitement par Doxygen

Générer la documentation Doxygen

Doxygen est installé? Votre code est entièrement documenté? Il ne reste plus qu'à générer votre documentation. Pour cela lancer doxywizard.exe depuis windows ou la commande doxywizard depuis linux.
 
Etape 1: Entrer un chemin vers un répertoire de travail.
Etape 2: Remplir les 4 parties de l'assistant Wizard de Doxygen. Outre le mode Wizard, vous remarquerez que le logiciel propose le mode Expert. L'onglet Run sert à lancer la génération de la documentation une fois que la configuration est correctement effectuée, soit par l'onglet Wizard soit par l'onglet Expert.

Présentation générale de l'interface graphique de Doxygen

Utilisation de l'assistant

Voyons comment remplir les quatres parties de l'onglet Wizard:
 
Projet:
   Cette partie est très simple à remplir et les différentes options ne méritent pas de long commentaire. Elle sert à fournir les informations générales nécessaires à la génération de la documentation.
Project name:       Remplir le nom du projet.
Project version:    La version du projet.
Source code directory:   Le répertoire contenant le code source à analyser et documenter.
Scan recursively:  En cochant cette case, l'analyse du répertoire source se fera de façon récursive.
                               Les sources contenus dans les sous-répertoires seront alors analysée.
Destination directory:    Le répertoire dans lequel sera crée la documentation.
 
Mode:
    La partie Mode spécifie les options des sources à analyser ainsi que la méthode d'analyse.
Documented entities only:  Seules les entités (fonctions, méthodes, fichiers, structures...) documentées seront analysées et placées dans la documentation résultante.
All Entities:   Toutes les entités présentent dans le source seront analysées et documentées. Cette option ne peut pas générer du texte de documentation à votre place mais permet en revanche d'inclure toutes les entités dans les structures avec des liens entre elles pour une relecture plus aisée.
Include cross-referenced: Les fichiers sources seront insérés dans la documentation avec une coloration syntaxique appropriée et des liens vers les documentations précises.
Select programming language to optimize the result for: Ces options spéciales permettent de choisir la présentation de la documentation résultante la mieux adaptées au langage de votre source.
 
Output:
    Cette partie spécifie les options de génération de la documentation, notamment le format de sortie.
    - HTML : générer une documentation au format HTML
    - Plain HTML : HTML pur
    - with frame and navigation tree : Ajoute une navigation facilitée par une présentation arborescente.
    - compressed HTML : Format des documentations Windows (.chm)
    - with search function : ajoute une barre de recherche dans la documentation.
                                          Attention: ne fonctionne que sur un serveur interprétant le PHP.
- Latex : générer une documentation LaTex
    - intermediaire format for :
           Propose trois options de sorties au format LaTex adaptées pour un post-traitement de conversion de la documentation au format PDF avec hyperliens, PDF pur ou PostScript.
- Man Pages : générer une documentation au format ManPages: format des documentations Linux.
- RTF :  générer une documentation au format RTF (Rich Text Format).
- XML : générer une documentation au format XML.
 
Diagrams:
     Cette partie permet de configurer la création de diagramme dans la documentation. 
- no diagrams: Pas de création de diagramme.
- built-in class diagram generator: Créer la documentation par défaut.
- use GraphViz: Permet la création de diagram supplémentaires insérés dans la documentation.
    Les diagrammes sont des schémas graphiques représentant des situations données. Les différents diagrammes proposées sont nombreux:
- Créer une représentation des relations directes et indirectes entre les classes.
- Montre les relations d'interdépendance des classes et structures.
   (ex: un membre de classe A est du type classe B )
- Créer les diagrammes représentant la hiérarchie des classes.
- Créer les graphes de dépendances des fonctions.
- Créer les graphes des fonctions dont dépendent directement et indirectement les fonctions documentées.
- Créer les graphes d'appel direct et indirect des fonctions.
- Créer les graphes des fonctions appelées directement et indirectement par les fonctions documentées.
 
Quand toutes les options sont configurées, la génération se lance tout simplement en cliquant sur Run Doxygen dans l'onglet Run.
La struture du dossier de documentation résultante sera la suivante:
Hiérarchie de la documentation résultante de Doxygen
 
Vous trouverez => ici <= un exemple de documentation effectué avec Doxygen. Il s'agit de la traduction effectuée par AxiomCafe de la documentation du noyau ChibiOS v1.0

Utilisation du mode expert

Afin de faciliter l'usage du mode Expert, il convient de compléter entièrement le mode Wizard puis de passer en mode Expert avant d'utiliser le Run. Nous n'allons cependant ici présenter que quelques une des fonctions intéressantes du mode Expert. Nous ne reprendrons de plus que les paramètres supplémentaires par rapport au mode Wizard.
Présentation générale de l'interface Doxygen en mode expert
Project :
    - DOXYFILE_ENCODING :     Permet de forcer l'encodage des fichiers de la documentation Doxygen.
    - OUTPUT_LANGUAGE :        Permet de choisir la langue de la documentation générée.
    - BRIEF_MEMBER_DESC :     Permet d'afficher (ou non) la description courte dans la liste des fonctions/structures/fichiers/classes/....
                                                   Cette description est placée en début de fichier avant la description détaillée.
    - REPEAT_BRIEF :                 Permet d'afficher (ou non) la description courte en haut de la description détaillée dans les fichiers.
    - SHORT_NAME :                   Permet de générer des noms de fichiers courts pour la documentation. 
                                                   Certains systèmes d'exploitation ne supportent pas les noms longs.
Build :
    - EXTRACT_PRIVATE :          Permet d'afficher la documentation pour les fonctions/méthodes/membres ayant le qualificateur private.
    - EXTRACT_STATIC :            Permet d'afficher la documentation pour les fonctions/méthodes/membres ayant le qualificateur static.
    - SHOW_DIRECTORIES :     Permet d'afficher la hiérarchie des fichiers sources dans la documentation.
    - SORT_BRIEF_DOCS :        Permet d'afficher la documentation des fichiers, namespaces et fichiers extraits par ordre alphabétique.
                                                  Si non cochée, affiche la documentation par ordre de déclaration dans le code source.
Input :
    - INPUT_ENCODING :          Force la prise en compte de l'encodage des fichiers sources.
Source Browser :
    - INLINE_SOURCES :           Permet d'insérer le corps des fonctions/méthodes/structures/... extraites dans la documentation.
Index :
    - ALPHABETICAL_ORDER :  Permet d'afficher la documentation de toutes entités extraites par alphabétique.
                                                  Si non cochée, l'ordre dans la documentation est celle de définition dans les fichiers sources.
HTML :
    - HTML_HEADER :                 Permet de forcer le header des fichiers de la documentation. Si laissé vide, le header par défaut est utilisé.
    - HTML_FOOTER :                 Permet de forcer le footer des fichiers de la documentation. Si laissé vide, le footer par défaut est utilisé.
Dot :
    - UML_LOOK :                             Permet de forcer la génération des diagrammes d'héritage et de dépendance selon la norme UML.
    - DOT_IMAGE_FORMAT :           Permet de forcer le format d'encodage des images (png, jpeg ou gif).
    - DOT_GRAPH_MAX_NODES :   Permet de limiter le nombre maximum de noeuds d'un graphe.
                                                        Si le nombre de noeud dépasse cette valeur alors le graphe est tronqué.
    - MAX_DOT_GRAPH_WIDTH et MAX_DOT_GRAPH_HEIGHT: Permet de limiter la taille des graphes générés.
    - MAX_DOT_GRAPH_DEPTH :    Permet de limiter la profondeur de génération de noeuds d'un graphe.
                                                         Si la profondeur dépasse cette valeur alors le graphe est tronqué.
    - DOT_TRANSPARENT :              Permet de générer des graphes sur fond transparent. 
                                                         Attention, cette option ne semble pas supportée sous Windows.
Votre note : Aucun(e) Moyenne : 4.5 (37 votes)

Commentaires

Utilisateur non enregistré

acheter cialis vente cialis
vente cialis acheter cialis
precio cialis comprar cialis
prezzo cialis generico cialis

Utilisateur non enregistré

cialis 5 mg precio espaa|buy cheap cialis india|cialis precios farmaci|brand cialis canada|buy cialis in barcelona spain|the best site cialis no doctor|female cialis women|i recommend cialis daily price|donde comprar cialis venezuela|cialis genricos|only now canadian drugs cialis|cialis available india|click now cialis to order|acheter cialis en tunisie|does cialis you help last|where to get cialis singapore|cialis cvs price|is cialis available in canada|try it cialis soft tablets|link for you info cialis|i use it cialis ed|we like it cialis headaches|cialis nourriture|usefull link cialis 5mg prices|follow link women cialis|cialis kaufen per uberweisung|cialis 20 mg everyday|i use it cheap cialis on line|cialis diarrhe|of cialis|comprar cialis fabrica|pharmacy rx cialis|buying cialis soft tab|click here cialis 5 mg daily|drug generic cialis|cialis price europe|best cialis prices online|cialis benefits|comprar cialis en el df|cialis buy canada click here|only today buy cialis canada|cialis on line shop|cialis duree|cialis trial pack|buy cialis originale|cialis wirkt nicht|candian cialis sicher|wow discount cialis no rx|cialis temps|cialis 100mg preis|cialis sans ordonnance suiss|donde comprar cialis en nyc|cialis wirkung risiken|cialis pillol|visit our site women cialis|cialis tablets price australia|cialis price per pills|cialis kaufen in der apotheke|venta cialis quito|cialis 50 mg kaufen|we use it online cialis|vendo cialis generico chile|how much cialis 10 mg cost|buy cialis over the phone|cialis 20 mg billi|mercury drug store cialis|cialis precio farmacia mexico|cialis wirkung risike|commande cialis 20mg|comprar cialis en bilbao|acheter cialis en europe|cialis nchtern|cialis acquisto farmacia itali|we like it buy now cialis|cialis falso|vrai cialis|brand cialis pills|cialisis tab 5mg|immediate delivery cialis|cialis jelly generic name|cialis pas cher a marseille|only for you cialis 50mg|cialis daglig|cialis mal de tete|cialis 200mg dosage|commander du cialis|wow no prscription cialis|cheapest cialis wyoming online|brand name cialis from canada|cialis nessuna prescrizione|express cialis delivery|cialis warszawa apteka|we like it wholesale cialis|we use it cheap us cialis|back cialis guarantee money|cheap super active cialis|cialis generique apcalis|only today cialis online|lil8ecly cialis|cialis vendita in svizzer|training and cialis next day|cialis best prices from india|only here daily cialis|buy cialis 40mg|overnight cheap cialis|cialis gnrique ordonnance|existe el generico de cialis|cialis a miglior prezzo|online buy cialis pills|cheap female cialis|genericos de cialis|cialis preis preisvergleich|genrico cialis 10 mg|cialis tablets uk|cialis farmacie del canada|cialis pour qui|review on cialis 10mg|cialis cost o|look there online cialis sales|el cialis donde comprar|prezzo cialis 20 m|vendo cialis lilly|cialis 20mg how to take|order cialis in montreal|cialis daily use problems|is generic cialis uk|comprare cialis|no prescription cialis generic|cialis levitra online|good site to buy cialis|the best way to store cialis|cialis y prilig|cialis super actif|posologie cialis 5mg|cialis oesterreich|cialis mit rezept auf rechnung|cialis 20mg tablets price|buy cialis online low price|cialis 10 mg pret|just try cialis soft|rezeptfrei cialis mannheim|buy cialis online ontario|vente de cialis|do lillys do 5 mg cialis|cialis mal di stomaco|buy cialis online using paypal|prix cialis sur ordonnance|prolonged use of cialis|cialis online kaufen gunstig|prezzo cialis 4 compresse|generic of cialis|tienda de cialis barata|niagara falls pharmacy cialis|bulk buy cialis|soft cialis india|cialis nuevo|cialis kautabletten kaufen|cialis eu rezeptfrei|getting cialis in australia|prix officiel cialis franc|cheapest cialis availible|enter site cialis buying|which generic cialis is best|wow women cialis|wal mart cialis discount|pi economico cialis|cialis 20 mg billig|average price cialis 20 mg|cialis 20 mg caratteristich|cialis forum prezz|cialis bucodispersable precio|super active cialis uk|cost of cialis 10 mg|the best place cialis germany|cialis online patika|cialis buy cheap 10 mg|everyday cialis side effects|cialis senza ricetta online|cialis 20 ohne rezept|cialis daily use price lowest|cialis generico 20 mg|order cialis on line usa|5 mg cialis in canada|cialis niet duur|donde comprar cialis mxico|buy cialis online safety|wow look it cialis dosagem|generique cialis 20m|generische cialis goedkoop|who can prescribe cialis|enter site purchase of cialis|pillola di cialis in linea|cialis achat montreal|cialis fachinformation|authentic cialis canada|cialis 25 mg coupon|wow cialis pfizer india|generico del cialis 5 mg|cialis purchase with pay al|cialis online europe|buy female cialis soft 10 mg|cialis nedir|images cialis generic|cialis cuanto vale|sale of cialis soft tabs|genuine cialis uk|best sale cialis|effets secondaires cialis 2|cialis online sverige|on line sale of cialis|very cheap brand cialis|coupon cialis 5 mg|avis sur le cialis 20mg|discount generic cialis 20mg|click here cheap cialis|10 pills x10mg cialis|the best place cialis in uk|cialis on line pharmacy|cialis 10 mg price us|only for you buy cialis china|enter site purchasing cialis|10mg cialis enough steroids|to buy cialis|we use it discount cialis|ordonnance cialis en ligne|cost cialis walgreens 20mg|cialis costo 5 mg|5 mg cialis review|comprar cialis uk|look here legal cialis|cialis online best|cialis rabatt kanada|buy cialis jelly with no rx|we recommend cheap cialis|generic cialis t20 images|donde comprar cialis 5 mg|professional cialis for sale|genericcialis20mgcom legit|look there cialis women|costo cialis da 5 mg|cialis pill brand 5mg|acheter cialis pari|prix cialis belgique|acheter cialis 10 mg france|cialis halbe tablette|best prices on cialis generic|cialis generika legal|cialis patent canada|costo confezione cialis|try cialis free

http://cialisuqwn.com/ - order cialis,cialis,buy cialis,generic cialis online,generic cialis,cialis cheap,cialis online,buy cialis,cialis
order cialis,cialis,buy cialis,generic cialis online,generic cialis,cialis cheap,cialis online,buy cialis,cialis

cialis 5 mg precio espaa|buy cheap cialis india|cialis precios farmaci|brand cialis canada|buy cialis in barcelona spain|the best site cialis no doctor|female cialis women|i recommend cialis daily price|donde comprar cialis venezuela|cialis genricos|only now canadian drugs cialis|cialis available india|click now cialis to order|acheter cialis en tunisie|does cialis you help last|where to get cialis singapore|cialis cvs price|is cialis available in canada|try it cialis soft tablets|link for you info cialis|i use it cialis ed|we like it cialis headaches|cialis nourriture|usefull link cialis 5mg prices|follow link women cialis|cialis kaufen per uberweisung|cialis 20 mg everyday|i use it cheap cialis on line|cialis diarrhe|of cialis|comprar cialis fabrica|pharmacy rx cialis|buying cialis soft tab|click here cialis 5 mg daily|drug generic cialis|cialis price europe|best cialis prices online|cialis benefits|comprar cialis en el df|cialis buy canada click here|only today buy cialis canada|cialis on line shop|cialis duree|cialis trial pack|buy cialis originale|cialis wirkt nicht|candian cialis sicher|wow discount cialis no rx|cialis temps|cialis 100mg preis|cialis sans ordonnance suiss|donde comprar cialis en nyc|cialis wirkung risiken|cialis pillol|visit our site women cialis|cialis tablets price australia|cialis price per pills|cialis kaufen in der apotheke|venta cialis quito|cialis 50 mg kaufen|we use it online cialis|vendo cialis generico chile|how much cialis 10 mg cost|buy cialis over the phone|cialis 20 mg billi|mercury drug store cialis|cialis precio farmacia mexico|cialis wirkung risike|commande cialis 20mg|comprar cialis en bilbao|acheter cialis en europe|cialis nchtern|cialis acquisto farmacia itali|we like it buy now cialis|cialis falso|vrai cialis|brand cialis pills|cialisis tab 5mg|immediate delivery cialis|cialis jelly generic name|cialis pas cher a marseille|only for you cialis 50mg|cialis daglig|cialis mal de tete|cialis 200mg dosage|commander du cialis|wow no prscription cialis|cheapest cialis wyoming online|brand name cialis from canada|cialis nessuna prescrizione|express cialis delivery|cialis warszawa apteka|we like it wholesale cialis|we use it cheap us cialis|back cialis guarantee money|cheap super active cialis|cialis generique apcalis|only today cialis online|lil8ecly cialis|cialis vendita in svizzer|training and cialis next day|cialis best prices from india|only here daily cialis|buy cialis 40mg|overnight cheap cialis|cialis gnrique ordonnance|existe el generico de cialis|cialis a miglior prezzo|online buy cialis pills|cheap female cialis|genericos de cialis|cialis preis preisvergleich|genrico cialis 10 mg|cialis tablets uk|cialis farmacie del canada|cialis pour qui|review on cialis 10mg|cialis cost o|look there online cialis sales|el cialis donde comprar|prezzo cialis 20 m|vendo cialis lilly|cialis 20mg how to take|order cialis in montreal|cialis daily use problems|is generic cialis uk|comprare cialis|no prescription cialis generic|cialis levitra online|good site to buy cialis|the best way to store cialis|cialis y prilig|cialis super actif|posologie cialis 5mg|cialis oesterreich|cialis mit rezept auf rechnung|cialis 20mg tablets price|buy cialis online low price|cialis 10 mg pret|just try cialis soft|rezeptfrei cialis mannheim|buy cialis online ontario|vente de cialis|do lillys do 5 mg cialis|cialis mal di stomaco|buy cialis online using paypal|prix cialis sur ordonnance|prolonged use of cialis|cialis online kaufen gunstig|prezzo cialis 4 compresse|generic of cialis|tienda de cialis barata|niagara falls pharmacy cialis|bulk buy cialis|soft cialis india|cialis nuevo|cialis kautabletten kaufen|cialis eu rezeptfrei|getting cialis in australia|prix officiel cialis franc|cheapest cialis availible|enter site cialis buying|which generic cialis is best|wow women cialis|wal mart cialis discount|pi economico cialis|cialis 20 mg billig|average price cialis 20 mg|cialis 20 mg caratteristich|cialis forum prezz|cialis bucodispersable precio|super active cialis uk|cost of cialis 10 mg|the best place cialis germany|cialis online patika|cialis buy cheap 10 mg|everyday cialis side effects|cialis senza ricetta online|cialis 20 ohne rezept|cialis daily use price lowest|cialis generico 20 mg|order cialis on line usa|5 mg cialis in canada|cialis niet duur|donde comprar cialis mxico|buy cialis online safety|wow look it cialis dosagem|generique cialis 20m|generische cialis goedkoop|who can prescribe cialis|enter site purchase of cialis|pillola di cialis in linea|cialis achat montreal|cialis fachinformation|authentic cialis canada|cialis 25 mg coupon|wow cialis pfizer india|generico del cialis 5 mg|cialis purchase with pay al|cialis online europe|buy female cialis soft 10 mg|cialis nedir|images cialis generic|cialis cuanto vale|sale of cialis soft tabs|genuine cialis uk|best sale cialis|effets secondaires cialis 2|cialis online sverige|on line sale of cialis|very cheap brand cialis|coupon cialis 5 mg|avis sur le cialis 20mg|discount generic cialis 20mg|click here cheap cialis|10 pills x10mg cialis|the best place cialis in uk|cialis on line pharmacy|cialis 10 mg price us|only for you buy cialis china|enter site purchasing cialis|10mg cialis enough steroids|to buy cialis|we use it discount cialis|ordonnance cialis en ligne|cost cialis walgreens 20mg|cialis costo 5 mg|5 mg cialis review|comprar cialis uk|look here legal cialis|cialis online best|cialis rabatt kanada|buy cialis jelly with no rx|we recommend cheap cialis|generic cialis t20 images|donde comprar cialis 5 mg|professional cialis for sale|genericcialis20mgcom legit|look there cialis women|costo cialis da 5 mg|cialis pill brand 5mg|acheter cialis pari|prix cialis belgique|acheter cialis 10 mg france|cialis halbe tablette|best prices on cialis generic|cialis generika legal|cialis patent canada|costo confezione cialis|try cialis free

Utilisateur non enregistré

avis achat viagra ligne|propecia viagra online|viagra suppliers canadian|generico de viagra preco|viagra shop in tanzania|buying viagra online safety|viagra rezeptfrei lander|viagra pills lowest price|costo viagra ricetta|cost of viagra in canada|achat viagra en ligne canada|viagra legal australia|viagra 100 mg generico|viagra vorzeitiger samenerguss|viagra brazil generic|only here india viagra|can you buy viagra shops uk|viagra pfizer werbung|only here buy now viagra|pilule de viagra le ru|cheap viagra with out|spyware buy viagra dose|viagra tunisie prix|purchase viagra cheap|viagra pour homme prix maroc|viagra salesman movie|wat doet viagra prices|viagra kaufen sho|something better than viagra|free viagra sample pack in uk|viagra soft cheap uk pharmacy|viagra cialis levitra buy|nome generico do viagra|generic viagra as effective|review online viagra sites|viagra preise apothek|viagra with food|viagra online zoll|viagra canadian store|viagra super active best value|viagra how to order|viagra fur frauen bestellen|generic drugs like viagra|prix viagra sans ordonnance|probepackung viagra levitra|viagra spray for sale|deutsche viagra bestellen|acheter viagra rapidemen|professional viagra buy|only today order viagra canada|viagra e vasodilatatori|australian cost of viagra|follow link buying viagra|viagra online billig bestellen|vente viagra sans ordonnanc|viagra cialis vendit|viagra genrico mexicano|es buena la viagra generica|order viagra no prescripion|click here buy viagra now|viagra online prescription uk|viagra prescription online|1 buy viagra|viagra sale shipped canada|viagra kaufen europa|viagra legal buy line|acheter viagra indien|viagra zonder|comprar pastillas viagra|top viagra store online|pfizer viagra from canada|viagra in contrassegno|costo del canada viagra|viagra online wholesale|verordnung fr viagra|viagra le generique|generic uk viagra|viagra daily medication|viagra gold generique 800m|forum viagra pour fille|viagra cheap buy generic|viagra bestellen erfahrungen|viagra kopen niet online|viagra price war|comprare viagra yaho|the crisis viagra for free|herbe viagra|viagra originale on line|viagra sildenafil mastercard|viagra al miglior prezz|i want to buy pfizer viagra|viagra online irrational|where can i get free viagra|can one buy viagra online|generique viagra super active|only for you viagra soft|achat viagra ligne quebec|cheap viagra women uk|viagra pro and cons|by real viagra|viagra full stomach|viagra 16 anni|viagra where generic i order|buy viagra online canada pills|wow cheap viagra online uk|buying viagra in bullk|only now use viagra|buy viagra in finland|try it discount viagra no rx|cheap viagra pills us|viagra cialis manila|when generic viagra will be|precio viagra costa rica|where i can get viagra tablets|viagra sales in usa|receta de viagra|achat viagra cialis en lign|viagra find edinburgh|with generic canada viagra|viagra brevetto 2013|prix vrai viagra|faux viagra au quebec|viagra online acquisto|viagra online next day uk|buy viagra in cagayan de oro|viagra price ksa|prezzo di prezzo di viagra|cheap viagra with p|approved viagra store|buy viagra online canada free|cheap viagra uk for sale|viagra pill for sale uk|viagra preis 100mg generica|venta de viagra en barcelona|pills 100 mg viagra|viagra uk best price|viagra shop in singapore|viagra in stores vancouver|a viagra get prescription|viagra tablette|click now viagra cheap price|viagra precios farmacia|buy viagra online au|need prescription viagra|viagra wirkung levitra|cost of a 100mg viagra tablet|pill viagra|viagra oral jelly 100mg|viagra plus no prescription|viagra billig online kaufen|buy viagra buy pills online|cheap herbal viagra uk|viagra with fast shipping|safest place order viagra|viagra rezeptfrei erfahrung|buy viagra in cairns|low cost alternative to viagra|coreg viagra|viagra buy propecia|viagra uso istruzion|how can i buy some viagra|vente en ligne de viagra|venta cialis viagra|we like it china viagra|viagra simbabwe|best price for 50mg viagra|visit our site viagra shop|espaa madrid viagra|viagra gnstig ohne rezept|discount viagra soft online|achetez le canada viagra|viagra plus no prrescription|expextations of viagra|viagra online legally|pfizer viagra price canada|only today generic viagra cost|look here buy viagra in europe|in co denver viagra|i use it cheap buy viagra|effetto viagra sulle donn|viagra rebate|viagra cialis free offer|viagra cialis argentin|only here buy internet viagra|viagra 10 pills cheap|viagra taken evry day is ok|discount viagra sale online|viagra samples from pharmacy|comprar viagras|viagra comprar madrid|pfizer viagra pharmacy|generic viagra pills tadalafil|u s pharmacy viagra online|adresse pour acheter viagra|viagra venta online|cheap viagra or sale|viagra 50 ou 100 m|generic propecia free viagra|viagra canad entrega|cheap viagra uk|mexican pharmacy viagra|r1000eady tabs viagra|viagra y drogas|look here viagra paypal|men viagra|pfizer viagra otc|pfizer viagra price increase|generic viagra at walmart|prix viagra gnrique le ru|viagra deutschland import|viagra nose bleed|cheap viagra professional uk|viagra shopper|viagra generic 2012 drugs|efectos colaterales del viagra|ordering viagra online illegal|cost of viagra 10mg|viagra argentina precio|places to get viagra|site achat viagra serieu|viagra richtig verwenden|viagra counterfeit|viagra commander|viagra dealers in japanese|has viagra come down in price| discount viagra europe|viagra red face|is viagra safe to use|safety buying viagra online|cialis mas viagra|generic viagra us|viagra price in rupees|comprar viagra temuco|viagra with pay paypal|webmd viagra|viagra online scams uk|viagra price cialis price|cost viagra lloyds|where do you buy liquid viagra|sale online viagra ie|cialis viagra levitra kaufen|compare prices cheapest viagra|how to use viagra bill|kosten viagra pille|viagra buy can i online safely|viagra kaufen in tschechien|generic soft viagra sildenafil|pacco campione viagra libero|viagra original ohne rezept|quebec pharmacy viagra

cheap viagra,cheap viagra,online viagra,viagra online,viagra cheap,buy viagra,viagra,viagra,viagra cheap,buy viagra,buy viagra online
cheap viagra,cheap viagra,online viagra,viagra online,viagra cheap,buy viagra,viagra,viagra,viagra cheap,buy viagra,buy viagra online

avis achat viagra ligne|propecia viagra online|viagra suppliers canadian|generico de viagra preco|viagra shop in tanzania|buying viagra online safety|viagra rezeptfrei lander|viagra pills lowest price|costo viagra ricetta|cost of viagra in canada|achat viagra en ligne canada|viagra legal australia|viagra 100 mg generico|viagra vorzeitiger samenerguss|viagra brazil generic|only here india viagra|can you buy viagra shops uk|viagra pfizer werbung|only here buy now viagra|pilule de viagra le ru|cheap viagra with out|spyware buy viagra dose|viagra tunisie prix|purchase viagra cheap|viagra pour homme prix maroc|viagra salesman movie|wat doet viagra prices|viagra kaufen sho|something better than viagra|free viagra sample pack in uk|viagra soft cheap uk pharmacy|viagra cialis levitra buy|nome generico do viagra|generic viagra as effective|review online viagra sites|viagra preise apothek|viagra with food|viagra online zoll|viagra canadian store|viagra super active best value|viagra how to order|viagra fur frauen bestellen|generic drugs like viagra|prix viagra sans ordonnance|probepackung viagra levitra|viagra spray for sale|deutsche viagra bestellen|acheter viagra rapidemen|professional viagra buy|only today order viagra canada|viagra e vasodilatatori|australian cost of viagra|follow link buying viagra|viagra online billig bestellen|vente viagra sans ordonnanc|viagra cialis vendit|viagra genrico mexicano|es buena la viagra generica|order viagra no prescripion|click here buy viagra now|viagra online prescription uk|viagra prescription online|1 buy viagra|viagra sale shipped canada|viagra kaufen europa|viagra legal buy line|acheter viagra indien|viagra zonder|comprar pastillas viagra|top viagra store online|pfizer viagra from canada|viagra in contrassegno|costo del canada viagra|viagra online wholesale|verordnung fr viagra|viagra le generique|generic uk viagra|viagra daily medication|viagra gold generique 800m|forum viagra pour fille|viagra cheap buy generic|viagra bestellen erfahrungen|viagra kopen niet online|viagra price war|comprare viagra yaho|the crisis viagra for free|herbe viagra|viagra originale on line|viagra sildenafil mastercard|viagra al miglior prezz|i want to buy pfizer viagra|viagra online irrational|where can i get free viagra|can one buy viagra online|generique viagra super active|only for you viagra soft|achat viagra ligne quebec|cheap viagra women uk|viagra pro and cons|by real viagra|viagra full stomach|viagra 16 anni|viagra where generic i order|buy viagra online canada pills|wow cheap viagra online uk|buying viagra in bullk|only now use viagra|buy viagra in finland|try it discount viagra no rx|cheap viagra pills us|viagra cialis manila|when generic viagra will be|precio viagra costa rica|where i can get viagra tablets|viagra sales in usa|receta de viagra|achat viagra cialis en lign|viagra find edinburgh|with generic canada viagra|viagra brevetto 2013|prix vrai viagra|faux viagra au quebec|viagra online acquisto|viagra online next day uk|buy viagra in cagayan de oro|viagra price ksa|prezzo di prezzo di viagra|cheap viagra with p|approved viagra store|buy viagra online canada free|cheap viagra uk for sale|viagra pill for sale uk|viagra preis 100mg generica|venta de viagra en barcelona|pills 100 mg viagra|viagra uk best price|viagra shop in singapore|viagra in stores vancouver|a viagra get prescription|viagra tablette|click now viagra cheap price|viagra precios farmacia|buy viagra online au|need prescription viagra|viagra wirkung levitra|cost of a 100mg viagra tablet|pill viagra|viagra oral jelly 100mg|viagra plus no prescription|viagra billig online kaufen|buy viagra buy pills online|cheap herbal viagra uk|viagra with fast shipping|safest place order viagra|viagra rezeptfrei erfahrung|buy viagra in cairns|low cost alternative to viagra|coreg viagra|viagra buy propecia|viagra uso istruzion|how can i buy some viagra|vente en ligne de viagra|venta cialis viagra|we like it china viagra|viagra simbabwe|best price for 50mg viagra|visit our site viagra shop|espaa madrid viagra|viagra gnstig ohne rezept|discount viagra soft online|achetez le canada viagra|viagra plus no prrescription|expextations of viagra|viagra online legally|pfizer viagra price canada|only today generic viagra cost|look here buy viagra in europe|in co denver viagra|i use it cheap buy viagra|effetto viagra sulle donn|viagra rebate|viagra cialis free offer|viagra cialis argentin|only here buy internet viagra|viagra 10 pills cheap|viagra taken evry day is ok|discount viagra sale online|viagra samples from pharmacy|comprar viagras|viagra comprar madrid|pfizer viagra pharmacy|generic viagra pills tadalafil|u s pharmacy viagra online|adresse pour acheter viagra|viagra venta online|cheap viagra or sale|viagra 50 ou 100 m|generic propecia free viagra|viagra canad entrega|cheap viagra uk|mexican pharmacy viagra|r1000eady tabs viagra|viagra y drogas|look here viagra paypal|men viagra|pfizer viagra otc|pfizer viagra price increase|generic viagra at walmart|prix viagra gnrique le ru|viagra deutschland import|viagra nose bleed|cheap viagra professional uk|viagra shopper|viagra generic 2012 drugs|efectos colaterales del viagra|ordering viagra online illegal|cost of viagra 10mg|viagra argentina precio|places to get viagra|site achat viagra serieu|viagra richtig verwenden|viagra counterfeit|viagra commander|viagra dealers in japanese|has viagra come down in price| discount viagra europe|viagra red face|is viagra safe to use|safety buying viagra online|cialis mas viagra|generic viagra us|viagra price in rupees|comprar viagra temuco|viagra with pay paypal|webmd viagra|viagra online scams uk|viagra price cialis price|cost viagra lloyds|where do you buy liquid viagra|sale online viagra ie|cialis viagra levitra kaufen|compare prices cheapest viagra|how to use viagra bill|kosten viagra pille|viagra buy can i online safely|viagra kaufen in tschechien|generic soft viagra sildenafil|pacco campione viagra libero|viagra original ohne rezept|quebec pharmacy viagra

Utilisateur non enregistré

[URL=http://rus.sibirki.com]проститутки новосибирска[/URL] Здравствуйте! Вас приветствует команда сайта Сибирки, сайта, на котором размещают анкеты 86% всех проституток города Новосибирска.

Utilisateur non enregistré

Titan Gel สำหรับการขยายอวัยวะเพศชายอ่านบทวิจารณ์แพทย์ที่นี่ :
https://www.evolutionary.org/forums/members/reactor9.html?tab=visitor_messaging
ความคิดเห็นของลูกค้าทั้งหมดที่สั่งซื้อผลิตภัณฑ์ในเว็บไซต์อย่างเป็นทางการเป็นบวก ผู้ชายทุกคนแนะนำ Titan Gel และพูดถึงคุณสมบัติของครีมเจลได้ดี

นอกจากนี้ผู้หญิงและเด็กผู้หญิงหลายคนยังสั่งซื้อผลิตภัณฑ์นี้สำหรับสามีของตนเพื่อใช้เป็นสารหล่อลื่นหรือเพื่อเพิ่มประสิทธิภาพในการแข็งตัวของอวัยวะเพศและการมีเพศสัมพันธ์ พวกเขาเขียนว่าเป็นบวกเกี่ยวกับความจริงที่ว่าคู่ของพวกเขาต้องการที่จะเพิ่มศักดิ์ศรีชายของพวกเขาและไม่เห็นอะไรขี้อายที่นี่

Utilisateur non enregistré

we like it cialis price il cialis quanto costa
buy cialis online cialis 5mg billiger cialis 20 mg cut in half