Gérer une fichothèque avec le logiciel BDF

La syntaxe CSS pour modifier le style d’un fichier au format OpenDocument

Un fichier au format OpenDocument (extensions .ods et .odt notamment) est en fait une archive au format zip qui contient les différents constituants du document et en particulier plusieurs fichiers au format XML. Un de ces fichiers est styles.xml, c’est dans celui que sont définies les principales informations de style du document. Le fichier content.xml contient également des informations de style dans la partie <office:automatic-styles>. Le format XML de définition d’un style est complexe, ce qui n’est pas étonnant vu les possibilités offertes. En particulier, il est nécessaire de jongler avec de nombreux espaces de nom.

Pour ne pas avoir à manipuler ce fichier directement, le logiciel BDF donne la possibilité de définir les styles via un fichier intermédiaire qui suit la syntaxe CSS. Ce fichier est converti au format XML des styles OpenDocument. Le passage par ce fichier intermédiaire permet d’avoir du code plus lisible et évite de produire du XML mal formé et il couvre les questions de mise en forme les plus courantes (gras, italique, bordure, couleur de fond, etc.). L’intervention directe dans le fichier styles.xml reste toujours possible dans le cas des gabarits de transformation.

L’utilisation de ce fichier intermédiaire simplifie également les styles des tableaux car, dans un document ODT, les informations de styles doivent être placées dans la partie <office:automatic-styles> de content.xml. Cette répartition entre styles.xml et content.xml est faite par le logiciel BDF.

Point important : les fichiers CSS pour le style OpenDocument suivent la syntaxe CSS mais ne permettent pas pour autant d’utiliser toutes les possibilités du CSS dans le cas d’une page HTML, (par exemple les cascades de style, l’utilisation des identifiants, etc). L’intérêt de l’utilisation de cette syntaxe est d’offrir un terrain familier aux personnes qui ont déjà pratiqué ce langage.

Un des meilleurs moyens pour découvrir cette syntaxe est de regarder les feuilles de style proposées par défaut via la commande de l’aministration Gestion des ressources. css/fiche_odt.css et css/_ficheblockelements_odt.css sont les feuilles de style utilisées pour les versions ODT des fiches. css/ods/ contient les feuilles de styles de différents tableaux ODS.

Cas général

Lorsqu’on ouvre la fenêtre de gestion des styles dans LibreOffice (commande F11), on constate que les styles sont regroupés par famille (styles de paragraphe, styles de caractère, style de cellule dans la partie Tableur, etc), que chaque style a un nom, et qu’il y a possibilité de hiérarchie entre les styles, un style enfant héritant des propriétés d’un style parent.

En syntaxe CSS, cela se traduit par un sélecteur avec un nom d’élément (la famille) et un nom de classe (le nom du style). Par exemple span.FbeTxtEm se traduit par « Style de caractère nommé FbeTxtEm ».

On notera que la gestion des styles dans LibreOffice permet d’avoir des noms de style assez libres. L’utilisation de la syntaxe CSS réduit les possibilités. On évitera ainsi les caractères accentués. On pourra cependant utiliser un souligné dans le nom du style qui sera convertit en une espace dans LibreOffice pour obtenir des noms de styles plus lisibles.

Pour la hiérarchie des styles, il faudra définir une propriété CSS parent-style-name avec le nom du style parent.

Exemple des styles de caractère : italique et gras + italique
span.FbeTxtEm {
    font-style: italic;
}

span.FbeTxtEmStrg {
    parent-style-name: FbeTxtEm;
    font-weight: bold;
}

Les noms d’éléments reconnus et transformés en famille de style OpenDocument sont les suivants :

  • p : style de paragraphe

  • span : style de caractère

  • table : style de tableau (n’apparaitra pas dans la gestion des styles même si cette option est présente dans les versions récentes de LibreOffice)

  • col (ou column) : style de colonne (absent de la gestion des styles)

  • td (ou cell) : style de cellule (présent dans la gestion des styles uniquement dans la partie Tableur)

  • tr (ou row) : style de ligne (absent de la gestion des styles)

  • graphic : style de graphique (absent de la gestion des styles)

