Précédent

Table des matières

bas de page     

Suivant     


Table des matières abrégée
6 Les objets de mise en forme
    6.1 Introduction aux objets de mise en forme
    6.2 Le contenu de l'objet de mise en forme
    6.3 Le sommaire des objets de mise en forme
    6.4 Les déclarations, la pagination et les objets de mise en forme pour la disposition
    6.5 Les objets de mise en forme de type bloc
    6.6 Les objets de mise en forme de type en-ligne
    6.7 Les objets de mise en forme des tables
    6.8 Les objets de mise en forme des listes
    6.9 Les effets dynamiques : les objets de mise en forme link et multi
    6.10 Les objets de mise en forme hors-ligne
    6.11 Les autres objets de mise en forme

6 Les objets de mise en forme

6.1 Introduction aux objets de mise en forme

L'arbre des objets de mise en forme affiné décrit une ou plusieurs des présentations souhaitées pour l'information dans cet arbre. La mise en forme est le processus qui convertit la description en une présentation. Voir le chapitre [3 Introduction à la mise en forme]. La présentation apparaît, sous une forme abstraite, dans un arbre des aires, comme défini dans le modèle des aires. Voir le chapitre [4 Le modèle des aires]. Chacune des présentations possibles est représentée par un ou plusieurs arbres des aires dans lesquels l'information dans l'arbre des objets de mise en forme est disposée sur une surface en deux dimensions et demie.

Il y a trois genres d'objets de mise en forme : (1) ceux qui génèrent des aires, (2) ceux qui retournent des aires, sans les générer, et (3) ceux qui sont utilisés pour la génération des aires. Ceux des deux premiers genres sont typiquement appelées objets de flux. Ceux du troisième genre sont appelés soit objets de disposition, soit objets auxilliaires. Le genre de l'objet transparaît dans la terminologie employée avec celui-ci. On dit que les objets du premier genre « génèrent une ou plusieurs aires ». On dit que les objets du deuxième genre « retournent une ou plusieurs aires ». Les objets du premier genre peuvent à la fois générer et retourner des aires. Les objets du troisième genre sont « utilisés pour la génération des aires » ; c'est-à-dire, ils se comportent comme des paramètres du processus de génération.

6.1.1 Les définitions communes à plusieurs objets de mise en forme

Cette catégorisation conduit à définir deux traits qui caractérisent la relation entre une aire et l'objet de mise en forme qui génère et retourne celle-ci. Ces traits sont generated-by et returned-by.

La valeur du trait generated-by est un seul objet de mise en forme. Un objet de mise en forme F est défini comme générant une aire A, si la sémantique de F spécifie la génération d'une ou plusieurs aires et que A soit une des aires ainsi générées, ou soit une forme substituée d'une de ces aires, comme spécifié au chapitre [4.7.2 La construction des lignes].

Dans le cas d'aires de glyphe substituées, l'objet de mise en forme générateur est considéré comme étant celui qui a généré l'aire de glyphe la première venue dans la séquence des aires de glyphes substituées. Dans le cas d'une aire de glyphe insérée (par exemple, un tiret produit automatiquement), l'objet de mise en forme générateur est considéré comme étant celui qui a généré la dernière aire de glyphe, avant l'aire de glyphe insérée, dans le cheminement préordonné de l'arbre des aires.

La valeur du trait returned-by est un jeu de paires, chacune de ces paires étant constituées d'un objet de mise en forme et d'un entier positif. Cet entier représente la position de l'aire dans l'ordonnancement de toutes les aires retournées par l'objet de mise en forme.

Un objet de mise en forme F est défini comme retournant la séquence des aires A, B, C, etc., si la paire (F,1) est un membre du trait returned-by de A, la paire (F,2) est un membre du trait returned-by de B, et ainsi de suite.

Si une aire est un membre de la séquence des aires retournées par un objet de mise en forme, alors soit celle-ci a été générée par l'objet de mise en forme en question, soit celle-ci faisait partie de la séquence des aires retournées par un enfant de ce même objet. Toutes les aires retournées par l'enfant d'un objet de mise en forme ne sont pas nécessairement retournées par cet objet de mise en forme. Un objet de mise en forme peut générer une aire, comme certaines des aires enfants de celle-ci le peuvent, qui a des aires retournées par les enfants de cet objet en question. Ces enfants (dans l'arbre des aires) de l'aire générée ne sont pas retournés par l'objet de mise en forme auquel ceux-ci ont été retournés.

Un jeu de nœuds dans un arbre forme un lignage :

Le jeu des objets de mise en forme par lequel une aire est retournée forme un lignage.

Les aires retournées par un objet de mise en forme peuvent être soit normales soit hors-ligne. Les aires normales représentent des aires dans le « flux normal du texte », c'est-à-dire, celles-ci deviennent les aires enfants des aires générées par l'objet de mise en forme auquel elles sont retournées. Les aires normales ont un lignage par le trait returned-by de taille un . Il n'existe qu'une seule sorte d'aire normale.

Les aires hors-ligne sont des aires utilisées en dehors du flux normal du texte, soit parce qu'elles ont un positionnement absolu, soit parce qu'elles font partie d'un flottant ou d'un pied de page. Les aires hors-ligne peuvent avoir un lignage par le trait returned-by de taille supérieure à un.

Le trait area-class indique à laquelle classe, normale ou hors-ligne, une aire appartient. Pour les aires hors-ligne, celui-ci indique aussi une sous-classe de l'aire hors-ligne. Le trait admet les valeurs "xsl-normal", "xsl-absolute", "xsl-footnote", "xsl-side-float" et "xsl-before-float". Une aire est normale si, et seulement si, la valeur du trait area-class est "xsl-normal" ; autrement, il s'agit d'une aire hors-ligne (voir le chapitre [4.2.5 Les contraintes d'empilement]).

Les aires retournées par un objet de mise en forme donné sont ordonnées comme indiqué plus haut. Cet ordre définit un ordonnancement des sous-séquences des aires qui appartiennent à une classe d'aire donnée, comme la sous-séquence des aires normales. Une aire A précède une aire B dans la sous-séquence si, et seulement si, l'aire A précède l'aire B dans les aires retournées par les objets de mise en forme.

On définit une chaîne d'aires de référence comme étant la séquence des aires de référence qui est soit générée par un même objet de mise en forme, celui-ci n'étant pas un objet de mise en forme page-sequence, soit qui consiste en aires de référence de la région ou en aires de référence de flux normal (voir [6.4.13 fo:region-body]) générées avec des objets de mise en forme de région assignés à un même flux (voir [6.4.1.4 Les flux et la correspondance de flux]). On dit que les aires de référence de la séquence sont « contenues » dans la chaîne d'aires de référence, chacune d'entre elles ont le même ordonnancement dans la séquence, les unes par rapport aux autres, que celui qu'elles ont dans l'arbre des aires, en suivant un ordre de cheminement préordonné de l'arbre des aires.

6.2 Le contenu de l'objet de mise en forme

Le contenu d'un objet de mise en forme est décrit en utilisant la syntaxe de modèle de contenu de XML. Dans certains cas, des contraintes supplémentaires, non exprimables selon les modèles de contenu de XML, sont signalées en explication.

Le paramètre d'entité « %block; », dans les modèles de contenu ci-dessous, comprend les objets de mise en forme suivants :

     block
     block-container
     table-and-caption
     table
     list-block

Le paramètre d'entité « %inline; », dans les modèles de contenu ci-dessous, comprend les objets de mise en forme suivants :

     bidi-override
     character
     external-graphic
     instream-foreign-object
     inline
     inline-container
     leader
     page-number
     page-number-citation
     basic-link
     multi-toggle

Les objets de mise en forme suivants sont des conteneurs « neutres », on peut les utiliser pourvu que les contraintes supplémentaires mentionnées pour chaque objet de mise en forme soient satifaites, partout où un contenu #PCDATA, %block; ou %inline; est permis :

     multi-switch
     multi-properties
     wrapper
     retrieve-marker

On peut utiliser l'objet de mise en forme « hors-ligne » suivant partout où un contenu #PCDATA, %block; ou %inline; est permis (sauf comme descendant d'un éventuel objet de mise en forme « hors-ligne ») :

     float

On peut utiliser l'objet de mise en forme « hors-ligne » suivant partout où un contenu #PCDATA ou %inline; est permis (sauf comme descendant d'un éventuel objet de mise en forme « hors-ligne ») :

     footnote

6.3 Un sommaire des objets de mise en forme

basic-link

L'objet fo:basic-link s'utilise pour représenter la ressource de départ d'un lien simple ;

bidi-override

L'objet de mise en forme en-ligne fo:bidi-override s'utilise là où il est nécessaire de surclasser la direction par défaut de l'algorithme bi-directionnel Unicode pour des écritures en-ligne différentes (ou imbriquées) dans les documents de langues mixtes ;

block

L'objet de mise en forme fo:block s'emploie couramment pour la mise en forme des paragraphes, des titres, des premières pages, des légendes de schéma ou de table, etc. ;

block-container

L'objet de flux fo:block-container s'utilise pour la génération d'une aire de référence de type bloc ;

character

L'objet de flux fo:character représente un caractère, qui est relié à un glyphe pour sa représentation ;

color-profile

Employé pour la déclaration d'un profil de couleur dans une feuille de style ;

conditional-page-master-reference

L'objet fo:conditional-page-master-reference s'emploie pour identifier un maître de page, qui devra être utilisé quand les conditions pour son emploi seront satisfaites ;

declarations

Utilisé pour le regroupement global de déclarations dans une feuille de style ;

external-graphic

L'objet de flux fo:external-graphic s'utilise pour un fichier graphique quand les données graphiques sont localisées en dehors de l'arbre résultant dans l'espace de nommage fo ;

float

L'objet fo:float a deux usages. On peut l'utiliser quand, lors de la disposition normale du contenu, un éventuel contenu en relation est mis en forme dans une aire séparée, au commencement d'une page (ou des pages suivantes), où celui-ci est disponible pour une lecture sans gêne immédiate auprès du lecteur. Sinon, on peut l'utiliser quand on souhaite faire flotter une aire vers un côté, le contenu normal s'écoulant le long de ses flancs ;

flow

Le contenu de l'objet de mise en forme fo:flow est une séquence d'objets de flux qui fournit le contenu du texte d'écoulement qui est distribué dans des pages ;

footnote

L'objet fo:footnote s'utilise pour la production de l'appel d'une note de pied de page et la note de pied de page correspondante ;

footnote-body

L'objet fo:footnote-body s'utilise pour la génération du contenu de la note de pied de page ;

initial-property-set

L'objet fo:initial-property-set spécifie les propriétés de formatage pour la première ligne d'un objet fo:block ;

inline

L'objet de mise en forme fo:inline s'utilise couramment pour le formatage d'un morceau de texte avec un arrière-plan ou la ceinture de celui-ci avec une bordure ;

inline-container

L'objet de flux fo:inline-container s'utilise pour la génération d'une aire de référence en-ligne ;

instream-foreign-object

L'objet de flux fo:instream-foreign-object s'utilise pour un graphique en-ligne ou un autre objet « générique », les données de ceux-ci résidant en tant que descendants de fo:instream-foreign-object ;

layout-master-set

L'objet fo:layout-master-set est un emballage autour de tous les maîtres utilisés dans le document ;

leader

L'objet de mise en forme fo:leader s'utilise pour la génération de lignes de conduite, consistant soit en une règle, soit en une rangée formée de la répétition de caractères ou de la répétition périodique d'un motif de caractères, pouvant relier deux objets textuels ;

list-block

L'objet de flux fo:list-block s'utilise pour le format d'une liste ;

list-item

L'objet de mise en forme fo:list-item comprend le label et le corps d'un item de liste ;

list-item-body

L'objet de mise en forme fo:list-item-body comprend le contenu du corps d'un item de liste ;

list-item-label

L'objet de mise en forme fo:list-item-label comprend le contenu du label d'un item de liste ; celui-ci est typiquement employé pour l'énumération, l'identification ou l'ornement du corps d'un item de liste ;

marker

L'objet fo:marker, employé en conjonction avec fo:retrieve-marker, pour produire des en-têtes ou des pieds de page courants ;

multi-case

L'objet fo:multi-case s'utilise pour contenir (dans un objet fo:multi-switch) chacun des sous-arbres alternatifs d'objets de mise en forme, parmi lesquels l'objet parent fo:multi-switch choisira d'en montrer un et cachera les autres ;

multi-properties

L'objet fo:multi-properties s'utilise pour basculer entre deux ou plus jeux de propriétés associés à une partie du contenu ;

multi-property-set

L'objet fo:multi-property-set s'utilise pour la spécification d'un jeu alternatif de propriétés de mise en forme qui sera appliqué au contenu, en fonction de l'état de l'agent utilisateur ;

multi-switch

L'objet fo:multi-switch enveloppe la spécifation de sous-arbres d'objets de mise en forme alternatifs (chaque sous-arbre se tenant dans un objet fo:multi-case) et gère le basculement (activé par l'objet fo:mult-toggle) d'une alternative à l'autre ;

multi-toggle

L'objet fo:multi-toggle s'utilise dans un objet fo:multi-case pour une bascule vers un de ses autres membres ;

page-number

L'objet de mise en forme fo:page-number s'utilise pour la représentation du numéro de page courant ;

page-number-citation

L'objet fo:page-number-citation s'utilise pour le référencement du numéro de page contenant la première aire normale retournée par l'objet de mise en forme qui est désigné ;

page-sequence

L'objet de mise en forme fo:page-sequence s'utilise pour spécifier la manière de créer une (sous-)séquence de pages dans un document, par exemple, le chapitre d'un rapport. Le contenu de ces pages provient des enfants de flux de l'objet fo:page-sequence ;

page-sequence-master

L'objet fo:page-sequence-master spécifie les maîtres de équences de pages qui sont utilisés au moment de la génération d'une séquence de pages ;

region-after

Cette région définit une zone de visualisation située sur le côté « après » d'une région fo:region-body ;

region-before

Cette région définit une zone de visualisation située sur le côté « avant » d'une région fo:region-body ;

region-body

Cette région définit une paire zone de visualisation/référence située au « centre » d'une région fo:simple-page-master ;

region-end

Cette région définit une zone de visualisation située sur le côté « fin » d'une région fo:region-body ;

region-start

Cette région définit une zone de visualisation située sur le côté « début » d'une région fo:region-body ;

repeatable-page-master-alternatives

Un objet fo:repeatable-page-master-alternatives spécifie une sous-séquence qui consiste des instances répétées d'un jeu de maîtres de page alternatifs. Le nombre de ces répétitions peut être dépendant ou éventuellement non dépendant ;

repeatable-page-master-reference

Un objet fo:repeatable-page-master-reference spécifie une sous-séquence qui consiste des instances répétées d'un seul maître de page. Le nombre de ces répétitions peut être dépendant ou éventuellement non dépendant ;

retrieve-marker

L'objet fo:retrieve-marker s'utilise en conjonction avec l'objet fo:marker pour la production d'en-têtes ou de pieds de page courants ;

root

Le nœud fo:root est à la tête d'un arbre résultant XSL. Cet arbre se compose d'objets de mise en forme ;

simple-page-master

L'objet fo:simple-page-master, utilisé dans la génération des pages, spécifie la géométrie de la page. La page peut être subdivisée jusqu'en cinq régions ;

single-page-master-reference

Un objet fo:single-page-master-reference spécifie une sous-séquence qui consiste en une seule instance d'un seul maître de page ;

static-content

L'objet de mise en forme fo:static-content contient une séquence ou un arbre d'objets de mise en forme qui doivent être présentés dans une seule région ou répétés dans des régions de même nom sur une ou plusieurs pages de la séquence de page. Un usage commun en est la répétition d'en-têtes et de pieds de page courants ;

table

L'objet de flux fo:table s'utilise pour la mise en forme du matériel tabulaire d'une table ;

table-and-caption

L'objet de flux fo:table-and-caption s'utilise pour la mise en forme d'une table accompagnée d'une légende ;

table-body

L'objet de mise en forme fo:table-body s'utilise pour recevoir le contenu du corps d'une table ;

table-caption

L'objet de mise en forme fo:table-caption est utilisé pour recevoir des objets de mise en forme de type bloc qui contiennent la légende d'une table, seulement quand on utilise l'objet fo:table-and-caption ;

table-cell

L'objet de mise en forme fo:table-cell s'utilise pour le regroupement du contenu devant être placé dans une cellule de table ;

table-column

L'objet de mise en forme fo:table-column spécifie les caractéristiques qui s'appliquent aux cellules de table ayant la même colonne et la même étendue ;

table-footer

L'objet de mise en forme fo:table-footer est utilisé pour recevoir le contenu du pied d'une table ;

table-header

L'objet de mise en forme fo:table-header est utilisé pour recevoir le contenu de l'en-tête d'une table ;

table-row

L'objet de mise en forme fo:table-row s'utilise pour le regroupement de cellules de table en rangées ;

title

L'objet de mise en forme fo:title est utilisé pour l'association d'un titre avec une séquence de pages donnée. Ce titre peut être utilisé par un agent utilisateur interactif pour l'identification des pages. Par exemple, le contenu de fo:title peut être formaté et affiché dans un « titre » de fenêtre ou dans une « infobulle » ;

wrapper

L'objet de mise en forme fo:wrapper s'utilise pour la spécification des propriétés héritées pour un groupe d'objets de mise en forme. Celui-ci n'a pas de sémantique de mise en forme supplémentaire.

6.4 Les déclarations, la pagination et les objets de mises en forme pour la disposition

6.4.1 Introduction

Le nœud racine de l'arbre des objets de mise en forme est obligatoirement un objet de mise en forme fo:root. Les enfants de celui-ci sont un seul objet fo:layout-master-set, un éventuel objet fo:declarations et une séquence composée d'un ou plusieurs objets fo:page-sequences. L'objet fo:master-layout-set définit la géométrie et la distribution des pages ; les enfants des objets fo:page-sequences, appelés des flux (contenus dans des objets fo:flow et fo:static-content), fournissent le contenu qui est distribué dans les pages. L'objet fo:declarations forme une enveloppe pour ceux des objets de mise en forme dont le contenu doit être utilisé comme ressource pour le processus de mise en forme. Le processus de génération des pages est effectué automatiquement par le processeur XSL mettant en forme l'arbre résultant.

Les enfants de l'objet fo:layout-master-set constituent les spécifications pour la pagination et la disposition. Les noms de ces spécifications se terminent par « -master ». Il y a deux sortes de spécifications de pagination et de disposition : les maîtres de page et les maîtres de séquence de pages. Les maîtres de page sont chargés de décrire les subdivisions souhaitées pour une page et la géométrie de ces subdivisions. Les maîtres de séquence de pages sont chargés de décrire la séquence des maîtres qui seront utilisés pour la génération des pages lors du formatage d'un objet fo:page-sequence.

6.4.1.1 Les maîtres des séquences de pages

Chaque objet fo:page-sequence-master caractérise un jeu possible de séquences de maîtres de page. Pour un objet fo:page-sequence donné, une seule parmi le jeu de séquences possibles sera utilisée. Celle-ci doit satisfaire aux contraintes déterminées par les maîtres de page individuels, les flux qui produisent les pages à partir des maîtres de page et l'objet fo:page-sequence-master lui-même.

L'objet fo:page-sequence-master s'emploie pour déterminer lesquels des maîtres de page utiliser et l'ordre de leur utilisation. Les enfants d'un objet fo:page-sequence-master forment une séquence des spécifications d'une sous-séquence. Les maîtres de page d'une sous-séquence peuvent être spécifiés en référence à un seul maître de page ou comme une répétition d'un ou plusieurs maîtres de page. Par exemple, une séquence peut commencer avec plusieurs maîtres de page explicites et continuer par une répétition d'un autre maître de page (ou d'autres maîctres).

L'objet fo:single-page-master-reference s'emploie pour spécifier une sous-séquence consistant en un seul maître de page.

On peut spécifier une sous-séquence, qui est une répétition, de deux façons. L'objet fo:repeatable-page-master-reference spécifie la répétition d'un seul maître de page. L'emploi d'un maître de page, parmi les maîtres de page alternatifs, à un endroit donné d'une sous-séquence, est conditionnel et peut dépendre de la page, si le numéro de celle-ci est pair ou impair, si c'est la première page, ou la dernière, ou si celle-ci est vide. La propriété 'maximum-repeats' sur la spécification de la répétition en contrôle le nombre. Si cette propriéé n'est pas spécifiée, il n'y a aucune limite sur le nombre des répétitions.

6.4.1.2 Les maîtres de page

Un maître de page est le maître utilisé pour la génération d'une page. Une page forme une paire zone de visualisation/référence dans laquelle l'aire de zone de visualisation est un enfant de la racine de l'arbre des aires. On définit une aire de zone de visualisation de page comme étant l'aire de la zone de visualisation d'une page et une aire de page comme étant l'enfant unique d'une aire de zone de visualisation de page.

L'aire de zone de visualisation de page est définie par le média de sortie ; l'aire de page comprend les contenus de la page, celle-ci est responsable du positionnement de ces contenus sur le média de sortie.

Un seul maître de page peut être utilisé à plusieurs reprises. À chaque utilisation de celui-ci, une seule page est générée ; par exemple, un maître de page, référencé par un objet fo:repeatable-page-master-reference, sera utilisé par l'objet fo:page-sequence pour la génération d'une page, pour chaque occurence de la référence dans la sous-séquence spécifiée.

Remarque :

Quand on emploie des pages avec un agent utilisateur comme un navigateur web, chaque document n'est généralement représenté que par une page. La zone de visualisation utilisée pour voir la page détermine la taille de celle-ci. Quand les pages sont transcrites sur des médias qui ne sont pas interactifs, comme des feuilles de papier, les pages correspondent alors a une, ou plus, des surfaces du papier. La taille du papier détermine la taille de la page.

Dans cette spécification, il n'existe qu'une sorte de maître de page, l'objet fo:simple-page-master. Des spécifications ultérieures pourront en apporter d'autres sortes.

Un objet fo:simple-page-master contient, comme ses enfants, les spécifications pour une ou plusieurs régions.

La spécification d'une région est utilisée en tant que maître, le maître de région, pour la génération d'une paire zone de visualisation/référence qui consiste en une aire de zone de visualisation de région et une aire de référence de région. L'aire de zone de visualisation de région est toujours un enfant d'une aire de page générée avec le parent du maître de région.

Remarque :

Les régions sur la page sont analogues aux « cadres » d'un document HTML. Typiquement, au moins une de ces régions est d'une longueur indéfinie dans l'une de ses dimensions. Pour les langues avec un mode d'écriture de « gauche-à-droite - haut-en-bas » (ou de « droite-à-gauche - haut-en-bas »), cette région est typiquement d'une longueur indéfinie dans le sens de bas-en-haut. La zone de visualisation représente la partie visible de ce cadre. Le flux dirigé vers la région est vu en faisant défiler l'aire de référence de la région au travers de la zone de visualisation.

Chaque région est définie par un objet de mise en forme de région. Chacun d'eux a un nom et une position définie. De plus, la hauteur, ou la largeur, d'une région est fixe, l'autre dimension pouvant être soit fixe soit indéfinie. Par exemple, une région qui est le corps d'une page web peut avoir une hauteur indéfinie.

La spécification de la région détermine la taille et la position des aires de zone de visualisation de région qui sont générées avec l'objet de mise en forme de région. Le positionnement d'une aire de zone de visualisation se fait en fonction de son aire de page parent.

Pour cette Recommandation version 1.0, un maître de page comprend jusqu'à cinq régions, la « région du corps » et quatre autres régions, chacune étant située sur un côté de la région du corps. Pour une correspondance de ces régions limitrophes avec le mode d'écriture courant, on les nomme « région d'avant » (celle-ci correspond à une « en-tête » pour la valeur "lr-tb" de la propriété 'writing-mode'), « région d'après » (correspondant à un « pied de page » pour la valeur "lr-tb" de 'writing-mode'), « région de début » (correspondant à un « bandeau latéral gauche » pour la valeur "lr-tb" de 'writing-mode') et « région de fin » (correspondant à un « bandeau latéral droit » pour la valeur "lr-tb" de 'writing-mode'). Il est prévu qu'une version ultérieure de la Recommandation introduise un mécanisme permettant à un maître de page de contenir un nombre arbitraire de régions, leur taille et leur position étant arbitraires également.

On associe des sous-régions conditionnelles à certains types de région, les aires de référence de région, associées à ces régions, sont divisées pour faire correspondre leurs aires enfants avec les sous-régions, y compris une « aire de référence principale » pour la région en question. Pour les maîtres de région sur lesquels s'applique la propriété 'column-count', l'aire de référence principale est encore subdivisée en aires enfants, désignées comme « aires de référence d'étendue », dont le nombre est lié à celui des étendues (c'est-à-dire les aires de bloc avec span = "all") qui surviennent dans la page. Celles-ci, à leur tour, sont subdivisées en aires enfants, désignées comme « aires de référence de flux normal », dont le nombre dépend du nombre de colonnes spécifié.

6.4.1.3 La génération de la page

Les pages sont générées lors du traitement de l'objet fo:page-sequences par le formateur. Comme indiqué au-dessus, chaque page consiste en une paire zone de visualisation/référence dans laquelle l'aire de zone de visualisation est un enfant de la racine de l'arbre des aires. Chaque page est générée en utilisant un maître de page pour la définition des aires de zone de visualisation de région et des aires de référence de région qui correspondent aux régions spécifiées par celui-ci.

Chaque objet fo:page-sequence se réfère soit à un objet fo:page-sequence-master soit à un maître de page. Si c'est une référence à un maître de page, ceci est interprété comme une référence à un objet fo:page-sequence-master qui répète le maître de page en question un nombre indéterminé de fois. Un objet fo:page-sequence se réfère à un maître de page soit quand fo:page sequence se rapporte directement au maître de page via la propriété 'master-reference', soit quand cette propriété indique un objet fo:page-sequence-master qui lui-même se rapporte au maître de page.

6.4.1.4 Les flux et la correspondance de flux

Il existe deux sortes de flux : ceux de fo:static-content et ceux de fo:flow. Un flux fo:static-content comprend un contenu, tel que le texte qui va dans des en-têtes et des pieds de page, qui se répète sur plusieurs des pages. Le flux fo:flow comprend un contenu qui est distribué sur une séquence de pages. Le traitement du flux fo:flow détermine le nombre des pages qui sont générées pour contenir fo:page-sequence. On utilise l'objet fo:page-sequence-master comme le générateur de la séquence de maîtres de page dans laquelle le contenu des enfants du flux est distribué.

Les enfants du flux forment une séquence d'objets de flux de type bloc. Chaque flux est nommé par sa propriété 'flow-name'. Deux flux ne peuvent pas avoir le même nom.

L'assignation des flux aux régions d'un maître de page est déterminée par un plan de flux. Le plan de flux représente une association entre les enfants de flux de l'objet fo:page-sequence et les régions définies par les maîtres de page désignés par cet objet fo:page-sequence.

Pour cette Recommandation version 1.0, le plan de flux est implicite. La propriété 'flow-name' d'un flux spécifie à quelle région ce flux est assigné. Le plan de flux implicite assigne un flux à la région ayant le même nom. Dans les versions ultérieures de XSL, il est prévu que le plan de flux devienne un objet de mise en forme explicite.

Pour éviter aux utilisateurs d'avoir à produire des noms de région, toutes les régions ont une valeur par défaut pour leur propriété 'region-name'. La région du corps, la région d'avant, la région d'après, la région de début et la région de fin ont respectivement les noms par défaut « xsl-region-body », « xsl-region-before », « xsl-region-after », « xsl-region-start » et « xsl-region-end ».

De plus, un objet de mise en forme fo:static-content peut avoir, pour sa propriété 'flow-name', les valeurs "xsl-before-float-separator" ou "xsl-footnote-separator". Si on utilise une sous-région conditionnelle, de la région du corps, pour la génération d'une aire de référence dans une page donnée, l'objet fo:static-content, dont le nom correspond à la sous-région conditionnelle, sera mis en forme dans l'aire de référence associée à la sous-région, comme spécifié au chapitre [6.10.1.3 Les sous-régions conditionnelles].

6.4.1.5 Les contraintes sur la génération de la page

Les aires descendantes d'une aire de page sont contraintes par le maître de page utilisé pour la génération de cette aire de page et par les flux assignés aux régions que spécifie le maître de page. Pour un flux fo:flow, les aires générées par les descendants du flux sont distribuées sur les pages, selon la séquence de leur génération par les maîtres de page en charge de la région à laquelle le flux est assigné. Pour un flux fo:static-content, le traitement du flux se répète pour chacune des pages générées par le maître de page en charge de la région à laquelle le flux est assigné, avec deux exceptions : pour un objet fo:static-content, avec un nom de flux de xsl-before-float-separator, le traitement se répète seulement pour celles des aires de référence de page ayant des aires descendantes de la classe d'aire xsl-before-float et pour un objet fo:static-content, avec un nom de flux de xsl-footnote-separator, le traitement se répète seulement pour celles des aires de référence de page ayant des aires descendantes de la classe d'aire xsl-footnote.

6.4.1.6 La structure de l'arbre de pagination

La structure de l'arbre résultant est illustrée ci-dessous.

Arborescence représentant les objets de mise en forme pour la pagination   [D]

Une représentation de l'arborescence des objets de mise en forme pour la pagination

6.4.2 fo:root

Usage commun :

C'est le nœud de tête de l'arbre des objets de mise en forme. Celui-ci comprend un objet de mise en forme fo:layout-master-set (qui comprend tous les maîtres utilisés dans le document), un objet fo:declarations optionnel et un ou plusieurs objets fo:page-sequence. Chaque objet fo:page-sequence représente une séquence de pages qui résultent de la mise en forme des contenus enfants de fo:page-sequence.

Remarque :

Un document peut contenir plusieurs objets fo:page-sequence. Par exemple, chacun des chapitres d'un document pourrait être un objet fo:page-sequence distinct ; ceci permettrait le placement du contenu d'un chapitre particulier, tel que le titre d'un chapitre, dans une en-tête ou un pied de page.

Aires :

Les aires de zone de visualisation de page sont retournées par les objets fo:page-sequence enfants de l'objet de mise en forme fo:root. L'objet fo:root ne génère aucune aire.

Contraintes :

Les enfants de la racine de l'arbre des aires consistent seulement, et en entier, des aires de zone de visualisation de page retournées par les objets fo:page-sequence enfants de fo:root. Le jeu de toutes les aires retournées par les objets fo:page-sequence enfants est correctement ordonné (voir le chapitre [4.7.1 Les contraintes d'ordonnancement générales]).

