Mot-clé - libxml2

Fil des billets

vendredi 3 janvier 2014

Déterminer le nom du pays à partir de la locale du système

En ce moment je travaille sur le portage d'une application pour FreeBSD. Comme elle fait appel à des fonctions qui ne sont pas disponibles sous ce système, je passe par l'analyse des fichiers iso-codes [1] mis à notre disposition par Debian.

Il s'agit de mon premier programme en C, donc soyez indulgent.

J'utilise les bibliothèques suivantes :

Pour le compiler, il faut définir une variable (par exemple ISO_CODES_PREFIX), qui va nous servir de macro [2].

ISO_CODES_PREFIX=`pkgconf --variable=prefix iso-codes`
gcc -Wall -DISO_CODES_PREFIX=\"$ISO_CODES_PREFIX\" `pkgconf --cflags --libs glib-2.0 gio-2.0 libxml-2.0` locales.c -o locales

Note : Si pkgconf n'est pas disponible, essayez pkg-config.

Après compilation, on obtient une liste avec la locale suivi du nom du pays. Cela me sert pour renforcer les tests pour mon patch.

[...]
eu_ES.ISO8859-1 Spain
eu_ES.ISO8859-15 Spain
eu_ES.UTF-8 Spain
fi_FI.ISO8859-1 Finland
fi_FI.ISO8859-15 Finland
fi_FI.UTF-8 Finland
fr_BE.ISO8859-1 Belgium
fr_BE.ISO8859-15 Belgium
fr_BE.UTF-8 Belgium
fr_CA.ISO8859-1 Canada
fr_CA.ISO8859-15 Canada
fr_CA.UTF-8 Canada
fr_CH.ISO8859-1 Switzerland
fr_CH.ISO8859-15 Switzerland
fr_CH.UTF-8 Switzerland
fr_FR.ISO8859-1 France
fr_FR.ISO8859-15 France
fr_FR.UTF-8 France
he_IL.UTF-8 Israel
hi_IN.ISCII-DEV India
[...]

Notes

[1] Certains logiciels du projet GNOME utilisent le même procédé.

[2] Reportez-vous à cette page du wiki pour plus de détail.

dimanche 15 septembre 2013

Connaître les dimensions d'une image vectorielle

ImageMagick fournit un utilitaire (identify) qui nous permet de connaître les dimensions (hauteur et largeur) d'une image.

Son utilisation est très simple :

$ identify -format "%G" midori.svg
60x60

On a donc une image avec comme dimension :

  • hauteur : 60px
  • largeur : 60px

Vous le savez sans doute, mais un fichier .svg est tout simplement un fichier XML avec son propre espace de nom [1].

Bien souvent les dimensions sont mentionnées, il suffit de savoir les rechercher.

Si la bibliothèque libxml2 est installée sur votre système, vous pouvez utiliser l'utilitaire xmllin, qui va avec.

$ xmllint --noout --xpath "string(@width)" midori.svg
48

Dans cet exemple je recherche uniquement la largeur.

En comparant les deux méthodes, c'est la première fois que je tombe sur des résultats différents. Généralement ImageMagick donne de meilleur résultat [2].

Notes

[1] http://www.w3.org/TR/SVG11/

[2] L'attribut width n'est pas présent à chaque fois dans un fichier SVG.