Pour information, les familles de styles qui sont absentes de la gestion des styles sont celles placées dans la partie <office:automatic-styles> de content.xml.

Cas particulier des niveaux de titre

LibreOffice propose dix niveaux de titre par défaut dans un document. Le nom d’un style en interne est Heading_20_{niveau du titre}, LibreOffice faisant automatiquement la conversion du libellé dans la langue de l’interface et les niveaux de titre ont comme parent un style « Titre » dont le nom interne est Heading.

Pour simplifier la gestion de ces niveaux de titre, il est possible d’utiliser comme raccourci les noms d’éléments h, h1 jusqu’à h10. C’est le seul cas où aucun nom de style n’est attendu car le nom de style sera automatiquement traduit en Heading{quelque chose}.

Ces raccourcis peuvent aussi être utilisé pour désigner le nom de style dans une propriété qui fait une référence à un autre style, comme par exemple next-style-name qui indique le style suivant comme le montre l’exemple suivant ou h2 est le style suivant h1 et p.FbeTxt est le style suivant h2.

Extrait de css/_ficheblockelements_odt.css avec les deux premiers niveaux de titre et le style de paragraphe .FbeTxt
h {
    font-weight: bold;
    font-size: 150%;
    keep-together: always;
    keep-with-next: always;
    margin-bottom: 0.5cm;
    margin-top: 0.5cm;
}

h1 {
    margin-top: 1.5cm;
    next-style-name: h2;
}

h2 {
    font-size: 85%;
    margin-left: 1.2cm;
    margin-top: 0.8cm;
    next-style-name: FbeTxt;
}

p.FbeTxt {
    margin-top: 0.3cm;
    text-align: justify;
    widows: 2;
    orphans: 2;
}

Cas particulier des listes

Dans OpenDocument, les styles de liste ont besoin d’une information supplémentaire : le niveau de profondeur auquel le style s’applique. Ce niveau de profondeur est indiqué par un attribut level appliqué à un nom d’élément ul (qui doit aussi avoir un nom de style) comme le montre l’extrait suivant :

Extrait de css/_ficheblockelements_odt.css pour les listes
ul.FbeLstUl[level="1"] {
    bullet-char: •;
    min-label-width: 0.4cm;
    style-name: NumberingSymbols;
    space-before: 0.2cm;
}

ul.FbeLstUl[level="2"] {
    bullet-char: •;
    min-label-width: 0.4cm;
    space-before: 0.5cm;
    style-name: NumberingSymbols;
}

Quels noms de propriété sont reconnus ?

Pour connaitre les noms de propriété utilisables et les valeurs possibles, il est nécessaire de se plonger dans la documentation du format OpenDocument. Un moyen simple d’exploration est d’utiliser la propriété attendue dans un fichier OpenDocument de test, de le décompresser comme archive zip et d’aller voir comme il est exprimé dans le format XML (ou plus simple encore : enregistrer au format XML plat .fods ou .fodt pour le lire directement). On peut alors l’utiliser en ignorant l’espace de nom (le bon espace de nom est recensé dans le logiciel BDF). Par exemple, l’attribut XML @fo:background-color peut être utilisé sous forme d’une propriété CSS background-color.

On remarquera que les noms des attributs les plus courants sont similaires à ceux du CSS « normal ».

Le logiciel tient la liste des attributs possibles en fonction du type de style. Si une propriété n’est pas pertinente pour un type de style donné, elle est ignorée. Par exemple, anchor-type (qui deviendra un attribut @text:anchor-type dans le fichier XML) ne s’applique que pour les éléments graphic. Un attribut récemment introduit dans le format OpenDocument peut ainsi ne pas être reconnu.

La meilleure source d’inspiration reste les fichiers CSS proposés par défaut.