Contenus :

(layout-master-set,declarations?,page-sequence+)

Les propriétés suivantes s'appliquent à cet objet de mise en forme :

6.4.3 fo:declarations

Usage commun :

L'objet de mise en forme fo:declarations s'emploie pour le regroupement des déclarations globales d'une feuille de style.

Aires :

L'objet de mise en forme fo:declarations ne génère ni ne retourne aucune aire.

Contraintes :

Aucune.

Contenus :

(color-profile)+

L'objet de flux fo:declarations peut avoir des éléments enfants supplémentaires dans un espace de nommage non XSL. Leur présence ne modifie cependant pas la sémantique des objets et des propriétés de l'espace de nommage XSL. La structure permise pour ces éléments d'un espace de nommage non XSL est définie pour leur(s) espace(s) de nommage.

6.4.4 fo:color-profile

Usage commun :

L'objet de mise en forme fo:color-profile s'emploie pour la déclaration d'un profil de couleur ICC d'une une feuille de style. Le profil de couleur est référencé à nouveau via le nom spécifié dans la propriété 'color-profile'.

Le profil de couleur est identifié par l'URI spécifié par la valeur de la propriété 'src'. Cet URI peut identifier un profil de couleur reconnu en interne ou peut pointer vers un codage de profil de couleur ICC devant être chargé et interprété.

Quand le profil de couleur est référencé (par exemple, via la fonction rgb-icc() [5.10.2 Les fonctions de couleur]), on utilise les règles suivantes :

  1. Si le profil de couleur est disponible, c'est la valeur de couleur identifiée à partir de celui-ci qui devrait être retenue ;

  2. Si le profil de couleur est indisponible, on doit utiliser sRGB ([sRGB]) en solution de repli.

Aires :

L'objet de mise en forme fo:color-profile ne génère ni ne retourne aucune aire.

Contraintes :

Aucune.

Contenus :

VIDE

Les propriétés suivantes s'appliquent à cet objet de mise en forme :

6.4.5 fo:page-sequence

Usage commun :

L'objet de mise en forme fo:page-sequence s'emploie pour spécifier la manière de créer une (sous-)séquence de pages dans un document ; par exemple, le chapitre d'un rapport. Le contenu de ces pages provient des enfants de flux (qui consistent du seul objet de flux fo:flow et d'éventuels objets de flux fo:static-content) de l'objet fo:page-sequence. La disposition de ces pages provient de l'objet fo:page-sequence-master ou du maître de page référencé par le trait master-reference de l'objet fo:page-sequence. La séquence des aires retournées par chacun des objets de flux enfants de l'objet fo:page-sequence est faite descendante des pages générées comme décrit ci-dessous.

Aires :

L'objet de mise en forme fo:page-sequence génère une séquence de paires zone de visualisation/référence et retourne les aires de zone de visualisation de page. Pour chaque aire de référence de page et chaque région spécifiée dans le maître de page employé pour générer cette aire de référence de page, l'objet fo:page-sequence génère également la paire zone de visualisation/référence, pour la survenue de cette région dans cette aire de référence de page, et celui-ci peut générer une aire de référence avant-flottant, une aire de référence de note de pied de page et une aire de référence principale, ainsi qu'une ou plusieurs aires de référence de séquence normales. La génération de ces aires additionnelles est décrite dans les descriptions de l'objet fo:simple-page-master et des maîtres de région. Cet objet peut aussi générer une aire de titre.

Toutes les aires générées par un objet fo:page-sequence ont la classe d'aire xsl-absolute.

Contraintes :

Chaque paire aire de zone de visualisation de page/aire de référence de page est générée en utilisant un maître de page qui satisfait aux contraintes du maître de séquence de page identifié par le trait master-reference de l'objet fo:page-sequence ou du maître de page identifié directement par ce trait. Les aires de zone de visualisation de région enfants d'une telle aire de référence de page doit correspondre aux régions enfants de ce maître de page.

Les aires générées par l'objet fo:page-sequence ont pour descendants les aires retournées par les flux enfants de l'objet fo:page-sequence.

Les aires retournées à l'objet fo:page-sequence par un flux doivent satisfaire quatre sortes de contraintes :

Si une aire de titre est générée, les contraintes suivantes doivent être satisfaites :

La contrainte d'ordonnancement par défaut, décrite au chapitre [4.7.1 Les contraintes d'ordonnancement générales], ne s'applique pas à l'objet fo:page-sequence. Celle-ci s'applique aux enfants de l'objet de flux dans le seul objet fo:flow ; des contraintes d'ordonnancement spéciales s'appliquent aux objets de l'enfant fo:static-content.

Contenus :

(title?,static-content*,flow)

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.6 fo:layout-master-set

Usage commun :

L'objet fo:layout-master-set est une enveloppe pour tous les maîtres utilisés dans le document. Ceci inclut les maîtres de séquence de page, les maîtres de page et les maîtres de région.

Aires :

L'objet de mise en forme fo:layout-master-set ne génère pas directement d'aire. Les maîtres, qui sont les enfants de l'objet fo:layout-master-set, sont utlilisés par l'objet fo:page-sequence pour la génération de pages.

Contraintes :

La valeur du trait master-name sur chaque enfant de l'objet fo:layout-master-set doit être unique dans le jeu.

Contenus :

(simple-page-master|page-sequence-master)+

6.4.7 fo:page-sequence-master

Usage commun :

L'objet fo:page-sequence-master s'emploie pour spécifier les contraintes qui sont exercées sur un jeu de maîtres de page donnée et l'ordre de leur utilisation pour la génération d'une séquence de pages. Les pages sont automatiquement générées, quand on utilise l'objet fo:page-sequence-master dans la mise en forme d'un objet fo:page-sequence.

Remarque :

Il y a plusieurs façons de spécifier une séquence de pages potentielle. On peut spécifier une séquence de références à des maîtres de page particuliers. Ceci produit une séquence limité de pages potentielles. On peut aussi spécifier une sous-séquence d'un ou plusieurs maîtres de page qui se répète. Cette sous-séquence peut être limitée et, le cas échéant, non limitée. Finalement, on peut entremêler ces deux sortes de spécifiants de sous-séquence.

Aires :

L'objet de mise en forme fo:page-sequence-master ne génère pas directement d'aire. Celui-ci est utilisé par l'objet de mise en forme fo:page-sequence pour la génération de pages.

Contraintes :

Les enfants de l'objet fo:page-sequence-master forme une séquence de spécifiants de sous-séquence. Une séquence de page satisfait à la contrainte déterminée par un objet fo:page-sequence-master si (a) celle-ci peut se partitionner en une séquence de sous-séquences de pages qui correspondent, une à une, à une sous-séquence initiale de la séquence de spécifiants de sous-séquence qui sont les enfants de l'objet fo:page-sequence-master, et (b) pour chaque sous-séquence de pages de la partition, celle-ci satisfait aux contraintes du spécifiant de sous-séquence qui lui correspond. La séquence de sous-séquences de pages peut être plus courte que celle des spécifiants de sous-séquence.

C'est une erreur si la séquence entière des spécifiants de sous-séquence enfants est épuisée, alors que des aires retournées par un objet fo:flow n'ont pas été placées. Les mises en œuvre peuvent récupérer, si possible, en réutilisant le dernier spécifiant de sous-séquence utilisé pour générer une page.

Contenus :

(single-page-master-reference|repeatable-page-master-reference|repeatable-page-master-alternatives)+

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.8 fo:single-page-master-reference

Usage commun :

Un objet fo:single-page-master-reference représente le spécifiant de sous-séquence le plus simple. Celui-ci spécifie une sous-séquence qui consiste en une seule instance d'un seul maître de page. On l'emploie pour spécifier l'emploi d'un maître de page particulier à un endroit donné de la séquence de pages qui auraient été générées avec un objet fo:page-sequence-master parent de cet objet fo:single-page-master-reference.

Aires :

L'objet de mise en forme fo:single-page-master-reference ne génère pas directement d'aire. Celui-ci est utilisé par l'objet de mise en forme fo:page-sequence pour générer des pages.

Contraintes :

L'objet fo:single-page-master-reference tient une référence vers l'objet fo:simple-page-master portant le même nom de maître que celui indiqué par son trait master-reference.

La sous-séquence de pages reliée à ce spécifiant de sous-séquence satisfait aux contraintes de celui-ci, si (a) la sous-séquence de pages consiste en une seule page et (b) cette page est contrainte d'avoir été générée par l'objet fo:simple-page-master désigné par l'objet fo:single-page-master-reference.

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.9 fo:repeatable-page-master-reference

Usage commun :

Un objet fo:repeatable-page-master-reference représente le spécifiant de sous-séquence le plus simple suivant. Celui-ci spécifie une sous-séquence qui consiste en instances répétées d'un seul maître de page. Le nombre des répétitions peut être limité et, le cas échéant, non limité.

Aires :

L'objet de mise en forme fo:repeatable-page-master-reference ne génère pas directement d'aire. Celui-ci est utilisé par l'objet de mise en forme fo:page-sequence pour générer des pages.

Contraintes :

L'objet fo:repeatable-page-master-reference tient une référence vers l'objet fo:simple-page-master portant le même nom de maître que celui indiqué par son trait master-reference.

La sous-séquence des pages qui correspond à ce spécifiant de sous-séquence satisfait aux contraintes de celui-ci, si (a) la sous-séquence des pages consiste en zéro page, ou plus, si (b) chaque page est générée avec l'objet fo:simple-page-master référencé par l'objet fo:repeatable-page-master-reference, et si (c) la longueur de la sous-séquence est inférieure ou égale à la valeur du trait maximum-repeats.

Si aucun maître de région enfant de l'objet fo:repeatable-page-master n'a de nom de région associé avec un flux dans un objet fo:page-sequence, alors la sous-séquence est contrainte d'avoir une longueur de zéro.

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.10 fo:repeatable-page-master-alternatives

Usage commun :

L'objet de mise en forme fo:repeatable-page-master-alternatives est le spécifiant de sous-séquence le plus complexe. Celui-ci spécifie une sous-séquence consistant en instances répétées d'un jeu de maîtres de page alternatifs. Le nombre des répétitions peut être limité et, le cas échéant, non limité. Lequel des maîtres de page alternatifs utiliser en tout point de la séquence dépend de l'évaluation d'une condition sur l'emploi de celui-ci. Parmi les conditions typiques, tester si la page générée alternativement est la première ou la dernière d'une séquence de pages, si la page est vide. Le jeu complet des conditions permet l'utilisation de maîtres de page différents pour la première page, pour les pages paires ou impaires, pour des pages vides.

Remarque :

Comme les conditions sont évaluées dans l'ordre à partir du début de la séquence des enfants, la condition sur la dernière alternative dans la séquence est généralement toujours vraie, cette alternative se rapporte au maître de page qui est utilisé pour toutes les pages ne recevant pas une disposition particulière.

Aires :

L'objet de mise en forme fo:repeatable-page-master-alternatives ne génère pas directement d'aire. Celui-ci est utilisé par l'objet de mise en forme fo:page-sequence pour générer des pages.

Contraintes :

Les enfants de l'objet fo:repeatable-page-master-alternatives sont des objets fo:conditional-page-master-references. On qualifiera ces enfants d'alternatives.

La sous-séquence des pages qui correspond à ce spécifiant de sous-séquence satisfait aux contraintes de celui-ci, si (a) la sous-séquence des pages consiste en zéro page, ou plus, (b) chaque page est générée avec l'objet fo:simple-page-master désigné par l'une des alternatives, l'un des enfants de l'objet fo:repeatable-page-master-alternatives, (c) les conditions de cette alternative étant true, (d) cette alternative est la première dans la séquence des enfants, les conditions pour cette alternative étant true et (e) la longueur de la sous-séquence est inférieure ou égale à la valeur de maximum-repeats.

Contenus :

(conditional-page-master-reference+)

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.11 fo:conditional-page-master-reference

Usage commun :

L'objet fo:conditional-page-master-reference s'emploie pour identifier un maître de page qui doit être utilisé quand les conditions pour son emploi sont satisfaites. Ceci permet l'emploi de différents maîtres de page, par exemple, pour des pages paires ou impaires, pour la première page d'une sous-séquence ou pour des pages vides. C'est un emploi typique pour les chapitres d'un livre, ou d'un rapport, où la mise en page pour la première page est différente de celle du reste du chapitre, les en-têtes et les pieds de page pour les pages paires et impaires pouvant également différer.

Aires :

L'objet de mise en forme fo:conditional-page-master-reference ne génère pas directement d'aire. Celui-ci est utilisé par l'objet de mise en forme fo:page-sequence pour générer des pages.

Contraintes :

L'objet fo:conditional-page-master-reference tient une référence vers l'objet fo:simple-page-master de même nom de maître que celui indiqué par son trait master-reference.

Il y a trois traits, page-position, odd-or-even et blank-or-not-blank, qui spécifient les sous-conditions de l'emploi du maître page référencé. Toutes les trois sous-conditions doivent avoir la valeur true pour que la condition sur l'objet fo:conditional-page-master-reference soit true. Comme les propriétés, à partir de lesquelles ces traits sont dérivées, ne sont pas héritées et que la valeur initiale de chacune d'elles détermine une valeur true pour leur sous-condition correspondante, ceci signifie réellement que le sous-ensemble des traits, dérivés de propriétés dont les valeurs sont spécifiées, doit rendre les sous-conditions correspondantes true.

La sous-condition correspondant au trait page-position est true, si la page, générée avec l'objet fo:conditional-page-master-reference, a la position spécifiée dans la séquence de pages générée par la séquence de pages appelante ; nommément, "first", "last", "rest" (ni "first" ni "last") ou "any" (toutes les précédentes valeurs). La séquence de pages appelante correspond à l'objet fo:page-sequence qui référençait l'objet fo:page-sequence-master dont l'objet fo:conditional-page-master-reference descend.

La sous-condition correspondant au trait odd-or-even est true, si la valeur du trait odd-or-even est "any", ou si la valeur correspond à la parité du numéro de la page générée avec l'objet fo:conditional-page-master-reference.

La sous-condition correspondant au trait blank-or-not-blank est true, si (1) la valeur du trait est "not-blank" et la page, générée avec l'objet fo:conditional-page-master-reference, comprend des aires générées par l'objet de mise en forme fo:flow ; si (2) la valeur du trait est "blank" et la page, générée avec l'objet fo:conditional-page-master-reference, est telle qu'aucune aire de l'objet fo:flow ne soit placée sur celle-ci (par exemple, (a) pour maintenir une parité correcte (i) du fait d'un trait break-before ou break-after avec une valeur "even-page", ou "odd-page", ou (ii) au début, ou à la fin, d'une séquence de page, ou (b) parce que les contraintes, exercées sur les aires générées par des descendants de l'objet de mise en forme fo:flow, ne seraient pas satisfaites si ceux-ci descendaient de cette page) ; ou si (3) la valeur du trait est "any".

Remarque :

Si un maître de page, désigné par un objet conditional-page-master-reference avec blank-or-not-blank = "true", fournit une région où placer le contenu d'un objet fo:flow, aucun contenu n'est placé dans cette région.

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.12 fo:simple-page-master

Usage commun :

L'objet fo:simple-page-master est utilisé dans la génération des pages et spécifie la géométrie de la page. La page peut se subdiviser jusqu'en cinq régions, la région du corps, la région d'avant, la région d'après, la région de début et la région de fin.

Remarque :

Par exemple, si la valeur du trait writing-mode d'un objet fo:simple-page-master est "lr-tb", alors ces régions correspondent au corps du document, à son en-tête, à son pied, à son bandeau latéral gauche et à celui de droite.

Remarque :

L'objet simple-page-master est destiné aux systèmes qui souhaitent offrir une facilité d'une mise en page simple. Les versions ultérieures de cette recommandation supporteront des mises en page plus complexes construites avec l'objet de mise en forme fo:page-master.

Aires :

L'objet de mise en forme fo:simple-page-master ne génère pas directement d'aire. Celui-ci est utilisé dans la génération de pages par l'objet fo:page-sequence.

Quand l'objet fo:simple-page-master est utilisé pour générer une page, une paire zone de visualisation/référence est générée, comprenant une aire de zone de visualisation de page et une aire de référence de page. L'aire de zone de visualisation de page représente les limites physiques du média de sortie. L'aire de référence de page représente la partie de la page sur laquelle le contenu est censé apparaître, c'est-à-dire, la zone à l'intérieur des marges de la page.

De plus, quand on utilise l'objet fo:simple-page-master pour générer une page, les paires zone de visualisation/référence, qui correspondent aux régions enfants de l'objet fo:simple-page-master, sont également générées. Voir les spécifications des objets de mise en forme pour les cinq régions ([6.4.13 fo:region-body], [6.4.14 fo:region-before], [6.4.15 fo:region-after], [6.4.16 fo:region-start] et [6.4.17 fo:region-end]) pour le détail de la génération de ces aires.

Les aires de zone de visualisation de région   [D]

Les aires de zone de visualisation de région

L'espace entre les quatre régions externes et la région fo:region-body se détermine en soustrayant la valeur du trait extent de chacune de ces régions de celle de la valeur de la propriété 'margin-x' de l'objet fo:region-body.

Dérivation du trait :

Dans la version 1.0 de cette recommandation, on n'admet pas de bordures ni d'espacement pour une aire de référence de page. Les traits restants d'une aire de référence de page sont renseignés en fonction des règles normales pour la détermination des valeurs de traits.

Contraintes :

Quand un maître de page est utilisé pour la génération d'une page, la dimension de progression de bloc et la dimension de progression en-ligne du rectangle de contenu de l'aire de zone de visualisation de page se déterminent en utilisant les valeurs calculées des propriétés 'page-height' et 'page-width'.

Les traits dérivés des propriétés de marge déterminent la taille et la position du rectangle de contenu de l'aire de zone de visualisation de page. Les traits dérivés des propriétés 'margin-top', 'margin-bottom', 'margin-left' et 'margin-right' sont utilisés pour mettre en retrait le rectangle de contenu de l'aire de référence de page par rapport au bord correspondant du rectangle de contenu de l'aire de zone de visualisation de page. Ici, le « haut », le « bas », la « gauche » et la « droite » sont déterminés par les valeurs calculées des propriétés 'page-height' et 'page-width'. Pour un média papier, ces valeurs déterminent l'orientation de la feuille ; la valeur de 'page-height' correspond à la mesure du « haut » jusqu'au « bas ». Pour un média affiché, la fenêtre d'affichage est toujours verticale ; le « haut » se confond avec le haut de l'écran d'affichage.

Remarque :

Les points de référence du rectangle de contenu de l'aire de zone de visualisation de page sont donnés en termes de « haut », « bas », « gauche » et « droite », plutôt que « bord d'avant », « bord d'après », « bord de début » et « bord de fin », car les utilisateurs perçoivent le média en fonction de son orientation et non en fonction du mode d'écriture courant.

Les marges d'une page   [D]

La valeur du trait page-number, de la première page retournée par l'objet fo:page-sequence, est contrainte pour avoir une valeur égale à celle du trait initial-page-number. La valeur du trait page-number des pages consécutives l'est aussi, pour que celle-ci soit plus grande d'une unité que celle de la page immédiatement précédente.

Les traits format, letter-value, grouping-separator, grouping-size, country et language sont utilisés pour formater ce numéro en une chaîne, comme spécifié dans XSLT, chapitre 7.7.1. Ce numéro ainsi formaté est utilisé comme valeur de l'objet de flux fo:page-number.

Les contraintes qui s'appliquent aux régions :

Il y a un certain nombre de contraintes qui s'appliquent à toutes les régions spécifiées dans un objet fo:simple-page-master donné.

Deux exemples du modèle de la page   [D]

Si la dimension de progression de bloc de l'aire de référence de région, correctement empilée, est supérieure à celle de l'aire de zone de visualisation de région qui est son parent, alors les contraintes qui agissent sur les relations entre celles-ci dépendent de la valeur du trait overflow du maître de région et du genre de flux assigné à la région.

Si le flux assigné à la région correspondante est un objet de flux fo:static-content, alors il n'y a aucune contrainte sur la dimension de progression de bloc de l'aire de référence de région.

