Page 1 sur 1

Documentation, oui mais en quelle format ?

Posté : 31 déc. 2007, 18:07
par Hywan
Bonjour bonjour :)

Alors je commence enfin la documentation de mon framework. Mais un dernier détail me chiffogne : dans quel format dois-je écrire la documentation ? La documentation est un guide de référence pour programmeur (différent d'un guide API généré avec PHPDoc).
La documentation sera accessible en texte, en HTML, en Postscript et a fortiori DVI et PDF (via Latex). Quel format de base utiliser ? S'il y a des applications qui proposent de passer d'HTML à texte, puis Postscript, DVI et PDF etc., via le code HTML strict, je suis preneur.

Voilà :) Bonne année à tous ;-).

Posté : 01 janv. 2008, 20:14
par Victor BRITO
Vu les débouchés que tu cites, l'idéal serait d'utiliser comme format de base le XML, ce que fait le groupe PHP pour pondre le manuel officiel.

Posté : 01 janv. 2008, 20:18
par Hywan
Ah oui pas bête. Est-ce que partir directement d'HTML ne serait pas plus simple ? Ou plutôt d'XHTML en fait. Toutes les balises nécessaires à la mise en forme sont déjà présentes.

Si on part d'XML directement, y a-t-il un standard ou une norme quelconque qui traîne dans un coin ? Tu connais des programmes qui permettent le passage d'un format à l'autre (e.g. XML -> texte, ou XML -> Postscript) ?

Merci :).

Posté : 01 janv. 2008, 20:28
par Victor BRITO
N'oublie pas qu'il y a XSLT (une extension est disponible pour PHP), qui te permet de transformer ton XML en une structure intégrable dans un autre format XML (RSS, Atom, XHTML) ou en HTML 4 ou dans un tout autre format.

Quant à la génération d'un PDF, tu as la bibliothèque FPDF, que tu peux combiner avec SimpleXML pour extraire les données XML à insérer dans le PDF.

Posté : 01 janv. 2008, 20:34
par Hywan
Oui mais je voulais un PDF pour un résultat Latex en fait. Enfin l'écrire en Latex, et que depuis ça, je transforme en DVI et PDF. Donc il faudrait faire XML -> Latex -> DVI et PDF.
Bonne idée pour XSLT, je l'avais oublié celui-là (décidément 2008 commence avec un mal de crâne incroyable ...). XSLT sait faire du Postscript ? Enfin on peut lui demander ?

Ça roule, je regarde tout ça demain.

Posté : 01 janv. 2008, 22:21
par Xenon_54
Vu les débouchés que tu cites, l'idéal serait d'utiliser comme format de base le XML, ce que fait le groupe PHP pour pondre le manuel officiel.
PHP utilise DocBook qui est basé sur XML: http://wiki.docbook.org/topic/DocBook

Il y a donc une structure bien précise dans leurs documents XML.

Posté : 01 janv. 2008, 23:56
par Sékiltoyai
Une fois en LaTEX, il n'y a aucun pb pour le transformer en DVI, en PDF, en HTML (mais bon, je pense que tu vas préférer le faire directement), ou en postscript (avec a2ps).

Posté : 02 janv. 2008, 21:08
par Hywan
Bonjour bonjour,
voilà alors j'ai plus regardé du côté de DocBook. On n'en fini pas d'aller de lien en liens, c'est une horreur.

Bon, c'est assez monstrueux DocBook, mais apparemment très puissant. Je vais faire quelque test pour voir si ça me convient. J'attends que les sources soient propres, et que l'on puisse ajouter du code facilement de façon automatique (comme des headers ou des choses comme ça). Et voir s'il ne peut pas ajouter des sommaires automatiquement ou des choses du genre. Bref, j'ai de quoi m'amuser un moment (moi qui voulait faire ça vite, me voilà parti pour des nuits de fou ...).

Si quelqu'un connaît déjà DocBook, j'aimerais bien pouvoir échanger quelques mails avec lui (ou mp hein), ce serait cool merci .

Heureusement, il y a le livre sur DocBook chez O'Reilly qui est en ligne, ça va m'être utile.

Merci à tous, je vous tiens au jus pour la suite.

-- edit --

