mercredi, janvier 3 2007

Et on recommence

Après avoir passé tant de temps à bosser dans l'appart, je me remet un peu dans la traduction. En cours, la mise à jour d'ABS. Elle devrait être terminée avant la fin de la semaine si le tennis de jeudi ne me met pas sur les genoux. Il faudra aussi que je teste tidy sur un fichier XML car le fichier source d'ABS est en XML mais son indentation est assez catastrophique. Par endroit, ça en devient complètement incompréhensible.

samedi, mai 13 2006

Passage d'ABS du SGML DocBook au XML

J'en avais discuté avec Balise et fevrier lors des Solutions Linux 2006. J'ai fini par le faire. J'avais peur que ce soit super galère mais cela a été assez simple finalement. J'ai bossé dessus deux demi-journées seulement. Le seul point qui m'a donné du fil à retordre concerne l'inclusion des scripts shell. Ils ne sont pas en XML, ils comportent des caractères interdits... un vrai bonheur :)

Au lieu d'utiliser les entités, je suis passé par XInclude. Un article sur XML.com offre une excellente introduction. Le point intéressant se trouve pratiquement en fin de page. L'auteur indique qu'il est possible d'insérer un fichier non XML et qui ne sera pas analysé par xsltproc. Pour cela, il faut ajouter la ligne suivante :

<xi:include parse="text" href="ton_fichier.sh" />

parse="text" fait en sorte qu'il ne prend pas le fichier pour un autre fichier XML à analyser. Du coup, je peux insérer mes scripts sans soucis.

Bref, le XML est syntaxiquement correct et valide. J'ai ajouté une copie du Makefile et des feuilles de style XSLT. Je génère une version HTML et PDF avec un simple make all.

Tous mes projets de traduction sont en XML maintenant. Youhou :)

dimanche, mai 7 2006

Manuel de PostgreSQL, le retour

Après avoir expliqué rapidement ce que l'équipe de traduction française avait réussi à faire suite au passage du SGML au XML, j'ai remarqué qu'il me manquait les solutions à deux problèmes pour faire de même avec la documentation originale.

Tout d'abord, la documentation originale comprend des insertions conditionnelles. En effet, le chapitre d'installation est aussi un document spécifique généré pour être inclus dans le package des sources de PostgreSQL. Ce fichier contient le mot document quand il fait partie de la génération du fichier INSTALL et contient le mot chapitre quand il fait partie de la génération complète du manuel. Parfois, ce sont des sections entières qui sont intégrées ou ignorées. Comment faire pour obtenir le même résultat en XML Docbook ? Il existe un moyen simple : les attributs de profile. Il existe des attributs standards comme os. En indiquant <para os="linux">linux-2.6.16</para><para os="windows">Windows XP</para>, vous obtiendrez un paragraphe contenant le texte « linux-2.6.16 » avec le profile os=linux et vous obtiendrez un paragraphe contenant le texte « Windows XP » avec le profile os=windows. Sans profile, vous n'aurez pas de paragraphe. Vous pouvez aussi créer des attributs personnalisés. Comme aucun des standards ne me convenait, j'ai créé un attribut que j'ai ajouté à chaque élément conditionnel. Vous trouverez ici la liste des modifications. J'arrive donc maintenant à générer un document autonome concernant l'installation.

Mon deuxième problème est la génération des pages man. Je n'ai pas encore terminé mais j'ai réussi à générer une page man... pas très belle, mais elle se génère. Toutes les infos sont disponibles ici grâce à l'excellent « Guide complet de Docbook XSL », malheureusement en anglais. Il serait temps qu'il se trouve un traducteur :)

mardi, avril 18 2006

Passage en XML

fabix avait bien démarré le projet du passage des sources SGML du manuel de PostgreSQL en XML. J'ai continué hier après-midi et terminé ce matin. xmllint ne donnait aucune erreur hier, xsltproc se plaignait encore un peu à cause d'identifiants inconnus. En effet, certains identifiants n'étaient pas identiques à cause de leur casse. J'ai commencé à me faire la liste manuellement avec gvim mais c'est un peu long et « chiant ». Bref, quelques tests avec sed et j'obtiens cette jolie commande :

grep -l "id=\"[A-Za-z0-9]" *.sgml | while read fichier
do
  mv ${fichier} ${fichier}.bak
  sed s/id=\"[a-zA-Z0-9-]*\"/\\L\&/g \
      s/linkend=\"[a-zA-Z0-9-]*\"/\\L\&/g \
      s/endterm=\"[a-zA-Z0-9-]*\"/\\L\&/g" ${fichier}.bak > ${fichier}
  echo "$fichier ok"
done

\L& permet de convertir ce qui a été récupéré par sed en minuscule.

Ceci fait, xsltproc s'est encore plaint pour deux/trois bêtises (Id au lieu de id, ProductName au lieu de productname... bref encore un problème de minuscule/majuscule).

Tout ce travail me permet de générer la documentation de PostgreSQL avec xsltproc, à priori plus rapide et me donnant plus d'options pour la génération... sans compter que les feuilles de style XSLT sont bien plus lisibles que les feuilles DSSSL. Néanmoins, il me reste encore du travail car il y a pas mal de différences entre le document généré par openjade et celui généré par xsltproc. Je m'y remets ce soir.