Quand le flux assigné à la région correspondante est un objet de mise en forme fo:flow :

Contenus :

(region-body,region-before?,region-after?,region-start?,region-end?)

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.13 fo:region-body

Usage commun :

Employé pour la construction d'un maître de page simple. Cette région spécifie une paire zone de visualisation/référence située au « centre » de l'objet fo:simple-page-master. Le trait overflow contrôle l'importance de l'aire de référence de région sous-jacente qui est visible ; c'est-à-dire, quand cette aire est rognée par son aire de zone de visualisation de région parente.

Remarque :

Pour les médias paginés, typiquement, les aires, retournées par l'objet de mise en forme fo:flow d'un objet fo:page-sequence, deviennent les descendants d'une séquence d'aires de référence de région qui correspond à la région du corps. Ces aires de référence de région sont toutes les descendants d'aires de page pour lesquelles le maître de page comprenait un objet fo:region-body. Si le flux d'un objet fo:flow est assigné à une autre région, alors les aires retournées par cet objet fo:flow sont contraintes d'être les descendants des aires de référence de région générées en utilisant le maître de page assigné.

Remarque :

La région du corps devrait être dimensionnée et positionnée dans l'objet fo:simple-page-master de façon à ce qu'il reste de la place pour les aires retournées par le flux assigné à l'objet fo:region-body et pour les régions limitrophes souhaitées, c'est-à-dire celles des objets fo:region-before, fo:region-after, fo:region-start et fo:region-end qui doivent prendre place sur la même page. Ces régions limitrophes se positionnent dans le rectangle de contenu de l'aire de référence de page. Les marges de l'objet fo:region-body sont utilisées pour positionner l'aire de zone de visualisation de région de cet objet et pour garder de la place pour les autres régions qui entourent l'objet fo:region-body

Un gros-plan du premier cas de la figure précédente   [D]

L'espace entre les quatre dernières régions et celle de fo:region-body se détermine en soustrayant la valeur du trait extent concerné de ces quatre régions de celle du trait correspondant à la propriété 'margin-[X]' de fo:region-body.

On peut aussi utiliser l'objet fo:region-body pour la création de plusieurs colonnes. Quand la valeur du trait column-count est supérieure à un, alors la région du corps est subdivisée en plusieurs colonnes.

Aires :

L'objet de mise en forme fo:region-body est utilisé pour la génération d'une aire de zone de visualisation de région et d'une aire de référence de région, chaque fois qu'un objet fo:simple-page-master, ayant comme enfant un objet fo:region-body, est utilisé pour générer une page. Un mécanisme de défilement, défini par la mise en œuvre, devrait être fourni, si la valeur du trait overflow est "scroll".

L'emplacement et la taille de l'aire de zone de visualisation de région sont spécifiés, en fonction du rectangle de contenu de l'aire de référence de page, par l'objet fo:simple-page-master. Le rectangle de contenu de l'aire de zone de visualisation de région est mis en retrait, par rapport à celui de l'aire de référence de page, de la valeur des propriétés 'margin-top', 'margin-bottom', 'margin-left' et 'margin-right'. Dans la version 1.0 de cette recommandation, les valeurs des traits padding et border-width doivent être "0".

L'aire de référence de région, générée avec un objet fo:region-body, est l'enfant d'une aire de zone de visualisation de région. Le trait reference-orientation de l'objet fo:region-body est utilisé pour l'orientation du système coordonné de l'aire de référence de région générée par l'objet fo:region-body en fonction du système coordonné de l'aire de référence de page générée par l'objet fo:simple-page-master (et, par-là même, en fonction de l'aire de zone de visualisation positionnée dans ce dernier système).

En plus de la paire zone de visualisation/référence, quand la région du corps est utilisée pour générer des aires, au moins une et jusqu'à trois aires de référence supplémentaires sont générées. Il s'agit de l'aire de référence avant-flottant, optionnelle, de l'aire de référence de note de pied de page, optionnelle, et de l'aire de référence principale. Cette dernière comprend l'espace restant après l'espace attribué aux deux autres aires de référence. Aucun espacement, aucune bordure ni aucun espace ne sont associés avec l'aire de référence principale.

Remarque :

Si aucune aire de référence avant-flottant et aucune aire de référence de note de pied de page ne sont des enfants de l'aire de référence de région, alors le rectangle de contenu de l'aire de référence principale est confondu avec celui de l'aire de référence de région.

L'aire de référence principale a, comme enfants, une séquence d'aires de référence d'étendue. Ce sont des aires de bloc aire de référence, sans bordure ni espacement, dont la dimension de progression en-ligne est égale à celle de l'aire de référence principale, et qui sont empilées normalement dans celle-ci.

Chaque aire de référence d'étendue a une ou plusieurs enfants aires de référence, désignés comme aires de référence de flux normal. Le nombre et l'emplacement des enfants d'une aire de référence d'étendue dépendent de la valeur du trait column-count de celle-ci. À son tour, le formateur doit générer précisément un nombre suffisant de ces aires de référence d'étendue, donnant ainsi une valeur à leur trait column-count, tel que les aires de bloc retournées par un objet fo:block dont le trait span a une valeur de "all" soient les enfants des aires de référence d'étendue avec leur valeur de trait column-count égale à 1 et tel que les aires de bloc retournées par un objet fo:block dont le trait span a une valeur de "none" soient les enfants des aires de référence d'étendue avec leur valeur de trait column-count égale à la valeur affinée de la propriété 'column-count' de l'aire de référence de région associée.

Pour chaque aire de référence d'étendue, le nombre N des enfants aire de référence de flux normal est égal à la valeur de son trait column-count.

C'est une erreur que de spécifier une valeur pour column-count autre que 1 si la valeur de la propriété 'overflow' est "scroll". Une mise en œuvre peut répérer en se comportant comme si la valeur "1" avait été spécifiée.

La dimension de progression en-ligne de chacune de ces aires de référence de flux normal se dérmine en soustrayant (N-1) fois la valeur du trait column-gap de la dimension de progression en-ligne de l'aire de référence principale et en divisant le résultat ainsi obtenu par N. En nommant « taille-du-corps », la dimension de progression en-ligne de l'aire de référence étendue, et « taille-de-colonne », la taille des aires de référence de flux normal dans une direction de progression en-ligne, on a la formule :

taille-de-colonne = (taille-du-corps - (N - 1)*column-gap)/N

La dimension de progression de bloc des aires de référence de flux normal est la même que celle de l'aire de référence d'étendue parent.

Remarque :

Comme indiqué au-dessus, la dimension de progression de bloc de l'aire de référence d'étendue peut être inférieure à la taille de l'aire de référence de région, si une aire de référence avant-flottant ou une aire de référence de note de pied de page sont présentes, ou si plus d'une aire de référence d'étendue est l'enfant d'une aire de référence principale.

Les aires de référence de flux normal se positionnent dans l'aire de référence d'étendue comme suit : la première colonne se positionne telle que les bords d'avant et de début de son rectangle de contenu coïncident avec ceux du rectangle de contenu de l'aire de référence d'étendue. Le rectangle de contenu du Jème enfant aire de référence de flux normal se positionne tel que son bord d'avant coïncide avec celui du rectangle de contenu de l'aire de référence d'étendue, son bord de début se trouvant à ((J-1)*(taille-de-colonne + column-gap)) dans la direction de progression en-ligne. Ceci aboutit à ce que le bord de fin du rectangle de contenu de la Nème aire de référence de flux normal coïncide avec celui du rectangle de contenu de l'aire de référence d'étendue.

Remarque :

Si la valeur du trait writing-mode est "rl-tb", la description précédente signifie que les colonnes s'ordonnent de droite-à-gauche, comme attendu. Ceci parce que le bord de début se trouve à droite dans un mode d'écriture de « droite-à-gauche - bas-en-haut ».

Toutes les aires générées avec un objet fo:region-body sont de la classe d'aire xsl-absolute.

Dérivation du trait :

L'orientation de référence de l'aire de zone de visualisation de région est donnée par la valeur du trait reference-orientation du maître de région qui spécifie la région. La valeur du trait reference-orientation de l'aire de référence de région est mise à "0" et, de ce fait, l'orientation en est la même que celle établie par l'aire de zone de visualisation de région.

Les valeurs des traits restants des aires de zone de visualisation de région et de référence de région sont établies en fonction des règles normales de détermination des valeurs des traits.

Les traits des aires de référence d'étendue et des aires de référence de flux normal sont déterminées, comme décrit au chapitre [5 L'affinage et la résolution des propriétés], à partir d'un jeu de propriétés où chacune d'elles ont gardé leur valeur initiale, sauf pour les propriétés 'reference-orientation', 'writing-mode' et 'display-align' qui prennent leur valeur de fo:region-body.

Contraintes :

Les contraintes, qui s'appliquent à toutes les régions (voir [6.4.12 fo:simple-page-master]), s'appliquent toutes.

La dimension de progression en-ligne de l'aire de zone de visualisation de région est déterminée par celle du rectangle de contenu de l'aire de référence de page, moins les valeurs des traits start-indent et end-indent du maître de région. Les bords de début et de fin du rectangle de contenu de l'aire de zone de visualisation de région sont déterminés par le trait reference-orientation du maître de page.

La dimension de progression en-ligne de l'aire de zone de visualisation de région est déterminée par celle du rectangle de contenu de l'aire de référence de page, moins les valeurs des traits space-before et space-after du maître de région. Les bords d'avant et d'après du rectangle de contenu de l'aire de zone de visualisation de région sont déterminés par le trait reference-orientation du maître de page.

On utilise les valeurs des traitsspace-before et start-indent pour positionner l'aire de zone de visualisation de région en fonction des bords d'avant et de début du rectangle de contenu de l'aire de référence de page.

Les contraintes, exercées sur la taille et la position de l'aire de référence de région générée avec un objet fo:region-body, sont abordées au paragraphe « Les contraintes qui s'appliquent aux régions » au chapitre [6.4.12 fo:simple-page-master].

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.14 fo:region-before

Usage commun :

Employé pour la construction d'un maître de page simple. Cette région spécifie une paire zone de visualisation/référence qui est située sur le côté « avant » de l'aire de référence de page. Dans un mode d'écriture « gauche-à-droite - bas-en-haut », celle-ci correspond à la région d'en-tête. Le trait overflow contrôle l'importance de l'aire de référence de région sous-jacente qui est visible ; c'est-à-dire, quand l'aire de référence de région est rognée par son aire de zone de visualisation de région parent.

Aires :

L'objet de mise en forme fo:region-before s'utilise pour la génération d'une aire de zone de visualisation de région et d'une aire de référence de région.

Dans la version 1.0 de cette recommandation, les valeurs des traits padding et border-width doivent être "0".

La position du bord d'avant du rectangle de contenu de cette aire de zone de visualisation de région coïncide avec celle du bord d'avant du rectangle de contenu de l'aire de référence de page générée avec l'objet fo:simple-page-master parent. La dimension de progression de bloc de l'aire de zone de visualisation de région est déterminée par le trait extent de l'objet de mise en forme.

La dimension de progression en-ligne de l'aire de zone de visualisation de région est déterminée par le trait precedence de l'objet fo:region-before. Si la valeur de ce trait est true, alors la dimension de progression en-ligne s'étend jusqu'aux bords de début et de fin du rectangle de contenu de l'aire de référence de page. Dans ce cas, l'aire de zone de visualisation de région d'avant se comporte comme un flottant dans les aires générées par les régions d'avant et d'après. Si la valeur du trait precedence de l'objet fo:region-before est false, alors ces régions adjacentes flottent dans l'aire générée par l'objet fo: region-before et l'étendue de celle-ci est (effectivement) réduite par les incursions de ces régions adjacentes.

L'aire de référence de région se tient sur un canevas en arrière de l'aire de zone de visualisation de région. Le trait reference-orientation est utilisé pour orienter le système coordonné de l'aire de référence de région en fonction de l'aire de référence de page.

La taille de l'aire de référence de région dépend de la valeur du trait overflow sur cette région. Si cette valeur est "auto", "hidden", "error-if-overflow", "paginate", ou "visible", alors la taille de l'aire de référence correspond à celle de la zone de visualisation. Si cette valeur est "scroll", alors la taille de l'aire de référence est égale à celle de la zone de visualisation dans la direction de progression en-ligne dans le mode d'écriture de cette région et n'est pas contrainte dans la direction de progression de bloc (ce qui veut dire que sa taille s'accroît pour contenir la distribution de tout le contenu en rapport avec cette région).

Dérivation du trait :

L'orientation de référence de l'aire de zone de visualisation de région est donnée par la valeur du trait reference-orientation du maître de région qui spécifie cette région. La valeur du trait reference-orientation de l'aire de référence de région est mis à "0" et, de ce fait, l'orientation en est la même que celle établie par l'aire de zone de visualisation de région.

Les valeurs des traits restants de l'aire de zone de visualisation de région et de l'aire de référence de région sont établies en fonction des règles normales de détermination des valeurs des traits.

Contraintes :

Les contraintes de taille et de position sur l'aire de référence de région générée avec un objet fo:region-before sont abordées au paragraphe « Les contraintes qui s'appliquent aux régions » du chapitre [6.4.12 fo:simple-page-master].

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.15 fo:region-after

Usage commun :

Employé dans la construction d'un maître de page simple. Cette région spécifie une paire zone de visualisation/référence située sur le côté « après » l'aire de référence de page. Dans une écritre de « gauche-à-droite - bas-en-haut », celle-ci correspond à la région du pied. Le trait overflow contrôle l'importance de l'aire de référence de région sous-jacente qui est visible ; c'est-à-dire, quand l'aire de la référence de région est rognée par l'aire de zone de visualisation de région parent.

Aires :

L'objet de mise en forme fo:region-after est utilisé pour la génération d'une aire de zone de visualisation de région et d'une aire de référence de région.

Dans la version 1.0 de cette recommandation, les valeurs des traits padding et border-width doivent être "0".

La position du bord d'après du rectangle de contenu de cette aire de zone de visualisation de région coïncide avec celle du bord d'après du rectangle de contenu de l'aire de référence de page générée avec l'objet parent fo:simple-page-master. La dimension de progression de bloc de l'aire de zone de visualisation de région est déterminée par le trait extent de l'objet de mise en forme fo:region-after.

La dimension de progression en-ligne de l'aire de zone de visualisation de région est déterminée par la valeur du trait precedence de l'objet fo:region-after. Si cetter valeur est true, alors la dimension de progression en-ligne s'étend jusqu'aux bords de début et de fin du rectangle de contenu de l'aire de référence de page. Dans ce cas, l'aire de zone de visualisation de région d'après se comporte comme un flottant dans les aires générées par les régions d'avant et de fin. Si la valeur du trait precedence de l'objet fo:region-after est false, alors ces régions adjacentes flottent dans l'aire générée par l'objet fo:region-after et l'étendue de celle-ci est (effectivement) réduite par les incursions de ces régions adjacentes.

L'aire de référence de région se tient sur un canevas en arrière de l'aire de zone de visualisation de région. On utilise le trait reference-orientation pour orienter le système coordonné de l'aire de référence de région en fonction de l'aire de référence de page.

La taille de l'aire de référence de région dépend de la valeur du trait overflow sur cette région. Si cette valeur est "auto", "hidden", "error-if-overflow", "paginate" ou "visible", alors la taille de l'aire de référence correspond à celle de la zone de visualisation. Si cette valeur est "scroll", alors la taille de l'aire de référence est égale à celle de la zone de visualisation dans la direction de progression en-ligne dans le mode d'écriture de cette région et n'est pas contrainte dans la direction de progression de bloc (ce qui veut dire que la taille s'accroît pour contenir la distribution de tout le contenu en rapport avec cette région).

Dérivation du trait :

L'orientation de référence de l'aire de zone de visualisation de région est donnée par la valeur du trait reference-orientation du ma&icic;tre de région qui spécifie cette région. La valeur du trait reference-orientation de l'aire de référence de région est mise à "0" et, de ce fait, l'orientation en est la même que celle établie par l'aire de zone de visualisation de région.

Les valeurs des traits restants de l'aire de zone de visualisation de région et de l'aire de référence de région sont établies en fonction des règles normales de détermination des valeurs des traits.

Contraintes :

Les contraintes de taille et de position sur l'aire de référence de région générée avec un objet fo:region-after sont abordées au paragraphe « Les contraintes qui s'appliquent aux régions » du chapitre [6.4.12 fo:simple-page-master].

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.16 fo:region-start

Usage commun :

Employé dans la construction d'un maître de page simple. Cette région spécifie une paire zone de visualisation/référence située sur le côté « début » de l'aire de référence de page. Dans un mode d'écriture de « gauche-à-droite - bas-en-haut », celle-ci correspond à un bandeau latéral gauche. Le trait overflow contrôle l'importance de l'aire de référence de région sous-jacente qui est visible ; c'est-à-dire, quand l'aire de référence de région est rognée par son aire de zone de visualisation de région parent.

Aires :

L'objet de mise en forme fo:region-start est utilisé pour la génération d'une aire de zone de visualisation de région et d'une aire de référence de région.

Dans la version 1.0 de cette recommandation, les valeurs des traits padding et border-width doivent être "0".

La position du bord de début du rectangle de contenu de cette aire de zone de visualisation de région coïncide avec celle du bord de début du rectangle de contenu de l'aire de référence de page générée avec un objet fo:simple-page-master parent. La dimension de progression en-ligne de l'aire de zone de visualisation de région est déterminée par le trait extent de l'objet de mise en forme fo:region-after.

La dimension de progression de bloc de l'aire de zone de visualisation de région est déterminée par le trait precedence des objets adjacents fo:region-before et fo:region-after, s'ils existent ; autrement, on la détermine comme si la valeur du trait precedence était false. Si la valeur du trait precedence de l'objet fo:region-before (ou, respectivement, fo:region-after) est false, alors la dimension de progression de bloc s'étend jusqu'au bord d'avant (ou, respectivement, d'après) du rectangle de contenu de l'aire de référence de page. Dans ce cas, la région de début se comporte comme un flottant dans les aires générées par la région d'avant (ou, respectivement, d'après). Si la valeur du trait precedence des régions adjacentes est true, alors ces régions adjacentes flottent dans l'aire générée par l'objet fo:region-start et l'étendue de celle-ci est (effectivement) réduite par les incursions de celles des régions adjacentes dont la valeur du trait precedence est true.

L'aire de référence de région se tient sur un canevas en arrière de l'aire de zone de visualisation de région. Le trait reference-orientation est utilisé pour orienter le système coordonné de l'aire de référence de région en fonction de l'aire de référence de page.

La taille de l'aire de référence de région dépend de la valeur du trait overflow sur cette région. Si cette valeur est "auto", "hidden", "error-if-overflow", "paginate" ou "visible", alors la taille de l'aire de référence correspond à celle de la zone de visualisation. Si cette valeur est "scroll", alors la taille de l'aire de référence est égale à celle de la zone de visualisation dans la direction de progression en-ligne dans le mode d'écriture de cette région et n'est pas contrainte dans la direction de progression de bloc (ce qui veut direque la taille s'accroît pour contenir la distribution de tout le contenu en rapport avec cette région).

Dérivation du trait :

L'orientation de référence de l'aire de zone de visualisation de région est donnée par la valeur du trait reference-orientation du maître de région qui spécifie cette région. La valeur du trait reference-orientation de l'aire de référence de région est mise à "0" et, de ce fait, l'orientation en est la même que celle établie par l'aire de zone de visualisation de région.

Les valeurs des traits restants de l'aire de zone de visualisation de région et de l'aire de référence de région sont établies en fonction des règles normales de détermination des valeurs des traits.

Contraintes :

Les contrainte de taille et de position sur l'aire de référence de région générée avec un objet fo:region-start sont abordées au paragraphe « Les contraintes qui s'appliquent aux régions » du chapitre [6.4.12 fo:simple-page-master].

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.17 fo:region-end

Usage commun :

Employé dans la construction d'un maître de page simple. Cette région spécifie une paire zone de visualisation/référence située sur le côté « fin » de l'aire de référence de page. Dans un mode d'écriture de « gauche-à-droite - bas-en-haut », celle-ci correspond au bandeau latéral droit. Le trait overflow contrôle l'importance de l'aire de référence de région sous-jacente qui est visible ; c'est-à-dire, quand l'aire de référence de région est rognée par son aire de zone de visualisation de région parent.

Aires :

L'objet de mise en forme fo:region-end est utilisé pour la génération d'une aire de zone de visualisation de région et d'une aire de référence de région.

Dans la version 1.0 de cette recommandation, les valeurs des traits padding et border-width doivent être "0".

La position du bord de fin du rectangle de contenu de cette aire de zone de visualisation de région coînde avec celle du bord de fin du rectangle de contenu de l'aire de référence de page générée avec l'objet fo:simple-page-master parent. La dimension de progression en-ligne est déterminée par le trait extent de l'objet de mise en forme fo:region-after.

La dimension de progression de bloc de l'aire de zone de visualisation de région est déterminée par le trait precedence des objets adjacents fo:region-before et fo:region-after, s'ils existent ; autrement, on la détermine comme si la valeur du trait precedence était false. Si la valeur du trait precedence de l'objet fo:region-before (ou, respectivement, fo:region-after) est false, alors la dimension de progression de bloc s'étend jusqu'au bord d'avant (ou, respectivement, d'après) du rectangle de contenu de l'aire de référence de page. Dans ce cas, la région de fin se comporte comme un flottant dans les aires générées par la région d'avant (respectivement, la région d'après). Si la valeur du trait precedence sur les régions adjacentes est true, alors ces régions adjacentes flottent dans l'aire générée par l'objet fo:region-end et l'étendue de celle-ci est (effectivement) réduite par les incursions de celles des régions adjacentes dont le trait precedence est true.

L'aire de référence de région se tient dans un canevas en arrière de l'aire de zone de visualisation de région. Le trait reference-orientation est utilisé pour orienter le système coordonné de l'aire de référence de région en fonction de l'aire de référence de page.

La taille de l'aire de référence de région dépend de la valeur du trait overflow sur cette région. Si cette valeur est "auto", "hidden", "error-if-overflow", "paginate" ou "visible", alors la taille de l'aire de référence correspond à celle de la zone de visualisation. Si cette valeur est "scroll", la taille de l'aire de référence est égale à celle de la zone de visualisation dans la direction de progression en-ligne dans le mode d'écriture de cette région et n'est pas contrainte dans la direction de progression de bloc (ce qui veut dire que la taille s'accroît pour contenir la distribution de tout le contenu en rapport avec la région).

Dérivation du trait :

L'orientation de référence de l'aire de zone de visualisation de région est donnée par la valeur du trait reference-orientation du maître de région qui spécifie la région. La valeur du trait reference-orientation de l'aire de référence de région est mis à "0" et, de ce fait, l'orientation en est la même que celle établie par l'aire de zone de visualisation de région.

Les valeurs des traits restants de l'aire de zone de visualisation de région et de l'aire de référence de région sont établies en fonction des règles normales de détermination des valeurs des traits.

Contraintes :

Les contraintes de taille et de position sur l'aire de référence de région générée avec l'objet fo:region-end sont abordées au paragraphe « Les contraintes qui s'appliquent aux régions » du chapitre [6.4.12 fo:simple-page-master].

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.18 fo:flow

Usage commun :

L'objet de mise en forme fo:flow contient une séquence d'objets de flux, celle-ci fournit l'écoulement du contenu textuel distribué dans des pages.

Aires :

L'objet de mise en forme fo:flow ne génère aucune aire. L'objet fo:flow retourne la séquence des aires obtenue par concaténation des séquences d'aires retournées par chacun de ses enfants. Cet ordre de concaténation est le même que celui des enfants dans l'objet fo:flow.

Contraintes :

Le plan de flux (implicite) détermine la correspondance du contenu de l'objet fo:flow avec une région.

Contenus :

(%block;)+

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.19 fo:static-content

Usage commun :

L'objet de mise en forme fo:static-content contient une séquence ou un arbre d'objets de mise en forme devant être présentés dans une seule région ou répétés dans des régions de même nom sur une ou plusieurs pages de la séquence de pages. On le destine habituellement aux en-têtes et aux pieds de page, ceux-ci courants ou répétés.

Ce contenu est répété entièrement à chaque page sur laquelle l'objet est assigné.

Aires :

L'objet de mise en forme fo:static-content ne génère aucune aire. L'objet fo:static-content retourne la séquence des aires obtenue par concaténation des séquences de pages retournées par chacun de ses enfants. L'ordre de concaténation est le même que celui des enfants dans l'objet fo:static-content.

Contraintes :

Le plan de flux (implicite) détermine l'assignation du contenu de l'objet fo:static-content à une région.

L'objet fo:static-content pouvant être traité à plusieurs reprises, c'est pourquoi la contrainte d'ordonnancement par défaut, décrite au chapitre [4.7.1 Les contraintes d'ordonnancement générales], ne s'applique pas à celui-ci. Précisément, si P est une aire de référence de page, C un aire de classe et S le jeu de tous les descendants de P de la classe d'aire C retournés au descendant fo:static-content, alors S doit être correctement ordonné.

Contenus :

(%block;)+

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.4.20 fo:title

Usage commun :

