Précédent |
Table des matières |
bas de page |
Suivant |
Table des matières abrégée |
---|
3 Introduction à la mise en forme
3.1 La démarche conceptuelle |
L'objectif de ce chapitre est de décrire le processus général de la mise en forme, suffisamment pour aborder : le modèle des aires, les descriptions et les propriétés de l'objet de mise en forme, et enfin pour comprendre le processus de l'affinage.
La mise en forme est le processus qui consiste à préparer le résultat d'une transformation XSL pour une présentation qui soit tangible pour le lecteur ou l'auditeur. Ce processus comprend plusieurs étapes, certaines d'entre elles dépendant des autres d'une façon non séquentielle. Notre objectif de mise en forme sera la construction d'un arbre des aires, qui est un arbre ordonné contenant des informations géométriques pour la disposition de tout glyphe, forme et image dans le document, accompagnées de précisions sur les contraintes d'espacement et les autres informations de rendu ; on se réfère à ces informations comme à des traits, qui sont pour les aires ce que les propriétés sont aux objets de mise en forme, et les attributs aux éléments XML. Le chapitre [4 Le modèle des aires] décrit l'arbre des aires et définit les contraintes de disposition par défaut pour les aires empilées. Cependant, cela reste un modèle abstrait qui ne doit pas forcément être implémenté de cette manière par un formateur, tant que la forme tangible résultante obéisse aux contraintes implicites. Les contraintes peuvent entrer en conflit au point qu'il ne soit plus possible de toutes les satisfaire. Dans ce cas, c'est la mise en œuvre qui détermine les contraintes qui doivent être assouplies, dans un certain ordre, au profit des autres.
Les objets de mise en forme sont des éléments de l'arbre des objets de mise en forme, dont les noms proviennent de l'espace de nommage de XSL ; un objet de mise en forme appartient à une classe d'objets de mise en forme identifiée par le nom de son élément. Le comportement de mise en forme de chacune des classes d'objets de mise en forme est décrit selon les aires créées par un objet de mise en forme de cette classe, comment les traits de ces aires sont établis et comment les aires sont structurées hiérarchiquement en fonction des aires créées par d'autres objets de mise en forme. Les chapitres [6 Les objets de mise en forme] et [7 Les propriétés de mise en forme] décrivent ces objets de mise en forme et leurs propriétés.
Certains objets de mise en forme sont de type bloc, d'autres de type en-ligne. Cela se rapporte aux types d'aires que ceux-ci génèrent, ces types d'aire se rapportant à leur tour à leur méthode de disposition par défaut. Les aires en-ligne (par exemple, les aires des glyphes) sont rassemblées en lignes, la direction selon laquelle elles sont empilées se nomme la direction de progression en-ligne [N.d.T. inline-progression-direction]. Les lignes sont des sortes d'aires de bloc, celles-ci sont empilées perpendiculairement à la direction de progression en-ligne, on la nomme direction de progression de bloc [N.d.T. block-progression-direction]. Voir le chapitre [4 Le modèle des aires] pour une description en détails de ces types d'aire et de ces directions.
Dans les systèmes d'écriture occidentaux, la direction de progression de bloc est « de haut-en-bas », et la direction de progression en-ligne est « de gauche-à-droite ». Cette spécification traite également d'autres systèmes d'écriture et introduit les expressions « bloc » et « en-ligne » en lieu et place des indicateurs absolus « vertical » et « horizontal ». De la même façon, cette spécification essaye de donner, s'il y a lieu, des spécifications de direction relatives ("before" et "after", pour la propriété 'block-progression-direction', "start" et "end", pour 'inline-progression-direction'), soit en complément, soit à la place, des spécifications de direction absolues, telles que "top", "bottom", "left" et "right". L'interprétation de celles-ci se fait en fonction de la valeur de la propriété 'writing-mode'.
Au centre de ce modèle de mise en forme : l'affinage. C'est un processus calculatoire qui finalise les spécifications des propriétés et qui est basé sur les valeurs des attributs dans l'arbre résultant XML. Bien que cet arbre et celui des objets de mise en forme aient une structure très semblable, il est utile d'y penser comme d'entités conceptuelles séparées. L'affinage implique :
la propagation des diverses valeurs héritées des propriétés (à la fois, implicitement et pour celles dont la valeur d'attribut est "inherit") ;
l'évaluation des expressions contenues dans les spécifications des valeurs des propriétés en vue d'obtenir des valeurs réelles, celles-ci étant utilisées pour déterminer les valeurs des propriétés ;
la conversion des valeurs numériques relatives en valeurs absolues ;
la construction de certaines propriétés composites à partir de plusieurs attributs.
Certaines de ces opérations (notamment, l'évaluation des expressions) sont tributaires d'une connaissance de l'arbre des aires. Ainsi, l'affinage n'est pas forcément un processus univoque, séquentiel, mais peut impliquer pour le formateur une anticipation, une recherche en arrière ou un contrôle croisé avec d'autres processus. L'affinage est décrit plus complètement dans le chapitre [5 L'affinage et la résolution des propriétés].
En résumé, la mise en forme est réalisée par la construction d'un arbre des aires (contenant des aires et leurs traits) qui satisfait aux contraintes issues d'informations contenues dans l'arbre résultant XML (contenant les nœuds des éléments et leurs attributs). De manière conceptuelle, la construction de l'arbre des objets de mise en forme (contenant des objets de mise en forme et leurs propriétés) et l'affinage comportent des étapes intermédiaires ; ces étapes peuvent se dérouler par intermittence lors de la construction de l'arbre des aires.
Ce sous-chapitre contient la description conceptuelle d'une manière possible de réaliser la mise en forme. Cette démarche conceptuelle nécessite aucun algorithme spécifique et aucune structure de données, tant que le résultat se conforme aux contraintes implicites.
La démarche se réalise au travers du traitement des objets de mise en forme. Chaque objet, lors de son traitement, peut déclencher un traitement faisant intervenir d'autres objets. Alors que les objets ont une structure hiérarchique, le traitement n'en a pas ; le traitement d'un objet donné apparaît plutôt comme une co-routine, qui peut céder le contrôle à d'autres processus, mais qui reprend plus tard, là où elle s'était arrêtée. La démarche débute par le traitement de l'objet de mise en forme fo:root.
Sauf spécifié autrement, le traitement d'un objet de mise en forme crée des aires et retourne celles-ci au parent de cet objet pour que celui-ci les dispose dans l'arbre des aires. Comme pour une co-routine, l'objet reprend le contrôle plus tard et commence la mise en forme de ses propres enfants, s'il y en a, ou d'un sous-ensemble de ceux-ci. L'objet fournit des paramètres à ses enfants, selon les traits des aires déjà présentes dans l'arbre des aires, en y incluant éventuellement des aires générées par lui-même ou ses ancêtres. Il dispose ensuite se débarrasse des aires retournées par les objets de mise en forme de ses enfants. Chaque enfant pourrait soit se contenter de retourner une telle aire à son parent (ce qu'il fera de toute façon s'il ne génère pas d'aires lui-même), soit placer l'aire dans l'arbre des aires suivant la sémantique de l'objet de mise en forme. Tout objet termine son traitement lorsque tous ses enfants ont terminé le leur (s'il est déclenché) et qu'il a fini de générer les aires
Certains objets de mise en forme ne génèrent pas d'aires par eux-mêmes ; à la place, ces objets retournent simplement les aires retournées par leurs enfants. Autrement, un objet de mise en forme peut continuer à générer (et retourner) des aires en fonction des instructions rencontrées pendant la mise en forme de ses propres enfants ; par exemple, l'objet de mise en forme fo:page-sequence va continuer à générer des pages aussi longtemps qu'il y aura un flux de descendants non traités.
Les aires, qui sont retournées à un objet de mise en forme fo:root, sont les aires d'une zone de visualisation de page et sont simplement placés, comme enfants, à la racine de l'arbre des aires, selon l'ordre dans lequel elles ont été retournées, sans considérations géométriques.
En règle générale, l'ordonnancement de l'arbre des aires suit celui de l'arbre des objets de mise en forme. Ainsi, si un objet de mise en forme précède un autre, lors d'un cheminement en profondeur d'abord dans l'arbre des objets de mise en forme, aucun des deux ne contenant l'autre, alors toutes les aires, générées par le premier, précèderont toutes celles générées par le second, lors d'un cheminement en profondeur d'abord dans l'arbre des aires, sauf spécifié autrement. Des exceptions typiques à cette règle seraient le fait de flottants latéraux, de flottants précédents ou de notes de pied de page.
À la fin du processus, les aires et leurs traits ont été construits, ceux-ci doivent satisfaire aux contraintes qui sont décrites dans les définitions associées à leurs objets de mise en forme et dans le chapitre sur le modèle des aires. Notamment, la taille et la position des aires doivent obéir aux contraintes de positionnement et d'espacement du modèle de l'aire, à moins que la définition de l'objet de mise en forme ne dise autrement.
Les définitions des objets de mise en forme, les descriptions des propriétés et le modèle des aires ne sont pas des algorithmes. Ainsi, la sémantique de l'objet de mise en forme ne précise pas la manière dont l'algorithme de coupure de ligne doit procéder, pour le regroupement de lettres en mots, pour la disposition des mots dans les lignes, pour le déplacement des lignes dans un conteneur, etc. Cette spécification suppose que le formateur réalise déjà ces tâches, elle décrit plutôt les contraintes que l'interprétation de celui-ci doit accomplir.
Précédent |
Table des matières |
début de page |
Suivant |