INaLCO - M2 Traductique
Cours XML 2011-2012
Contrôle sur machine du 7 mars 2012 : une réalisation minimale
On suit le plan de marche en trois étapes indiqué dans le cahier des charges.
- Transposer sur papier l'affichage à l'écran, purement et
simplement.
- Feuille de style
- Résultat
- Commentaire
- Amélioration
- Avec couverture séparée, titre dans l'en-tête et numéro de page
en pied
- Feuille de style
- Résultat
- Commentaire
- En séparant les chapitres (identifiés aux <div>).
- Feuille de style
- Résultat
- Commentaire
- Perfectionnement
-
Transposer sur papier l'affichage à l'écran, purement et
simplement.
-
Feuille de style
Frantext2FO-1.xsl
version améliorée : Frantext2FO-1b.xsl
-
Résultat
M622R-1.pdf
C'est lisible, avec quelques réglages des espaces avant et après les
titres de chapitres ce sera suffisant pour des textes courts.
Version améliorée : M622R-1b.pdf
-
Commentaire
On applique à la feuille de style Frantext2HTML la même transformation que celle
qui conduit de Neruda2HTML à Neruda2FO, exposée en cours le 23 février.
Comme dans Neruda2FO, on utilise un seul modèle de page <fo:simple-page-master>
et on engendre une seule séquence <fo:page-sequence>
.
Les raffinements concernant l'en-tête et le pied de page ne sont pas
demandés à cette étape
(ils apparaissent à l'étape suivante).
Les choix à effectuer concernent la traduction en FO des différents
formats HTML employés dans Frantext2HTML :
on s'inspire de ceux qui ont été faits dans Neruda2FO, voir les
commentaires dans la feuille de style.
Le problème des sauts de ligne qui devraient se traduire par des <fo:block>
est éliminé par le cahier des charges.
La seule surprise est l'obligation d'encadrer dans un <fo:block>
l'appel récursif <xsl:apply-templates />
dans la règle <xsl:template match="div">
:
en effet, si on ne met pas en place un tel bloc encadrant, l'activation
de la règle <xsl:template match="p/hi[@rend='I']">
va engendrer un élément <fo:inline font-style="italic">
(seule traduction possible de la balise HTML "<i>
")
qui se trouvera hors de tout bloc - situation illégale :
Erreur org.apache.fop.apps.FOPException: inline
formatting objects cannot be directly under flow
On peut bien sûr s'en tirer autrement, par exemple en ajoutant une
règle
<xsl:template match="p">
<fo:block><xsl:apply-templates
/></fo:block>
</xsl:template>
ou en encadrant l'appel récursif dans la règle initiale :
<fo:block><xsl:apply-templates
select="TEI/text/body"/></fo:block>
-
Amélioration
Dans la perspective de la deuxième étape, il paraît judicieux de
"sortir" le traitement du <teiHeader>
de la règle
initiale
et de le formuler comme une règle <xsl:template
match="teiHeader">
.
On en profite pour espacer les titres de chapitres...
-
Avec couverture séparée, titre dans l'en-tête et numéro de page
en pied
-
Feuille de style
Frantext2FO-2.xsl
-
Résultat
M622R-2.pdf
Tout à fait utilisable ! Mais seulement pour un texte assez court...
Un livre de 300 à 500 pages va demander qu'on puisse repérer les
chapitres,
ce sera pour la troisième étape.
Dans le détail, quelques scories, comme le "page 29" en dernière
ligne de la p. 2 :
dans le jargon technique, c'est une ligne veuve.
Pas très facile de l'éviter, vu la structure inadéquate de la source.
-
Commentaire
Cette fois on suit le modèle de FO exposé en cours le 16 février.
Aucune difficulté pour adapter à ce modèle la version améliorée de
l'étape 1.
-
En séparant les chapitres (identifiés aux <div>
).
-
Feuille de style
Premier essai : Frantext2FO-3.xsl
Réalisation perfectionnée : Frantext2FO-3a.xsl
-
Résultat
Premier essai : M622R-3.pdf
Si on accepte que la première <div>
, intitulée PLAN
,
apparaisse en p.2, le cahier des charges est satisfait.
Si on veut absolument qu'elle soit sur une page impaire comme les
autres, il va falloir un traitement spécial pour elle.
Réalisation perfectionnée : M622R-3a.pdf
-
Commentaire
La "bonne structure" qu'on va exploiter est celle des balises <div>
,
qui coïncident ici avec les chapitres.
Le modèle à suivre est cette fois celui des pièces de Shakespeare.
En le simplifiant, toutefois, car le cahier des charges n'impose pas
d'alternance entre pages paires et impaires.
On n'a donc besoin que de deux modèles de pages, comme à la deuxième
étape,
et le <fo:page-sequence-master>
des chapitres
sera un
<fo:repeatable-page-master-reference
master-reference="texte" />
au lieu d'un
<fo:repeatable-page-master-alternatives>
comme dans le modèle.
Il y aura autant de <fo:page-sequence>
instances de
ce modèle que de balises <div>
,
elles seront donc créées par la règle <xsl:template
match="div">
et non par la règle initiale.
Attention, cette règle change de nature et ne crée plus le "bloc
encadrant" dont nous avons vu la nécessité à la première étape.
Il faut donc ajouter une règle
<xsl:template match="p">
<fo:block><xsl:apply-templates
/></fo:block>
</xsl:template>
L'exigence d'un début de chapitre sur page impaire sera satisfaite,
comme chez Shakespeare, en donnant l'attribut
force-page-count="end-on-even"
au <fo:page-sequence
master-reference="chapitre">
qui sera créé par la règle <xsl:template match="div">
.
On peut s'arrêter là !
En effet, le cahier des charges demande seulement que chaque
chapitre commence sur une page impaire.
On peut prétendre que la première <div>
, intitulée PLAN
,
n'est pas un vrai chapitre,
et que par conséquent la faire commencer en p. 2 n'est pas une
malfaçon...
-
Perfectionnement
Si interprète plus strictement le cahier des charges, en considérant que "chapitre" est synonyme de <div>
,
et que par conséquent le PLAN
doit aussi commencer sur une page impaire
alors le seul moyen à ma connaissance est d'imposer le numéro de la première page de la première <div>
,
par exemple 1, en imposant initial-page-number="1"
à la <fo:page-sequence>
de la première <div>
comme on l'a fait pour le premier acte des pièces de Shakespeare.
Attention ! Cet attribut suppémentaire ne doit paraître que dans cette première séquence,
sans quoi tous les chapitres verront leur pagination commencer à 1 !
Comme chez Shakespeare, il va donc falloir dédoubler la règle <xsl:template match="div">
en
<xsl:template match="div[1]">
<fo:page-sequence master-reference="chapitre"
force-page-count="end-on-even"
initial-page-number="1">
.....
pour la première <div>
, et
<xsl:template match="div">
<fo:page-sequence master-reference="chapitre"
force-page-count="end-on-even" >
.....
pour les autres.
Il reste à raffiner la typographie, à équilibrer les intervalles, etc mais ces questions ne figurent pas au cahier de charges !