L'objet de mise en forme fo:title est utilisé pour associer un titre avec une séquence de pages donnée. Ce titre peut être exploité par un agent utilisateur interactif pour identifier les pages. Par exemple, le contenu de l'objet fo:title peut être formaté et affiché dans le « titre » d'une fenêtre ou dans une « infobulle ».

Aires :

Cet objet de mise en forme retourne la séquence des aires retournées par ses enfants.

Contraintes :

La séquence des aires retournées doit être la concaténation des sous-séquences des aires retournées par chacun des enfants de flux de l'objet fo:title, dans l'ordre où ceux-ci surviennent.

Contenus :

(#PCDATA|%inline;)*

Un objet fo:title n'admet pas d'objets fo:float, fo:footnote ou fo:marker comme descendants.

De plus, un objet fo:title n'admet pas comme descendant un objet fo:block-container qui génère une aire en position absolue.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.5 Les objets de mise en forme de type bloc

6.5.1 Introduction

L'objet de mise en forme fo:block est utilisé pour la mise en forme des paragraphes, des titres, des légendes d'illustration, des titres de table, etc. L'exemple suivant illustre l'emploi de l'objet fo:block dans une feuille de style.

6.5.1.1 Exemple
6.5.1.1.1 Titres de chapitre et de section, paragraphes

L'échantillon en entrée :

<doc>
  <chapitre>
    <titre>Titre du chapitre</titre>
    <section>
      <titre>Titre de la première section</titre>
      <paragraphe>Premier paragraphe de la première section.</paragraphe>
      <paragraphe>Second paragraphe de la première section.</paragraphe>
    </section>
    <section>
      <titre>Titre de la seconde section</titre>
      <paragraphe>Le seul paragraphe de la seconde section.</paragraphe>
    </section>
  </chapitre>
</doc>

Dans cet exemple, le titre du chapitre apparaît en haut de la page (son « espace d'avant » est écarté).

L'espace entre le titre du chapitre et celui de la première section est (8pt,8pt,8pt) : la valeur de la propriété 'space-after' du titre du chapitre a une plus grande préséance que celle de 'space-before' du titre de section (qui prend désormais la valeur initiale zéro), cette dernière est donc écartée.

L'espace entre le titre de la première section et le premier paragraphe de celle-ci est (6pt,6pt,6pt) : la valeur de la propriété 'space-after' du titre de section a une plus grande préséance que celle de 'space-before' du paragraphe, cette dernière est donc écartée.

L'espace entre les deux paragraphes est (6pt,8pt,10pt) : la valeur de la propriété 'space-after du premier paragraphe est écartée parce que sa préséance est égale à celle de 'space-before' du paragraphe suivant et parce que la valeur optimum de 'space-after' du premier paragraphe est supérieure à celle optimum de 'space-before' du second paragraphe.

L'espace entre le second paragraphe de la première section et le titre de la seconde section est (12pt,12pt,12pt) : la valeur de la propriété 'space-after' du paragraphe est écartée parce que sa préséance est égale à celle de 'space-before' du titre de section et parce que la valeur optimum de 'space-after' du paragraphe est inférieure à celle optimum de 'space-before' du titre de section.

L'indentation de la première ligne du premier paragraphe de la première section et celle du seul paragraphe de la seconde section est nulle ; l'indentation de la première ligne du second paragraphe de la première section est de "2pc".

La feuille de style XSL :

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:template match="chapitre">
  <fo:block break-before="page">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="chapitre/titre">
  <fo:block text-align="center" space-after="8pt"
            space-before="16pt" space-after.precedence="3">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="section">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="section/titre">
  <fo:block text-align="center" space-after="6pt"
            space-before="12pt" space-before.precedence="0"
            space-after.precedence="3">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="paragraphe[1]" priority="1">
  <fo:block text-indent="0pc" space-after="7pt"
            space-before.minimum="6pt" space-before.optimum="8pt"
            space-before.maximum="10pt">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="paragraphe">
  <fo:block text-indent="2pc" space-after="7pt"
            space-before.minimum="6pt" space-before.optimum="8pt"
            space-before.maximum="10pt">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

L'instance résultat, les éléments et attributs sont dans l'espace de nommage fo: :

<fo:block break-before="page">

  <fo:block text-align="center" space-after="8pt"
    space-before="16pt"
    space-after.precedence="3">Titre du chapitre
  </fo:block>

  <fo:block text-align="center" space-after="6pt"
    space-before="12pt" space-before.precedence="0"
    space-after.precedence="3">Titre de la première section
  </fo:block>

  <fo:block text-indent="0pc" space-after="7pt"
    space-before.minimum="6pt" space-before.optimum="8pt"
    space-before.maximum="10pt">Premier paragraphe de la première section.
  </fo:block>

  <fo:block text-indent="2pc" space-after="7pt"
    space-before.minimum="6pt" space-before.optimum="8pt"
    space-before.maximum="10pt">Second paragraphe de la première section.
  </fo:block>

  <fo:block text-align="center" space-after="6pt"
    space-before="12pt" space-before.precedence="0"
    space-after.precedence="3">Titre de la seconde section
  </fo:block>

  <fo:block text-indent="0pc" space-after="7pt"
    space-before.minimum="6pt" space-before.optimum="8pt"
    space-before.maximum="10pt">Le seul paragraphe de la seconde section.
  </fo:block>

</fo:block>

6.5.2 fo:block

Usage commun :

L'objet de mise en forme fo:block s'utilise habituellement pour la mise en forme des paragraphes, des titres, des gros titres, des légendes d'illustration et de table, etc.

Aires :

L'objet de mise en forme fo:block génère une ou plusieurs aires de bloc normales. L'objet fo:block retourne ces aires et, le cas échéant, les aires de niveau page hors-ligne et de niveau référence hors-ligne retournées par les enfants de celui-ci. L'objet fo:block génère également zéro ou plus aires de ligne comme enfants des aires de bloc normales que celui-ci retourne, comme indiqué au chapitre [4.7.2 La construction des lignes].

Dérivation du trait :

Les composants .minimum, .optimum et .maximum du trait half-leading prennent une valeur égale à la moitié de la différence entre la valeur calculée de la propriété line-height et la somme des valeurs des propriétés text-altitude et text-depth. Les composants .precedence et .conditionality sont copiés de la propriété line-height.

Remarque :

L'emploi du demi-interlignage est décrit au chapitre [4.5 Les aires de ligne].

Contraintes :

Aucune aire ne peut avoir plus d'une aire enfant normale retournée par le même objet de mise en forme fo:block.

Les enfants de chacune des aires normales générées par un objet fo:block doivent satisfaire aux contraintes spécifiées au chapitre [4.7.2 La construction des lignes].

De plus, les contraintes exercées par les traits dérivés des propriétés qui s'appliquent à cet objet de mise en forme doivent être satisfaites. Les contraintes géométriques sont définies précisément au chapitre [4 Le modèle des aires].

Contenus :

(#PCDATA|%inline;|%block;)*

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker, suivie en option par un objet fo:initial-property-set.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.5.3 fo:block-container

Usage commun :

L'objet de flux fo:block-container s'utilise pour générer une aire de référence de type bloc, qui contient typiquement des pavés de texte avec un mode décriture différent. De plus, on peut aussi l'utiliser avec une orientation de référence différente pour exercer une rotation de son contenu.

Remarque :

L'emploi de cet objet de flux n'est pas nécessaire pour simplement changer la direction de progression en-ligne ; pour cela, l'algorithme Unicode BIDI et l'objet fo:bidi-override suffisent.

Aires :

L'objet de mise en forme fo:block-container génère une ou plusieurs paires zone de visualisation/référence. L'objet fo:block-container retourne ces aires et, le cas échéant, les aires de niveau page hors-ligne retournées par ses enfants.

Dérivation du trait :

Les aires générées par l'objet de mise en forme fo:block-container ont une valeur "true" pour leur trait is-reference-area.

Les tailles de l'aire de zone de visualisation et de l'aire de référence doivent être établies dans la direction de progresssion en-ligne. On doit la spécifier, à moins que la direction de progression en-ligne ne soit parallèle à celle de l'aire de référence dans laquelle sont placées les aires générées par cet objet de flux.

Contraintes :

Les enfants de chacune des aires de référence générées par un objet de mise en forme fo:block-container doivent être des aires de bloc normales retournées par l'objet fo:block-container, doivent être correctement empilées et correctement ordonnées.

Toutes les aires de niveau référence hors-ligne retournées par les enfants de l'objet fo:block-container sont gérées comme décrit au chapitre [6.10.2 fo:float].

Contenus :

(%block;)+

De plus, un objet fo:block-container qui ne génère pas d'aire en position absolue peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.6 Les objets de mise en forme de type en-ligne

6.6.1 Introduction

On utilise le plus souvent les objets de mise en forme en-ligne pour formater une partie de texte ou pour la génération de règles et de lignes de conduite. Il y a beaucoup d'autres utilisations. L'exemple suivant illustre certaines de celles-ci.

6.6.1.1 Exemples
6.6.1.1.1 Une première ligne de paragraphe en petites capitales

L'échantillon en entrée :

<doc>
<p>Voici le texte d'un paragraphe dont la premiè ligne
va être présentée en petites capitales.</p>
</doc>

La feuille de style XSL :

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
  <fo:block>
    <fo:initial-property-set font-variant="small-caps"/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

L'instance résultat, les éléments et attributs sont dans l'espace de nommage fo: :

<fo:block>
  <fo:initial-property-set font-variant="small-caps">
  </fo:initial-property-set>Voici le texte d'un paragraphe dont la première ligne
va être présentées en petites capitales.
</fo:block>
6.6.1.1.2 Une illustration contenant une photographie

L'échantillon en entrée :

<doc>
  <illustration>
    <photo image="TH0317A.jpg"/>
    <legende>C'ieng Tamlung de C'ieng Mai</legende>
  </illustration>
</doc>

Dans cet exemple, l'image (un objet fo:external-graphic) se place comme un objet de type bloc centré. La légende est centrée avec des indentations de 10mm.

La feuille de style XSL :

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="illustration">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="photo">
  <fo:block text-align="center">
    <fo:external-graphic src="{@image}"/> « errata-E11 »
  </fo:block>
</xsl:template>

<xsl:template match="legende">
  <fo:block space-before="3pt" text-align="center"
    start-indent="10mm" end-indent="10mm">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

L'arbre des éléments et attributs dans l'espace de nommage fo: :

<fo:block>
  <fo:block text-align="center">
    <fo:external-graphic src="TH0317A.jpg"/> « errata-E11 »
  </fo:block>

  <fo:block space-before="3pt" text-align="center" start-indent="10mm"
    end-indent="10mm">C'ieng Tamlung de C'ieng Mai</fo:block>
</fo:block>
6.6.1.1.3 Une numérotation de page avec une référence au numéro de la page

L'échantillon en entrée :

<!DOCTYPE doc SYSTEM "pgref.dtd">
<doc>
  <chapitre id="x"><titre>Chapitre</titre>
    <p>Texte</p>
  </chapitre>
  <chapitre><titre>Chapitre</titre>
    <p>Pour une description de X, voir <ref refid="x"/>.</p>
  </chapitre>
</doc>

Dans cet exemple, chaque page a un pied de page courant qui contient le mot « Page » suivi par le numéro de page. L'élément "ref" génère le mot « page » suivi par le numéro de page de la page sur laquelle a été placé l'attribut "refid" qui désigne ce numéro.

La feuille de style XSL :

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="doc">
  <fo:root>
    <fo:layout-master-set>
      <fo:simple-page-master master-name="page"
        page-height="297mm" page-width="210mm"
        margin-top="20mm" margin-bottom="10mm"
        margin-left="25mm" margin-right="25mm">
        <fo:region-body
          margin-top="0mm" margin-bottom="15mm"
          margin-left="0mm" margin-right="0mm"/>
        <fo:region-after extent="10mm"/>
      </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="page">
      <fo:static-content flow-name="xsl-region-after">
        <fo:block>
          <xsl:text>Page </xsl:text>
          <fo:page-number/>
        </fo:block>
      </fo:static-content>
      <fo:flow flow-name="xsl-region-body">
        <xsl:apply-templates/>
      </fo:flow>
    </fo:page-sequence>
  </fo:root>
</xsl:template>

<xsl:template match="chapitre/titre">
  <fo:block id="{generate-id(.)}">
    <xsl:number level="multiple" count="chapitre" format="1. "/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="ref">
  <xsl:text>page </xsl:text>
  <fo:page-number-citation refid="{generate-id(id(@refid)/titre)}"/>
</xsl:template>

</xsl:stylesheet>

L'instance résultat, les éléments et attributs sont dans l'espace de nommage fo: :

<fo:root>
  <fo:layout-master-set>
    <fo:simple-page-master master-name="page"
      page-height="297mm" page-width="210mm"
      margin-top="20mm" margin-bottom="10mm"
      margin-left="25mm" margin-right="25mm">
      <fo:region-body margin-top="0mm" margin-bottom="15mm"
        margin-left="0mm" margin-right="0mm"/>
      <fo:region-after extent="10mm"/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="page">
    <fo:static-content flow-name="xsl-region-after">
      <fo:block>Page <fo:page-number/>
      </fo:block>
    </fo:static-content>
    <fo:flow flow-name="xsl-region-body">
      <fo:block id="N5">1. Chapitre</fo:block>
      <fo:block>Texte</fo:block>
      <fo:block id="N13">2. Chapitre</fo:block>
      <fo:block>Pour une description de X, voir <fo:page-number-citation refid="N5"/>
      </fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>
6.6.1.1.4 Une table des matières avec des lignes conductrices

L'échantillon en entrée :

<doc>
  <chapitre><titre>Chapitre</titre>
    <p>Texte</p>
    <section><titre>Section</titre>
    <p>Texte</p>
    </section>
    <section><titre>Section</titre>
    <p>Texte</p>
    </section>
  </chapitre>
  <chapitre><titre>Chapitre</titre>
    <p>Texte</p>
    <section><titre>Section</titre>
    <p>Texte</p>
    </section>
    <section><titre>Section</titre>
    <p>Texte</p>
    </section>
  </chapitre>
</doc>

Dans cet exemple, la table des matières est formatée de manière à ce qu'il y ait une ligne conductrice en pointillés entre le texte de titre et le numéro de page.

La feuille de style XSL :

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="doc">
  <!-- crétion de la table des matières -->
  <xsl:apply-templates select="chapitre/titre" mode="toc"/>
  <!-- traitement du document -->
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="chapitre/titre" mode="toc">
  <fo:block text-align-last="justify">
    <fo:simple-link internal-destination="{generate-id(.)}">
      <xsl:number level="multiple" count="chapitre" format="1. "/>
      <xsl:apply-templates/>
    </fo:simple-link>
    <xsl:text> </xsl:text>
    <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
               leader-length.maximum="100%" leader-pattern="dots"/>
    <xsl:text> </xsl:text>
    <fo:page-number-citation ref-id="{generate-id(.)}"/>
  </fo:block>
  <xsl:apply-templates select="../section/titre" mode="toc"/>
</xsl:template>

<xsl:template match="section/titre" mode="toc">
  <fo:block start-indent="10mm" text-align-last="justify">
    <fo:simple-link internal-destination="{generate-id(.)}">
      <xsl:number level="multiple" count="chapitre|section" format="1.1 "/>
      <xsl:apply-templates/>
    </fo:simple-link>
    <xsl:text> </xsl:text>
    <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
               leader-length.maximum="100%" leader-pattern="dots"/>
    <xsl:text> </xsl:text>
    <fo:page-number-citation ref-id="{generate-id(.)}"/>
  </fo:block>
</xsl:template>

<xsl:template match="chapitre/titre">
  <fo:block id="{generate-id(.)}">
    <xsl:number level="multiple" count="chapitre" format="1. "/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="section/titre">
  <fo:block id="{generate-id(.)}">
    <xsl:number level="multiple" count="chapitre|section" format="1.1 "/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

L'instance résultat, les éléments et attributs sont dans l'espace de nommage fo: :

<fo:block text-align-last="justify">
  <fo:simple-link internal-destination="N4">1. Chapitre
  </fo:simple-link>
  <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
    leader-length.maximum="100%" leader-pattern="dots">
  </fo:leader>
  <fo:page-number-citation ref-id="N4">
  </fo:page-number-citation>
</fo:block>
<fo:block start-indent="10mm" text-align-last="justify">
  <fo:simple-link internal-destination="N11">1.1 Section
  </fo:simple-link>
  <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
    leader-length.maximum="100%" leader-pattern="dots">
  </fo:leader>
  <fo:page-number-citation ref-id="N11">
  </fo:page-number-citation>
</fo:block>
<fo:block start-indent="10mm" text-align-last="justify">
  <fo:simple-link internal-destination="N19">1.2 Section
  </fo:simple-link>
  <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
    leader-length.maximum="100%" leader-pattern="dots">
  </fo:leader>
  <fo:page-number-citation ref-id="N19">
  </fo:page-number-citation>
</fo:block>
<fo:block text-align-last="justify">
  <fo:simple-link internal-destination="N28">2. Chapitre
  </fo:simple-link>
  <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
    leader-length.maximum="100%" leader-pattern="dots">
  </fo:leader>
  <fo:page-number-citation ref-id="N28">
  </fo:page-number-citation>
</fo:block>
<fo:block start-indent="10mm" text-align-last="justify">
  <fo:simple-link internal-destination="N35">2.1 Section
  </fo:simple-link>
  <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
    leader-length.maximum="100%" leader-pattern="dots">
  </fo:leader>
  <fo:page-number-citation ref-id="N35">
  </fo:page-number-citation>
</fo:block>
<fo:block start-indent="10mm" text-align-last="justify">
  <fo:simple-link internal-destination="N43">2.2 Section
  </fo:simple-link>
  <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
    leader-length.maximum="100%" leader-pattern="dots">
  </fo:leader>
  <fo:page-number-citation ref-id="N43">
  </fo:page-number-citation>
</fo:block>

<fo:block id="N4">1. Chapitre
</fo:block>

<fo:block>Texte
</fo:block>

<fo:block id="N11">1.1 Section
</fo:block>

<fo:block>Texte
</fo:block>

<fo:block id="N19">1.2 Section
</fo:block>

<fo:block>Texte
</fo:block>

<fo:block id="N28">2. Chapitre
</fo:block>

<fo:block>Texte
</fo:block>

<fo:block id="N35">2.1 Section
</fo:block>

<fo:block>Texte
</fo:block>

<fo:block id="N43">2.2 Section
</fo:block>

<fo:block>Texte
</fo:block>

6.6.2 fo:bidi-override

Usage commun :

L'objet de mise en forme fo:bidi-override est utilisé quand l'algorithme Unicode BIDI échoue. Celui-ci force l'écriture d'une chaîne textuelle dans une direction particulière.

Aires :

L'objet de mise en forme fo:bidi-override génère une ou plusieurs aires en-ligne normales. L'objet fo:bidi-override retourne ces aires et, le cas échéant, les aires de niveau page hors-ligne et de niveau référence hors-ligne retournées par les enfants de celui-ci.
« errata-E12 »

Dérivation du trait :

Les traits de direction se dérivent des propriétés 'writing-mode', 'direction' et 'unicode-bidi', comme décrit au chapitre [5.5.3 Les propriétés writing-mode et direction].

Contraintes :

Aucune aire ne peut avoir plus d'une aire normale enfant retournée par le même objet de mise en forme fo:bidi-override.

Les enfants de chacune des aires normales retournées par un objet fo:bidi-override doivent satisfaire aux contraintes spécifiées au chapitre [4.7.3 La construction en-ligne].

Contenus :

(#PCDATA|%inline;|%block;)*

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Un objet fo:bidi-override, qui est le descendant d'un objet fo:leader, ou d'un objet fo:inline enfant d'un objet fo:footnote, peut ne pas avoir d'enfants de type bloc, à moins que celui-ci n'ait un ancêtre plus proche qui soit un objet fo:inline-container.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.6.3 fo:character

Usage commun :

L'objet de flux fo:character représente un caractère correspondant à un glyphe pour une présentation. C'est une unité atomique pour le formateur.

Quand l'arbre résultant est interprété comme un arbre d'objets de mise en forme, un caractère de cet arbre résultant est considéré comme étant un élément vide de type fo:character, dont l'attribut caractère est égal à la représentation Unicode du caractère en question. La sémantique d'une valeur "auto" pour les propriétés de caractère, leur valeur initiale typiquement, repose sur le code Unicode. Les surclassements peuvent se spécifier d'une manière propre à une mise en œuvre.

Remarque :

Dans une feuille de style, la création explicite d'un objet fo:character peut s'utiliser pour surclasser explicitement la correspondance par défaut.

Les caractères de balise Unicode n'ont pas à être reconnus.

Remarque :

En fait, la version 3.1 d'Unicode déclare que ces caractères ne doivent pas être utilisés "avec tous les protocoles, ceux qui fournissent d'autres moyens de balisage d'un langage tel que HTML ou XML". Unicode TR20 ([UNICODE TR20]) déclare aussi très clairement que ceux-ci ne sont pas souhaitables en utilisation conjointe avec un tel balisage.

Aires :

L'objet de mise en forme fo:character génère et retourne une ou plusieurs aires en-ligne normales.

Remarque :

On rencontre ces cas, quand plus d'une aire en-ligne sont génées, dans les écritures où un seul caractère génère à la fois un glyphe de préfixe et de suffixe pour un autre caractère.

Contraintes :

Les dimensions des aires sont déterminées par les mesures de police pour le glyphe.

Au moment de formater un objet fo:character, avec une valeur "true" pour le trait treat-as-word-space, l'agent utilisateur peut employer une méthode différente pour déterminer la dimension de progression en-ligne de l'aire.

Remarque :

De telles méthodes reposent typiquement sur l'emploi d'une valeur d'espace-mot contenue dans la police ou définie par le formateur.

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.6.4 fo:initial-property-set

Usage commun :

L'objet de mise en forme auxilliaire fo:initial-property-set spécifie les propriétés de mise en forme pour la première ligne d'un objet fo:block.

Remarque :

Celui-ci est analogue au pseudo-élément first-line de CSS.

Une version ultérieure de cette recommandation pourra ajouter une propriété qui contrôlera le nombre des lignes ou la « profondeur » d'application de ces propriétés initiales.

Aires :

L'objet de mise en forme fo:initial-property-set ne génère ni ne retourne d'aire. Celui-ci ne contient simplement qu'un jeu de traits qui s'appliquent à la première aire de ligne d'une aire dont le trait is-first a la valeur "true", cette aire ayant été générée par l'objet fo:block parent de fo:initial-property-set.

Dérivation du trait :

Les traits de l'objet fo:initial-property-set sont considérés comme des traits contraignant la première ligne, comme si les objets de mise en forme enfants de l'objet fo:block, ou des parties de ceux-ci dans le cas d'une coupure de ligne, ces objets ayant été utilisés dans le formatage de la première ligne, comme si ceux-ci étaient enveloppés dans un objet fo:wrapper comme un enfant direct de l'objet fo:block avec ces traits.

Contraintes :

Aucune.

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.6.5 fo:external-graphic

Usage commun :

L'objet de flux fo:external-graphic est utilisé pour un graphique quand les données des graphiques résident en dehors de l'arbre fo:element.

Aires :

L'objet de mise en forme fo:external-graphic génère et retourne une aire de zone de visualisation de type en-ligne et une aire de référence qui contient le graphique externe. L'aire de type en-ligne utilise le rectangle d'allocation élargi, comme défini au chapitre [4.2.3 Les définitions géométriques].

Remarque :

Un objet fo:external-graphic peut être placé comme type bloc en le faisant contenir dans un objet fo:block.

On emploie typiquement un trait line-stacking-strategy avec une valeur "max-height" ou "line-height" pour l'empilement d'une ou plusieurs lignes ayant un contenu fo:external-graphic.

Contraintes :

Les dimensions de la zone de visualisation sont déterminées par les traits block-progression-dimension et inline-progression-dimension. Pour une valeur "auto", ce sont les dimensions du contenu graphique qui sont utilisées.

La taille du contenu d'un graphique se détermine en prenant la valeur intrinsèque de celui-ci et en effectuant une mise à l'échelle en fonction des valeurs spécifiées par les traits content-height, content-width et scaling. Si la valeur de l'un ou l'autre trait content-height ou content-width n'est pas "auto", le même facteur d'échelle (tel que calculé à partir de l'autre valeur spécifiée non-auto) est appliqué dans les deux directions.

Une fois mise à l'échelle, l'aire de référence s'aligne sur l'aire de zone de visualisation en utilisant les traits text-align et display-align. Si celle-ci est plus grande que l'aire de zone de visualisation, le graphique est aligné comme si celui-ci pouvait y tenir, le trait overflow contrôlant alors le rognage, les barres de défilement, etc.

Au cas où le format de fichier graphique ne spécifie pas de dimensions intrinsèques pour le graphique, les dimensions sont déterminées par la mise en œuvre.

Remarque :

Par exemple, une taille de pixel de 1/96" peut être utilisée pour une image bitmap.

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.6.6 fo:instream-foreign-object

Usage commun :

L'objet de flux fo:instream-foreign-object s'utilise pour un graphique en-ligne ou un autre objet « générique » dont les données résident comme descendants de l'objet fo:instream-foreign-object, typiquement comme un sous-arbre d'éléments XML dans un espace de nommage non-XSL.

Remarque :

Un format courant serait SVG.

Aires :

L'objet de mise en forme fo:instream-foreign-object génère une aire de zone de visualisation en-ligne et une aire de référence qui contient l'objet étranger dans le courant. L'aire de type en-ligne utilise le rectanble d'allocation élargi, comme défini au chapitre [4.2.3 Les définitions géométriques].

Contraintes :

Les dimensions de la zone de visualisation sont déterminées par les traits block-progression-dimension et inline-progression-dimension. Pour une valeur "auto", ce sont les dimensions du contenu graphique qui sont utilisées.

La taille du contenu d'un objet étranger dans le courant se détermine en prenant la valeur intrinsèque de celui-ci et en effectuant une mise à l'échelle en fonction des valeurs spécifiées par les traits content-height, content-width et scaling. Si la valeur de l'un ou l'autre trait content-height ou content-width n'est pas "auto", le même facteur d'échelle (tel que calculé à partir de l'autre valeur spécifiée non-auto) est appliqué dans les deux directions.

Une fois mise à l'échelle, l'aire de référence s'aligne sur l'aire de zone de visualisation en utilisant les traits text-align et display-align. Si celle-ci est plus grande que l'aire de zone de visualisation, le graphique est aligné comme si celui-ci pouvait y tenir, le trait overflow contrôlant alors le rognage, les barres de défilement, etc.

Au cas où l'objet étranger dans le courant ne spécifie pas de dimensions intrinsèques, les dimensions de celui-ci sont déterminées par la mise en œuvre.

Contenus :

L'objet de flux fo:instream-foreign-object a un enfant qui est dans un espace de nommage non-XSL. La structure admise pour cet enfant est celle définie par cet espace de nommage.

L'objet de flux fo:instream-foreign-object peut avoir des attributs supplémentaires dans cet espace de nommage non-XSL. Ces attributs, tout comme les propriétés définies par XSL, sont rendus disponibles au processeur du contenu de l'objet de flux. Leur sémantique est définie par cet espace non-XSL.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.6.7 fo:inline

Usage commun :

L'objet de mise en forme fo:inline s'utilise communément pour formater une partie de texte avec un arrière-plan ou enclore celui-ci dans une bordure.

Aires :

L'objet de mise en forme fo:inline génère une ou plusieurs aires en-ligne normales. L'objet fo:inline retourne ces aires et, le cas échéant les aires de niveau page hors-ligne et de niveau référence hors-ligne retournées par ses enfants.
« errata-E13 »

Contraintes :

Aucune aire ne peut avoir plus d'une aire normale enfant retournée par le même objet fo:inline.

Les enfants de chacune des aires normales retournées par un objet fo:inline doivent satisfaire aux contraintes spécifiées au chapitre [4.7.3 La construction en-ligne].

De plus, les contraintes imposées par les traits dérivés des propriétés qui s'appliquent à cet objet de mise en forme doivent être satisfaites. Les contraintes géométriques sont précisément définies au chapitre [4 Le modèle de l'aie].

Contenus :

(#PCDATA|%inline;|%block;)*

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Un objet fo:inline, enfant d'un objet fo:footnote, ne peut pas avoir d'enfants de type bloc. Un objet fo:inline, descendant d'un objet fo:leader ou d'un enfant fo:inline d'un objet fo:footnote, ne peut pas avoir d'enfants de type bloc, à moins que celui-ci n'ait un ancêtre plus proche qui soit un objet fo:inline-container.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.6.8 fo:inline-container

Usage commun :

L'objet de flux fo:inline-container s'utilise pour générer une aire de référence en-ligne, contenant typiquement des pavés de texte dont le mode d'écriture est différent.

Remarque :

L'emploi de cet objet de flux n'est pas nécessaire pour un texte bi-directionnel ; pour cela, l'algorithme Unicode BIDI et l'objet fo:bidi-override suffisent.

Aires :

L'objet de mise en forme fo:inline-container génère une ou plusieurs paires zone de visualisation/référence. Les aires de zone de visualisation générées par un objet fo:inline-container sont des aires de type en-ligne normales qui utilisent le rectangle d'allocation élargi, comme défini au chapitre [4.2.3 Les définitions géométriques]. L'objet fo:inline-container retourne ces aires et, le cas échéant, les aires de niveau page hors-ligne générées par ses enfants.

Dérivation du trait :

Les aires générées par l'objet fo:inline-container ont une valeur "true" pour leur trait is-reference-area.

Les dimensions des aires de zone de visualisation et de rérérence doivent être établies dans la direction de progression en-ligne. On doit spécifier la direction de progression en-ligne, à moins que celle-ci soit parallèle à celle de l'aire de référence dans laquelle les aires générées par cet objet sont placées.

On calcule les valeurs dans la table de ligne de base de cet objet ainsi :

baseline

Si le mode d'écriture a une direction de progression de bloc qui est parallèle à celle du parent, le point d'alignement se situe sur la position de la ligne de base dominante de la première aire de ligne descendante. S'il n'y a pas une telle aire de ligne, le point d'alignement se situe sur la position du bord d'après du rectangle d'allocation.

Si le mode d'écriture a une direction de progression qui n'est pas parallèle à celle du parent, le point d'alignement se situe sur une position à mi-chemin entre les bords d'avant et d'après du rectangle de contenu.

before-edge

Le point d'alignement se situe sur la position du bord d'avant du rectangle d'allocation.

text-before-edge

Le point d'alignement se situe sur la position la plus proche du bord d'avant du rectangle d'allocation choisie parmi deux bords candidats. Si le mode d'écriture a une direction de progression bloc qui est parallèle à celle du parent, les bords candidats sont les bords d'avant et d'après du rectangle de contenu, si ce n'est pas le cas, ce sont alors les bords de début et de fin du rectangle de contenu.

middle

Le point d'alignement se situe sur une position à mi-chemin entre les bords d'avant et d'après du rectangle d'allocation.

after-edge

Le point d'alignement se situe sur la position du bord d'après du rectangle d'allocation.

text-after-edge

Le point d'alignement se situe sur la position la plus proche du bord d'après du rectangle d'allocation choisie parmi deux candidats. Si le mode d'écriture a une direction de progression de bloc qui est parallèle à celle du parent, les bords candidats sont les bords d'avant et d'après du rectangle de contenu, si ce n'est pas le cas, ce sont alors les bords de début et de fin du rectangle de contenu.

ideographic

Le point d'alignement se situe sur une position à 7/10 de la distance à partir du bord d'avant jusqu'au bord d'après du rectangle d'allocation.

alphabetic

Le point d'alignement se situe sur une position à 6/10 de la distance à partir du bord d'avant jusqu'au bord d'après du rectangle d'allocation.

hanging

Le point d'alignement se situe sur une position à 2/10 de la distance à partir du bord d'avant jusqu'au bord d'après du rectangle d'allocation.

mathematical

Le point d'alignement se situe sur une position à 5/10 de la distance à partir du bord d'avant jusqu'au bord d'après du rectangle d'allocation.

Contraintes :

Aucune aire ne peut avoir plus d'une aire normale enfant retournée par le même objet de mise en forme fo:inline-container.

Les enfants de chacune des aires de référence générées par un objet de mise en forme fo:inline-container doivent être correctement empilés et correctement ordonnés.

Toutes les aires de niveau référence hors-ligne retournées par les enfants de l'objet fo:inline-container sont gérées comme décrit au chapitre [6.10.2 fo:float].

Contenus :

(%block;)+

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.6.9 fo:leader

Usage commun :

L'objet de mise en forme fo:leader est souvent utilisé :

Aires :

L'objet de mise en forme fo:leader génère et retourne une seule aire normale en-ligne.

Dérivation du trait :

Si la valeur du trait leader-pattern est "use-content", la dimension de progression de bloc du rectangle de contenu est déterminée de la même manière que pour les aires de ligne ; autrement, celle-ci est déterminée par le trait rule-thickness.

Contraintes :

Si la longueur de la ligne de conduite minimum est trop importante pour tenir dans l'aire de ligne, celle-ci commencera une nouvelle ligne. Si celle-ci est trop longue pour tenir toute seule sur une ligne, la ligne de conduite débordera de la ligne et risquera de déborder de l'aire de référence en fonction du trait overflow de ce conteneur.

L'objet de mise en forme fo:leader peut avoir, comme enfants, tous les objets de mise en forme en-ligne et objets de caractère, mais ces objets fo:leader ne peuvent pas être imbriqués. Ses enfants sont ignorés à moins que la valeur du trait leader-pattern ne soit "use-content".

Remarque :

Si la valeur du trait leader-pattern est "use-content" et si l'objet fo:leader n'a pas d'enfant, la ligne de conduite devrait être constituée d'un espace blanc.

L'aire en-ligne générée par l'objet fo:leader a une dimension dans la direction de progression en-ligne qui sera, au moins, égale à la valeur de leader-length.minimum et, au plus, à celle de leader-length.maximum.

Pour les aires de ligne spécifiées en justification, celles-ci doivent honorer le trait leader-alignment de toutes les aires de ligne générées par des objets fo:leader.

Si la valeur du trait leader-pattern est "dots" ou "use-content", ces contraintes s'appliquent :

L'aire en-ligne générée par l'objet fo:leader a pour enfants, les aires retournées par ses enfants ou celles obtenues par le formatage du motif spécifié dans le trait leader-pattern, répété un nombre entier de fois. Si la largeur d'une répétion, même une seule, est supérieure à la dimension de l'aire en-ligne dans la direction de progression en-ligne, alors l'aire en-ligne sera constituée d'un espace blanc. L'espace d'avant et d'après des aires de l'enfant sont établies en tenant compte des contraintes sécifiées dans les traits leader-pattern-width et leader-alignment.

Remarque :

Si on veut que la ligne de conduite soit étirée jusqu'à remplir tout l'espace d'une ligne, on devrait lui spécifier une longueur maximum aussi grande que la largeur de la colonne.

Remarque :

L'alignement de la ligne de conduite peut être dépendante de l'écriture et peut nécessiter l'indication d'un point d'alignement, ce dernier étant différent de l'alignement par défaut pour cette écriture. Par exemple, pour l'emploi de certaines écritures indiennes, la ligne de conduite s'aligne sur la ligne de base alphabétique.

Remarque :

Un objet fo:leader peut être enveloppé dans un objet fo:block, ceci produisant une aire de bloc avec une aire de ligne contenant la ligne de conduite, pour créer une règle de séparation, ou de décoration, des aires de bloc.

Contenus :

(#PCDATA|%inline;)*

Le contenu ne doit pas contenir d'objet fo:leader, fo:inline-container, fo:block-container, fo:float, fo:footnote ou fo:marker, en tant qu'enfant direct ou en tant que descendant.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.6.10 fo:page-number

Usage commun :

L'objet de mise en forme fo:page-number s'utilise pour obtenir une aire en-ligne dont le contenu est le numéro de page de la page sur laquelle l'aire en-ligne est placée.

Aires :

L'objet de mise en forme fo:page-number génère et retourne une seule aire normale en-ligne.

Contraintes :

Les aires enfants de cette aire en-ligne sont les mêmes que celles qui auraient é obtenues suite à la mise en forme d'un fragment d'arbre résultant consistant en objets de flux fo:character ; un objet pour chaque caractère de la chaîne du numéro de page, cet objet ayant seulement la propriété 'character' qui soit spécifiée.

La chaîne du numéro de page s'obtient en convertissant le numéro de page de la page sur laquelle est placée l'aire en-ligne, en fonction du nombre des propriétés de conversion de chaîne de l'ancêtre fo:page-sequence.

Remarque :

Ces propriétés de conversion sont : [7.24.1 'format'], [7.24.2 'grouping-separator'], [7.24.3 'grouping-size'], [7.24.4 'letter-value'], [7.9.1 'country'], and [7.9.2 'language'].

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.6.11 fo:page-number-citation

Usage commun :

L'objet fo:page-number-citation est utilisé pour référencer le numéro de page de la page contenant la première aire normale retournée par l'objet de mise en forme que l'objet fo:page-number-citation désigne.

Remarque :

On peut l'utiliser pour fournir les numéros de page dans une table des matières, dans des références croisées et dans un index des entrées.

Aires :

L'objet de mise en forme fo:page-number-citation génère et retourne une seule aire normale en-ligne.

Contraintes :

Le numéro de page désigné est le numéro de la page qui contient, comme descendant, la première aire normale retournée par l'objet de mise en forme dont le trait id correspond au trait ref-id de l'objet fo:page-number-citation (c'est l'objet de mise en forme référencé).

La chaîne de numéro de page désigné s'obtient en convertissant le numéro de page désigné en fonction des propriétés de conversion des nombre vers les chaînes de l'ancêtre fo:page-sequence de l'objet de mise en forme référencé.

Remarque :

Ces propriétés de conversion sont : [7.24.1 'format'], [7.24.2 'grouping-separator'], [7.24.3 'grouping-size'], [7.24.4 'letter-value'], [7.9.1 'country'], and [7.9.2 'language'].

Les aires enfants de l'aire en-ligne générée sont les mêmes que celles qui auraient été obtenues suite à la mise en forme d'un fragment d'arbre résultant contenant des objets de flux fo:character ; un objet pour chaque caractères de la chaîne du numéro de page désigné, cet objet n'ayant que la propriété 'character' qui soit spécifiée.

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.7 Les objets de mise en forme des tables

6.7.1 Introduction

Il existe neuf objets de mise en forme utilisés dans la construction des tables : fo:table-and-caption, fo:table, fo:table-column, fo:table-caption, fo:table-header, fo:table-footer, fo:table-body, fo:table-row et fo:table-cell. La structure de l'arbre résultant est montrée ci-dessous.

Représentation en arborescence des objets de mise en forme pour les tables   [D]

Une représentation de l'arbre des objets de mise en forme des tables

6.7.1.1 Exemples
6.7.1.1.1 Une table simple, centrée et indentée

L'échantillon en entrée :

<doc>
<table>
<legende><p>La légende de cette table</p></legende>
<tgroup cols="3" width="325pt">
<colspec colwidth="100pt"/>
<colspec colwidth="150pt"/>
<colspec colwidth="75pt"/>
<tbody>
<row>
<entree><p>Cellule 1</p></entree>
<entree><p>Cellule 2</p></entree>
<entree><p>Cellule 3</p></entree>
</row>
</tbody>
</tgroup>
</table>
</doc>

La table et sa légende sont centrées dans l'espace disponible entre les deux indentations suivantes : start-indent="100pt" et end-indent="0pt". On ne souhaite pas que les contenus de la légende et des cellules soient centrés ni indentés.

La feuille de style XSL :

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:attribute-set name="inside-table">
  <xsl:attribute name="start-indent">0pt</xsl:attribute>
  <xsl:attribute name="text-align">start</xsl:attribute>
</xsl:attribute-set>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="table">
  <fo:table-and-caption text-align="center" start-indent="100pt">
    <xsl:apply-templates/>
  </fo:table-and-caption>
</xsl:template>

<xsl:template match="legende">
  <fo:table-caption xsl:use-attribute-sets="inside-table">
    <xsl:apply-templates/>
  </fo:table-caption>
</xsl:template>

<xsl:template match="tgroup">
  <fo:table width="{@width}" table-layout="fixed">
    <xsl:apply-templates/>
  </fo:table>
</xsl:template>

<xsl:template match="colspec">
  <fo:table-column column-width="{@colwidth}">
    <xsl:attribute name="column-number">
      <xsl:number count="colspec"/>
    </xsl:attribute>
  </fo:table-column>
</xsl:template>

<xsl:template match="tbody">
  <fo:table-body xsl:use-attribute-sets="inside-table">
    <xsl:apply-templates/>
  </fo:table-body>
</xsl:template>

<xsl:template match="row">
  <fo:table-row>
    <xsl:apply-templates/>
  </fo:table-row>
</xsl:template>

<xsl:template match="entree">
  <fo:table-cell>
    <xsl:apply-templates/>
  </fo:table-cell>
</xsl:template>

</xsl:stylesheet>

L'instance résultat, les éléments et attributs sont dans l'espace de nommage fo: :

<fo:table-and-caption text-align="center" start-indent="100pt">

  <fo:table-caption start-indent="0pt" text-align="start">
    <fo:block>La légende de cette table
    </fo:block>
  </fo:table-caption>

  <fo:table width="325pt" table-layout="fixed">

    <fo:table-column column-width="100pt" column-number="1">
    </fo:table-column>
    <fo:table-column column-width="150pt" column-number="2">
    </fo:table-column>
    <fo:table-column column-width="75pt" column-number="3">
    </fo:table-column>

    <fo:table-body start-indent="0pt" text-align="start">

    <fo:table-row>

    <fo:table-cell>
    <fo:block>Cellule 1
    </fo:block>
    </fo:table-cell>
    <fo:table-cell>
    <fo:block>Cellule 2
    </fo:block>
    </fo:table-cell>
    <fo:table-cell>
    <fo:block>Cellule 3
    </fo:block>
    </fo:table-cell>

    </fo:table-row>

    </fo:table-body>

  </fo:table>

</fo:table-and-caption>
6.7.1.1.2 Une table simple avec des spécifications de largeur de colonne relatives

Cet exemple utilise un balisage simple pour les éléments de la table, "à la façon d'un modèle de table Oasis". On spécifie les largeurs de colonne en utilisant une spécification de largeur de colonne relative complète.

L'échantillon en entrée :

<doc>
<table>
<tgroup cols="3">
<colspec colname="col1" colwidth="1*"/>
<colspec colname="col2" colwidth="2*+2pi"/>
<colspec colname="col3" colwidth="72"/>
<tbody>
<row>
<entree colnum="1" valign="top"><p>Cellule 1</p></entree>
<entree colnum="2" valign="middle" align="center"><p>Cellule 2</p></entree>
<entree colnum="3" align="center"><p>Cellule 3</p></entree>
</row>
</tbody>
</tgroup>
</table>
</doc>

La feuille de style XSL :

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="table">
  <fo:table width="12cm" table-layout="fixed">
    <xsl:apply-templates/>
  </fo:table>
</xsl:template>

<xsl:template match="colspec">
  <fo:table-column>
    <xsl:attribute name="column-number">
      <xsl:number count="colspec"/>
    </xsl:attribute>
    <xsl:attribute name="column-width">
      <xsl:call-template name="calc.column.width">
        <xsl:with-param name="colwidth">
          <xsl:value-of select="@colwidth"/>
        </xsl:with-param>
      </xsl:call-template>
    </xsl:attribute>
  </fo:table-column>
</xsl:template>

<xsl:template match="tbody">
  <fo:table-body>
    <xsl:apply-templates/>
  </fo:table-body>
</xsl:template>

<xsl:template match="row">
  <fo:table-row>
    <xsl:apply-templates/>
  </fo:table-row>
</xsl:template>

<xsl:template match="entree">
  <fo:table-cell column-number="{@colnum}">
    <xsl:if test="@valign">
      <xsl:choose>
        <xsl:when test="@valign='middle'">
          <xsl:attribute name="display-align">center</xsl:attribute>
        </xsl:when>
        <xsl:otherwise>
          <xsl:attribute name="display-align">
            <xsl:value-of select="@valign"/>
          </xsl:attribute>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:if>
    <xsl:if test="@align">
      <xsl:attribute name="text-align">
        <xsl:value-of select="@align"/>
      </xsl:attribute>
    </xsl:if>
    <xsl:apply-templates/>
  </fo:table-cell>
</xsl:template>


<xsl:template name="calc.column.width">
<!-- **
     * <p>Calculer une spécification de largeur de colonne de table XSL FO
     * à partir d'une spécification de largeur de colonne de table relative complète.</p>
     *
     * <p>Les largeurs de colonne de table ont les formes de base suivantes :</p>
     *
     * <ul>
     * <li><b>99.99units</b>, un spécifiant de longueur fixe.</li>
     * <li><b>99.99</b>, un spécifiant de longueur fixe sans unité.</li>
     * <li><b>99.99*</b>, un spécifiant de longueur relative.</li>
     * <li><b>99.99*+99.99units</b>, une combinaison des deux.</li>
     * </ul>
     *
     * <p>Les unités sont des points (pt), des picas (pi), des centimètres (cm),
     * des millimètres (mm) et des pouces (in). Ce sont les mêmes unités que pour XSL,
     * à l'exception des picas que XSL abrège en « pc » au lieu de « pi ». Si un spécifiant
     * de longueur n'a pas d'unité, on considère qu'il s'agit de l'unité par défaut (pt).</p>
     *
     * <p>Les spécifiants de longueur relative se réprésentent en XSL avec
     * la fonction proportional-column-width().</p>
     *
     * <p>Voici quelques exemples :</p>
     *
     * <ul>
     * <li>"36pt" reste "36pt"</li>
     * <li>"3pi" devient "3pc"</li>
     * <li>"36" devient "36pt"</li>
     * <li>"3*" devient "proportional-column-width(3)"</li>
     * <li>"3*+2pi" devient "proportional-column-width(3)+2pc"</li>
     * <li>"1*+2" devient "proportional-column-width(1)+2pt"</li>
     * </ul>
     *
     * @param colwidth : La spécification de largeur de colonne.
     *
     * @returns : La spécification de largeur de colonne XSL.
     * -->
  <xsl:param name="colwidth">1*</xsl:param>

  <!-- OK, la largeur de colonne pourrait prendre l'une ou l'autre des formes suivantes : -->
  <!--        1*       = une largeur proportionnelle -->
  <!--     1unit       = une largeur de 1.0 unité -->
  <!--         1       = une largeur de 1pt -->
  <!--  1*+1unit       = une largeur proportionnelle + une largeur fixe -->
  <!--      1*+1       = une largeur proportionnelle + une largeur fixe -->

  <!-- Si la colonne a une largeur proportionnelle, la traduire en XSL -->
  <xsl:if test="contains($colwidth, '*')">
    <xsl:text>proportional-column-width(</xsl:text>
    <xsl:value-of select="substring-before($colwidth, '*')"/>
    <xsl:text>)</xsl:text>
  </xsl:if>

  <!-- Maintenant s'occuper de la partie non-proportionnelle de la spécification -->
  <xsl:variable name="width-units">
    <xsl:choose>
      <xsl:when test="contains($colwidth, '*')">
        <xsl:value-of
             select="normalize-space(substring-after($colwidth, '*'))"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="normalize-space($colwidth)"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:variable>

  <!-- Maintenant, les unités de largeur pourraient avoir l'une ou l'autre forme suivante : -->
  <!--                 = <chaîne vide> -->
  <!--     1unit       = une largeur de 1.0 unité -->
  <!--         1       = une largeur de 1pt -->
  <!-- ces valeurs pouvant être précédées d'un signe optionnel -->

  <!-- Extraire la partie quantité de largeur en masquant la partie unité et en écartant -->
  <!-- les blancs. -->
  <xsl:variable name="width"
       select="normalize-space(translate($width-units,
                                         '+-0123456789.abcdefghijklmnopqrstuvwxyz',
                                         '+-0123456789.'))"/>

  <!-- Extraire la partie unité en masquant la partie quantité de largeur et en écartant -->
  <!-- les blancs. -->
  <xsl:variable name="units"
       select="normalize-space(translate($width-units,
                                         'abcdefghijklmnopqrstuvwxyz+-0123456789.',
                                         'abcdefghijklmnopqrstuvwxyz'))"/>

  <!-- Sortir la longueur -->
  <xsl:value-of select="$width"/>

  <!-- Sortir l'unité, traduite de façon adéquate -->
  <xsl:choose>
    <xsl:when test="$units = 'pi'">pc</xsl:when>
    <xsl:when test="$units = '' and $width != ''">pt</xsl:when>
    <xsl:otherwise><xsl:value-of select="$units"/></xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>

L'instance résultat, les éléments et attributs sont dans l'espace de nommage fo: :

<fo:table width="12cm" table-layout="fixed">
  <fo:table-column column-number="1" column-width="proportional-column-width(1)">
  </fo:table-column>
  <fo:table-column column-number="2" column-width="proportional-column-width(2)+2pc">
  </fo:table-column>
  <fo:table-column column-number="3" column-width="72pt">
  </fo:table-column>
  <fo:table-body>
    <fo:table-row>
      <fo:table-cell column-number="1" display-align="top">
        <fo:block>Cellule 1
        </fo:block>
      </fo:table-cell>
      <fo:table-cell column-number="2" display-align="center" text-align="center">
        <fo:block>Cellule 2
        </fo:block>
      </fo:table-cell>
      <fo:table-cell column-number="3" text-align="center">
        <fo:block>Cellule 3
        </fo:block>
      </fo:table-cell>
    </fo:table-row>
  </fo:table-body>
</fo:table>

6.7.2 fo:table-and-caption

Usage commun :

L'objet de flux fo:table-and-caption s'utilise pour la mise en forme d'une table en même temps que sa légende.

Remarque :

Un objet fo:table-and-caption peut être placé en-ligne si on l'enclôt dans un objet fo:inline-container.

Remarque :

Cet objet de mise en forme correspond à la boîte anonyme de CSS qui enclôt une table et sa légende.

Aires :

L'objet de mise en forme fo:table-and-caption génère une ou plusieurs aires de bloc normales. L'objet fo:table-and-caption retourne ces aires et, le cas échéant, les aires de niveau page hors-ligne et de niveau référence hors-ligne retournées par ses enfants.

Contraintes :

Aucune aire ne peut avoir plus d'une aire normale enfant retournée par le même objet de mise en forme fo:table-and-caption.

Les enfants des aires générées par l'objet fo:table-and-caption sont une ou deux aires ; une pour la légende de la table et une pour la table elle-même. Celles-ci se positionnent l'une en fonction de l'autre comme spécifié par le trait caption-side. Leur position ensuite par rapport au rectangle de contenu de l'aire générée est spécifiée par le trait text-align.

Contenus :

(table-caption?,table)

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.7.3 fo:table

Usage commun :

L'objet de flux fo:table s'utilise pour la mise en forme du matériel tabulaire d'une table.

L'objet de flux fo:table et ses enfants modèlent la disposition visuelle d'une table accordant une « primauté à la rangée ». On peut considérer une table entière comme étant un quadrillage formée de rangées et de colonnes où chacune des cellules occupe une ou plusieurs unités du quadrillage dans la direction de progression de rangée et la direction de progression de colonne.

Le contenu de la table se divise en une en-tête (en option), un pied (en option) et un ou plusieurs corps. Des propriétés spécifient la répétition éventuelle de l'en-tête et du pied dans le cas d'une coupure de la table. Chacune de ces parties occupe une ou plusieurs rangées du quadrillage de la table.

Aires :

L'objet de mise en forme fo:table génère et retourne une ou plusieurs aires de bloc normales. De plus, l'objet fo:table retourne les éventuelles aires de niveau page hors-ligne et de niveau référence hors-ligne retournées par ses enfants.

Les aires générées et retournées par l'objet de mise en forme fo:table ont comme enfants :

Ces aires ont une valeur de z-index qui régit leur ordre de rendu en accord avec le chapitre 17.5.1 de la spécification CSS2 (http://www.w3.org/TR/REC-CSS2/tables.html#table-layers"). vf.

Remarque :

Une cellule qui s'étend peut avoir un arrière-plan différent pour chacune des unités de quadrillage que celle-ci occupe.

Dérivation du trait :

Les aires générées et retournées par l'objet de mise en forme fo:table ont une valeur "true" pour leur trait is-reference-area.

Les directions de progression de colonne et de rangée sont déterminées par le trait writing-mode. Les colonnes utilisent la direction de progression en-ligne et les rangées la direction de progression de bloc.

La méthode de dérivation des traits de bordure d'une table est spécifiée par la propriété 'border-collapse'.

Si la valeur de la propriété 'border-collapse' est "separate", la bordure comprend deux composantes. La première composante, dont le bord interne coîncide avec la délimitation du quadrillage de table la plus extérieure, a une épaisseur égale à la demi-valeur du trait border-separation. Le remplissage de celle-ci dépend du trait background de l'objet fo:table. La seconde composante se place en dehors de la délimitation du quadrillage de table la plus extérieure, ceci sur chaque côté de la table, et forme une bordure basée sur la valeur spécifiée pour la table.

Si la valeur de la propriété 'border-collapse' est "collapse" ou "collapse-with-precedence", la bordure se détermine, pour chaque segment, au niveau de la cellule.

Remarque :

Si on spécifie la valeur "collapse-with-precedence" et une préséance adéquate élevée pour la bordure de la table, on peut ainsi s'assurer de l'utilisation de cette spécification pour chacun des segments de la bordure.

Contraintes :

Auncune aire ne peut avoir plus d'une aire enfant normale retournée par le même objet de mise en forme fo:table.

La dimension de progression en-ligne du rectangle de contenu de la table correspond à la somme des dimensions de progression en-ligne des colonnes du quadrillage de la table. La méthode, qui sera utilisée pour déterminer ces dimensions, dépend des valeurs des traits table-layout et inline-progression-dimension :

inline-progression-dimension = "auto" table-layout = "auto"

La disposition de table automatique sera utilisée ;

inline-progression-dimension = "auto" table-layout = "fixed"

La disposition de table automatique sera utilisée ;

inline-progression-dimension = "<longueur>", ou "<pourcentage>", table-layout = "auto"

La disposition de table automatique sera utilisée ;

inline-progression-dimension = "<longueur>", ou "<pourcentage>", table-layout = "fixed"

La disposition de table fixe sera utilisée.

Les dispositions de table automatique et fixe sont définies au chapitre 17.5.2 de la spécification CSS2 (http://www.w3.org/TR/REC-CSS2/tables.html#width-layout") vf.

La méthode de détermination de la dimension de progression de bloc est régie par le trait block-progression-dimension.

Remarque :

La spécification CSS2 n'indique pas explicitement quelle serait les conséquences d'un écart entre une dimension de progression de bloc spécifiée pour la table et les dimensions de progression de bloc du contenu de celle-ci.

Remarque :

L'emploi de la fonction proportional-column-width() n'est permis qu'avec la disposition de table fixe.

Si on souhaite utiliser des largeurs de colonne proportionnelles dans une table dont la largeur n'est pas explicite, on ne peut pas spécifier une valeur "auto" pour le trait inline-progression-dimension. À la place, il faut spécifier une largeur exprimée en pourcentage. Par exemple, une spécification des traits table-layout = "fixed" et inline-progression-dimension = "100%" permettrait l'emploi simultané de largeurs de colonne proportionnelles et la création d'une table aussi large que possible dans le contexte courant.

Remarque :

L'utilisation d'une largeur en pourcentage peut produire un résultat imprévisible, particulièrement avec la disposition de table automatique.

C'est une erreur quand deux cellules de table se recouvrent.

Remarque :

Un tel recouvrement pourrait survenir quand deux cellules différentes reçoivent le même nombre de colonnes dans la même rangée ou quand une colonne ou une rangée, qui s'étendent, provoquent un recouvrement.

Contenus :

(table-column*,table-header?,table-footer?,table-body+)

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.7.4 fo:table-column

Usage commun :

L'objet de mise en forme auxilliaire fo:table-column spécifient des caractéristiques qui s'appliquent aux cellules de table qui sont dans la même colonne et qui ont la même étendue. La propriété la plus importante parmi celles-ci est 'column-width'.

Aires :

L'objet de mise en forme fo:table-column ne génère et ne retourne aucune aire. Celui-ci contient un jeu de traits qui exercent des contraintes sur les largeurs de colonne et une spécification de caractéristiques de présentation, comme l'arrière-plan, qui agit sur les aires générées par l'objet fo:table (voir [6.7.3 fo:table]). On peut aussi spécifier des propriétés qui s'héritent sur l'objet fo:table-column. On peut s'y référer dans une expression à l'aide de la fonction from-table-column().

Remarque :

On donne plus de détails, notamment sur l'emploi d'un objet fo:table-column avec un trait number-columns-spanned de valeur supérieure à 1, dans la description de l'objet fo:table et celle de la fonction from-table-column().

Contraintes :

Aucune.

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.7.5 fo:table-caption

Usage commun :

L'objet de mise en forme fo:table-caption est utilisé pour contenir des objets de mise en forme de type bloc qui contiennent la légende de la table seulement avec l'objet fo:table-and-caption.

Aires :

L'objet de mise en forme fo:table-caption génère une ou plusieurs aires de référence normales. L'objet fo:table-caption retourne ces aires de référence et, le cas échéant, les aires de niveau page hors-ligne retournées par ses enfants.

Dérivation du trait :

Les aires générées par l'objet de mise en forme fo:table-caption ont une valeur "true" pour leur trait is-reference-area.

Contraintes :

Dans le cas où la valeur du trait caption-side est "before" ou "after", la dimension de progression en-ligne du rectangle de contenu de l'aire de référence générée est égale à celle du rectangle de contenu de l'aire de référence la contenant.

Quand cette valeur est "start" ou "end", la dimension de progression en-ligne de l'aire de référence générée est contrainte par la valeur du trait inline-progression-dimension.

Quand cette valeur est "top", "bottom", "left" ou "right", celle-ci est déduite de la même manière que pour les propriétés correspondantes (voir [5.3 Le calcul des valeurs des propriétés correspondantes]) et on traite la propriété comme si la valeur correspondante avait été spécifiée.

Si la légende doit être positionnée avant la table, les aires générées par l'objet fo:table-caption seront placées dans l'arbre des aires comme si l'objet fo:table-caption avait une propriété 'keep-with-next' dont la valeur était "always".

Si la légende doit être positionnée après la table, les aires générées par l'objet fo:table-caption seront placées dans l'arbre des aires comme si l'objet fo:table-caption avait une propriété 'keep-with-previous' dont la valeur était "always".

Aucune aire ne peut avoir plus d'une aire enfant normale retournée par le même objet de mise en forme fo:table-caption.

Les enfants de chacunes des aires normales retournées par un objet de mise en forme fo:table-caption doivent être des aires de bloc normales, retournées par les enfants de fo:table-caption, et doivent être correctement empilés et correctement ordonnés.

Les aires de niveau référence hors-ligne éventuellement retournées par les enfants de l'objet fo:table-caption sont gérées comme décrit au chapitre [6.10.2 fo:float].

Contenus :

(%block;)+

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.7.6 fo:table-header

Usage commun :

L'objet de mise en forme fo:table-header est utilisé pour tenir le contenu de l'en-tête de la table.

Aires :

L'objet de mise en forme fo:table-header ne génère aucune aire. L'objet de mise en forme fo:table-header retourne la séquence d'aires créée par la concaténation des séquences d'aires retournées par chacun de ses enfants.

Contraintes :

L'ordre de concaténation des séquences d'aires retournées par les enfants de l'objet fo:table-header est le même que l'ordre de ceux-ci dans l'objet fo:table-header.

Contenus :

(table-row+|table-cell+)

L'objet fo:table-header a, comme enfants, un ou plusieurs objets fo:table-row ou, autrement, un ou plusieurs objets fo:table-cell. Dans le dernier cas, les cellules sont regroupées en rangées en utilisant les propriétés 'starts-row' et 'ends-row'.

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.7.7 fo:table-footer

Usage commun :

L'objet de mise en forme fo:table-footer est utilisé pour tenir le contenu du pied de la table.

Aires :

L'objet de mise en forme fo:table-footer ne génère aucune aire. L'objet de mise en forme fo:table-footer retourne la séquence d'aires crée par concaténation des séquences des aires retournées par chacun de ses enfants.

Contraintes :

L'ordre de concaténation des séquences d'aires, retournées par les enfants de l'objet fo:table-footer, est le même que l'ordre de ceux-ci dans l'objet fo:table-footer.

Contenus :

(table-row+|table-cell+)

L'objet fo:table-footer a, comme enfants, un ou plusieurs objets fo:table-row ou, autrement, un ou plusieurs objets fo:table-cell. Dans ce dernier cas, les cellules sont regroupées en rangées en utilisant les propriétés 'starts-row' et 'ends-row'.

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.7.8 fo:table-body

Usage commun :

L'objet de mise en forme fo:table-body est utilisé pour tenir le contenu du corps de la table.

Aires :

L'objet de mise en forme fo:table-body ne génère aucune aire. L'objet de mise en forme fo:table-body retourne la séquence d'aires créée par concaténation des séquences d'aires retournées par chacun de ses enfants.

Contraintes :

L'ordre de concaténation des séquences d'aires, retournées par les enfants de l'objet fo:table-body, est le même que l'ordre de ceux-ci dans l'objet fo:table-body.

Contenus :

(table-row+|table-cell+)

L'objet fo:table-body a, comme enfants, un ou plusieurs objets fo:table-row ou, autrement, un ou plusieurs objets fo:table-cell. Dans ce dernier cas, les cellules sont regroupées en rangées en utilisant les propriétés 'starts-row' et 'ends-row'.

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.7.9 fo:table-row

Usage commun :

L'objet de mise en forme fo:table-row est utilisé pour le regroupement de cellules de table en rangées ; toutes les cellules d'une rangée de table commencent dans la même rangée géométrique du quadrillage de la table.

Aires :

L'objet de mise en forme fo:table-row ne génère aucune aire. L'objet de mise en forme fo:table-row retourne la séquence d'aires créée par concaténation des séquences d'aires retournées par chacun de ses enfants. Cet objet contient la spécification de certaines caractéristiques de présentation, telle que l'arrière-plan qui agit sur les aires générées par l'objet fo:table (voir le chapitre [6.7.3 fo:table]).

Contraintes :

L'ordre de concaténation des séquences d'aires retournées par les enfants de l'objet fo:table-row est le même que l'ordre de ceux-ci dans l'objet fo:table-row.

La méthode de détermination de la hauteur de la rangée dans le quadrillage est régie par le trait row-height.

Contenus :

(table-cell+)

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.7.10 fo:table-cell

Usage commun :

L'objet de mise en forme fo:table-cell est utilisé pour regrouper le contenu qui doit être placé dans une cellule de table.

On peut utiliser les propriétés 'starts-row' et 'ends-row' quand les données en entrée n'ont pas d'éléments pour contenir les cellules dans chaque rangée, mais plutôt, par exemple, chaque rangée commence aux éléments d'un type donné.

Aires :

L'objet de mise en forme fo:table-cell génère une ou plusieurs aires de référence normales. L'objet fo:table-cell retourne ces aires de référence et, le cas échéant, les aires de niveau page hors-ligne retournées par ses enfants.

Dérivation du trait :

Les aires générées par l'objet fo:table-cell ont une valeur "true" pour leur trait is-reference-area.

La méthode de dérivation de la bordure d'une cellule est spécifiée par le trait border-collapse.

Si la valeur du trait border-collapse est "separate", la bordure comprend deux composantes. La première composante, dont le bord externe coïncide avec la délimitation du quadrillage de table, a une épaisseur égale à la demi-valeur du trait border-separation. Le remplissage de celle-ci dépend du trait background de l'objet fo:table. À l'intérieur de cette bordure se place une bordure, basée sur la valeur spécifiée pour la cellule, ou celle héritée, ceci pour chaque côté de la cellule.

Si la valeur du trait border-collapse est "collapse-with-precedence", la bordure de chacun des côtés de la cellule se détermine, pour chaque segment de bordure, en sélectionnant, parmi toutes les spécifications de bordure du segment en question, celle qui a la préséance la plus élevée. C'est une erreur quand deux bordures ont la même préséance, celles-ci n'étant pas identiques. Une mise en œuvre peut récupérer en choisissant l'une de ces bordures. Chaque segment de bordure se place au centre de la ligne de délimitation du quadrillage de table. Pour les appareils qui ne gèrent pas un rendu inférieur au pixel, quand une épaisseur de bordure effective fait un nombre impair de pixels, c'est la mise en œuvre qui définit de quel côté de la ligne de délimitation du quadrillage le pixel impair sera placé.

Si la valeur du trait border-collapse est "collapse", la bordure de chacun des côtés de la cellule se détermine, pour chaque segment de bordure, en sélectionnant parmi toutes les spécifications de bordure du segment en question, celle qui donne le style de bordure le plus « plaisant », voir plus loin pour le détail. Chaque segment de bordure se place au centre de la ligne de délimitation du quadrillage de table. Pour les appareils qui ne gèrent pas un rendu inférieur au pixel, quand une épaisseur de bordure effective fait un nombre impair de pixels, c'est la mise en œuvre qui définit de quel côté de la ligne de délimitation du quadrillage le pixel impair sera placé. Quand un conflit survient entre les styles des segments de bordure qui fusionnent, on détermine lequel des styles « l'emporte » avec les règles suivantes :

  1. Les bordures dont la valeur du trait border-style est "hidden" ont priorité sur toutes les autres bordures en conflit. Cette valeur supprime toutes les bordures à cet endroit ;

  2. Les bordures dont le style a une valeur "none" ont la plus faible priorité. La bordure sera omise seulement si la valeur des propriétés de bordure de tous les éléments qui se rencontrent en ce bord est "none" (noter que c'est la valeur par défaut pour le style de bordure) ;

  3. Si aucun des styles n'a une valeur "hidden" et si au moins l'un d'entre eux n'a pas la valeur "none", alors les bordures les moins épaisses sont écartées au profit de celles les plus épaisses ;

  4. Si les styles de bordure restants ont la même épaisseur de bordure, alors l'ordre de préférence décroissante des valeurs de style s'établit comme suit : "double", "solid", "dashed", "dotted", "ridge", "outset", "groove" et, le moindre, "inset" ;

  5. Si les styles de bordure ne diffère que par la couleur, alors le style attribué à une cellule l'emporte sur celui d'une rangée, qui l'emporte à son tour sur celui d'un groupe de rangées, qui sur une colonne, qui sur un groupe de colonnes et qui, finalement, sur une table.

Contraintes :

Une cellule de table occupe une ou plusieurs unités de quadrillage dans la direction de progression de rangée et la direction de progression de colonne. Le rectangle de contenu de la cellule correspond à la taille de la partie du quadrillage que la cellule occupe, en soustrayant, pour chacun des quatre côtés :

La méthode de détermination de la dimension de progression de bloc de la cellule dans le quadrillage est régie par le trait row-height.

Aucune aire ne peut avoir plus d'une aire enfant normale retournée par le même objet de mise en forme fo:table-cell.

Les enfants de chacune des aires normales retournées par un objet de mise en forme fo:table-cell doivent être des aires de bloc normales retournées par les enfants de l'objet fo:table-celle, doivent être correctement empilés et correctement ordonnés.

Les aires de niveau référence hors-ligne éventuelles retournées par les enfants de l'objet fo:table-cell sont gérées comme décrit au chapitre [6.10.2 fo:float].

Contenus :

(%block;)+

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.8 Les objets de mise en forme des listes

6.8.1 Introduction

On utilise quatre objets de mise en forme pour la construction des listes : fo:list-block, fo:list-item, fo:list-item-label et fo:list-item-body.

Représentation en arborescence des objets de mise en forme pour les listes   [D]

Un arbre de représentation des objets de mise en formes des listes.

L'objet fo:list-block tient le rôle de conteneur pour la liste entière et spécifie les valeurs utilisées pour la géométrie de celle-ci dans la direction de progression en-ligne (voir les détails plus loin).

L'objet fo:list-block a, comme enfants, un ou plusieurs objets fo:list-item, chacun d'eux contenant une paire d'objets fo:list-item-label et fo:list-item-body.

L'objet fo:list-item tient le rôle de conteneur pour chaque item d'une liste.

L'objet fo:list-item-label tient le rôle de conteneur pour le contenu du label de l'item de liste, ce contenu représenté par des objets de mise en forme de type bloc ; typiquement, il s'agit d'un objet fo:block qui contient un nombre, un caractère dingbat ou un mot.

L'objet fo:list-item-body tient le rôle de conteneur pour le contenu du corps de l'item de liste, ce contenu représenté par des objets de mise en forme de type bloc ; typiquement, il s'agit d'un ou plusieurs objets fo:block.

La position du label par rapport au corps, dans la direction de progression de bloc, s'effectue en fonction de la propriété 'vertical-align' de l'objet fo:list-item.

Aires générées par une liste   [D]

La spécification de la géométrie de la liste, dans la direction de progression en-ligne, est obtenue par :

L'indentation de début du label d'item de liste et l'indentation de fin du corps de l'item de liste, si voulu, sont typiquement spécifiées comme des longueurs.

6.8.1.1 Exemples
6.8.1.1.1 La liste énumérée

L'ensemble des items de liste est contenu dans un élément "ol". Les items sont contenus dans des éléments "item", les items contiennent du texte (à la différence des paragraphes).

L'exemple de style consiste en une énumération alphabétique des items, avec un point derrière la lettre.

L'échantillon en entrée :

<ol>
<item>Item de liste 1.</item>
<item>Item de liste 2.</item>
<item>Item de liste 3.</item>
</ol>

La feuille de style XSL :

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="ol">
  <fo:list-block provisional-distance-between-starts="15mm"
   provisional-label-separation="5mm">
    <xsl:apply-templates/>
  </fo:list-block>
</xsl:template>

<xsl:template match="ol/item">
  <fo:list-item>
    <fo:list-item-label start-indent="5mm" end-indent="label-end()">
      <fo:block>
        <xsl:number format="a."/>
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
</xsl:template>

</xsl:stylesheet>

L'instance résultat, les éléments et attributs sont dans l'espace de nommage fo: :

<fo:list-block provisional-distance-between-starts="15mm"
  provisional-label-separation="5mm">

  <fo:list-item>
    <fo:list-item-label start-indent="5mm" end-indent="label-end()">
      <fo:block>a.
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>Item de liste 1.
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>

  <fo:list-item>
    <fo:list-item-label start-indent="5mm" end-indent="label-end()">
      <fo:block>b.
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>Item de liste 2.
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>

  <fo:list-item>
    <fo:list-item-label start-indent="5mm" end-indent="label-end()">
      <fo:block>c.
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>Item de liste 3.
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>

</fo:list-block>
6.8.1.1.2 Des listes dans le style de l'élément HTML "dl"

Dans cet exemple, la feuille de style traite une liste de définitions dans le style de l'élément HTML "dl", cette liste contient des paires d'éléments "dt" et "dd" non-enveloppées, ces paires sont transformées en objets fo:list-block.

Les paires "dt"/"dd" équilibrées sont converties en objets fo:list-item. Quant aux paire "dt"/"dd" non-équilibrées, la feuille de style fait les suppositions suivantes :

En d'autres termes, pour une structure comme celle-ci :

<doc>
<dl>
  <dt>terme</dt>
  <dd>définition</dd>
  <dt>terme</dt>
  <dt>terme</dt>
  <dd>définition</dd>
  <dt>terme</dt>
  <dd>définition</dd>
  <dd>définition</dd>
</dl>
</doc>

Si la variable $allow-naked-dd est true, l'instance résultat est, les éléments et attributs étant dans l'espace de nommage fo: :

<fo:list-block provisional-distance-between-starts="35mm"
  provisional-label-separation="5mm">
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>terme
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>définition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>terme
      </fo:block>
      <fo:block>terme
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>définition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>terme
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>définition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>définition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
</fo:list-block>

Si la variable $allow-naked-dd est false, l'instance résultat est, les éléments et attributs étant dans l'espace de nommage fo: :

<fo:list-block provisional-distance-between-starts="35mm"
  provisional-label-separation="5mm">
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>terme
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>définition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>terme
      </fo:block>
      <fo:block>terme
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>définition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>terme
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>définition
      </fo:block>
      <fo:block>définition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
</fo:list-block>

La feuille de style XSL :

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:include href="dtdd.xsl"/>

<xsl:template match="doc">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="dl">
  <xsl:call-template name="process.dl"/>
</xsl:template>

<xsl:template match="dt|dd">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

La feuille de style "dtdd.xsl" incluse

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:variable name="allow-naked-dd" select="true()"/>

<xsl:template name="process.dl">
  <fo:list-block provisional-distance-between-starts="35mm"
   provisional-label-separation="5mm">
    <xsl:choose>
      <xsl:when test="$allow-naked-dd">
        <xsl:call-template name="process.dl.content.with.naked.dd"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:call-template name="process.dl.content"/>
      </xsl:otherwise>
    </xsl:choose>
  </fo:list-block>
</xsl:template>

<xsl:template name="process.dl.content.with.naked.dd">
  <xsl:param name="dts" select="./force-list-to-be-empty"/>
  <xsl:param name="nodes" select="*"/>

  <xsl:choose>
    <xsl:when test="count($nodes)=0">
      <!-- Hors des nœuds, on fait sortir tout « dt » en cours -->
      <xsl:if test="count($dts)>0">
        <fo:list-item>
          <fo:list-item-label end-indent="label-end()">
            <xsl:apply-templates select="$dts"/>
          </fo:list-item-label>
          <fo:list-item-body start-indent="body-start()"/>
        </fo:list-item>
      </xsl:if>
    </xsl:when>

    <xsl:when test="name($nodes[1])='dd'">
      <!-- On a trouvé un « dd », on fait sortir les « dts » et le « dd » -->
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <xsl:apply-templates select="$dts"/>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <xsl:apply-templates select="$nodes[1]"/>
        </fo:list-item-body>
      </fo:list-item>
      <xsl:call-template name="process.dl.content.with.naked.dd">
        <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:when test="name($nodes[1])='dt'">
      <!-- On a trouvé un « dt », on l'ajoute à la liste des « dts » et on boucle -->
      <xsl:call-template name="process.dl.content.with.naked.dd">
        <xsl:with-param name="dts" select="$dts|$nodes[1]"/>
        <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:otherwise>
      <!-- Ceci ne devrait pas arriver -->
      <xsl:message>
        <xsl:text>La liste DT/DD contenait un bug (</xsl:text>
        <xsl:value-of select="name($nodes[1])"/>
        <xsl:text>).</xsl:text>
      </xsl:message>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template name="process.dl.content">
  <xsl:param name="dts" select="./force-list-to-be-empty"/>
  <xsl:param name="dds" select="./force-list-to-be-empty"/>
  <xsl:param name="output-on"></xsl:param>
  <xsl:param name="nodes" select="*"/>

  <!-- L'algorithme consiste ici à construire une liste des « dts » et « dds », -->
  <!-- les faisant sortir seulement lors de la transition de retour d'un « dd » vers un « dt » -->

  <xsl:choose>
    <xsl:when test="count($nodes)=0">
      <!-- Hors des nœuds, on fait sortir tout élément en cours -->
      <xsl:if test="count($dts)>0 or count($dds)>0">
        <fo:list-item>
          <fo:list-item-label end-indent="label-end()">
            <xsl:apply-templates select="$dts"/>
          </fo:list-item-label>
          <fo:list-item-body start-indent="body-start()">
            <xsl:apply-templates select="$dds"/>
          </fo:list-item-body>
        </fo:list-item>
      </xsl:if>
    </xsl:when>

    <xsl:when test="name($nodes[1])=$output-on">
      <!-- On effectue la transition de retour d'un « dd » vers un « dt » -->
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <xsl:apply-templates select="$dts"/>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <xsl:apply-templates select="$dds"/>
        </fo:list-item-body>
      </fo:list-item>

      <!-- On retraite ce nœud (et le reste de la liste des nœuds) -->
      <!-- en remettant l'état de output-on à nil -->
      <xsl:call-template name="process.dl.content">
        <xsl:with-param name="nodes" select="$nodes"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:when test="name($nodes[1])='dt'">
      <!-- On a trouvé un « dt », on l'ajoute à la liste et on boucle -->
      <xsl:call-template name="process.dl.content">
        <xsl:with-param name="dts" select="$dts|$nodes[1]"/>
        <xsl:with-param name="dds" select="$dds"/>
        <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:when test="name($nodes[1])='dd'">
      <!-- On a trouvé un « dd », on l'ajoute à la liste et on boucle, en notant que -->
      <!-- le prochaine fois que l'on reviendra au « dt », on devra faire sortir -->
      <!-- les "dt/dd"s courants. -->
      <xsl:call-template name="process.dl.content">
        <xsl:with-param name="dts" select="$dts"/>
        <xsl:with-param name="dds" select="$dds|$nodes[1]"/>
        <xsl:with-param name="output-on">dt</xsl:with-param>
        <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:otherwise>
      <!-- Ceci ne devrait pas arriver -->
      <xsl:message>
        <xsl:text>La liste DT/DD contenait un bug (</xsl:text>
        <xsl:value-of select="name($nodes[1])"/>
        <xsl:text>).</xsl:text>
      </xsl:message>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>

On peut personnaliser la feuille de style "dtdd.xsl" de plusieurs manières :

Dans la feuille de style, celle qui utilise la feuille de style "dtdd.xsl", changer "dl" pour le nom de l'élément qui sert d'enveloppe pour la liste.

6.8.2 fo:list-block

Usage commun :

L'objet de flux fo:list-block est utilisé pour formater une liste.

Aires :

L'objet de mise en forme fo:list-block génère une ou plusieurs aires de bloc normales. L'objet fo:list-block retourne ces aires et, le cas échéant, les aires de niveau page hors-ligne et de niveau référence hors-ligne retournées par ses enfants.

Contraintes :

Aucune aire ne peut avoir plus d'une aire enfant normale retournée par le même objet de mise en forme fo:list-block.

Les enfants de chaque aire normale retournée par un objet de mise en forme fo:list-block doivent être des aires de bloc normales retournées par les enfants de l'objet fo:list-block, doivent être correctement empilés et correctement ordonnés.

Contenus :

(list-item+)

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.8.3 fo:list-item

Usage commun :

L'objet de mise en forme fo:list-item contient le label et le corps d'un item de liste.

Aires :

L'objet de mise en forme fo:list-item génèe une ou plusieurs aires de bloc normales. L'objet fo:list-item retourne ces aires et, le cas échéant, les aires de niveau page hors-ligne et de niveau référence hors-ligne retournées par ses enfants.

Contraintes :

Aucune aire ne peut avoir plus d'une aire enfant normale retournée par le même objet de mise en forme fo:list-item.

Les enfants de chaque aire normale retournée par un objet de mise en forme fo:list-item doivent être des aires de bloc normales retournées par les objets de flux fo:list-item-label et the fo:list-item-body et doivent être correctement ordonnés. Celles retournées par les objets fo:list-item-label et fo:list-item-body doivent être correctement empilées.

Les enfants de chaque aire normale retournée par un objet de mise en forme fo:list-item, retournés par les objets fo:list-item-label et fo:list-item-body sont positionnés l'un par rapport à l'autre, dans la direction de progression de bloc, en fonction du trait relative-align.

Dans la direction de progression en-ligne, ces aires sont positionnées de la manière habituelle aux aires correctement empilées. C'est une erreur quand leurs rectangles de contenu se recouvrent.

La dimension de progression de bloc du rectangle de contenu d'une aire générée par l'objet fo:list-item est juste suffisante pour que les rectangles de contenu de toutes ses aires enfants soient contenus dans ce rectangle. Notamment, l'espace d'avant et l'espace d'après des aires de l'enfant n'ont aucun effet sur l'espacement des items de liste. Pour satisfaire aux contraintes d'empilement de bloc, les aires générées par l'objet fo:list-item sont traitées comme si celles-ci avaient une clôture les précédant et une clôture les suivant.

Remarque :

Ce ne sont pas des aires de référence, ainsi les indentations de tous les objets, que celles-ci contiennent, se mesurent en fonction de l'aire de référence qui tient le contenu de l'objet fo:list-block.

Contenus :

(list-item-label,list-item-body)

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.8.4 fo:list-item-body

Usage commun :

L'objet de mise en forme fo:list-item-body tient le contenu du corps d'un item de liste.

Aires :

L'objet de mise en forme fo:list-item-body ne génère aucune aire. L'objet de mise en forme fo:list-item-body formatting object retourne la séquence d'aires créée par concaténation des séquences d'aires retournées par chacun de ses enfants.

Contraintes :

L'ordre de concaténation des séquences d'aires retournées par les enfants de l'objet fo:list-item-body est le même que l'ordre de ceux-ci dans l'objet fo:list-item-body.

Contenus :

(%block;)+

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.8.5 fo:list-item-label

Usage commun :

L'objet de mise en forme fo:list-item-label tient le contenu du label d'un item de liste, cet objet est typiquement employé pour numéroter, identifier ou décorer le corps de l'item de liste.

Aires :

L'objet de mise en forme fo:list-item-label ne génère aucune aire. L'objet de mise en forme fo:list-item-label retourne la séquence d'aires créées par concaténation des séquences d'aires retournées par ses enfants.

Contraintes :

L'ordre de concaténation des séquences d'aires retournées par les enfants de l'objet fo:list-item-label est le même que l'ordre de ceux-ci dans l'objet fo:list-item-label.

Contenus :

(%block;)+

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.9 Les effets dynamiques : les objets de mise en forme link et multi

6.9.1 Introduction

Les effets dynamiques, au travers desquels les actions de l'utilisateur (y compris l'état de l'agent utilisateur) peuvent influencer le comportement et/ou la représentation de parties d'un document, ces effets peuvent être obtenus au moyen des objets de mise en forme décrits dans ce chapitre :

Le basculement entre des sous-arbres s'obtient en utilisant les trois objets de mise en forme suivants : fo:multi-switch, fo:multi-case et fo:multi-toggle. La structure de l'arbre résultant est montrée ci-dessous.

Représentation en arborescence des objets de mise en forme multi   [D]

Une représentation de l'arbre des objets de mise en forme multi

Le rôle de l'objet fo:multi-switch consiste à envelopper les objets de mise en forme fo:multi-case, chacun d'eux contenant un sous-arbre. On donne un nom pour chaque sous-arbre dans l'objet fo:multi-case. L'activation, par exemple avec un clic, d'un objet de mise en forme fo:multi-toggle provoque l'affichage du sous-arbre nommé, que ce soit celui qui précède, qui suit ou « tous » ; c'est la propriété 'switch-to' qui gère ceci. Quand il s'agit de « tous », une mise en œuvre présenterait typiquement une liste de choix, chacun d'eux étant étiquetés à l'aide de la propriété 'case-title' de l'objet fo:multi-case. Le sous-arbre qui est affiché initialement est géré par la propriété 'starting-state' de l'objet fo:multi-case.

On obtient le basculement entre différentes valeurs de propriété en utilisant les objets de mise en forme fo:multi-properties et fo:multi-property-set et la fonction merge-property-values(). Par exemple, on peut utiliser un objet fo:multi-property-set pour spécifier diverses propriétés pour chacune des valeurs possibles de la propriété 'active-state' et appliquer celles-ci, à l'aide de la fonction merge-property-values(), sur un objet de mise en forme donné.

6.9.1.1 Exemples
6.9.1.1.1 Une table des matières développable/rétractable

L'échantillon en entrée :

<doc>
  <chapitre><titre>Chapitre</titre>
    <p>Texte</p>
    <section><titre>Section</titre>
    <p>Texte</p>
    </section>
    <section><titre>Section</titre>
    <p>Texte</p>
    </section>
  </chapitre>
  <chapitre><titre>Chapitre</titre>
    <p>Texte</p>
    <section><titre>Section</titre>
    <p>Texte</p>
    </section>
    <section><titre>Section</titre>
    <p>Texte</p>
    </section>
  </chapitre>
</doc>

Dans cet exemple, les titres de chapitre et de section sont extraits en une table des matières placée en face du résultat. Les titres de chapitre sont précédés par une icone qui indique un état soit rétracté soit développé. Les titres de section n'apparaissent que dans l'état développé. En plus, il y a des liens, à partir des titres de la table des matières, vers les titres correspondants dans le corps du document.

Ces deux états sont obtenus, pour chaque titre de chapitre, en utilisant un objet fo:multi-switch avec un objet fo:multi-case pour chaque état. L'icone est contenue dans un objet fo:multi-toggle avec une valeur adéquate, pour la propriété 'switch-to' de l'objet fo:multi-case, pour la sélection de l'autre état.

Les liens dans la table des matières sont obtenus en ajoutant un « id » unique au texte du titre, dans le corps du document, et en enveloppant le texte du titre, dans la table des matières, dans un objet fo:basic-link qui pointe sur cet id.

La feuille de style XSL :

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="doc">
  <!-- création de la table des matières -->
  <xsl:apply-templates select="chapitre/titre" mode="toc"/>
  <!-- traitement du document -->
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="chapitre/titre" mode="toc">
  <fo:multi-switch>
    <fo:multi-case case-name="retracte" case-title="retracte"
    starting-state="show">
      <fo:block>
        <fo:multi-toggle switch-to="developpe">
          <fo:external-graphic href="plus-icon.gif"/>
        </fo:multi-toggle>
        <fo:basic-link internal-destination="{generate-id(.)}">
          <xsl:number level="multiple" count="chapitre" format="1. "/>
          <xsl:apply-templates mode="toc"/>
        </fo:basic-link>
      </fo:block>
    </fo:multi-case>
    <fo:multi-case case-name="developpe" case-title="developpe"
    starting-state="hide">
      <fo:block>
        <fo:multi-toggle switch-to="retracte">
          <fo:external-graphic href="minus-icon.gif"/>
        </fo:multi-toggle>
        <fo:basic-link internal-destination="{generate-id(.)}">
          <xsl:number level="multiple" count="chapitre" format="1. "/>
          <xsl:apply-templates mode="toc"/>
        </fo:basic-link>
      </fo:block>
      <xsl:apply-templates select="../section/titre" mode="toc"/>
    </fo:multi-case>
  </fo:multi-switch>
</xsl:template>

<xsl:template match="section/titre" mode="toc">
  <fo:block start-indent="10mm">
    <fo:basic-link internal-destination="{generate-id(.)}">
      <xsl:number level="multiple" count="chapitre|section" format="1.1 "/>
      <xsl:apply-templates/>
    </fo:basic-link>
  </fo:block>
</xsl:template>

<xsl:template match="chapitre/titre">
  <fo:block id="{generate-id(.)}">
    <xsl:number level="multiple" count="chapitre" format="1. "/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="section/titre">
  <fo:block id="{generate-id(.)}">
    <xsl:number level="multiple" count="chapitre|section" format="1.1 "/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

L'instance résultat, les éléments et attributs sont dans l'espace de nommage fo: :

<fo:multi-switch>
  <fo:multi-case case-name="retracte" case-title="retracte" starting-state="show">
    <fo:block>
      <fo:multi-toggle switch-to="developpe">
        <fo:external-graphic href="plus-icon.gif">
        </fo:external-graphic>
      </fo:multi-toggle>
      <fo:basic-link internal-destination="N4">1. Chapitre
      </fo:basic-link>
    </fo:block>
  </fo:multi-case>
  <fo:multi-case case-name="developpe" case-title="developpe" starting-state="hide">
    <fo:block>
      <fo:multi-toggle switch-to="retracte">
        <fo:external-graphic href="minus-icon.gif">
        </fo:external-graphic>
      </fo:multi-toggle>
      <fo:basic-link internal-destination="N4">1. Chapitre
      </fo:basic-link>
    </fo:block>
    <fo:block start-indent="10mm">
      <fo:basic-link internal-destination="N11">1.1 Section
      </fo:basic-link>
    </fo:block>
    <fo:block start-indent="10mm">
      <fo:basic-link internal-destination="N19">1.2 Section
      </fo:basic-link>
    </fo:block>
  </fo:multi-case>
</fo:multi-switch>
<fo:multi-switch>
  <fo:multi-case case-name="retracte" case-title="retracte" starting-state="show">
    <fo:block>
      <fo:multi-toggle switch-to="developpe">
        <fo:external-graphic href="plus-icon.gif">
        </fo:external-graphic>
      </fo:multi-toggle>
      <fo:basic-link internal-destination="N28">2. Chapitre
      </fo:basic-link>
    </fo:block>
  </fo:multi-case>
  <fo:multi-case case-name="developpe" case-title="developpe" starting-state="hide">
    <fo:block>
      <fo:multi-toggle switch-to="retracte">
        <fo:external-graphic href="minus-icon.gif">
        </fo:external-graphic>
      </fo:multi-toggle>
      <fo:basic-link internal-destination="N28">2. Chapitre
      </fo:basic-link>
    </fo:block>
    <fo:block start-indent="10mm">
      <fo:basic-link internal-destination="N35">2.1 Section
      </fo:basic-link>
    </fo:block>
    <fo:block start-indent="10mm">
      <fo:basic-link internal-destination="N43">2.2 Section
      </fo:basic-link>
    </fo:block>
  </fo:multi-case>
</fo:multi-switch>

<fo:block id="N4">1. Chapitre
</fo:block>
<fo:block>Texte
</fo:block>
<fo:block id="N11">1.1 Section
</fo:block>
<fo:block>Texte
</fo:block>
<fo:block id="N19">1.2 Section
</fo:block>
<fo:block>Texte
</fo:block>
<fo:block id="N28">2. Chapitre
</fo:block>
<fo:block>Texte
</fo:block>
<fo:block id="N35">2.1 Section
</fo:block>
<fo:block>Texte
</fo:block>
<fo:block id="N43">2.2 Section
</fo:block>
<fo:block>Texte
</fo:block>
6.9.1.1.2 Une mise en style d'un XLink basé sur l'état actif

L'échantillon en entrée :

<p>Suivez ceci <xlink:mylink xmlns:xlink="http://www.w3.org/1999/xlink"
        xlink:href="http://www.w3.org/TR"
        xlink:title="Un exemple"
        xlink:show="new"
        xlink:actuate="onRequest">link</xlink:mylink> pour accéder à toutes
les recommandations techniques du W3C.</p>

Dans cet exemple, un objet fo:basic-link contient une série d'objets fo:multi-property-set, qui spécifient diverses couleurs et décorations de texte en fonction de l'activation, et une enveloppe autour cet objet fo:basic-link permet la réunion des propriétés de l'objet fo:multi-properties avec celles des l'objets fo:multi-property-set adéquats.

La feuille de style XSL :

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
    <fo:block>
        <xsl:apply-templates/>
    </fo:block>
</xsl:template>

<xsl:template match="xlink:mylink" xmlns:xlink="http://www.w3.org/1999/xlink">
    <xsl:variable name="show"><xsl:value-of select="@xlink:show"/>
    </xsl:variable>
     <fo:multi-properties text-decoration="underline">
        <fo:multi-property-set active-state="link" color="blue"/>
        <fo:multi-property-set active-state="visited" color="red"/>
        <fo:multi-property-set active-state="active" color="green"/>
        <fo:multi-property-set active-state="hover" text-decoration="blink"/>
        <fo:multi-property-set active-state="focus" color="yellow"/>
        <fo:wrapper color="merge-property-values()"
                    text-decoration="merge-property-values()">
              <fo:basic-link external-destination="http://www.w3.org/TR"
                              show-destination="{$show}">
                  <xsl:attribute name="role">
                      <xsl:value-of select="@xlink:title"/>
                  </xsl:attribute>
                  <xsl:apply-templates/>
              </fo:basic-link>
        </fo:wrapper>
      </fo:multi-properties>
</xsl:template>

</xsl:stylesheet>

L'instance résultat, les éléments et attributs sont dans l'espace de nommage fo: :

<fo:block">Suivez ceci
  <fo:multi-properties text-decoration="underline">
    <fo:multi-property-set active-state="link" color="blue">
    </fo:multi-property-set>
    <fo:multi-property-set active-state="visited" color="red">
    </fo:multi-property-set>
    <fo:multi-property-set active-state="active" color="green">
    </fo:multi-property-set>
    <fo:multi-property-set active-state="hover" text-decoration="blink">
    </fo:multi-property-set>
    <fo:multi-property-set active-state="focus" color="yellow">
    </fo:multi-property-set>
    <fo:wrapper color="merge-property-values()"
      text-decoration="merge-property-values()">
      <fo:basic-link external-destination="http://www.w3.org/TR"
        show-destination="new" role="Un exemple">link
      </fo:basic-link>
    </fo:wrapper>
  </fo:multi-properties> pour accéder à toutes
les recommandations techniques du W3C.
</fo:block>

6.9.2 fo:basic-link

Usage commun :

L'objet fo:basic-link est utilisé pour représenter la ressource de départ d'un lien mono-directionnel à cible unique simple. L'objet permet un cheminement vers la ressource de destination, typiquement en cliquant sur une des aires conteneurs.

Aires :

L'objet de mise en forme fo:basic-link génère une ou plusieurs aires en-ligne normales. L'objet fo:basic-link retourne ces aires et, le cas échéant, les aires de niveau page hors-ligne et de niveau référence hors-ligne retournées par ses enfants.
« errata-E14 »

Remarque :

On peut circonscrire un objet fo:basic-link dans un objet fo:block pour créer une aire d'affichage.

Contraintes :

Aucune aire ne peut avoir plus d'une aire enfant normale retournée par le même objet de mise en forme fo:basic-link.

Les enfants de chacune des aires normales retournées par un objet fo:basic-link doivent satisfaire aux contraintes spécifiées au chapitre [4.7.3 La construction en-ligne].

Contenus :

(#PCDATA|%inline;|%block;)*

De plus, cet objet de mise en forme peut avoir, comme enfants initiaux, une séquence de zéro ou plus objets fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.9.3 fo:multi-switch

Usage commun :

L'objet fo:multi-switch enveloppe la spécification des sous-arbres alternatifs d'objets de mise en forme (chaque sous-arbre se trouvant dans un objet fo:multi-case) et contrôle le basculement (activé via un objet fo:multi-toggle) d'une alternative à l'autre.

Les objets fo:multi-case sont les enfants directs d'un objet fo:multi-switch. Un seul objet fo:multi-case n'est visible à la fois. L'utilisateur peut basculer entre les objets fo:multi-case disponibles.

Chaque objet fo:multi-case peut contenir un ou plusieurs objets fo:multi-toggle, ceux-ci contrôlent la bascule de l'objet fo:multi-case de l'objet fo:multi-switch.

Remarque :

On peut utiliser un objet fo:multi-switch pour de nombreuses tâches interactives, telles que plusieurs aspects d'une table des matières, l'incorporation des cibles d'un lien ou des vues générales (même sur plusieurs niveaux hiérarchiques) précédent/suivant. Cette dernière tâche est actuellement gérée en HTML par des éléments link avec des valeurs previous/next vers d'autres documents, ce qui oblige au remplacement du document en entier quand l'utilisateur décide de continuer.

Aires :

L'objet de mise en forme fo:multi-switch ne génère aucune aire. L'objet de mise en forme fo:multi-switch retourne la séquence d'aires retournées par l'objet fo:multi-case courant visible. Si aucun objet fo:multi-case n'est visible, aucune aire n'est retournée.

Dérivation du trait :

Le trait currently-visible-multi-case a pour valeur initiale une référence vers le premier objet fo:multi-case enfant dont le trait starting-state a la valeur "show". S'il n'y a pas un tel enfant, ce trait revêt une valeur indiquant qu'aucun objet fo:multi-case n'est courammant visible. Quand un objet fo:multi-toggle est activé, la valeur du trait currently-visible-multi-case, de son objet fo:multi-switch ancêtre le plus proche, change pour refléter l'objet fo:multi-case sélectionné par la valeur de la propriété 'switch-to' de cet objet fo:multi-toggle. Une fois que le trait currently-visible-multi-case obtient une valeur indiquant qu'aucun objet fo:multi-case n'est courammant visible, il devient impossible d'agir sur un objet fo:multi-toggle dans cet objet fo:multi-switch.

Contraintes :

L'ordre de la séquence des aires retournées par l'objet fo:multi-switch est le même que celui des aires retournées par l'objet fo:multi-case courant visible.

Contenus :

(multi-case+)

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.9.4 fo:multi-case

Usage commun :

L'objet fo:multi-case s'utilise pour contenir (dans un objet fo:multi-switch) chacun des sous-arbres alternatifs d'objets de mise en forme, l'objet fo:multi-switch parent choisira parmi ces sous-arbres lequel montrer tout en cachant les autres.

Aires :

L'objet de mise en forme fo:multi-case ne génère aucune aire. L'objet fo:multi-case retourne la séquence d'aires créée par concaténation des séquences d'aires retournées par chacun de ses enfants.

Contraintes :

L'ordre de concaténation des séquences d'aires retournées par les enfants de l'objet fo:multi-case est le même que l'ordre de ceux-ci dans l'objet fo:multi-case.

Contenus :

(#PCDATA|%inline;|%block;)*

Un objet fo:multi-case ne peut avoir pour enfants que ceux qui peuvent être les enfants du parent de l'objet fo:multi-switch, parent de l'objet fo:multi-case en question, un objet fo:multi-case ne pouvant pas, cependant, avoir d'enfants fo:marker. L'objet fo:multi-case contient notamment des objets fo:multi-toggle (à toute profondeur), ceux-ci contrôlant le basculement de l'objet fo:multi-case.

Cette restriction s'applique récursivement.

Remarque :

Par exemple, un objet fo:multi-case, dont le parent fo:multi-switch est lui-même l'enfant d'un autre objet fo:multi-case, peut seulement avoir pour enfants que ceux qui seraient permis à la place de l'objet fo:multi-switch parent de l'objet fo:multi-case externe.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.9.5 fo:multi-toggle

Usage commun :

L'objet fo:multi-toggle est typiquement utilisé pour l'établissement d'une aire qui, quand celle-ci est actionnée (par exemple, « cliquée »), provoque le basculement d'un objet fo:multi-case à l'autre. La valeur de la propriété 'switch-to' de l'objet fo:multi-toggle correspond typiquement à celle de la propriété 'case-name' de l'objet fo:multi-case vers lequel basculer.

Aires :

L'objet de mise en forme fo:multi-toggle ne génère aucune aire. L'objet fo:multi-toggle retourne la séquence d'aires créée par concaténation des séquences d'aires retournées par chacun de ses enfants. La valeur du trait switch-to de chacune des aires retournées par l'objet fo:multi-toggle est la même que pour cet objet fo:multi-toggle.

Contraintes :

L'ordre de concaténation des séquences d'aires retournées par les enfants de l'objet fo:multi-toggle est le même que l'ordre de ceux-ci dans l'objet fo:multi-toggle.

L'action sur une aire retournée par un objet fo:multi-toggle provoque le changement de la valeur du trait currently-visible-multi-case de l'objet fo:multi-switch ancêtre le plus proche. Voir le chapitre [7.22.11 'switch-to'] pour savoir comment déterminer la sélection d'un objet fo:multi-case avec le trait switch-to.

Contenus :

(#PCDATA|%inline;|%block;)*

Un objet fo:multi-toggle ne peut être qu'un descendant d'un objet fo:multi-case.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.9.6 fo:multi-properties

Usage commun :

L'objet fo:multi-properties est utilisé pour basculer entre deux ou plus jeux de propriétés associés à une partie de contenu donnée.

Remarque :

On peut utiliser un objet de mise en forme fo:multi-properties pour donner des aspects différents à une partie de contenu donnée. Par exemple, quand un lien change d'un état non-visité à visité, ceci pourrait être l'occasion d'un changement des propriétés utilisées pour formater le contenu. Les auteurs devraient faire attention au choix des propriétés à modifier, car certains changements peuvent provoquer un nouvel écoulement du texte, ce qui n'est pas souhaitable dans de nombreuses circonstances. Les modifications de propriétés comme 'color' ou 'text-decoration' ne devraient pas nécessiter de nouvel écoulement du texte.

Les enfants directs d'un objet de mise en forme fo:multi-properties forment un jeu ordonné d'objets de mise en forme fo:multi-property-set, suivi d'un seul objet de mise en forme fo:wrapper. Pour ce dernier, les propriétés dont la valeur spécifiée est égale à "merge-property-values()" prendront comme valeur un amalgame de valeurs, entre celle de l'objet fo:multi-properties et celles spécifiées dans les objets de mise en forme fo:multi-property-set concernés.

Aires :

L'objet de mise en forme fo:multi-properties ne génère aucune aire. L'objet fo:multi-properties retourne la séquence d'aires créée par concaténation des séquences d'aires retournées par chacun de ses enfants.

Contraintes :

L'ordre de concaténation des séquences d'aires retournées par les enfants de l'objet fo:multi-properties est le même ordre que ceux-ci dans l'objet fo:multi-properties.

Contenus :

(multi-property-set+,wrapper)

Les propriétés, devant prendre une valeur amalgamée, seront spécifiées avec une valeur issue de la fonction merge-property-values(). Cette fonction, quand elle s'applique à un objet fo:wrapper enfant direct d'un objet fo:multi-properties, amalgame les définitions de propriétés concernées des pairs de l'objet fo:multi-property-set.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.9.7 fo:multi-property-set

Usage commun :

L'objet de mise en forme auxilliaire fo:multi-property-set est utilisé pour la spécification d'un jeu de propriétés de mise en forme alternatif, ce jeu pouvant fournir une autre présentation des objets de flux enfants de l'objet fo:wrapper, lui-même enfant du parent de cet objet fo:multi-property-set.

Aires :

L'objet de mise en forme fo:multi-property-set ne génère ni ne retourne d'aire. Celui-ci contient simplement un jeu de traits auquel des expressions peuvent avoir accès.

Contraintes :

Aucune.

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.10 Les objets de mise en forme hors-ligne

6.10.1 Introduction

6.10.1.1 Les flottants

L'objet de mise en forme fo:float s'utilise de deux manières distinctes. Premièrement, lors de la mise en place normale du contenu, un contenu lié est mis en forme dans une aire séparée au commencement de la page où celui-ci est disponible pour lecture sans gêne immédiate pour le lecteur. Les aires générées par ce genre de d'objet fo:float sont appelées des avant-flottants. Un objet fo:float génère des avant-flottants, si on spécifie une valeur "before" pour sa propriété 'float'. Les contraintes de placement des avant-flottants sur une page sont décrites dans la section [6.10.1.3 Les sous-régions conditionnelles] de cette introduction et dans la description de l'objet de mise en forme fo:float.

Deuxièmement, on utilise l'objet de mise en forme fo:float quand on a l'intention de faire flotter une aire vers un côté, avec le contenu normal qui s'écoule le long de ses flancs. Les aires générées par ce genre d'objet fo:float sont appelées des flottants latéraux. Un flottant latéral est toujours l'enfant de l'aire de référence de l'ancêtre le plus proche. La propriété 'float' contrôle le côté de cette aire de référence vers lequel le flottant latéral va flotter.

L'écoulement du contenu normal sur les flancs du flottant latéral s'effectue en jouant sur l'ajustement de début d'intrusion et l'ajustement de fin d'intrusion des aires normales enfants de l'aire de référence parent du flottant latéral.

La propriété 'clear' s'applique à tout objet de mise en forme de type bloc. Si, pour un objet de mise en forme donné, la valeur de cette propriété est autre que "none", alors les aires générées par cet objet seront positionnées de manière à ce que leur rectangles de bordure ne recouvrent pas les rectangles d'allocation des flottants latéraux concernés, comme déterminé par la valeur de la propriété 'clear'.

6.10.1.2 Les notes de pied

L'objet de mise en forme fo:footnote s'utilise pour générer à la fois une note de pied et son appel de note. Cet objet a deux enfants qui sont obligatoirement présents ensemble. Le premier enfant est un objet de mise en forme fo:inline, formaté pour produire l'appel de note. Le second est un objet de mise en forme fo:footnote-body qui génère le contenu (corps) de la note de pied.

Les aires courantes générées par les descendants de l'objet fo:footnote-body sont déterminées par leurs objets de mises en formes, ceux-ci composent le sous-arbre du descendant. Par exemple, la note de pied pourrait être formée d'un label et d'un corps indenté à l'aide d'un objet de mise en forme fo:list-block dans l'objet fo:footnote-body.

6.10.1.3 Les sous-régions conditionnelles

La région du corps a deux sous-régions conditionnelles qui spécifient implicitement des aires de référence correspondantes appelées aire de référence avant-flottant et aire de référence de note de pied. Ces aires de référence sont générées conditionnellement comme enfants de l'aire de référence de région. L'aire de référence avant-flottant est générée seulement si la page contient une ou plusieurs aires de la classe d'aire xsl-before-float. L'aire de référence de note de pied est générée seulement si la page contient une ou plusieurs aires de la classe d'aire xsl-footnote.

Les aires générées conditionnellement emprunte leur espace dans la dimension de progression de bloc (il s'agit de la « hauteur » quand la valeur du trait writing-mode est "lr-tb") dans l'aire de référence de région, au dépend de l'aire de référence principale. Qu'une aire générée conditionnellement soit générée, ou non, dépend, en plus, du fait que l'espace disponible dans l'aire de référence principale soit suffisant.

Il peut y avoir des limites pour l'espace que peuvent emprunter les aires générées à l'aire de référence de région. Ces limites sont laissées à l'appréciation de l'agent utilisateur.

La dimension de progression de bloc de l'aire de référence principale correspond à la dimension de progression de bloc du rectangle d'allocation de celle-ci, moins la somme des tailles dans la direction de progression de bloc des rectangles d'allocation des aires de référence générées conditionnellement effectivement générées. L'aire de référence principale se positionne immédiatement en suivant le bord d'après du rectangle d'allocation de l'aire de référence avant-flottant. Ceci fait coïncider le bord d'après de l'aire de référence principale avec le bord d'avant du rectangle d'allocation de l'aire de référence de note de pied. En plus des contraintes habituelles déterminées par l'aire de référence de région, la dimension de progression en-ligne (il s'agit de la "largeur quand la valeur du trait writing-mode est "lr-tb") d'une aire de référence générée conditionnellement est contrainte pour correspondre à la dimension de progression en-ligne de l'aire de référence principale.

Chaque aire de référence générée conditionnellement peut en plus contenir une séquence d'aires qui sont utilisées pour séparer celle-ci de l'aire de référence principale. Cette séquence correspond à celle qui est retournée par la mise en forme d'un objet fo:static-content, qui est spécifié dans la séquence de pages en cours pour la mise en forme de la page.

S'il y a un objet fo:static-content, dans la séquence de pages, dont la valeur de la propriété 'flow-name' est "xsl-before-float-separator", alors les aires, retournées lors de la mise en forme de cet objet, sont insérées dans un ordre correct comme derniers enfants d'une aire de référence avant-flottant générée en utilisant le même maître de page, pourvu que l'aire de référence principale sur la page ne soit pas vide.

S'il y a un objet fo:static-content dont la valeur de la propriété 'flow-name' est "xsl-footnote-separator", alors les aires, retournées lors de la mise en forme de cet objet, sont insérées dans un ordre correct comme enfants initiaux d'une aire de référence de note de pied générée en utilisant le même maître de page.

Un agent utilisateur interactif, au lieu de réaliser des sous-régions conditionnelles, peut choisir de créer des « liens vifs », à partir des appels de note vers les notes de pied correspondantes, ou créer des « liens vifs », à partir d'une citation implicite vers les avant-flottants.

La génération des aires de la classe d'aire xsl-before-float, ou xsl-footnote, est spécifié dans les descriptions des objets de mise en forme qui retournent initialement des aires de ces classes d'aire.

6.10.1.4 Exemples
6.10.1.4.1 Une illustration flottante

L'échantillon en entrée :

<doc>
  <p> Les pièces C'ieng étaient fabriquées dans les villes du Nord, comme C'ieng Mai.
Celles-ci avait typiquement un poids tamlung.</p>
  <illustration>
    <photo image="TH0317A.jpg"/>
    <legende>C'ieng Tamlung de C'ieng Mai</legende>
  </illustration>
</doc>

Dans cet exemple, l'illustration est en position flottante sur le côté d'avant (en haut pour un mode d'écriture "gauche-à-droite - haut-en-bas").

La feuille de style XSL :

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="illustration">
  <fo:float float="before">
    <xsl:apply-templates/>
  </fo:float>
</xsl:template>

<xsl:template match="photo">
  <fo:block text-align="center">
    <fo:external-graphic src="{@image}"/>
  </fo:block>
</xsl:template>

<xsl:template match="legende">
  <fo:block space-before="3pt" text-align="center"
    start-indent="10mm" end-indent="10mm">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

L'instance résultat, les éléments et attributs sont dans l'espace de nommage fo: :

<fo:block>Les pièces C'ieng étaient fabriquées dans les villes du Nord,
comme C'ieng Mai. Celles-ci avaient typiquement un poids tamlung.
</fo:block>

<fo:float float="before">

  <fo:block text-align="center">
    <fo:external-graphic src="TH0317A.jpg">
    </fo:external-graphic>
  </fo:block>

  <fo:block space-before="3pt" text-align="center" start-indent="10mm"
    end-indent="10mm">C'ieng Tamlung de C'ieng Mai
  </fo:block>

</fo:float>
6.10.1.4.2 Une note de pied

L'échantillon en entrée :

<doc>
  <p>Certains Pod Duang ont été refrappés<fn>Berglund, A., Thai Money, from
Earliest Times to King Rama V, p. 203.</fn> pendant le règne du roi Rama V.</p>
</doc>

Dans cet exemple, les notes de pieds reçoivent des numéros consécutifs tout au long du document. L'appel de note correspond au numéro de la note de pied, suivi par une parenthèse « ) », le tout en exposant. La note de pied elle-même est formatée à l'aide d'objets de mise en forme de liste ayant pour label le numéro de note de pied et pour corps le texte de la note.

La feuille de style XSL :

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="fn">
  <fo:footnote>
    <fo:inline font-size="0.83em" baseline-shift="super">
      <xsl:number level="any" count="fn" format="1)"/>
    </fo:inline>
    <fo:footnote-body>
      <fo:list-block provisional-distance-between-starts="20pt"
          provisional-label-separation="5pt">
        <fo:list-item>
          <fo:list-item-label end-indent="label-end()">
            <fo:block  font-size="0.83em"
                       line-height="0.9em">
              <xsl:number level="any" count="fn" format="1)"/>
            </fo:block>
          </fo:list-item-label>
          <fo:list-item-body start-indent="body-start()">
            <fo:block  font-size="0.83em"
                       line-height="0.9em">
              <xsl:apply-templates/>
            </fo:block>
          </fo:list-item-body>
        </fo:list-item>
      </fo:list-block>
    </fo:footnote-body>
  </fo:footnote>
</xsl:template>

</xsl:stylesheet>

L'instance résultat, les éléments et attributs sont dans l'espace de nommage fo: :

<fo:block>Certains Pod Duang ont été refrappés
  <fo:footnote>
    <fo:inline font-size="0.83em" baseline-shift="super">1)
    </fo:inline>
    <fo:footnote-body>
    <fo:list-block provisional-distance-between-starts="20pt"
      provisional-label-separation="5pt">
    <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
    <fo:block font-size="0.83em" line-height="0.9em">1)
    </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
    <fo:block font-size="0.83em" line-height="0.9em">Berglund, A.,
Thai Money, from Earliest Times to King Rama V, p. 203.
    </fo:block>
    </fo:list-item-body>
    </fo:list-item>
    </fo:list-block>
    </fo:footnote-body>
  </fo:footnote> pendant le règne du roi Rama V.
</fo:block>

6.10.2 fo:float

Usage commun :

L'objet de mise en forme fo:float s'utilise typiquement soit pour positionner une image dans une aire séparée au début de la page, soit pour positionner celle-ci sur un côté, le contenu normal s'écoulant autour et le long des flancs de l'image.

Aires :

L'objet fo:float génère une seule aire optionnelle de la classe d'aire xsl-anchor et une ou plusieurs aires de bloc qui partagent toutes la même classe d'aire, celle-ci parmi xsl-before-float, xsl-side-float ou xsl-normal, comme spécifié par la propriété 'float'. Un objet fo:float génère des aires de bloc normales si la valeur de cette propriété est "none".

Les aires de la classe d'aire xsl-side-float sont des aires de référence.

Une aire de la classe d'aire xsl-before-float se place comme enfant d'une aire de référence avant-flottant.

L'aire optionnelle de classe d'aire xsl-anchor n'est pas générée si la valeur de la propriété 'float' est "none", ou si, suite à une erreur comme décrit dans la section relative aux contraintes, l'objet fo:float est mis en forme comme si la valeur de sa propriéé était "none". Si ce n'est pas le cas, cette aire de classe xsl-anchor sera générée.

L'aire de classe d'aire xsl-anchor n'a aucun enfant et celle-ci est une aire en-ligne, sauf si ceci violait les contraintes suivantes : (a.) les enfants de l'aire doivent être soit des aires de bloc, soit des aires en-ligne, mais pas un panachage des deux, et (b.) les enfants de l'aire en-ligne ne peuvent pas consister seulement en aires d'ancre. Dans le cas où une aire en-ligne violerait ces contraintes, l'objet fo:float doit générer un aire de bloc à la place.

Contraintes :

L'aire en-ligne normale générée par l'objet fo:float sera placée dans l'arbre des aires comme si cet objet avait une propriété 'keep-with-previous' avec la valeur "always". L'aire en-ligne a une longueur de zéro pour les dimensions de progression en ligne et de progression de bloc.

L'utilisation de l'expression aire d'ancre ici signifie aire de la classe d'aire xsl-anchor générée par l'objet fo:float. Une aire de la classe d'aire xsl-side-float est un flottant latéral.

Aucune aire ne peut avoir plus d'une aire de bloc enfant de la même classe d'aire retournée par l'objet de mise en forme fo:float.

Les aires de la classe d'aire xsl-before-float doivent être correctement ordonnées dans l'arbre des aires par rapport aux autres aires de la même classe d'aire.

Les rectangles d'espacement, de bordure et de contenu des aires de bloc générées par l'objet fo:float coïncident tous. C'est-à-dire, l'espacement et la bordure sont nuls sur tous les côtés de l'aire.

Les contraintes suivantes s'appliquent aux objets de mise en forme fo:float qui génèrent des aires de la classe d'aire xsl-before-float :

Les contraintes suivantes s'appliquent aux objets de mise en forme qui génèrent des aires de classe d'aire xsl-side-float :

Contenus :

(%block;)+

L'objet fo:float n'admet pas d'objets fo:float, fo:footnote ou fo:marker comme descendants.

De plus, un objet fo:float n'admet pas comme descendant d'objet fo:block-container qui génère une aire en position absolue.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.10.3 fo:footnote

Usage commun :

L'objet fo:footnote s'utilise typiquement pour la production d'appels de note de pied dans la région de corps d'une page et leurs notes de pied correspondantes dans une aire séparée vers le bord d'après de cette page.

Aires :

L'objet de mise en forme fo:footnote ne génère aucune aire. L'objet fo:footnote retourne les aires générées et retournées par son enfant fo:inline.

De plus, l'objet de mise en forme fo:footnote retourne les aires de bloc de classe d'aire xsl-footnote générées par son enfant fo:footnote-body. Une aire de classe d'aire xsl-footnote se place comme enfant d'une aire de référence note de pied.

Contraintes :

On définit l'expression anchor-area comme signifiant la dernière aire générée et retournée par l'enfant fo:inline de l'objet fo:footnote.

Une aire de bloc retournée par l'objet fo:footnote ne peut être le descendant d'une aire de référence de note de pied que si cette dernière (a) est un descendant d'une « aire de référence de région » générée en utilisant le maître de région de la région sur laquelle le flux dont l'objet fo:footnote est un descendant est assigné et (b) est un descendant de la même page que celle contenant l'aire d'ancre ou d'une page qui vient ensuite de celle contenant l'aire d'ancre.

La seconde aire de bloc et, le cas échéant, les aires de blocs supplémentaires retournées par un objet fo:footnote doivent se placer sur les pages immédiatement consécutives à la page contenant la première aire de bloc retournée par l'objet fo:footnote, avant le placement de tout autre contenu. Si la page consécutive ne contient pas de région de corps, l'agent utilisateur doit employer le maître de page de la dernière page, qui en contient une, pour tenir les aires de bloc supplémenaires.

C'est une erreur si l'objet fo:footnote survient comme descendant d'un flux qui n'est pas assigné à une région de corps ou comme descendant d'un objet fo:block-container qui génère des aires en position absolue. Dans l'un ou l'autre cas, les aires de bloc, générées par l'objet fo:footnote-body enfant de fo:footnote, seront retournées au parent de l'objet fo:footnote et placées dans l'aire des arbres comme si celles-ci étaient des aires de bloc normales.

Contenus :

(inline,footnote-body)

Un objet fo:footnote n'admet pas d'objets fo:float, fo:footnote ou fo:marker comme descendants.

De plus, un objet fo:footnote n'admet pas comme descendant un objet fo:block-container qui génère une aire en position absolue.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.10.4 fo:footnote-body

Usage commun :

L'objet fo:footnote-body s'utilise pour générer le contenu d'une note de pied.

Aires :

L'objet fo:footnote-body génère et retourne une ou plusieurs aires de type bloc de la classe d'aire xsl-footnote.

Contraintes :

Un objet fo:footnote-body ne peut êre que l'enfant d'un objet fo:footnote.

Aucune aire ne peut avoir plus d'une aire de bloc enfant retournée par le même objet de mise en forme fo:footnote-body.

Les aires de classe d'aire xsl-footnote doivent être correctement ordonnées dans l'arbre des aires par rapport aux autres aires de la même classe d'aire.

Contenus :

(%block;)+

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.11 Les autres objets de mise en forme

6.11.1 Introduction

L'exemple suivant montre l'emploi de l'objet de mise en forme fo:wrapper, dépourvu de sémantique, mais qui agit comme un « vecteur » pour les propriétés héritées.

6.11.1.1 Exemple

L'échantillon en entrée :

<doc>
<p>Voici un <emph>mot important</emph> dans cette phrase,
celui-ci se rapporte aussi à une <code>variable</code>.</p>
</doc>

Le contenu de l'élément "emph" doit apparaître en caractères gras et celui de l'élément "code" dans la police "Courier".

La feuille de style XSL :

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="emph">
  <fo:wrapper font-weight="bold">
    <xsl:apply-templates/>
  </fo:wrapper>
</xsl:template>

<xsl:template match="code">
  <fo:wrapper font-family="Courier">
    <xsl:apply-templates/>
  </fo:wrapper>
</xsl:template>

</xsl:stylesheet>

Dans l'arbre des éléments et attributs fo: :

<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">Voici un
<fo:wrapper font-weight="bold">mot important</fo:wrapper>
dans cette phrase, celui-ci se rapporte aussi à une
<fo:wrapper font-family="Courier">variable</fo:wrapper>.
</fo:block>

6.11.2 fo:wrapper

Usage commun :

L'objet de mise en forme fo:wrapper est utilisé pour la spécification de propriétés héritées sur un groupe d'objets de mise en forme.

Aires :

L'objet de mise en forme fo:wrapper ne génère aucune aire. L'objet fo:wrapper retourne la séquence d'aires créée par concaténation des séquences d'aires retournées par chacun de ses enfants.

Dérivation du trait :

À l'exception de la propriété 'id', l'objet fo:wrapper n'emploie directement aucune propriété. Cependant, celui-ci sert de vecteur pour les propriétés héritées utilisées par ses enfants.

Contraintes :

L'ordre de concaténation des séquences d'aires retournées par les enfants de l'objet fo:wrapper est le même que l'ordre de ceux-ci dans l'objet fo:wrapper.

Contenus :

(#PCDATA|%inline;|%block;)*

Un objet fo:wrapper n'admet comme enfants que ceux qui seraient admis comme tel par le parent de l'objet fo:wrapper, avec deux exceptions :

Cette restriction s'applique récursivement.

Remarque :

Par exemple, un objet fo:wrapper, qui est l'enfant d'un autre objet fo:wrapper, n'admettrait comme enfants que ceux qui seraient admis comme tel par l'objet fo:wrapper parent.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.11.3 fo:marker

Usage commun :

L'objet fo:marker s'utilise en conjonction avec l'objet fo:retrieve-marker pour produire des en-têtes et des pieds de page courants. Quelques exemples typiques :

L'objet fo:marker doit être l'enfant initial dans son objet de mise en forme parent.

Aires :

L'objet fo:marker ne produit pas directement d'aire. Les enfants de celui-ci peuvent être rapportés et mis en forme dans un objet fo:static-content, à l'aide d'un objet fo:retrieve-marker dont la valeur de la propriété 'retrieve-class-name' est la même que celle de la propriété 'marker-class-name' de l'objet fo:marker.

Contraintes :

Un objet fo:marker n'est admis que comme descendant d'un objet fo:flow.

Remarque : Les valeurs des propriétés d'un objet fo:marker, ou des ancêtres de celui-ci, ne seront pas héritées par les enfants de fo:marker quand ceux-ci sont rapportés par un objet fo:retrieve-marker.

C'est une erreur quand deux ou plus objets fo:marker, partageant le même parent, ont la même valeur pour leur propriété 'marker-class-name'.

Contenus :

(#PCDATA|%inline;|%block;)*

Un objet fo:marker peut contenir tous ceux des objets de mise en forme admis en remplacement d'un objet fo:retrieve-marker qui rapporte les enfants de l'objet fo:marker.

Les propriétés suivante s'appliquent à cet objet de mise en forme :

6.11.4 fo:retrieve-marker

Usage commun :

L'objet fo:retrieve-marker s'utilise en conjonction avec l'objet fo:marker pour la production d'en-têtes ou de pieds de page courants. Quelques exemples typiques :

Aires :

L'objet fo:retrieve-marker ne génère pas d'aire directement. Celui-ci est remplacé (conceptuellement) par les enfants de l'objet fo:marker qu'il rapporte.

Dérivation du trait :

Les propriétés et les traits spécifiés sur les ancêtres de l'objet fo:retrieve-marker sont prises en compte lors de la mise en forme des enfants de l'objet fo:marker rapporté comme si les enfants avaient les mêmes ancêtres que l'objet fo:retrieve-marker.

Contraintes :

Un objet fo:retrieve-marker n'est admis que comme descendant d'un objet fo:static-content.

L'objet fo:retrieve-marker spécifie que les enfants d'un objet fo:marker donné seront mis en forme comme si ceux-ci avaient remplacé l'objet fo:retrieve-marker dans l'arbre de mise en forme.

Les propriétés de l'objet fo:retrieve-marker impose des préférences hiérarchiques sur les aires dans l'arbre des aires. Chaque objet fo:marker est relié conceptuellement à chaque aire normale retournée par l'objet de mise en forme parent de celui-ci. De plus, un objet fo:marker est relié conceptuellement à chaque aire non-normale directement générée par l'objet de mise en forme parent de celui-ci. Réciproquement, les aires, générées par tout descendant d'un objet fo:flow, peuvent avoir zéro ou plus objets parents de fo:marker reliés conceptuellement. L'objet fo:marker dont les enfants sont rapportés est celui qui est relié (conceptuellement) à l'aire qui se trouve au sommet de cette hiérarchie.

Chaque aire est considérée comme étant préférable à, ou « meilleure » que, celle située plus bas dans la hiérarchie. Lors de la comparaison de deux aires, pour déterminer laquelle est meilleure, les termes « premier » et « dernier » se réfèrent à l'ordre de cheminement pré-ordonné de l'arbre des aires.

Le terme « page conteneur » signifie ici la page qui contient la première aire générée ou retournée par les enfants de l'objet fo:marker rapporté.

Une aire, reliée à un objet fo:marker dont la valeur de la propriété 'marker-class-name' est la même que celle de la propriété 'retrieve-class-name' de l'objet fo:retrieve-marker, est définie comme étant une aire qualifiante. Seules les aires qualifiantes occupent un emplacement dans la hiérarchie.

Une aire qualifiante dans une page est meilleure que toute aire qualifiante dans une page précédente, sauf que des aires n'ont pas d'emplacement dans la hiérarchie si celles-ci se trouvent dans des pages suivant la page conteneur. Si la valeur de la propriété 'retrieve-boundary' a la valeur "page-sequence", alors une aire n'a pas d'emplacement dans la hiérarchie quand celle-ci se trouve dans une page de la séquence de pages précédant la séquence de pages de la page conteneur. Si cette valeur est "page", alors une aire n'a pas d'emplacement dans la hiérarchie quand celle-ci ne se trouve pas sur la page conteneur.

Si la valeur de la propriété 'retrieve-position' est "first-starting-within-page", alors la première aire qualifiante, dans la page conteneur, l'aire avec une valeur "true" pour le trait is-first, est meilleure que toute autre aire. S'il n'existe pas de telle aire, alors la première aire qualifiante dans la page conteneur est meilleure que toute autre aire.

Si cette valeur est "first-including-carryover", alors la première aire qualifiante, dans la page conteneur, est meilleure que toute autre aire.

Si cette valeur est "last-starting-within-page", alors la dernière aire qualifiante, dans la page conteneur, l'aire avec une valeur "true" pour le trait is-first, est meilleure que toute autre aire.

Si cette valeur est "last-ending-within-page", alors la dernière aire qualifiante, dans la page conteneur, l'aire avec une valeur "true" pour le trait is-first, est meilleure que toute autre aire. S'il n'existe pas de telle aire, alors la dernière aire qualifiante, dans la page conteneur, est meilleure que toute autre aire.

Si la hiérarchie des aires est vide, aucun objet de mise en forme n'est rapporté.

Contenus :

VIDE

Les propriétés suivante s'appliquent à cet objet de mise en forme :


    

Précédent

Table des matières

début de page          

Suivant