Bien après avoir regarder toute l'après-midi, voilà ce que j'ai réussi à faire.
Déjà me documenter un peu, c'est le grand foutoir DocBook quand même ...
Après, télécharger les fichiers XSL (plutôt que de travailler sur internet à chaque fois). Et bin je vous mets au défis de trouver la dernière version de docbook-xsl compressé ou archivé sur internet. Pour ça, j'ai du trouver un commentaire dans la note de version qui mettait un schéma d'URL, que j'ai repris, bidouiller, et j'ai réussi à télécharger sur SF (Source Forge). Simple non ?
Bref, j'ai enfin réussi à générer un fichier HTML à partir de DocBook.
Seul hic, le code est uuuuultra crade. Déjà, on ne prend pas ./xsl/html/ mais ./xsl/xhtml, sinon je vous raconte le code :s. Mais ils ne doivent pas connaître les retours à la ligne je crois. En effet, aucun saut à la ligne dans le fichier de sortie ?! J'ai bien essayé de modifier les XSL pour ajouter des sauts de lignes, mais il y a des callback dans tous les sens, c'est très compliqué (un peu usine à gaz depuis l'extérieur, mais c'est juste compliqué je pense).
Donc bon, une solution ? Ou sinon, nettoyer le code avec un programme après ? Une solution ?

J'ai tenter de faire un .tex. Là je n'y suis pas encore arrivé.

Le problème avec DocBook, c'est que tous les liens sont cassés. Et il y a que très très peu d'infos. C'est vraiment dur. Un seul tuto en français, mais incomplet, liens brisés, fautes d'orthographes partout (pourtant écrit par un prof apparement). J'adore.

Je ne sais toujours pas comment modifier le résultat produit par DocBook, c'est à dire ajouter du code (une en-tête, un pied de page), modifier le code qui va être fait (changer des balises par exemple), ce sera sûrement dans le livre en ligne, je l'espère.

Si quelqu'un a déjà pratiqué DocBook, vraiment, qu'il m'envoie son e-mail :P.

Posté : 02 janv. 2008, 22:14
par Xenon_54
Je ne me suis attardé que très brièvement sur DocBook il y a quelques années de cela du temps que seul PHP4 existait et où l'extension XML (expat) était le seul moyen de lire ce genre de document XML.

Donc la recommendation a simplement été basée sur le fait que PHP.net utilisait ce format pour leur documentation.

Concernant la transformation via XSL, je crois que les sources de php.net seront intéressantes:
http://cvs.php.net/viewvc.cgi/phd/

Posté : 03 janv. 2008, 16:08
par Victor BRITO
Bref, si j'ai bien compris ta galère, HyWaN, le mieux est de procéder autrement.

Étant donné que j'ai parlé de XML et des transformations possibles, je viens de lire un nouveau tutorial d'Alsacréations sur le XML, qui parle de XSL-FO, qui permet de pondre des PDF (même si ton intention est de passer d'abord par LaTEX).

Posté : 04 janv. 2008, 11:27
par Hywan
Alors voilà où j'en suis.

Je me suis fais un fichier XML qui contient les DTD et balises DocBook.
J'ai réussi à exporter proprement vers les formats suivants : Tex, DVI, PS, PDF, HHP et CHM. Il me reste Unix Man et Eclipse à tester, mais ça ne posera pas de problèmes.
J'ai réussi à exporter également vers HTML. Et là c'est nettement moins drôle. Alors que le code pour Tex, DVI etc. est très très propre, le code pour HTML est une sacro-sainte horreur. J'ai découvert après coup (honte sur moi) qu'il y avait une exportation XHTML. Bien, c'est préférable. Je l'applique.
On perd déjà les <body bgcolor=" ... et autre monstruosité. Mais le code est toujours en un seul bloc fixe, aucun saut de ligne. Une horreur. En bidouillant dans les sources, j'arrive à activer le chunk-mode, i.e. le moteur XSLT (XSLTProc, Saxon, Sablotron & co.) indente le code, et nettoie tout ça. On a donc un beau code en présentation. On avance.
Seulement, le code n'est toujours sémantiquement pas correct. En effet, on trouve des <p><b>Table des matières</b></p>, au lieu de <h2>Table des matières</h2>. Le choix des balises n'est pas judicieux, il y a de la redondance, les liens sont très souvent mal écrit (il manque des informations), tout comme les abréviations, les acronymes, les citations etc. Enfin bref, c'est pas bien beau tout ça.
C'est incompréhensible, car le code pour Tex est très propre et très juste, c'est à n'y rien comprendre.

Je n'arrive toujours pas à ajouter du code. Il y a un mode website mais je ne le maîtrise pas encore. Mais en fouillant dedans, ce ne sera pas la solution à mon soucis, je le sens. Ce mode est plus du gadget, du plugin ou du tips que d'une réelle fonctionnalité. Il y a beaucoup d'informations et j'ai peu de temps (c'est souvent le cas hein ;-) ?).

Voilà l'état général. Je vais voir comment PHP.net a résolu le problème. J'ai déjà remarqué que pour ajouter du code, ils passent par PHP (et pas directement par XSLT), ce que je comprends ! C'est tellement compliqué sinon. Et aucun tutorial sur Internet, à croire que tout le monde l'utilise, mais ils n'osent pas le dire :P. Ou alors, je suis vraiment trop nul hehe (mais c'est difficilement concevable ça hein ;-)).

Sinon, une dernière solution serait de réécrire toutes les feuilles XSLT, mais là ... Pas le temps, trop complexe, il me faudrait 1 ou 2 mois pour tout réécrire, et je n'ai pas ce temps.

Posté : 04 janv. 2008, 11:54
par Sékiltoyai
Tu peux essayer un utilitaire tex2html sinon…

Posté : 06 janv. 2008, 20:13
par Hywan
@Sékiltoyai : Hmm la solution ne conviendrait pas. Il faut ajouter du code pour que ça fonctionne.

J'ai réussi à modifier les sources pour en faire ce que je voulais.
En fait, je me suis fais ma propre feuille XSLT, et je "surcharge" des portions de transformations de différentes feuilles initiales. De cette façon, j'arrive à ajouter des éléments ou pas dans la source. J'ai trouvé des informations dans la documentation en ligne (elle est très maigre quand même ...), et un livre de Oasis pour modifier les paramètres initiaux. Après, j'ai réécris des parties du code en "surcharge", et le tour est joué. Maintenant que je me suis débloqué, je vais tenter de pousser un peu plus le raisonnement (en écrivant automatiquement différent sommaire etc.), mais je devrais me débrouiller ;-).

Problème résolu. La solution est un brin complexe, et je doute qu'elle soit vraiment en rapport avec PHP, je ne la donne donc pas. Si jamais, je la mets, à vous de me dire.

En ce qui concerne le code mal écrit, j'ai réussi à améliorer un peu ça, et j'ai réussi à nettoyer les sources. Ce n'est toujours pas sémantiquement correct dans certain cas, mais je vais encore réécrire ces parties. Je commence à comprendre comment ça marche tout ce grand foutoir ^^. Je vais aussi me persuader que le code n'est pas si moche que ça. En effet, j'ai vu d'autres outils de documentations, et c'est bien plus crade :s. Donc je vais me contenter de DocBook, et c'est déjà pas mal ;-).

Merci pour votre aide :).

Posté : 07 janv. 2008, 02:37
par Sékiltoyai
Par curiosité, il peut être intéressant de savoir tous les utilitaires/techniques que tu utilises pour générer la doc dans tous ces formats…

Posté : 07 janv. 2008, 11:59
par Hywan
Bien.

Alors je commence par rédiger ma documentation en .xml.
Un exemple rapide :

Code : Tout sélectionner

<?xml version="1.0" encoding="utf-8"?> <book id="ex_de_doc" lang="fr"> <title>Livre très simple</title> <chapter id="ex_de_chapitre"> <title>Chapitre très court</title> <para>Bonjour tout le monde !</para> <para>Ceci est un paragraphe ...</para> <para>Et ceci est un très long parapjrzozpx kpok efke pkrfpoek pwok poekf poekfx opefkx epofkx eopfk pok tpok pokgx rgopkc rgopckergopk erpovkehpegkrxpoerkgcprogk xfkopzk xpeozkfzpeokw opzekfxeopzfkopwzekfpoekwpeokw</para> </chapter> </book>
Ensuite, j'ai besoin de générer vers d'autres formats. Pour cela, on applique des feuilles XSL de DocBook que l'on peut télécharger sur le site de DocBook (via sourceforge). Une fois l'archive décompressée, on a une multitude de dossiers portant le nom de différents formats de sorties (Eclipse, FO, HTML, HTMLHelp — a fortiori CHM —, JavaHelp, ManPages, Slides, Template, Website et XHTML dans sa version 1.73.2). Dans chaque dossier il faut chercher le fichier docbook.xsl qui normalement importe tous les autres fichiers et ainsi lancent la transformation. Si ce fichier n'existe pas, on tente de trouver le fichier qui importe tous les autres (c'est là où c'est joyeux ;-)), mais on le trouve rapidement.

