Publicité
+ Répondre à la discussion Actualité déjà publiée
Affichage des résultats 1 à 15 sur 15
  1. #1
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    16 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 576
    Points : 465 307
    Points
    465 307

    Par défaut Gestion des fichiers XML avec GTK+

    Bonjour,

    Voici un nouvel article : Gestion des fichiers XML avec GTK+ de Bernard SIAUD.

    Merci de donner vos avis et commentaires.


    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2009
    Messages : 1 132
    Points : 1 486
    Points
    1 486

    Par défaut

    Mes remarques:
    • le mélange d'anglais et de français dans le programme est assez malheureux. Je conseille à tout le monde de coder en anglais exclusivement en anglais (quitte à mettre les commentaire en français). On évite les problèmes d'accents, de position des verbes, et on favorise l'homogénéité.
    • l'article évoque l'utilisation de GTK alors que seule la GLib est ici utilisés.
    • l'auteur ne tire pas parti de la puissance de la GLib. À quoi sert str_isspace quand la libc fournit isspace et la GLib g_ascii_isspace ? Et mintexte quand la GLib fournit g_strstrip ?
    • il y a une typo dans GmarkupDomContext où Markup devrait commencer par une majuscule.


    L'article ne parle pas non plus d'une grosse limitation de GMarkupParser, pourtant évoquée dans la première ligne de l'aide officielle:
    Simple XML Subset Parser — parses a subset of XML
    CMarkupParser n'est pas un parser XML, mais un parser d'un sous-ensemble du XML. Quid des limitations ? C'est la première chose dont il faudrait parler...

    Je ne suis pas rentré dans le détail du XML (pas le temps), mais je vois des constructions comme:
    Code :
    1
    2
    if (root->fils>fils) if (root->child[fils].item==(fils+texte+com))
            {
    C'est à éviter... Si on a deux conditions, on fait un "et" logique entre elles... On voit la limite du franglais aussi avec root->fils et root->child. Qui fait quoi ?

    Il semble aussi avoir vu des mallocs au lieu de g_malloc (malloc peut renvoyer NULL, là où g_malloc arrêtera le programme si la mémoire manque), etc.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2009
    Messages : 1 132
    Points : 1 486
    Points
    1 486

    Par défaut

    Code :
    1
    2
    3
    4
    5
    6
    7
    #define INDENT(niv) \ 
      do                                \ 
      {                                 \ 
        gint i;                         \ 
        for (i = 1; i < (niv) - 1; i++) \ 
          g_print ("\t");               \ 
      } while (0)
    peut être écrit:

    Code :
    1
    2
    3
    4
    5
    6
    7
    #define INDENT(level) \ 
      do                                \ 
      {                                 \ 
        gint i = level;                         \ 
        while (i-- > 0)
          g_print ("\t");               \ 
      } while (0)

  4. #4
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro Bernard SIAUD
    Enseignant
    Inscrit en
    novembre 2003
    Messages
    4 850
    Détails du profil
    Informations personnelles :
    Nom : Homme Bernard SIAUD
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 4 850
    Points : 6 481
    Points
    6 481

    Par défaut

    Merci !

    Il va falloir que je regarde ça ! Mais, en ce moment, le boulot me demande beaucoup !

    Je viens de regarder les commentaires. C'est vrai que je ne suis pas allé aussi loin dans l'étude du programme. Comme je l'ai indiqué en début d'article, j'ai juste corrigé et commenté un programme qui était proposé ici et peu utilisable en l'état car
    1) il manquait d'explications
    2) il avait quelques bugs

    Je vais essayer aussi rapidement que possible de profiter de ces remarques pour améliorer ces fonctions que j'utilise par ailleurs. Je vais peut-être aussi rajouter une ou deux fonctions que j'ai développées pour la lecture des ods à partir de celles déjà écrites ici.

    Sinon, pour les noms en anglais, je suis tellement ignare en anglais que je préfère mettre des noms en français.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels

  5. #5
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro Bernard SIAUD
    Enseignant
    Inscrit en
    novembre 2003
    Messages
    4 850
    Détails du profil
    Informations personnelles :
    Nom : Homme Bernard SIAUD
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 4 850
    Points : 6 481
    Points
    6 481

    Par défaut

    Citation Envoyé par liberforce Voir le message
    Code :
    1
    2
    3
    4
    5
    6
    7
    #define INDENT(level) \ 
      do                                \ 
      {                                 \ 
        gint i = level;                         \ 
        while (i-- > 0)
          g_print ("\t");               \ 
      } while (0)
    Ce code est plus rapide, mais le "while (i-- > 0)" me semble peut lisible ! J'ai plutôt tendance à dire à mes étudiants d'oublier la différence entre i++ et ++i afin de rendre lisible le code. Ici, si on met --i à la place de i--, on aura une tabulation de moins. Je ne sais si ça vaut le coup de pousser l'optimisation à ce point.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels

  6. #6
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro Bernard SIAUD
    Enseignant
    Inscrit en
    novembre 2003
    Messages
    4 850
    Détails du profil
    Informations personnelles :
    Nom : Homme Bernard SIAUD
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 4 850
    Points : 6 481
    Points
    6 481

    Par défaut

    Citation Envoyé par liberforce Voir le message
    Il semble aussi avoir vu des mallocs au lieu de g_malloc (malloc peut renvoyer NULL, là où g_malloc arrêtera le programme si la mémoire manque), etc.
    Je regarde la doc. Es-tu sûr de ce que tu dis ? Tu ne parlerais pas plutôt g_try_malloc (ou g_try_realloc)

    Je continue de travailler tes remarques dès que j'ai du temps

    je viens de trouver l'origine de mon travail : http://subversion.developpez.com/pro.../gmarkup-dom.c
    https://developer.gnome.org/glib/2.3...et-Parser.html pour les limitations. Comme j'avoue que je suis arrivé à travailler sans problème les fichiers que je voulais modifier (des fichiers odt et ods), je ne m'étais pas rendu compte de limitations.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels

  7. #7
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro Bernard SIAUD
    Enseignant
    Inscrit en
    novembre 2003
    Messages
    4 850
    Détails du profil
    Informations personnelles :
    Nom : Homme Bernard SIAUD
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 4 850
    Points : 6 481
    Points
    6 481

    Par défaut

    Citation Envoyé par liberforce Voir le message
    À quoi sert str_isspace quand la libc fournit isspace et la GLib g_ascii_isspace ?
    Ma fonction dit qu'une chaîne entière correspond à un espace alors que g_ascii_isspace signale uniquement si un caractère est un espace.
    Par contre, mintexte est remplacé sans problème par g_strstrip.

    Avant de passer à la modification de l'article, il faudra que je trouve l'origine de la fuite de mémoire du programme qui utilise ces fonctions. Il faudrait que je m'assure que ça ne vienne pas de là !
    La fuite est là : http://www.developpez.net/forums/d13...fuite-memoire/ .
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels

  8. #8
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2009
    Messages : 1 132
    Points : 1 486
    Points
    1 486

    Par défaut

    Citation Envoyé par troumad Voir le message
    Je regarde la doc. Es-tu sûr de ce que tu dis ? Tu ne parlerais pas plutôt g_try_malloc (ou g_try_realloc)
    Certain. C'est dans la doc de g_try_malloc. C'est d'ailleurs l'origine de la différence de sémantique: g_try_malloc dit "essaie de m'allouer de la mémoire" (et n'échoue pas si tu n'y arrives pas), là où g_malloc dit "alloue moi de la mémoire" (et tue le programme si tu n'y arrives pas). Le comportement de malloc est (cf man 3 malloc):
    The malloc() and calloc() functions return a pointer to the allocated memory that is suitably aligned for any kind of variable. On error, these functions return NULL. NULL may also be returned by a successful call to malloc() with a size of zero, or by a successful call to calloc() with nmemb or size equal to zero.
    Donc en cas d'échec, malloc renvoie NULL. g_malloc, lui, tue le programme, faisant en sorte de découvrir le problème dès qu'il survient, à l'allocation du buffer, plutôt que peut être beaucoup plus tard, quand tu compterais l'utiliser, et où tu aurais un crash vu que tu tenterais d'écrire à l'adresse NULL.

    g_try_malloc quant à lui sert à essayer d'allouer de gros buffers, si on n'est pas sûr d'avoir la mémoire suffisante pour cela.

  9. #9
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro Bernard SIAUD
    Enseignant
    Inscrit en
    novembre 2003
    Messages
    4 850
    Détails du profil
    Informations personnelles :
    Nom : Homme Bernard SIAUD
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 4 850
    Points : 6 481
    Points
    6 481

    Par défaut

    OK... Encore un e fois, mon anglais me fait défaut
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels

  10. #10
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2009
    Messages : 1 132
    Points : 1 486
    Points
    1 486

    Par défaut

    Pas de soucis.

    Pour la doc de g_try_malloc:
    gpointer g_try_malloc (gsize n_bytes);
    Attempts to allocate n_bytes, and returns NULL on failure. Contrast with g_malloc(), which aborts the program on failure.

    n_bytes : number of bytes to allocate.
    Returns : the allocated memory, or NULL.
    qu'on peut traduire par:
    gpointer g_try_malloc (gsize n_bytes);
    Tente d'allouer n_bytes octets, et renvoie NULL en cas d'échec. Contraste avec g_malloc(), qui termine le programme en cas d'échec.

    n_bytes : nombre d'octets à allouer.
    Renvoie : la mémoire allouée, ou NULL.
    Pour la doc de malloc:
    Les fonctions malloc() et calloc() retournent un pointeur vers la mémoire allouée qui est allignée de manière appropriée à n'importe quel type de variable. En cas d'erreur, ces fonctions renvoient NULL. NULL peut aussi être renvoyé par un appel réussi à malloc() avec une taille de zéro, ou par un appel réussi à calloc avec nmemb ou size égal à zéro.

  11. #11
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro Bernard SIAUD
    Enseignant
    Inscrit en
    novembre 2003
    Messages
    4 850
    Détails du profil
    Informations personnelles :
    Nom : Homme Bernard SIAUD
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 4 850
    Points : 6 481
    Points
    6 481

    Par défaut

    Ton commentaire précédent m'avait suffit pour comprendre la subtilité du problème. Mais, merci pour cette traduction !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels

  12. #12
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro Bernard SIAUD
    Enseignant
    Inscrit en
    novembre 2003
    Messages
    4 850
    Détails du profil
    Informations personnelles :
    Nom : Homme Bernard SIAUD
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 4 850
    Points : 6 481
    Points
    6 481

    Par défaut

    Bonsoir

    Est-ce que ceci va pour expliquer les limitations ? J'avoue que mon anglais me pose soucis pour cette traduction.

    Comme le dit la documentation, cette bibliothèque est destinée à analyser un balisage simple, juste un sous ensemble du XML. Mais ce sous ensemble m’a largement suffi pour travailler les fichiers XML de LibreOffice.
    Notons les limitations*:
    - seul le codage utf-8 est accepté
    - pas de définitions personnelles
    - les instructions de traitement (PI - Processing instruction en anglais), les commentaires et les déclarations de doctype sont transmis, mais pas interprétés.
    - Pas de DTD ou de validation
    Le format de balisage supporte*:
    - éléments
    - attributs
    - 5 entités standards*: &amp; &lt; &gt; &quot; &apos;
    - Les références de caractères.
    - Les articles marqués comme CDATA
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels

  13. #13
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro Bernard SIAUD
    Enseignant
    Inscrit en
    novembre 2003
    Messages
    4 850
    Détails du profil
    Informations personnelles :
    Nom : Homme Bernard SIAUD
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 4 850
    Points : 6 481
    Points
    6 481

    Par défaut

    Un autre problème (je picore petit à petit ce travail !).
    Je ne le mets plus dans la section GTK cet article alors ! Je le met dans C ?
    Ou bien je le laisse dans la section GTK car glib est développé par l'équipe gnome.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels

  14. #14
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2009
    Messages : 1 132
    Points : 1 486
    Points
    1 486

    Par défaut

    Je pense que tu peux laisser dans la section GTK, mais fais référence à la GLib dans le titre, pas à GTK.

  15. #15
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro Bernard SIAUD
    Enseignant
    Inscrit en
    novembre 2003
    Messages
    4 850
    Détails du profil
    Informations personnelles :
    Nom : Homme Bernard SIAUD
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 4 850
    Points : 6 481
    Points
    6 481

    Par défaut

    Pour voir la version actuelle de mon travail : http://troumad.org/OOo/gtk_xml.odt

    Comme j'ai modifié le code en commentant, je me dois de faire des tests avant de passer à la version définitive. J'ai rajouté deux points sur la lecture de fichiers libre office.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •