On spécifie un texte, qui doit être rendu comme faisant partie d'un fragment de document SVG, en utilisant un élément 'text'. Les caractères à dessiner sont exprimés comme données textuelles XML [XML10 vf.] dans l'élément 'text' .
Les éléments 'text' de SVG sont rendus comme tout autre élément graphique. Ainsi, les fonctions de transformation de système de coordonnées, de peinture, de rognage et de masquage s'appliquent aux éléments 'text' de la même façon qu'elles s'appliquent aux formes, tels que les tracés et les rectangles.
Chaque élément 'text' entraîne le rendu d'une seule chaîne de texte. SVG n'effectue pas de retour à la ligne ou de césure automatiques. Pour obtenir l'effet de plusieurs lignes de texte, utiliser l'une des méthodes suivantes : :
Les chaînes textuelles dans les éléments 'text' peuvent être rendues sur une seule ligne ou au long du contour d'un élément 'path'. SVG gère les fonctions de traitement de texte internationales suivantes, à la fois pour le texte sur une ligne et le texte sur un tracé :
Comme le texte SVG est encodé comme données textuelles XML [XML10 vf.] :
Un contenu SVG multi-langue est possible en substituant différentes chaînes textuelles en fonction de la langue de choix de l'utilisateur.
Par souci d'accessibilité, on recommande que le texte compris dans un document ait un balisage sémantique
approprié pour indiquer sa fonction. Voir le chapitre
Les directives pour l'accessibilité du contenu SVG pour plus
d'information.
En XML [XML10 vf.], un contenu textuel se définit en termes d'une séquence de caractères XML, chaque caractère étant défini par un point de code Unicode particulier [UNICODE]. D'autre part, les polices consistent en des collection de glyphes et en autres informations associées, telles que les tables de police. Un glyphe est une forme présentable d'un ou plusieurs caractères (ou une partie de caractère dans certains cas). Chaque glyphe consiste en une certaine sorte d'identifiant (dans certains cas, une chaîne, dans d'autres cas, un nombre) accompagné d'instructions de dessin pour le rendu de ce glyphe particulier.
Dans de nombreux cas, il existe une correspondance un-à-un entre les caractères Unicode (i.e., les points de code Unicode) et les glyphes dans une police. Par exemple, une police désignée pour les langues latines (où le terme « latin » s'emploie pour des langues européennes, tel le français, avec des alphabets similaires et/ou dérivés du latin) contient couramment un seul glyphe pour chacun des caractères ASCII standards (i.e., A-Z, a-z, 0-9, plus les divers caractères de ponctuation trouvé dans ASCII). Ainsi, dans la plupart des situations, la chaîne "XML", qui consiste en trois caractères Unicode, serait rendue par les trois glyphes correspondants, respectivement « X », « M » et « L ».
Cependant, dans divers autres cas, il n'existe pas de correspondance un-à-un stricte entre les caractères Unicode et les glyphes. Quelques circonstances où la correspondance n'est pas un-à-un :
Dans de nombreuses situations, les algorithmes de correspondance des caractères aux glyphes dépendent du système, amenant la possibilité que le rendu du texte puisse être (en général, légèrement) différent, vu dans différents environnements utilisateurs. Si l'auteur du contenu SVG demande un choix de polices et de glyphes précis, alors on recommande que les polices nécessaires (éventuellement en sous-ensembles pour n'inclure que les glyphes nécessaires au document donné) soient disponibles soit comme polices SVG incorporées au contenu SVG, soit comme PolicesWeb vf. placées à la même location que le contenu SVG.
Tout au long de ce chapitre, le terme caractère équivaudra à la définition pour un caractère en XML [XML10 vf.].
Une police consiste en une collection de glyphes en même temps que les informations (les tables de police) nécessaires pour la représentation de ces glyphes sur un média donné. On appelle données de police la combinaison de la collection de glyphes et des tables de police. Les tables de police comprennent l'information nécessaire pour la correspondance des caractères aux glyphes, pour la détermination de la taille des aires de glyphe et pour leur position. Chaque table de police consiste en une ou plusieurs caractéristiques de police, telles que la graisse et le style de la police.
Les caractéristiques géométriques de police s'expriment dans un système de coordonnées basée sur la boîte EM. (Un « EM » est une mesure relative de la hauteur des glyphes dans la police - voir Le carré em CSS2 vf.). La boîte d'un EM de haut sur 1 EM de large est appelée espace de dessin. Cet espace est pourvu de coordonnées géométriques en sub-divisant le « EM » en une quantité d'units-per-em vf..
Remarque : Units-per-em est une caractéristique de police. Des valeurs typiques pour units-per-em sont "1000" ou "2048".
L'espace de coordonnées de la boîte EM est appelée système de coordonnées de l'espace de dessin. Pour les polices ajustables, on représente les courbes et les lignes, utilisées pour dessiner un glyphe, en utilisant ce système de coordonnées.
Remarque : Le plus souvent, le point de coordonnées (0,0) dans ce système de coordonnées est placé sur le côté gauche de la boîte EM, mais pas au coin inférieur gauche. La coordonnée Y du bas d'une lettre capitale romane est généralement de zéro. Les jambes des lettres minuscules romanes ont des valeurs de coordonnée négatives.
SVG présuppose que les tables de police vont fournir au moins trois caractéristiques de police : une hampe, une jambe et un jeu de tables de lignes de base. La hampe correspond à la distance du point (0,0) de la police jusqu'en haut de la boîte EM, la jambe à la distance du point (0,0) de la police jusqu'en bas de la boîte EM. La table de lignes de base est expliquée ci-dessous.
Remarque : Dans une police OpenType, pour les écritures horizontales, la hampe et la jambe sont données par les entrées sTypoAscender et sTypoDescender dans la table OS/2. Pour les écritures verticales, la jambe (dans ce cas, la distance du point (0,0) jusqu'au côté gauche du glyphe) est normalement de zéro, le point (0,0) étant sur le côté gauche. La hampe, pour les écritures verticales, est soit de "1em", soit spécifiée par la valeur de la ligne de base idéographique supérieure dans la table OpenType Base des écritures verticales.
Dans les écritures horizontales, les glyphes d'une certaine écriture se positionnent de façon à ce qu'un point particulier de chaque glyphe, le point d'alignement, soit aligné sur les points d'alignemens des autres glyphes dans cette écriture. Les glyphes de différentes écritures, par exemple, les écritures occidentales, indiennes du Nord et extêmes-orientales, sont typiquement alignés sur différents points du glyphe. Par exemple, les glyphes occidentaux s'alignent sur le bas des lettres capitales, les indiennes du Nord en haut d'un trait horizontal près du somment des glyphes et les extrêmes-orientales soit en bas, soit au centre des glyphes. Dans une écriture et dans une ligne de texte de même taille de police, la succession des points d'alignements définit, dans la direction de progression en-ligne, une ligne géométrique appelée ligne de base. Les glyphes occidentaux et la plupart des autres glyphes alphabétiques et syllabiques s'alignent sur une ligne de base "alphabetic", les glyphes indiens du Nord sur une ligne de base "hanging" et les glyphes extrêmes-orientaux sur une ligne de base "ideographic".
Une table de lignes de base spécifie l'emplacement d'une ou plusieurs lignes de base dans le système de coordonnées de l'espace de dessin. La fonction de la table de lignes de base consiste à faciliter l'alignement des différentes écritures, l'une par rapport à l'autre, quand elles sont mélangées dans la même ligne de texte. Comme les alignements relatifs voulus peuvent dépendre de l'écriture dominante dans une ligne (ou bloc de lignes), il peut y avoir une table de lignes de base différente pour chaque écriture. De plus, les modes d'écritures horizontaux et verticaux nécessitent différentes positions d'alignement. C'est pourquoi la police peut avoir un jeu de tables de lignes de base : typiquement, une ou plusieurs pour les modes d'écritures horizontaux et zéro ou plus pour ceux verticaux.
Remarque : Certaines polices peuvent ne pas disposer de valeurs pour les tables de lignes de base. On suggère des moyens heuristiques pour l'approximation des tables de lignes de base, quand une police donnée n'emporte pas de tables de lignes de base.
SVG suppose en plus que, pour chaque glyphe dans les données de police d'une police, il y aient deux valeurs de largeur, deux alignements de ligne de base et deux points d'alignement, l'une pour les modes d'écriture horizontaux, l'autre pour les modes d'écriture verticaux. (Bien que spécifiée comme largeur, pour les modes d'écritures verticaux la largeur est utilisée dans un sens vertical). L'écriture, à laquelle appartient un glyphe, détermine un alignement de ligne de base auquel le glyphe doit adhérer. L'emplacement dans la direction de progression en-ligne du point d'alignement se trouve sur le bord de départ du glyphe.
Les propriétés en rapport avec les lignes de base sont décrites ci-dessous à la section Les propriétés d'alignement de ligne de base.
En plus des caractéristiques de police requises plus haut, une police peut également fournir des tables de substitution et de positionnement qui peuvent être utilisées par un formateur pour ré-ordonnancer, combiner et positionner une séquence de glyphes pour en faire un ou plusieurs glyphes composés. Ce peut être une combinaison simple, comme une ligature, ou complexe, comme une syllabe indienne qui combine, suite généralement à un ré-ordonnancement, plusieurs glyphes de consonnes et de voyelles.
L'élément 'text' définit un élément graphique qui consiste en texte. Les données textuelles XML [XML10 vf.] dans l'élément 'text', tout comme les attributs et les propriétés concernés et les tables de correspondance des caractères vers les glyphes dans la police elle-même, définissent les glyphes qui doivent être rendus. (Voir la section Les caractères et leurs glyphes correspondants). Les attributs et les propriétés de l'élément 'text' fournissent des indications, telles que le sens de l'écriture, les spécifications de police et de peintures, qui décrivent exactement comment rendre les caractères. Les sections suivantes de ce chapitre décrivent les attributs et propriétés concernés propres au texte, une disposition de texte particulière et la bi-directionnalité.
Comme l'élément 'text' est rendu selon les mêmes méthodes utilisées par les autres éléments graphiques, les mêmes fonctions de transformations de système de coordonnées, de peinture, de rognage et de masquage qui s'appliquent aux formes, tels que les tracés et les rectangles, s'appliquent aussi aux éléments 'text'.
Il est possible d'appliquer un dégradé, un motif, un tracé de rognage, un masque ou un filtre au texte. Quand on applique l'une de ces facilités au texte en même temps qu'on emploie le mot-clé objectBoundingBox (voir la section Les unités de la boîte englobante de l'object) pour la spécification d'un effet graphique par rapport à la « boîte englobante de l'objet », alors les unités de cette boîte sont calculées, à chaque fois, en fonction de l'élément 'text', même si d'autres effets sont appliqués sur différents éléments 'tspan' dans le même élément 'text'.
L'élément 'text' rend son premier glyphe (après un ré-ordonnancement de bi-directionnalité) à la position du texte courante initiale, qui est établie par les attributs x et y de l'élément 'text' (avec des ajustements éventuels causés par la valeur de la propriété 'text-anchor', la présence d'un élément 'textPath' contenant le premier caractère et/ou l'un des attributs x, y, dx ou dy sur l'un des éléments 'tspan', 'tref' ou 'altGlyph' contenant le premier caractère) Après que le glyphe, ou les glyphes, correspondant(s) au caractère, ou aux caractères, en question, est rendu, la position du texte courante est actualisée pour le caractère suivant. Dans le cas le plus simple, la nouvelle position du texte courante correspond à celle précédente, augmentée de la valeur de l'avance (horizontale ou verticale) du glyphe. Voir la section sur la disposition du texte pour une description du placement et de l'avance des glyphes.
<!ENTITY % textExt "" > <!ELEMENT text (#PCDATA|desc|title|metadata| tspan|tref|textPath|altGlyph|a|animate|set| animateMotion|animateColor|animateTransform %geExt;%textExt;)* > <!ATTLIST text %stdAttrs; %testAttrs; %langSpaceAttrs; externalResourcesRequired %Boolean; #IMPLIED class %ClassList; #IMPLIED style %StyleSheet; #IMPLIED %PresentationAttributes-Color; %PresentationAttributes-FillStroke; %PresentationAttributes-FontSpecification; %PresentationAttributes-Graphics; %PresentationAttributes-TextContentElements; %PresentationAttributes-TextElements; transform %TransformList; #IMPLIED %graphicsElementEvents; x %Coordinates; #IMPLIED y %Coordinates; #IMPLIED dx %Lengths; #IMPLIED dy %Lengths; #IMPLIED rotate %Numbers; #IMPLIED textLength %Length; #IMPLIED lengthAdjust (spacing|spacingAndGlyphs) #IMPLIED > |
Définitions de l'attribut :
L'exemple text01 ci-dessous montre la chaîne textuelle « Salut à tous » qui sera rendue sur le canevs dans la famille de polices Verdana, les glyphes remplis en bleu.
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="10cm" height="3cm" viewBox="0 0 1000 300"
xmlns="http://www.w3.org/2000/svg">
<desc>Example text01 - 'Bonjour vous' en bleu</desc>
<text x="250" y="150"
font-family="Verdana" font-size="55" fill="blue" >
Bonjour vous
</text>
<!-- Montre le contour du canevas avec un élément 'rect' -->
<rect x="1" y="1" width="998" height="298"
fill="none" stroke="blue" stroke-width="2" />
</svg>
![]() |
Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
Dans un élément 'text', les propriétés de texte et de police ainsi que la position du texte courante peuvent être ajustées avec des valeurs de coordonnées absolues ou relatives en incluant un élément 'tspan'.
<!ENTITY % tspanExt "" > <!ELEMENT tspan (#PCDATA|desc|title|metadata|tspan|tref|altGlyph|a|animate|set|animateColor %tspanExt;)* > <!ATTLIST tspan %stdAttrs; %testAttrs; %langSpaceAttrs; externalResourcesRequired %Boolean; #IMPLIED class %ClassList; #IMPLIED style %StyleSheet; #IMPLIED %PresentationAttributes-Color; %PresentationAttributes-FillStroke; %PresentationAttributes-FontSpecification; %PresentationAttributes-Graphics; %PresentationAttributes-TextContentElements; %graphicsElementEvents; x %Coordinates; #IMPLIED y %Coordinates; #IMPLIED dx %Lengths; #IMPLIED dy %Lengths; #IMPLIED rotate %Numbers; #IMPLIED textLength %Length; #IMPLIED lengthAdjust (spacing|spacingAndGlyphs) #IMPLIED > |
Définitions de l'attribut :
Les attributs x, y, dx, dy et rotate sur l'élément 'tspan' sont utiles pour les scénarios de typographie poussé dans lesquels les glyphes requièrent un placement individuel exact. Ces attributs sont utiles pour les ajustements de positionnement fin, entre caractères, ou de positionnement global, comme le déplacement de la position du texte courante vers une nouvelle location pour obtenir l'effet visuel d'une nouvelle ligne de texte. Il est possible d'avoir un élément 'text' sur plusieurs lignes en définissant différents éléments 'tspan' pour chaque ligne de texte, avec les attributs x, y, dx et/ou dy qui définissent la position de chaque élément 'tspan'. (Un avantage d'une telle approche étant que l'utilisateurs pourra effectuer une sélection de texte sur plusieurs lignes).
Dans les situations où un ajustement du positionnement fin est nécessaire pour un contrôle typographique poussé, le concepteur du contenu SVG doit s'assurer que les polices requises soient disponibles pour tous les lecteurs du document (par exemple, empaqueter les données de police nécessaires sous la forme d'une police SVG ou un format de PoliceWeb vf. alternatif qui soit stocké sur le même site Web que le contenu SVG) et que le logiciel de lecture traitera la police de la façon attendue (les variations des capacités, des caractéristiques et des mécanismes de disposition de police sont importantes d'un système à l'autre). Si le contenu SVG comprend des valeurs pour les attributs x, y, dx ou dy, dont la destination correspond à une police particulière, celle-ci devant être traitée par un logiciel de lecture particulier, et si l'un ou l'autre de ces précautions n'est pas prise, alors le texte apparaitrait dans une mauvaise qualité.
Les règles supplémentaires suivantes s'appliquent aux attributs x, y, dx, dy et rotate quand ceux-ci contiennent une liste de nombres :
<tspan dx="11 12 13 14 15 0 21 22 23 0 31 32 33 34 35 36">Latin and Hebrew</span>Le mot « hébreu » sera dessiné de droite-à-gauche. D'abord, les données textuelles et les valeurs correspondantes dans la liste de l'attribut dx seront ré-ordonnées, de telle manière que la chaîne textuelle devienne « Latin and werbeH » et la liste des valeurs de dx "11 12 13 14 15 0 21 22 23 0 36 35 34 33 32 31". Après cette opération, les glyphes correspondants des caractères seront positionnés en suivant les règles de disposition de gauche-à-droite normales.
L'exemple suivant montre un usage de base de l'élément 'tspan'.
L'exemple tspan01 utilise un élément 'tspan' pour indiquer que l'expression « n'est pas » est dans une police grasse et de couleur rouge.
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="10cm" height="3cm" viewBox="0 0 1000 300"
xmlns="http://www.w3.org/2000/svg">
<desc>Exemple tspan01 - utiliser tspan pour changer des attributs visuels</desc>
<g font-family="Verdana" font-size="45" >
<text x="200" y="150" fill="blue" >
Vous
<tspan font-weight="bold" fill="red" >n'êtes pas</tspan>
une banane.
</text>
</g>
<!-- Montre le contour du canevas avec un élément 'rect' -->
<rect x="1" y="1" width="998" height="298"
fill="none" stroke="blue" stroke-width="2" />
</svg>
![]() |
Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
L'exemple tspan02 utilise les attributs dx et dy sur l'élément 'tspan' pour ajuster la position du texte courante horizontalement et verticalement de chaînes textuelles particulières dans un élément 'text'.
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="10cm" height="3cm" viewBox="0 0 1000 300"
xmlns="http://www.w3.org/2000/svg">
<desc>Exemple tspan02 - utilisation des attributs dx et dy d'un tspan
pour des ajustements de position incrémentiels</desc>
<g font-family="Verdana" font-size="45" >
<text x="200" y="150" fill="blue" >
Mais vous
<tspan dx="2em" dy="-50" font-weight="bold" fill="red" >
êtes
</tspan>
<tspan dy="100">
une pêche !
</tspan>
</text>
</g>
<!-- Montre le contour du canevas avec un élément 'rect' -->
<rect x="1" y="1" width="998" height="298"
fill="none" stroke="blue" stroke-width="2" />
</svg>
![]() |
Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
L'exemple tspan03 utilise les attributs x et y sur l'élément 'tspan' pour établir une nouvelle position du texte courante absolue pour chaque glyphe devant être rendu. L'exemple montre deux lignes de texte dans un seul élément 'text'. Comme ces deux lignes se trouvent dans le même élément 'text', l'utilisateur pourra effectuer des sélections dans les deux lignes de texte et des copies de texte vers le presse-papier du système des agents utilisateurs qui gèrent les opérations de sélection de texte et de presse-papier.
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="10cm" height="3cm" viewBox="0 0 1000 300"
xmlns="http://www.w3.org/2000/svg">
<desc>Exemple tspan03 - utilisation des attributs x et y de l'élément tspan
pour du texte sur plusieurs lignes et un positionnement précis des glyphes</desc>
<g font-family="Verdana" font-size="45" >
<text fill="rgb(255,164,0)" >
<tspan x="300 350 400 450 500 550 600 650" y="100">
Jolis et
</tspan>
<tspan x="375 425 475 525 575" y="200">
flous
</tspan>
</text>
</g>
<!-- Montre le contour du canevas avec un élément 'rect' -->
<rect x="1" y="1" width="998" height="298"
fill="none" stroke="blue" stroke-width="2" />
</svg>
![]() |
Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
Le contenu textuel d'un élément 'text' peut consister soit en données textuelles directement incorporées dans l'élément 'text', soit du contenu de données textuelles d'un élément appelé, où l'appel est spécifié avec un élément 'tref'.
<!ENTITY % trefExt "" > <!ELEMENT tref (desc|title|metadata|animate|set|animateColor %trefExt;)* > <!ATTLIST tref %stdAttrs; %xlinkRefAttrs; xlink:href %URI; #REQUIRED %testAttrs; %langSpaceAttrs; externalResourcesRequired %Boolean; #IMPLIED class %ClassList; #IMPLIED style %StyleSheet; #IMPLIED %PresentationAttributes-Color; %PresentationAttributes-FillStroke; %PresentationAttributes-FontSpecification; %PresentationAttributes-Graphics; %PresentationAttributes-TextContentElements; %graphicsElementEvents; x %Coordinates; #IMPLIED y %Coordinates; #IMPLIED dx %Lengths; #IMPLIED dy %Lengths; #IMPLIED rotate %Numbers; #IMPLIED textLength %Length; #IMPLIED lengthAdjust (spacing|spacingAndGlyphs) #IMPLIED > |
Définitions de l'attribut :
Toutes les données textuelles dans l'élément appelé, y compris les données textuelles avec un balisage supplémentaire, seront rendues.
Les attributs x, y, dx, dy et rotate ont la même signification que pour l'élément 'tspan'. Les attributs s'appliquent comme si l'élément 'tref' était remplacé par un élément 'tspan', les données textuelles appelées (débarassées de tout balisage supplémentaire) étant incorporées dans cet hypothétique élément 'tspan'.
L'exemple tref01 montre comment utiliser les données textuelles d'un élément différent comme étant celles d'un élément 'tspan' donné. Le premier élément 'text' (avec id="TexteAppele") ne sera pas dessiné car il fait partie d'un élément 'defs'. Le deuxième 'text' écrit la chaîne « Données textuelles en-ligne ». Le troisième 'text' écrit la chaîne « Données textuelles appelées », car il comprend un élément 'tref' qui est une référence vers l'élément « TexteAppele », les données textuelles de ce dernier étant « Données textuelles appelées ».
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="10cm" height="3cm" viewBox="0 0 1000 300"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<text id="TexteAppele">
Données textuelles appelées
</text>
</defs>
<desc>Exemple tref01 - contenu textuel en-ligne et appelé</desc>
<text x="100" y="100" font-size="45" fill="blue" >
Données textuelles en-ligne
</text>
<text x="100" y="200" font-size="45" fill="red" >
<tref xlink:href="#TexteAppele"/>
</text>
<!-- Montre le contour du canevas avec un élément 'rect' -->
<rect x="1" y="1" width="998" height="298"
fill="none" stroke="blue" stroke-width="2" />
</svg>
![]() |
Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
Cette section décrit les fonctions de disposition du texte gérées par SVG, dont la gestion des divers sens d'écriture internationaux, tel que celles de gauche-à-droite (par exemple, les écritures latines), celles bi-directionnelles (par exemple, l'hébreu ou l'arabe) et celles verticales (par exemple, les écritures asiatiques). Les descriptions dans cette section supposent un texte aligné (i.e., un texte qui est strictement soit horizontal, soit vertical par rapport au système de coordonnées utilisateur courant). Les sections subséquentes décrivent les règles de disposition supplémentaires pour un texte sur un tracé.
SVG ne fournit pas de mécanisme automatique pour les retours à la ligne ou les césures, ce qui rend la disposition du texte internationalisé pour SVG relativement plus simple que pour les langages qui gèrent la mise en forme des blocs de texte sur plusieurs lignes.
Pour chaque élément 'text', l'agent utilisateur SVG détermine l'orientation de référence courante. Pour un texte horizontal ou vertical standard (i.e., qui n'est pas un texte sur un tracé), l'orientation de référence est le vecteur dirigé vers l'infini négatif sur Y dans le système de coordonnées utilisateur courant. (Remarque : dans le système de coordonnées initial, l'orientation de référence est vers le haut). Pour un texte sur un tracé, l'orientation de référence est réactualisée pour chaque caractère.
En fonction de l'orientation de référence et de la valeur de la propriété 'writing-mode', l'agent utilisateur SVG détermine la direction de progression en-ligne. Pour un texte de gauche-à-droite, la direction de progression en-ligne pointe à 90 degrés, dans le sens des aiguilles d'une montre, par rapport au vecteur de l'orientation de référence. Pour un texte de droite-à-gauche, la progression en-ligne pointe à 90 degrés, dans le sens inverse des aiguilles d'une montre, par rapport au vecteur de l'orientation de référence. Pour un texte de haut-en-bas, la direction de progression en-ligne pointe à 180 degrés par rapport au vecteur de l'orientation de référence.
En fonction de l'orientation de référence et de la valeur de la propriété 'writing-mode', l'agent utilisateur SVG détermine la direction de progression de bloc courante. Pour les textes de gauche-à-droite et de droite-à-gauche, la direction de progression de bloc pointe à 180 degrés par rapport au vecteur de l'orientation de référence, car la propriété 'writing-mode' dispose des seules valeurs lr-tb et rl-tb pour les écritures horizontales. Pour un texte de haut-en-bas, la direction de progression de bloc pointe toujours à 90 degrés, dans le sens inverse des aiguilles d'une montre, par rapport au vecteur de l'orientation de référence, la propriété 'writing-mode' ne disposant que de la seule valeur tb-rl pour une écriture de bas-en-haut.
Le glissement de direction est la direction selon laquelle la table de lignes de base se déplace, pour les valeurs positives de la propriété 'baseline-shift'. Le glissement de direction est tel qu'une valeur positive déplace la table de lignes de base, vers l'entrée la plus élevée de la table de lignes de base du parent.
Lors du traitement d'un élément 'text' donné, l'agent utilisateur SVG conserve une trace de la position du texte courante. La position du texte courante initiale est établie par les attributs x et y de l'élément 'text'.
La position du texte courante est ajustée après chaque glyphe pour établir une nouvelle position du texte courante à laquelle le glyphe suivant sera rendu. L'ajustement sur la position du texte courante est basé sur la direction de progression en-ligne courante, sur les valeurs d'avance de glyphe particulières correspondant à l'orientation de glyphe du glyphe tout juste rendu, sur les tables de crénage de la police et sur les valeurs courantes de divers attributs et propriétés, comme les propriétés d'espacement et tout attribut x, y, dx ou dy sur des éléments 'text', 'tspan', 'tref' ou 'altGlyph'. Si un glyphe ne fournit pas de valeurs d'avance explicites correspondant à l'orientation de glyphe courante, alors une approximation adéquate devrait être effectuée. Pour un texte vertical, une approximation suggérée consisterait en la somme des valeurs de hampe et de jambe du glyphe. Une autre approximation pour la valeur de pas, à la fois pour un texte horizontal ou vertical, serait la taille d'un em (voir l'attribut units-per-em).
Pour chaque glyphe devant être rendu, l'agent utilisateur SVG détermine un point d'alignement approprié sur le glyphe qui sera placé exactement à la position du texte courante. La détermination du point d'alignement est basée sur des mesures de la cellule du glyphe dans le glyphe lui-même, sur la direction de progression en-ligne courante et sur l'orientation du glyphe par rapport à la direction de progression en-ligne. Pour la plupart des usages d'un texte latin (i.e., 'writing-mode:lr', 'text-anchor:start', et 'alignment-baseline:baseline'), le point d'alignement dans le glyphe correspondra à l'intersection du bord gauche de la cellule du glyphe (ou toute autre coordonnée sur l'axe-x propre au glyphe indiquant un point d'origine sur le côté gauche) et de la ligne de base latine du glyphe. Pour de nombreux cas avec une disposition du texte verticale de haut-en-bas, le point de référence sera soit un point d'origine propre au glyphe fondé sur le jeu de lignes de base verticales de la police, soit l'intersection du centre du glyphe et avec sa ligne supérieure (voir [CSS2-ligne supérieure vf.] pour la définition de la ligne supérieure). Si un glyphe ne fournit pas de points d'origine explicites correspondant avec l'orientation de glyphe courante, alors une approximation appropriée devrait être exercée, telle que l'intersection du bord gauche du glyphe et de la ligne de base horizontale appropriée pour le glyphe ou l'intersection du bord du haut du glyphe et de la ligne de base verticale appropriée. Si aucune table de lignes de base n'est disponible, l'agent utilisateur devrait établir une table de lignes de base qui reflète les pratiques courantes.
Les ajustements de la position du texte courante sont soit des ajustements en position absolue, soit des ajustements en position relative. Un ajustement en position absolue survient dans les circonstances suivantes :
Tous les autres ajustements de la position du texte courante sont des ajustements en position relative.
Chaque ajustement en position absolu définit une nouvelle portion de texte. Les ajustements en position absolue influent sur la disposition du texte des façons suivantes :
Les règles supplémentaires suivantes s'appliquent à la formation des ligatures :
La propriété 'writing-mode' spécifie que la direction de progression en-ligne d'un élément 'text' sera de gauche-à-droite, de droite-à-gauche ou de bas-en-haut. La propriété 'writing-mode' ne s'applique qu'à un élément 'text' ; elle sera ignorée pour les sous-éléments 'tspan', 'tref', 'altGlyph' et 'textPath'. (Remarquer que la direction de progression en-ligne peut changer dans un élément 'text' du fait de l'algorithme bi-directionnel Unicode et du fait des propriétés 'direction' et 'unicode-bidi'. Pour plus d'information sur le texte bi-directionnel, voir la section Les relations avec la bi-directionnalité).
| Valeur : | lr-tb | rl-tb | tb-rl | lr | rl | tb | inherit vf. |
| Valeur initiale : | lr-tb |
| S'applique à : | ceux des éléments 'text' |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Média : | visuel |
| Animable : | non |
Dans certains cas, il est nécessaire de modifier l'orientation d'une séquence de caractères par rapport à la direction de progression en-ligne. Particulièrement, dans les dispositions verticales de documents extêmes-orientaux, où, parfois, un texte latin à petite cellule de glyphe doit être affiché horizontalement et, d'autre fois, verticalement.
Deux propriétés contrôlent l'orientation du glyphe par rapport à l'orientation de référence, pour chacune des deux directions de progression en-ligne possibles. La propriété 'glyph-orientation-vertical' contrôle l'orientation du glyphe quand la direction de progression en-ligne est verticale et la propriété 'glyph-orientation-horizontal' quand celle-ci est horizontale.
| Valeur : | auto | <angle> | inherit vf. |
| Valeur initiale : | auto |
| S'applique à : | ceux des éléments à contenu textuel |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Média : | visuel |
| Animable : | non |
Les textes idéographiques en pleine largeur et latins en pleine largeur seront établis avec une une orientation de glyphe de 0 degré ;
La ponctuation et les autres caractères idéographiques, qui ont des formes alternatives horizontales et verticales, utiliseront la forme verticale du glyphe ;
Le texte qui n'est pas en pleine largeur sera établi avec une orientation de glyphe de 90 degrés.
Cette règle de ré-orientation ne s'applique qu'au texte non idéographique de premier niveau. Toutes les incorporations ultérieures de modes d'écriture ou de traitement bidi se feront par rapport à la rotation de premier niveau.
REMARQUE :
Ceci est équivalent à paramétrer la chaîne textuelle non idéographique horizontalement en honorant la règle bidi, puis à tourner la séquence résultante des aires en-ligne (une aire pour chaque changement de direction de glyphe) de 90 degrés dans le sens des aiguilles d'une montre ;
Il faudrait remarquer aussi que le texte, paramétré selon cette manière « tournée », peut contenir des ligatures ou d'autres combinaisons et ré-ordonnancements de glyphe communs pour la langue et l'écriture. (Cette forme de présentation « tournée » ne désactive pas la formation des auto-ligatures ou des variations similaires liées à un contexte) ;
La détermination de quels caractères devraient s'auto-tourner peut varier d'un agent utilisateur à l'autre. Cette détermination se fonde sur une interaction complexe entre le pays, la langue, l'écriture, les propriétés des caractères, la police et le contexte du caractère. On suggère la consultation des standards Unicode TR 11, des divers JIS ou d'autres standards nationaux.
Cette propriété ne s'applique qu'à un texte dont la propriété 'writing-mode' indique une écriture verticale.
L'orientation du glyphe influe sur la quantité d'avancement de la position du texte courante à chaque fois qu'un glyphe est rendu. Quand la direction de progression en-ligne est verticale et que la valeur de la propriété 'glyph-orientation-vertical' entraîne une orientation d'angle qui est un multiple de 180 degrés, alors la position du texte courante est incrémentée selon les mesures verticales du glyphe. Autrement, si la valeur de 'glyph-orientation-vertical' résulte en une orientation d'angle qui ne soit pas un multiple de 180 degrés, alors la position du texte courante est incrémentée selon les mesures horizontales du glyphe.
Les schémas de disposition du texte dans cette section emploient les symboles suivants :
- glyphe à cellule large (par exemple, han), le ne glyphe dans le jet de texte
- glyphe à cellule étroite (par exemple, latin), le ne glyphe dans le jet de texte
L'orientation, qui est signifiée par les symboles ci-dessus dans les schémas, correspond à l'orientation que les caractères Unicode, que ces symboles représentent, sont sensés signifier lors de leur rendu par l'agent utilisateur. L'espacement entre les glyphes dans les schémas est en général symbolique, à moins d'être changé à dessein pour illustrer un point.
Les schémas ci-dessous illustrent différents usages de la propriété 'glyph-orientation-vertical'. Le schéma de gauche montre le résultat du mélange de glyphes idéographiques en pleine largeur avec des glyphes latins à cellule étroite quand la valeur de la propriété 'glyph-orientation-vertical' des caractères latins est soit auto, soit 90deg. Le schéma de droite montre le résultat du mélange de glyphes idéographiques en pleine largeur avec des glyphes latins à cellule étroite quand la valeur spécifiée pour la propriété 'glyph-orientation-vertical' est 0.
![]()
![]()
![]()
| Valeur : | <angle> | inherit vf. |
| Valeur initiale : | 0deg |
| S'applique à : | ceux des éléments à contenu textuel |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Média : | visuel |
| Animable : | non |
Cette propriété ne s'applique qu'à un texte dont la propriété 'writing-mode' indique une écriture horizontale.
L'orientation du gly