Pour pouvoir appliquer toutes ces transformations, on a besoin d'un processeur XSLT. Une multitude de ces processeurs existe. Sur PHP 5, on a la lib_xslt qui contient DomXml, Sablotron et XsltProc je crois. Mais si vous voulez le faire sans PHP (mon cas pour l'instant), il faut installer un processeur XSLT. Sur les plates-formes Unix et Mac OS (BSD il me semble aussi), vous avez xsltproc déjà installé, donc pratique. Pour Windows j'en ai aucune idée. Il existe Saxon (téléchargeable au même lien que tout à l'heure), qui est un processeur Java. Pas besoin de l'installer, il suffit d'avoir la machine virtuelle Java, et on lance la transformation en appelant le .jar (attention donc à faire java -jar saxon.jar -s:filename -xsl:filename -o:filename -p:on par exemple). En ce qui concerne XSLT, la commande est beaucoup plus simple : xsltproc -o <output> <chemin vers les feuilles XSL> <fichier XML DocBook>.
Avec des méthodes, vous pourrez générer tous les formats cités ci-précédent.

Pour avoir des formats d'imprimeries (Tex, PS, DVI, PDF), j'utilise un autre utilitaire qui s'appelle dblatex (dblatex via SF). Il existe également db2latex, mais moins puissant, plus lent, enfin bref, moins bien. dblatex supporte plus de langage de sorties. Pas besoin de passer par le format FO. On lui donne le fichier XML, et il se débrouille. La documentation est très clair. Je ne donne qu'un exemple rapide pour lancer une commande : dblatex -t ps -T simple -o Output.ps Test.xml, ceci va prendre le fichier Test.xml et le transformer en Output.ps avec le style (-T) simple. Par défaut il utilise le rendu de db2latex, mais il est pas si beau que ça. Le style simple se rapproche du rendu Latex. Si on veut générer un fichier Latex, ça se fait de la même façon. En revanche pour générer les DVI, PS et PDF depuis Latex (via Texmaker, TexLive etc.) il faut avoir la bibliothèque docbook.sty. Je n'ai pas encore essayé depuis Tex, mais j'ai juste remarqué ça en lisant la source.
L'avantage est immédiat : on peut générer des maths depuis DocBook. Très pratique.
Pour utiliser dblatex, il faut lancer un petit script python qui va lancer l'installation : python ./install.py dans le dossier de dblatex.

Voilà, avec ça, on sort vers tous les formats. Ah oui, pour avoir le format d'aide Windows (CHM), DocBook génère un fichier HHP, que l'on doit ensuite compilé sur Windows avec l'utilitaire Windows. Cet utilitaire s'appelle hhc.exe et fait partie de la suite de développement Microsoft HTML Help SDK. Donc utilitaire gratuit et téléchargeable partout sur Internet.

Moi ce que m'embêtait, c'était de ne pas pouvoir ajouter un suffixe au titre des pages HTML par exemple.
Voici l'astuce.
On commence par créer son fichier XSL qui va lancer les fichiers DocBook, mais on va ajouter nos petites transformations à nous. Donc le fichier commence par :

Code : Tout sélectionner

<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:import href="/UsersOfPHPFrance/Hywan/docbook/xsl-stylesheets/xhtml/chunk.xsl" />
On n'oubliera pas de fermer de </xsl:stylesheet> à la fin du fichier.
Puis, pour modifier le titre :

Code : Tout sélectionner

<xsl:template name="head.content"> <xsl:param name="node" select="." /> <xsl:param name="title"> <xsl:apply-templates select="$node" mode="object.title.markup.textonly" /> </xsl:param> <title> <xsl:copy-of select="$title" /> <xsl:text> — Le suffixe de mon titre !</xsl:text> </title> </xsl:template>
Ceci ajoutera " — Le suffixe de mon titre !" à chaque page (livre, ou découpé).
Si jamais on veut ajouter du code en début de fichier, il faut appeler la template user.header.navigation, pour la fin du fichier : user.footer.navigation, pour le head : user.head.content etc. On trouve tout ça en fouillant dans les diverses documentations.

Les liens utiles : Voili voilou, j'espère que ça aidera quelqu'un un jours ;-). Je n'ai mis que quelques modifications pour transformer la sortie HTML, mon fichier est bien plus gros que ça. Mais je laisse le soin aux lecteurs de programmer comme bon leur semble ;-).