4 septembre 2001

10 Le texte


Contenu


 

10.1 Introduction

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é :

(Les règles de disposition pour du texte sur une ligne sont décrites dans la section La disposition du texte, celles pour du texte sur un tracé dans la section Les règles de disposition du 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.

10.2 Les caractères et leurs glyphes correspondants

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.].

10.3 Les polices, les tables de police et les lignes de base

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.

10.4 L'élément 'text'

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 :

x = "<coordonnée>+"
Si une seule valeur de <coordonnée> est fournie, alors elle représente la nouvelle coordonnée absolue X de la position du texte courante pour le rendu des glyphes qui correspondent au premier caractère dans cet élément ou l'un de ses descendants.
Si une liste de <n> valeurs de <coordonnée>, séparées par des virgules ou des blancs, est fournie, alors ces valeurs représentent les nouvelles coordonnées absolues X de position du texte courante pour le rendu des glyphes correspondants de chacun des <n> premiers caractères dans cet élément ou l'un de ses descendants.
Pour des règles de traitement complémentaires, se reporter à la description de l'attribut x sur un élément 'tspan'.
Si l'attribut n'est pas spécifié, l'effet est le même que si une valeur de "0" l'avait été.
Animable : oui.
y = "<coordonnée>+"
La liste correspondante des coordonnées absolues Y des glyphes correspondants aux caractères dans cet élément. Les règles de traitement de l'attribut 'y' sont analogues à celles de l'attribut 'x'.
Si l'attribut n'est pas spécifié, l'effet est le même que si une valeur de "0" l'avait été.
Animable : oui.
dx = "<longueur>+"
Effectue un glissement, dans la position du texte courant, le long de l'axe-x, des caractères de cet éléments ou de ses descendants.
Se reporter à la description de l'attribut dx sur l'élément 'tspan'.
Si l'attribut n'est pas spécifié sur cet élément ou l'un de ses descendants, aucun glissement supplémentaire le long de l'axe-x ne survient.
Animable : oui.
dy = "<longueur>+"
Effectue un glissement, dans la position du texte courante, le long de l'axe-y, des caractères de cet élément ou de ses descendants.
Se reporter à la description de l'attribut dy sur l'élément 'tspan'.
Si l'attribut n'est pas spécifié sur cet élément ou l'un de ses descendants, aucun glissement supplémentaire le long de l'axe-y ne survient.
Animable : oui.
rotate = "<nombre>+"
La rotation supplémentaire, concernant la position du texte courante, qui sera appliquée à tous les glyphes correspondants de chaque caractère dans cet élément.
Se reporter à la description de l'attribut rotate sur l'élément 'tspan'.
Si l'attribut n'est pas spécifié sur cet élément ou l'un de ses descendants, aucune rotation supplémentaire n'interviendra.
Animable : oui (non cumulatif, seulement sur les éléments 'set' et 'animate').
textLength = "<longueur>"
Le calcul de l'auteur pour la totalité des valeurs d'avance des glyphes qui correspondent aux données textuelles dans cet élément, y compris la valeur de l'avance du glyphe (horizontale ou verticale), l'effet des propriétés 'kerning', 'letter-spacing' et 'word-spacing' ainsi que les ajustements dus aux attributs dx et dy sur les éléments 'tspan'. Cette valeur est utilisée pour la calibration des propres calculs de l'agent utilisateur à partir de ceux de l'auteur.
La destination de cet attribut est de permettre à l'auteur d'obtenir un alignement exact, dans l'ordre du rendu visuel après tout ré-ordonnancement bi-directionnel, pour les premiers et derniers glyphes rendus qui correspondent à cet élément ; ainsi, pour le dernier caractère rendu (dans l'ordre du rendu visuel après tout ré-ordonnancement bi-directionnel), tous les espacements supplémentaires entre les caractères, au-delà des avances normales des glyphes, sont ignorés (dans la plupart des cas), quand l'agent utilisateur détermine la quantité adéquate d'expansion/compression de la chaîne textuelle pour son logement dans la longueur donnée par l'attribut textLength.
Une valeur négative provoque une erreur (voir le chapitre Le traitemnent des erreurs).
Si l'attribut n'est pas spécifié, l'effet produit est comme si le calcul de l'auteur correspondait exactement à la valeur calculée par l'agent utilisateur ; ainsi, aucun ajustement de l'avance n'est effectuée.
Animable : oui.
lengthAdjust = "spacing|spacingAndGlyphs"
Indique le type d'ajustement que l'agent utilisateur devra effectuer pour que la longueur du texte corresponde avec la valeur spécifiée pour l'attribut textLength.
Une valeur de spacing indique que seules les valeurs d'avance sont ajustées. Les glyphes eux-mêmes ne sont pas étirés ou compressés.
Une valeur de spacingAndGlyphs indique que les valeurs d'avance sont ajustées et les glyphes eux-mêmes sont étirés ou compressés selon un axe (i.e., une direction parallèle à la direction de progression en-ligne).
L'agent utilisateur doit obtenir des positions de début et de fin correctes pour les chaînes textuelles, mais les positions des glyphes intermédiaires ne sont pas prévisibles, les agents utilisateurs pouvant utiliser des algorithmes sophistiqués pour l'étirement ou la compression de ces chaînes textuelles en vue de l'équilibre entre un positionnement correct du début et de la fin et une typographie optimale.
Remarquer que, pour une chaîne textuelle contenant <n> caractères, les ajustements des valeurs de pas ne surviennent souvent que sur <n-1> caractères (voir la description de l'attribut textLength), alors que l'étirement ou la compression des glyphes seront exercées sur tous les <n> caractères.
Si aucun attribut n'est spécifié, l'effet produit est comme si une valeur de spacing était spécifiée.
Animable : oui.
Attributs définis ailleurs :
%stdAttrs;, %testAttrs;, %langSpaceAttrs;, externalResourcesRequired, class, style, %PresentationAttributes-Color;, %PresentationAttributes-FillStroke;, %PresentationAttributes-FontSpecification;, %PresentationAttributes-Graphics;, %PresentationAttributes-TextContentElements;, %PresentationAttributes-TextElements;, transform, %graphicsElementEvents;.

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>
Exemple text01
Exemple text01 - 'Bonjour, vous' en bleu

Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
 

10.5 L'élément 'tspan'

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 :

x = "<coordonnée>+"
Si une seule valeur de <coordonnée> est fournie, alors cette valeur représente la nouvelle coordonnée absolue X de la position du texte courante pour le rendu des glyphes qui correspondent au premier caractère dans cet élément et ses descendants.
Si on fournit une liste de <n> valeurs de <coordonnée>, séparées par des virgules ou des blancs, alors ces valeurs représentent les nouvelles coordonnées absolues X de la position du texte courante pour le rendu des glyphes correspondants de chacun des <n> premiers caractères dans cet élément ou l'un de ses descendants.
Si plus de valeurs de <coordonnée> que de caractères sont fournies, alors les valeurs de <coordonnée> en plus n'auront aucun effet sur le positionnement des glyphes.
Quand il existe plus de caractères que de valeurs de <coordonnée>, alors pour chacun de ces caractères en plus : (a) si un élément ancêtre 'text', ou 'tspan', spécifie une coordonnée absolue X via un attribut x, alors cette coordonnée absolue est utilisée comme coordonnée X de début pour ce caractère (l'ancêtre le plus proche à préséance), autrement (b) la coordonnée X de début pour le rendu des glyphes correspondants du caractère donné est la coordonnée X de la position du texte courante résultante issue du glyphe rendu le plus récent pour l'élément 'text' courant.
Quand l'attribut n'est pas spécifié : (a) si un élément ancêtre 'text', ou 'tspan', spécifie une coordonnée absolue X pour un caractère donné via un attribut x, alors cette coordonnée absolue X est utilisée (l'ancêtre le plus proche a préséance), autrement (b) la coordonnée X de début pour le rendu des glyphes correspondants du caractère donné est la coordonnée X de la position du texte courante résultante issue du glyphe rendu le plus récent pour l'élément 'text' courant.
Animable : oui.
y = "<coordonnée>+"
La liste correspondante des coordonnées absolues Y pour les glyphes correspondants aux caractères dans cet élément. Les règles de traitement de l'attribut 'y' sont analogues à celles de l'attribut 'x'.
Animable : oui.
dx = "<longueur>+"
Si une seule valeur de <longueur> est fournie, celle-ci représente la nouvelle coordonnée relative X de la position du texte courante pour le rendu des glyphes correspondants du premier caractère dans cet élément ou l'un de ses descendants. La position du texte courante est glissée le long de l'axe-x du système de coordonnées utilisateur courant de la valeur de <longueur> avant que les glyphes du premier caractère ne soient rendus.
Si une liste de <n> valeurs de <longueur>, séparées par des virgules ou des blancs, est fournie, alors les valeurs représentent des glissements incrémentés le long de l'axe-x pour la position du texte courante avant le rendu des glyphes correspondants des <n> premiers caractères dans cet élément ou l'un de ses descendants. Ainsi, avant que les glyphes correspondants de chaque caractères soient rendus, la position du texte courante résultante, du dessin des glyphes du caractère précédent dans l'élément 'text' courant, est glissée le long de l'axe-x du système de coordonnées utilisateur courant de la valeur de <longueur>.
Si plus de valeurs de <longueur> que de caractères sont fournies, alors aucune des valeurs de <longueur> en plus n'aura d'effet sur le positionnement des glyphes.
Quand il existe plus de caractères que de valeurs de <longueur>, alors pour chacun de ces caractères en plus : (a) si un élément ancêtre 'text', ou 'tspan', spécifie une coordonnée relative X pour le caractère donné via un attribut dx, alors la position du texte courante est glissée le long de l'axe-x du système de coordonnées utilisateur courant de cette quantité (l'ancêtre le plus proche a préséance), autrement (b) aucun glissement supplémentaire le long de l'axe-x n'intervient.
Quand l'attribut n'est pas spécifié : (a) si un élément ancêtre 'text', ou 'tspan', spécifie une coordonnée relative X pour un caractère donné via un attribut dx, alors la position du texte courante est glissée le long de l'axe-x du système de coordonnées utilisateur courant de cette quantité (l'ancêtre le plus proche a préséance), autrement (b) aucun glissement supplémentaire le long de l'axe x ne survient.
Animable : oui.
dy = "<longueur>+"
La liste correspondante des coordonnées relatives Y pour les caractères dans l'élément 'tspan'. Les règles de traitement de l'attribut 'dy' sont analogues à celles de l'attribut 'dx'.
Animable : oui.
rotate = "<nombre>+"
La rotation supplémentaire concernant la position du texte courante, qui sera appliquée à tous les glyphes correspondants de chaque caractère dans cet élément.
Si une liste de valeurs de <nombre>, séparées par des virgules ou des blancs, est fournie, alors la première valeur de <nombre> représente la rotation supplémentaire des glyphes correspondants du premier caractère dans cet élément ou l'un de ses descendants, la deuxième valeur de <nombre> la rotation supplémentaire des glyphes correspondants du deuxième caractère et ainsi de suite.
Si plus de valeurs de <nombre> que de caractères sont fournies, alors les valeurs de <nombre> en plus, seront ignorées.
Quand plus de caractères que de valeurs de <nombre> sont fournis, alors pour chacun de ces caractères en plus : (a) si un élément ancêtre 'text', ou 'tspan', spécifie une rotation supplémentaire pour le caractère donné via un attribut rotate, alors la rotation supplémentaire en question est appliquée sur le caractère donné, autrement (b) aucune rotation supplémentaire ne survient.
Quand l'attribut n'est pas spécififé : (a) si un élément ancêtre 'text', ou 'tspan', spécifie une rotation supplémentaire pour un caractère donné via un attribut rotate, alors la rotation supplémentaire en question est appliquée sur le caractère donné (l'ancêtre le plus proche a préséance), autrement (b) aucune rotation supplémentaire n'intervient.
Cette rotation supplémentaire n'influe pas sur les règles selon lesquelles la position du texte courante est modifiée, au fur et à mesure du rendu des glyphes, et se rajoute à toute rotation due au texte sur un tracé et aux propriétés 'glyph-orientation-horizontal' ou 'glyph-orientation-vertical'.
Animable : oui (non cumulatif, seulement sur les éléments 'set' et 'animate').
textLength = "<longueur>"
Le calcul de l'auteur pour la totalité des valeurs d'avance qui correspondent aux données textuelles dans cet élément, y compris la valeur d'avance du glyphe (horizontale ou verticale), l'effet des propriétés 'kerning', 'letter-spacing' et 'word-spacing' ainsi que les ajustements dus aux attributs dx et dy sur cet élément 'tspan' ou sur un de ses descendants. Cette valeur est utilisée pour la calibration des propres calculs de l'agent utilisateur par rapport à ceux de l'auteur.
La destination de cet attribut est de permettre à l'auteur d'obtenir un alignement exact, dans l'ordre de rendu visuel après tout ré-ordonnancement bi-directionnel, du premier et du dernier glyphes rendus qui correspondent à cet élément ; ainsi, pour le dernier caractère rendu (dans l'ordre de rendu visuel après tout ré-ordonnancement bi-directionnel), tous les espacements supplémentaires entre les caractères, en dehors des avances de glyphe normales, sont ignorés (dans la plupart des cas) quand l'agent utilisateur détermine la quantité adéquate d'expansion/compression de la chaîne textuelle pour la loger dans la longueur indiquée par l'attribut textLength.
Si l'attribut textLength est spécifié sur un élément donné ainsi que sur un ancêtre, les ajustements de toutes les données textuelles dans cet élément sont contrôlés par la valeur de l'attribut textLength de cet élément exclusivement, avec l'effet secondaire possible que le ratio d'ajustement pour le contenu de cet élément puisse être différent de celui utilisé pour un autre contenu partageant le même ancêtre. L'agent utilisateur doit considérer que la totalité des valeurs de pas, pour cet autre contenu dans l'ancêtre en question, est la différence entre la valeur d'avance de cet ancêtre et celle de cet élément.
Une valeur négative provoque une erreur (voir le chapitre Le traitement des erreurs).
Si l'attribut est spécifié nulle part dans un élément 'text', l'effet produit est comme si le calcul de l'auteur correspondait exactement avec la valeur calculée par l'agent utilisateur ; ainsi, aucun ajustement de pas n'intervient.
Animable : oui.
Attributs définis ailleurs :
%stdAttrs;, %langSpaceAttrs;, class, %graphicsElementEvents;, %testAttrs;, externalResourcesRequired, style, %PresentationAttributes-Color;, %PresentationAttributes-FillStroke;, %PresentationAttributes-FontSpecification;, %PresentationAttributes-Graphics;, %PresentationAttributes-TextContentElements;, lengthAdjust.

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 :

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>
Exemple tspan01
Exemple tspan01 - utilisation de 'tspan' pour changer d'attributs visuels

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>
Exemple tspan02
Exemple tspan02 - utilisations des attributs dx et dy pour des ajustements de position incrémentiels

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>
Exemple tspan03
Exemple tspan03 - utilisation des attributs x et y pour un texte sur plusieurs lignes et pour le positionnement précis du glyphe

Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
 

10.6 L'élément 'tref'

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 :

xlink:href = "<uri>"
Une référence d'URI vers un élément/fragment d'un fragment de document SVG dont le contenu en données textuelles sera utilisé comme données textuelles pour cet élément 'tref'.
Animable : oui.
Attributs définis ailleurs :
%stdAttrs;, %xlinkRefAttrs;, %testAttrs;, %langSpaceAttrs;, externalResourcesRequired, class, style, %PresentationAttributes-Color;, %PresentationAttributes-FillStroke;, %PresentationAttributes-FontSpecification;, %PresentationAttributes-Graphics;, %PresentationAttributes-TextContentElements;, %graphicsElementEvents;, x, y, dx, dy, rotate, textLength, lengthAdjust.

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>
Exemple tref01
Exemple tref01 - contenus textuels en-ligne et appelé

Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
 

10.7 La disposition du texte

10.7.1 Introduction à la disposition du texte

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 :

10.7.2 Le paramétrage de la direction de progression en-ligne

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é).

'writing-mode'
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
lr-tb | lr
Indique une direction de progression en-ligne de gauche-à-droite, commune dans la plupart des documents basés sur une écriture latine. Pour la plupart des caractères, la position du texte courante est avancée de gauche-à-droite après que chaque glyphe est rendu. (Quand les données textuelles comprennent des caractères sujet au traitement de l'algorithme bi-directionnel Unicode, les règles d'avancement sont plus complexes. Voir la section Les relations avec la bi-directionnalité).
rl-tb | rl
Indique une direction de progression en-ligne de droite à gauche, commune dans les écritures arabe et hébreue. (Voir la section Les relations avec la bi-directionnalité).
tb-rl | tb
Indique une direction de progression en-ligne de haut-en-bas, commune pour certaines écritures aisatiques, comme le chinois et le japonais. Bien que peut fréquent par rapport à l'horizontal, ce type de disposition vertical survient également dans les documents avec une écriture latine, notamment dans les colonnes des tables ou les labels des rangées. Dans la plupart des cas, les lignes de base verticales passant au milieu de chaque glyphe sont alignées.

10.7.3 L'orientation du glyphe dans un jet de texte

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.

'glyph-orientation-vertical'
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
auto
<angle>
Les valeurs d'angle se restreignent à 0, 90, 180 et 270 degrés. L'agent utilisateur devra arondir la valeur d'un angle à la plus proche parmi celles permises.
Une valeur de 0deg indique que tous les glyphes ont leur sommet orienté vers l'orientation de référence. Une valeur de 90deg indique une orientation de 90 degrés dans le sens des aiguilles d'une montre par rapport à l'orientation de référence.

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 :

Représentation symbolique d'un glyphe à cellule large - glyphe à cellule large (par exemple, han), le ne glyphe dans le jet de texte
Représentation symbolique d'un glyphe à cellule étroite - 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.

Disposition de glyphes mélangés dans un mode idéographique vertical. Les glyphes à cellule large sont verticaux, ceux qui ne sont pas à cellule large sont tournés de 90 degrés.Exemple de textes japonais et anglais mélangés dans un mode idéographique vertical. Les glyphes japonais sont verticaux, les anglais tournés                    Disposition de glyphes mélangés en mode vertical. Tous les glyphes sont verticaux.Exemple de japonais et d'anglais mélangés dans une disposition verticale tous les glyphes sont verticaux.

'glyph-orientation-horizontal'
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
<angle>
Les valeurs d'angle se restreignent à 0, 90, 180 et 270 degrés. L'agent utilisateur devra arondir la valeur d'un angle à la plus proche parmi celles permises.
Une valeur de 0deg indique que tous les glyphes ont leur sommet orienté vers l'orientation de référence. Une valeur de 90deg indique une orientation de 90 degrés dans le sens des aiguilles d'une montre par rapport à l'orientation de référence.

Cette propriété ne s'applique qu'à un texte dont la propriété 'writing-mode' indique une écriture horizontale.

L'orientation du glyphe influe sur la quantité d'avancement de la position du texte courante à chaque fois qu'un texte est rendu. Quand la direction de l'orientation de référence est horizontale et que la valeur de la propriété 'glyph-orientation-horizontal' 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 horizontales du glyphe. Autrement, si la valeur de 'glyph-orientation-horizontal' résulte en une orientation d'angle qui n'est pas un multiple de 180 degrés, alors la position du texte courante est incrémentée selon les mesures verticales du glyphe.

10.7.4 Les relations avec la bi-directionnalité

Les caractères dans certaines écritures s'écrivent de droite-à-gauche. Dans certains documents, particulièrement ceux en arabe ou en hébreu et dans des contextes de langues mélangées, le texte dans une seule ligne peut apparaître avec une directionnalité mixte. On appelle ce phénomène bi-directionnalité ou « bidi » en bref.

Le standard Unicode ([UNICODE], section 3.11) définit un algorithme complexe pour déterminer la directionnalité correcte d'un texte. L'algorithme se compose d'une partie implicite, basée sur les propriétés des caractères, et d'une partie explicite, pour le contrôle des incorporations et des surclassements. L'agent utilisateur SVG applique cet algorithme bi-directionnel pour la détermination de la disposition des caractères dans un élément 'text'. Les propriétés 'direction' et 'unicode-bidi' permettent aux auteurs de surclasser la directionnalité inhérente des caractères d'un contenu et, ainsi, de contrôler explicitement comment les éléments et les attributs d'un langage de document correspondent avec cet algorithme. Ces deux propriétés peuvent s'appliquer à tous les caractères dont les glyphes sont perpendiculaires à la direction de progression en-ligne.

Dans la plupart des cas, l'algorithme bi-directionnel [UNICODE] produit automatiquement le résultat voulu et surclasser correctement cet algorithme se révèle en général assez complexe. C'est pourquoi, la plupart du temps, on n'encourage pas les auteurs à assigner des valeurs à ces propriété.

On peut trouver une discussion plus complète sur la bi-directionnalité dans la spécification « Les feuilles de style en cascade (CSS), niveau 2 » [CSS2-direction vf.].

Le modèle de traitement pour un texte bi-directionnel est le suivant. L'agent utilisateur traite les caractères fournis dans un ordre logique (i.e., l'ordre dans lequel les caractères surviennent dans le document original soit par inclusion directe, soit par référence indirecte avec un élément 'tref'). L'agent utilisateur détermine le jeu des blocs indépendants dans chacun desquels il devrait exercer l'algorithme bi-directionnel Unicode. Chaque portion de texte représente un bloc de texte indépendant. De plus, tout changement de l'orientation du glyphe dû au traitement des propriétés 'glyph-orientation-horizontal' ou 'glyph-orientation-vertical' va subdiviser encore plus ces blocs de texte indépendants. Une fois effectués les traitements de l'algorithme bi-directionnel Unicode et des propriétés 'direction' et 'unicode-bidi' sur chacun des blocs de texte indépendants, l'agent utilisateur disposera éventuellement d'une liste de caractères ré-ordonnés, maintenant dans un ordre de rende de gauche-à-droite. Simultanément au ré-ordonnancement des caractères, les attributs dx, dy et rotate, sur les éléments 'tspan' et 'tref', sont aussi ré-ordonnés pour rétablir la correspondance originale entre les caractères et les valeurs de ces attributs. Bien que la gestion du crénage ou de la ligature puissent être propres à la police, il est préférable que leur traitement survienne entre les combinaisons de caractères, ou de glyphes, après que les caractères ont été ré-ordonnés.

'direction'
Valeur :   ltr | rtl | inherit vf.
Valeur initiale :   ltr
S'applique à :   ceux des éléments à contenu textuel
Héritée :   oui
Pourcentages :   sans objet
Média :   visuel
Animable :   non

Cette propriété spécifie la direction d'écriture de base du texte et la direction des incorporations et des surclassements (voir la propriété 'unicode-bidi') pour l'algorithme bi-directionnel Unicode. Pour que la propriété 'direction' puisse agir, la valeur de la propriété 'unicode-bidi' doit être "embed" ou "bidi-override".

Exceptés les compléments apportés par cette spécification, la définition normative de la propriété se trouve dans [CSS2-direction vf.].

La propriété 'direction' ne s'applique qu'aux glyphes orientés perpendiculairement à la direction de progression en-ligne, dont le cas habituel des textes latins ou arabes à orientation horizontale et celui des caractères latins ou arabes, à cellule étroite, tournés de 90 degrés dans le sens des aiguilles d'une montre par rapport à une direction de progression en-ligne de haut-en-bas.

'unicode-bidi'
Valeur :   normal | embed | bidi-override | inherit vf.
Valeur initiale :   normal
S'applique à :   ceux des éléments à contenu textuel
Héritée :   non
Pourcentages :   sans objet
Média :   visuel
Animable :   non

Exceptés les compléments apportés par cette spécification, la définition normative de la propriété se trouve dans [CSS2-unicode-bidi vf.].

10.8 L'ordre de rendu du texte

Les glyphes associés aux caractères d'un élément 'text' sont rendus dans l'ordre logique des caractères dans le document original, indépendamment de tout ré-ordonnancement nécessaire à l'implémentation de la bi-directionnalité. Ainsi, pour un texte visuellement de droite-à-gauche, les glyphes associés au caractère le plus à droite sont rendus avant ceux associés aux autres caractères.

De plus, chaque glyphe distinct est rendu dans son intégralité (i.e., avec le remplissage et le trait spécifié par les propriétés 'fill' et 'stroke') avant que les glyphes suivants ne soient rendus.

10.9 Les propriétés d'alignement

10.9.1 Les propriétés d'alignement de texte

La propriété 'text-anchor' est utilisée pour l'alignement (au début, au milieu ou à la fin) d'une chaîne textuelle par rapport à un point donné.

La propriété 'text-anchor' s'applique à chaque portion de texte individuelle dans un élément 'text' donné. Chaque portion de texte possède une position du texte courante, qui représente le point, dans le système de coordonnées utilisateur, résultant de l'application (selon le contexte) des attributs x et y sur un élément 'text', de toute valeur des attributs x ou y sur un élément 'tspan', 'tref' ou 'altGlyph', assignés explicitement au premier caractère rendu d'une portion de texte, ou de la détermination de la position du texte courante d'un élément 'textPath'.

'text-anchor'
Valeur :   start | middle | end | inherit vf.
Valeur initiale :   start
S'applique à :   ceux des éléments à contenu textuel
Héritée :   oui
Pourcentages :   sans objet
Média :   visuel
Animable :   oui

Les significations des valeurs sont les suivantes :

start
Les caractères rendus sont alignés tel que le début de la chaîne textuelle se trouve à la position du texte courante initiale. Pour les écritures latines ou arabes, rendues habituellement à l'horizontale, ceci correspond à un alignement à gauche. Pour un texte asiatique, principalement avec une direction de texte verticale, ceci est comparable à un alignement en haut.
middle
Les caractères rendus sont alignés tel que le milieu de la chaîne textuelle se trouve à la position du texte courante. (Pour un texte sur un tracé, la chaîne textuelle est conceptuellement disposée sur une ligne droite. Le point milieu entre le début et la fin de la chaîne est déterminé. Puis, la chaîne textuelle est plaquée sur le tracé et son point milieu placé sur la position du texte courante).
end
Les caractères rendus sont alignés tel que la fin de la chaîne textuelle se trouve à la position du texte courante initiale. Pour un texte latin dans son orientation habituelle, ceci est comparable à un alignement à droite.

« errata 2002-11-15 »

10.9.2 Les propriétés d'alignement sur les lignes de base

On peut trouver plus haut un aperçu sur l'alignement des lignes de base et sur les tables de lignes de base à la section Les polices, les tables de police et les lignes de base.

L'une des caractéristiques d'un texte international est qu'il existe différentes lignes de base (différents point d'alignement) pour les glyphes de différentes écritures. Par exemple, dans un sens horizontal, les écritures idéographiques, telles que les idéogrammes han, katakana, hiragana et hangul, ont un alignement sur une ligne de base proche du bas des glyphes ; les écritures fondées sur un alphabet, telles les latines, le cyrillique, l'hébreu ou l'arabe, ont un alignement sur le bas pour la plupart des glyphes, certains glyphes descendant plus bas que la ligne de base ; les écritures indiennes ont un alignement proche du haut des glyphes.

Quand différentes écritures sont mélangées dans une ligne de texte, un ajustement doit être effectué pour assurer un alignement correct des glyphes des diverses écritures l'un par rapport à l'autre. Les polices OpenType [OPENTYPE] possède une table de lignes de base (BASE) [OPENTYPE-BASETABLE] qui spécifie les décalages des lignes de base alternatives par rapport à la ligne de base courante.

SVG suit un modèle de table de lignes de base similaire qui suppose qu'une écriture (dans une taille de police donné) forme le « jet dominant » lors du traitement d'un élément 'text' ; c'est-à-dire, toutes les autres lignes de base se définissent par rapport à ce jet dominant. La ligne de base de l'écriture de jet dominant s'appelle la ligne de base dominante. Ainsi, par exemple, si la ligne de base alphabétique est celle dominante, des décalages interviendront dans la table de lignes de base pour les autres lignes de base, comme les lignes de base idéographique et indienne. Un décalage interviendra aussi pour la ligne de base mathématique, utilisée pour certaines polices mathématiques. Remarquer qu'il existe des tables de lignes de base séparées pour les écritures horizontales et verticales. Les décalages dans ces tables peuvent différer entre une écriture horizontale et une verticale.

La table de lignes de base établie, au début du traitement d'un élément 'text' est appelée table de lignes de base dominante.

La valeur de la propriété 'font-family' étant une liste de polices, pour assurer le choix cohérent d'une table de lignes de base, on définit la police nominale d'une liste de polices comme étant la première de la liste pour laquelle un glyphe est disponible. C'est la première police susceptible de contenir un glyphe pour chaque caractère rencontré. (Pour cette définition, les données de glyphe sont sensées être présentes si une substitution de police a lieu ou si la police est synthétisée). Cette définition assure une détermination de la police et de la table de lignes de base à utiliser, indépendamment du contenu.

La valeur de la propriété 'font-size' sur l'élément 'text' établit la taille de police de la table de lignes de base dominante.

Le modèle suppose que chaque glyphe ait une valeur de propriété 'alignment-baseline' qui spécifie la ligne de base sur laquelle il s'aligne. (La ligne de base d'alignement est appelée « Baseline Tag » dans la description de la table de lignes de base OpenType). La valeur initiale de la propriété 'alignment-baseline' utilise l'identifiant de ligne de base associé au glyphe donné. Il peut être utile d'avoir des valeurs alternatives pour la 'alignment-baseline' quand on a affaire à des glyphes, comme « * », qui peuvent se montrer ambigu quant à leur appartenance à une écriture.

Le modèle suppose que la police, de laquelle le glyphe est dessiné, possède également une table de lignes de base, la table de lignes de base de la police. Cette table de ligne de base contient les décalages, exprimés en unités par em à partir du point (0,0), par rapport à chacune des lignes de base dont la police est informée. En particulier, elle contient le décalage entre le point (0,0) du glyphe et la ligne de base identifiée par la propriété 'alignment-baseline'.

Les valeurs de décalage de la table de lignes de base sont en « unités de dessin », c'est-à-dire, en unités fractionnaires du EM. Pour CSS, il s'agit d'« unités par em » [CSS2-units-per-em vf.]. Ainsi, la valeur courante de la propriété 'font-size' est utilisée pour la détermination du décalage effectif entre la ligne de base dominante et les autres lignes de base.

Le glyphe s'aligne de telle façon que sa ligne de base, identifiée par la valeur de sa propriété 'alignment-baseline', soit alignée avec la ligne de base de même nom dans la table de lignes de base dominante.

Le décalage, entre la ligne de base dominante du parent et celle identifiée par 'alignment-baseline', se calcule en utilisant la table de lignes de base dominante et la taille de police de la table de lignes de base dominante. La police de la table de lignes de base et la taille de police qui s'appliquent au glyphe sont utilisés pour le calcul du décalage entre la ligne de base identifiée et le point (0,0) du glyphe. Ce second décalage est soustrait du premier décalage pour obtenir la position du point (0,0) dans la direction de glissement. Les deux décalages se calculent en multipliant la valeur de la table de lignes de base par la valeur de la taille de police appropriée.

Si la propriété 'alignment-baseline' identifie la ligne de base dominante, alors le premier décalage est zéro et le glyphe s'aligne sur la ligne de base dominante ; sinon, le glyphe s'aligne sur l'autre ligne de base choisie.

Les identifiants de ligne de base ci-dessous sont utilisés dans cette spécification. Certains d'entre eux sont déterminés par les tables de lignes de base contenues dans une police, comme décrit dans [La description XSL des polices et des données de police vf.]. D'autres sont calculés à partir d'autres caractéristiques de police comme décrit ci-dessous.

alphabetic

Ceci identifie la ligne de base employée par la plupart des écritures alphabétiques et syllabiques. Parmi celles-ci, mais pas exhaustivement, de nombreuses écritures occidentales, indiennes du Sud, asiatiques du Sud-Est (non idéographiques).

ideographic

Ceci identifie la ligne de base employée par les écritures idéographiques. Pour des raisons historiques, cette ligne de base se trouve en bas de la boîte EM idéographique et non au centre de celle-ci. Voir la ligne de base "central". Les écritures idéographiques comprennent le chinois, le japonais, le coréen et le vietnamien Chu Nom.

hanging

Ceci identifie la ligne de base employée par certaines écritures indiennes. Parmi celles-ci, le devanagari, le gurmukhi et le bengali.

mathematical

Ceci identifie la ligne de base employée pour les symboles mathématiques.

central

Ceci identifie une ligne de base calculée qui se trouve au centre de la boîte EM. Cette ligne de base se tient à mi-chemin entre les lignes de base "text-before-edge" et "text-after-edge".

REMARQUE :

Pour les polices idéographiques, cette ligne de base est souvent utilisée pour l'alignement des glyphes ; elle représente une alternative pour la ligne de base "ideographic".

middle

Ceci identifie une ligne de base qui est décalée, par rapport à la ligne de base "alphabetic" dans la direction de glissement, de la moitié de la valeur de la caractéristique hauteur-x de la police. La position de cette ligne de base peut s'obtenir à partir des données de police ou, pour les polices qui disposent d'une caractéristique "x-height", être calculée en utilisant la moitié de "x-height". En l'absence de ces informations, la ligne de base "central" peut constituer une approximation pour cette ligne de base.

text-before-edge

Ceci identifie le bord d'avant de la boîte EM. On peut spécifier la position de cette ligne de base dans la table de lignes de base ou la calculer.

REMARQUE :

Cette ligne de base se tient normalement vers le haut, ou sur le haut, des hampes, mais elle n'englobe pas les accents qui peuvent survenir au-dessus d'un glyphe. Pour ces polices, on utilise la caractéristique de police "ascent". Pour les polices idéographiques, cette ligne de base est normalement située à 1 EM, dans la direction de glissement, de la ligne de base "ideographic". Cependant, certaines polices idéographiques ont une largeur réduite dans la direction de progression en-ligne, pour permettre une disposition plus serrée. Quand une telle police, seulement destinée aux modes d'écriture verticaux, est utilisée dans un mode horizontal, la ligne de base "text-before-edge" peut se trouver à moins de 1 EM du bord d'après du texte.

text-after-edge

Ceci identifie le bord d'après de la boîte EM. identifies the after-edge of the EM box. On peut spécifier la position de cette ligne de base dans la table de lignes de base ou la calculer.

REMARQUE :

Pour les polices avec des jambes, cette ligne de base est normalement située vers le bas, ou en bas, des jambes. Pour ces polices, on utilise la valeur de la caractéristique de police "descent". Pour les polices idéographiques, elle se confond normalement avec la ligne de base "ideographic".

Il existe, en plus, deux lignes de base calculées qui ne sont définies que pour les aires de ligne. Comme la notion de calculs basés sur les aires de ligne est étrangère à SVG, ces lignes de base calculées ont les correspondances suivantes :

before-edge
Pour SVG, équivaut à text-before-edge.
after-edge
Pour SVG, équivaut à text-after-edge.

Également, il existe quatre lignes de base qui ne sont définies que pour les modes d'écriture horizontaux.

top

C'est la même que la ligne de base "before-edge" dans un mode d'écriture horizontal, non définie pour un mode vertical.

text-top

C'est la même que la ligne de base "text-before-edge" dans un mode d'écriture horizontal, non définie pour un mode vertical.

bottom

C'est la même que la ligne de base "after-edge" dans un mode d'écriture horizontal, non définie pour un mode vertical.

text-bottom

C'est la même que la ligne de base "text-after-edge" dans un mode d'écriture horizontal, non définie pour un mode vertical.

Les propriétés d'alignement des lignes de base suivent.

 

'dominant-baseline'
Valeur :   auto | use-script | no-change | reset-size | alphabetic | hanging | ideographic | mathematical | central | middle | text-after-edge | text-before-edge | text-top | text-bottom | inherit vf.
Valeur initiale :   auto
S'applique à :   ceux des éléments à contenu textuel
Héritée :   non
Pourcentages :   sans objet
Média :   visuel
Animable :   oui

On utilise la propriété 'dominant-baseline' pour déterminer ou redéterminer une table de lignes de base ajustée. Une table de lignes de base ajustée est une valeur composée avec trois composants : un identifiant de ligne de base pour la ligne de base dominante, une table de lignes de base et une taille de police de table de lignes de base. Certaines valeurs de la propriété re-déterminent toutes les trois valeurs, d'autres seulement la taille de police de la table de lignes de base. Si la valeur initiale "auto" ne donne pas les résultats voulus, on peut utiliser cette propriété pour paramétrer explicitement la table de lignes de base ajustée souhaitée.

Les significations des valeurs de la propriété sont les suivantes :

auto

Si cette propriété survient sur un élément 'text', alors la valeur calculée dépend de celle de la propriété 'writing-mode'. Si la valeur de 'writing-mode' correspond à un mode d'écriture horizontal, alors la valeur du composant ligne de base dominante est "alphabetic", sinon si elle correspond à un mode vertical, alors la valeur du composant ligne de base dominante est "central".

Si cette propriété survient sur un élément 'tspan', 'tref', 'altGlyph' ou 'textPath', alors les valeurs des composants ligne de base dominante et table de lignes de base restent celles de l'élément à contenu textuel parent. Si la valeur calculée de la propriété 'baseline-shift' déplace effectivement la ligne de base, alors le composant taille de police de la table de lignes de base prend la valeur de la propriété 'font-size' de l'élément sur lequel survient la propriété 'dominant-baseline', sion la taille de police de la table de lignes de base reste la même que celle de l'élément. S'il n'y a pas d'élément à contenu textuel parent, la valeur de la table de ligne de base ajustée est construite comme ci-dessus pour les éléments 'text'.

use-script
Les valeurs des composants ligne de base dominante et table de lignes de base sont établies par la détermination de l'écriture prédominante du contenu de données textuelles. La valeur de la propriété 'writing-mode', qu'elle corresponde à un mode d'écriture horizontal ou vertical, est utilisée pour la sélection du jeu approprié de tables de lignes de base et la ligne de base dominante est utilisée pour la sélection de la table de lignes de base qui corresponde à cette ligne de base. La valeur du composant taille de police de la table de lignes de base prend la valeur de la propriété 'font-size' de l'élément sur lequel la propriété 'dominant-baseline' survient.
no-change
Les valeurs des composants ligne de base dominante, table de lignes de base et taille de police de table de lignes de base restent les mêmes que celles de l'élément à contenue de texte parent.
reset-size
Les valeurs des composants ligne de base dominante et table de lignes de base restent les mêmes, mais la valeur de taille de police de table de lignes de base est changée pour celle de la propriété 'font-size' de cet élément. Ceci a pour effet le ré-ajustement de la table de lignes de base en fonction de la propriété 'font-size' courante.
alphabetic
La valeur de l'identifiant pour la ligne de base dominante s'établit à "alphabetic", la table de lignes de base dérivée est construite en utilisant la table de lignes de base "alphabetic dans la police nominale et la taille de police de table de lignes de base est changée pour la valeur de la propriété 'font-size' sur cet élément.
hanging
La valeur de l'identifiant pour la ligne de base dominante s'établit à "hanging", la table de lignes de base dérivée est construite en utilisant la table de lignes de base "hanging" dans la police nominale et la taille de police de table de lignes de base est changée pour la valeur de la propriété 'font-size' sur cet élément.
ideographic
La valeur de l'identifiant pour la ligne de base dominante s'établit à "ideographic", la table de lignes de base dérivée est construite en utilisant la table de lignes de base "ideographic" dans la police nominale et la taille de police de table de lignes de base est changée pour la valeur de la propriété 'font-size' sur cet élément.
mathematical
La valeur de l'identifiant pour la ligne de base dominante s'établit à "mathematical", la table de lignes de base dérivée est construite en utilisant la table de lignes de base "mathematical" dans la police nominale et la taille de police de table de lignes de base est changée pour la valeur de la propriété 'font-size' sur cet élément.
central
La valeur de l'identifiant pour la ligne de base dominante s'établit à "central". La table de lignes de base dérivée est construite à partif des lignes de base définies dans une table de lignes de base de la police nominale. Cette table de lignes de base est choisie selon l'ordre de priorité de nom de table de ligne de base suivant : "ideographic", "alphabetic", "hanging", "mathematical". La taille de police de table de lignes de base est changée pour la valeur de la propriété 'font-size' sur cet élément.
middle
La valeur de l'identifiant pour la ligne de base dominante s'établit à "middle". La table de lignes de base dérivée est construite à partif des lignes de base définies dans une table de lignes de base de la police nominale. Cette table de lignes de base est choisie selon l'ordre de priorité de nom de table de ligne de base suivant : "alphabetic", "ideographic", "hanging", "mathematical". La taille de police de table de lignes de base est changée pour la valeur de la propriété 'font-size' sur cet élément.
text-after-edge
La valeur de l'identifiant pour la ligne de base dominante s'établit à "text-after-edge". La table de lignes de base dérivée est construite à partir des lignes de base définies dans une table de lignes de base de la police nominale. Le choix de la police de table de lignes de base dans les tables de lignes de base de la police nominale dépend de l'implémentation. La taille de police de la table de lignes de base est changée pour la valeur de la propriété 'font-size' sur cet élément.

REMARQUE : l'utilisation de l'ordre de priorité des noms de table de lignes de base suivant est probablement une stratégie raisonnable pour déterminer quelle table de lignes de base utiliser : "alphabetic", "ideographic", "hanging", "mathematical".
text-before-edge
La valeur de l'identifiant pour la ligne de base dominante s'établit à "text-before-edge". La table de lignes de base dérivée est construite à partir des lignes de base définies dans une table de lignes de base de la police nominale. Le choix de la police de table de lignes de base dans les tables de lignes de base de la police nominale dépend de l'implémentation. La taille de police de la table de lignes de base est changée pour la valeur de la propriété 'font-size' sur cet élément.

REMARQUE : l'utilisation de l'ordre de priorité des noms de table de lignes de base suivant est probablement une stratégie raisonnable pour déterminer quelle table de lignes de base utiliser : "alphabetic", "ideographic", "hanging", "mathematical".
text-top
Voir la définition de la ligne de base "text-top".
text-bottom
Voir la définition de la ligne de base "text-bottom".

Si la police nominale ne contient pas de table de lignes de base ou si celle-ci manque d'une entrée pour la ligne de base voulue, alors l'agent utilisateur peut employer des moyens heuristiques pour déterminer la position de cette ligne de base souhaitée.

 

'alignment-baseline'
Valeur :   auto | baseline | before-edge | text-before-edge | middle | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | inherit vf.
Valeur initiale :   auto
S'applique à :   ceux des éléments 'tspan', 'tref', 'altGlyph', 'textPath'
Héritée :   non
Pourcentages :   sans objet
Média :   visuel
Animable :   oui

Cette propriété spécifie l'alignement d'un objet par rapport à son parent. Elle spécifie quelle ligne de base de cet élément doit être alignée sur la ligne de base correspondante du parent. Par exemple, ceci permet aux lignes de base alphabétiques d'un texte roman de rester alignées malgré les changements de taille de police. Par défaut, elle prend la ligne de base de même nom que la valeur calculée. C'est-à-dire, la position du point d'alignement "ideographic" dans la direction de progression de bloc est la position de la ligne de base "ideographic" dans la table de lignes de base de l'objet en cours d'alignement.

Les significations des valeurs sont les suivantes :

auto
La valeur de la ligne de base dominante de l'écriture à laquelle le caractère appartient - i.e., la ligne de base dominante du parent.
baseline
Le point d'alignement de l'objet en cours est aligné sur la ligne de base dominante de l'élément à contenu textuel parent.
before-edge
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "before-edge" de l'élément à contenu textuel parent.
text-before-edge
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "text-before-edge" de l'élément à contenu textuel parent.
central
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "central" de l'élément à contenu textuel parent.
middle
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "middle" de l'élément à contenu textuel parent.
after-edge
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "after-edge" de l'élément à contenu textuel parent.
text-after-edge
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "text-after-edge" de l'élément à contenu textuel parent.
ideographic
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "ideographic" de l'élément à contenu textuel parent.
alphabetic
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "alphabetic" de l'élément à contenu textuel parent.
hanging
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "hanging" de l'élément à contenu textuel parent.
mathematical
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "mathematical" de l'élément à contenu textuel parent.
top
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "top" de l'élément à contenu textuel parent, si le mode d'écriture est horizontal. Sinon, c'est la ligne de base dominante.
bottom
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "bottom" de l'élément à contenu textuel parent, si le mode d'écriture est horizontal. Sinon, c'est la ligne de base dominante.
text-top
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "text-top" de l'élément à contenu textuel parent, si le mode d'écriture est horizontal. Sinon, c'est la ligne de base dominante.
text-bottom
Le point d'alignement de l'objet en cours est aligné sur la ligne de base "text-bottom" de l'élément à contenu textuel parent, si le mode d'écriture est horizontal. Sinon, c'est la ligne de base dominante.

 

'baseline-shift'
Valeur :   baseline | sub | super | <pourcentage> | <longueur> | inherit vf.
Valeur initiale :   baseline
S'applique à :   ceux des éléments 'tspan', 'tref', 'altGlyph', 'textPath'
Héritée :   non
Pourcentages :   se rapporte à la « hauteur de ligne » de l'élément 'text', qui dans le cas de SVG est définie comme étant égale à la valeur de la propriété 'font-size'
Média :   visuel
Animable :   oui

La propriété 'baseline-shift' permet le repositionnement de la ligne de base dominante par rapport à celle de l'élément à contenu textuel parent. L'objet déplacé peut former un indice ou un exposant. Dans l'objet déplacé, la table de lignes de base en entier est décalée, et non pas une seule ligne de base. La quantité de déplacement est déterminée à partir d'informations issues de l'élément à contenu textuel parent, le décalage en indice ou en exposant à partir de la police nominale de l'élément à contenu textuel parent, un pourcentage de la « hauteur de ligne » de l'élément à contenu textuel parent ou une valeur absolue.

En SVG, la propriété 'baseline-shift' représente un ajustement complémentaire au tables de lignes de base. La propriété 'baseline-shift' déplace les tables de lignes de base pour chaque glyphe vers des nouvelles positions temporaires, par exemple, pour amener le glyphe en position d'exposant ou d'indice, mais elle n'affecte pas la position du texte courante. Quand la position du texte courante est ajustée, après le rendu d'un glyphe, pour tenir compte des valeurs de pas de glyphe, l'ajustement se produit comme s'il n'y avait pas de déplacement de ligne de base.

Plusieurs propriétés 'baseline-shift' peuvent être imbriquées. Chaque 'baseline-shift' imbriquée s'ajoute aux valeurs des déplacements de ligne de base précédents.

Les significations des valeurs de la propriété sont les suivantes :

baseline
Pas de déplacement de ligne de base ; la ligne de base dominante reste à sa position originale.
sub
La ligne de base dominante est déplacée vers la position par défaut pour un indice. Le décalage vers cette position se détermine en utilisant les données de police de la police nominale. Comme, dans la plupart des polices, la position en indice est donnée normalement par rapport à la ligne de base "alphabetic", l'agent utilisateur peut en calculer la position effective quand une autre ligne de base est dominante. Le calcul suggéré consiste à soustraire la différence entre la position de la ligne de base dominante et celle de la ligne de base "alphabetic" de la position de l'indice. Le décalage résultant est déterminé en multipliant la position effective de l'indice par la taille de police de la table de lignes de base. S'il n'y a pas de données de police utilisables, l'agent utilisateur peut employer des moyens heuristiques pour déterminer le décalage.
super
La ligne de base dominante est déplacée vers la position par défaut pour un exposant. Le décalage vers cette position se détermine en utilisant les données de police de la police nominale. Comme, dans la plupart des polices, la position en exposant est donnée normalement par rapport à la ligne de base "alphabetic", l'agent utilisateur peut en calculer la position effective quand une autre ligne de base est dominante. Le calcul suggéré consiste à soustraire la différence entre la position de la ligne de base dominante et celle de la ligne de base "alphabetic" de la position de l'exposant. Le décalage résultant est déterminé en multipliant la position effective de l'exposant par la taille de police de la table de lignes de base. S'il n'y a pas de données de police utilisables, l'agent utilisateur peut employer des moyens heuristiques pour déterminer le décalage.
<pourcentage>
La valeur calculée de la propriété correspond à ce pourcentage multiplié par la « hauteur de ligne » calculée de l'élément 'text'. La ligne de base dominante est déplacée, dans la direction de glissement (valeur positive) ou dans le sens opposée à la direction de glissement (valeur négative) de l'élément à contenu textuel parent, de cette valeur calculée. Une valeur de "0%" équivaut à "baseline".
<longueur>
La ligne de base dominante est déplacée, dans la direction de glissement (valeur positive) ou dans le sens opposé de la direction de glissement (valeur négative) de l'élément à contenu textuel parent, de cette valeur de <longueur>. Une valeur de "0cm" équivaut à "baseline".

10.10 Les propriétés de sélection de police

SVG utilise les propriétés de sélection de police suivantes. Excepté les compléments apportés dans cette spécification, la définition normative de la propriété se trouve dans [CSS2-polices vf.]. Toutes les remarques concernant ces propriétés propres à SVG se trouvent dans les descriptions ci-dessous.

'font-family'
Valeur :   [[ <nom-famille> |
<famille-générique> ],]* [<nom-famille> |
<famille-générique>] | inherit vf.
Valeur initiale :   selon l'agent utilisateur
S'applique à :   ceux des éléments à contenu textuel
Héritée :   oui
Pourcentages :   sans objet
Média :   visuel
Animable :   oui

Cette propriété indique quelle famille de polices utiliser pour le rendu du texte, spécifié sous la forme d'une liste prioritaire de noms de famille de polices et/ou de noms de famille générique. Excepté les compléments apportés dans cette spécification, la définition normative de la propriété se trouve dans [CSS2-font-family vf.]. On peut trouver les règles qui expriment la syntaxe des valeurs de propriété CSS dans [CSS2-propdef vf.].

'font-style'
Valeur :   normal | italic | oblique | inherit vf.
Valeur initiale :   normal
S'applique à :   ceux des éléments à contenu textuel
Héritée :   oui
Pourcentages :   sans objet
Média :   visuel
Animable :   oui

Cette propriété spécifie le rendu d'un texte avec une police normale, italique ou oblique. Excepté les compléments apportés dans cette spécification, la définition normative de la propriété se trouve dans [CSS2-font-style vf.].

'font-variant'
Valeur :   normal | small-caps | inherit vf.
Valeur initiale :   normal
S'applique à :   ceux des éléments à contenu textuel
Héritée :   oui
Pourcentages :   sans objet
Média :   visuel
Animable :   oui

Cette propriété indique si le texte est rendu en utilisant les glyphes normaux ou des glyphes en petites capitales pour les caractères en minuscule. Excepté les compléments apportés dans cette spécification, la définition normative de la propriété se trouve dans [CSS2-font-variant vf.].

'font-weight'
Valeur :   normal | bold | bolder | lighter | 100 | 200 | 300
| 400 | 500 | 600 | 700 | 800 | 900 | inherit vf.
Valeur initiale :   normal
S'applique à :   ceux des éléments à contenu textuel
Héritée :   oui
Pourcentages :   sans objet
Média :   visuel
Animable :   oui

Cette propriété se rapporte à la valeur de graisse des glyphes utilisés pour le rendu du texte, en fonction des autres polices dans la même famille de polices. Excepté les compléments apportés dans cette spécification, la définition normative de la propriété se trouve dans [CSS2-font-weight vf.].

'font-stretch'
Valeur :   normal | wider | narrower |
ultra-condensed | extra-condensed |
condensed | semi-condensed |
semi-expanded | expanded |
extra-expanded | ultra-expanded | inherit vf.
Valeur initiale :   normal
S'applique à :   ceux des éléments à contenu textuel
Héritée :   oui
Pourcentages :   sans objet
Média :   visuel
Animable :   oui

Cette propriété indique la quantité voulue de condensation ou d'expansion des glyphes utilisés pour le rendu du texte. Excepté les compléments apportés dans cette spécification, la définition normative de la propriété se trouve dans [CSS2-font-stretch vf.].

'font-size'
Valeur :   <taille-absolue> | <taille-relative> |
<longueur> | <pourcentage> | inherit vf.
Valeur initiale :   medium
S'applique à :   ceux des éléments à contenu textuel
Héritée :   oui, la valeur calculée s'hérite
Pourcentages :   se rapporte à la taille de police de l'élément parent
Média :   visuel
Animable :   oui

Cette propriété se rapporte à la taille de la police, d'une ligne de base à l'autre, quand le paramétrage du texte est explicite dans un environnement avec une disposition sur plusieurs lignes. Pour SVG, si une valeur de <longueur> est fournie sans identifiant d'unité (par exemple, un nombre non qualifié comme 128), alors l'agent utilisateur considère cette valeur de <longueur> comme étant une valeur de hauteur dans le système de coordonnées utilisateur courant.

Si une valeur de <longueur> est fournie avec l'un des identifiants d'unité (par exemple, 12pt ou 10%), alors l'agent utilisateur SVG convertit cette valeur de <longueur> en une valeur correspondante dans le système de coordonnées utilisateur courant, en appliquant les règles décrites à la section Les unités.

Excepté les compléments apportés dans cette spécification, la définition normative de la propriété se trouve dans [CSS2-font-size vf.].

'font-size-adjust'
Valeur :   <nombre> | none | inherit vf.
Valeur initiale :   none
S'applique à :   ceux des éléments à contenu textuel
Héritée :   oui
Pourcentages :   sans objet
Média :   visuel
Animable :   oui (non cumulatif, seulement les éléments 'set' et 'animate')

Cette propriété permet aux auteurs de spécifier une valeur d'aspect pour un élément, qui préservera la hauteur-x de la police de premier choix dans une police de substitution. Excepté les compléments apportés dans cette spécification, la définition normative de la propriété se trouve dans [CSS2-font-size-adjust vf.].

'font'
Valeur :   [ [ <'font-style'> || <'font-variant'> || <'font-weight'> ]?
<'font-size'> [ / <'line-height'> ]? <'font-family'> ] |
caption | icon | menu | message-box|
small-caption | status-bar | inherit vf.
Valeur initiale :   voir les propriétés individuelles
S'applique à :   ceux des éléments à contenu textuel
Héritée :   oui
Pourcentages :   admis pour 'font-size' et 'line-height' (Remarque : pour le traitement de la propriété 'font' en SVG, la valeur de la propriété 'line-height' est sensée être égale à celle de 'font-size')
Média :   visuel
Animable :   oui (non cumulatif, seulement les éléments 'set' et 'animate')

Propriété raccourcie pour le paramétrage des propriétés 'font-style', 'font-variant', 'font-weight', 'font-size', 'line-height' et 'font-family'. La propriété 'line-height' n'a aucun effet sur la disposition du texte en SVG. Pour les besoins de la propriété 'font', la propriété 'line-height' est sensée être égale à celle de la propriété 'font-size'. Les visionneurs SVG conformes ne sont pas obligés de reconnaître les diverses options de police système (caption, icon, menu, message-box, small-caption et status-bar) et peuvent utiliser à la place une police système ou l'une des polices génériques.

Excepté les compléments apportés dans cette spécification, la définition normative de la propriété se trouve dans [CSS2-polices vf.]. On peut trouver les règles qui expriment la syntaxe des valeurs de propriété CSS dans [CSS2-propdef vf.].

10.11 Les propriétés d'espacement

Trois propriétés agissent sur l'espacement entre les caractères et les mots :

'kerning'
Valeur :   auto | <longueur> | inherit vf.
Valeur initiale :   auto
S'applique à :   ceux des éléments à contenu textuel
Héritée :   oui
Pourcentages :   sans objet
Média :   visuel
Animable :   oui

La valeur auto indique que l'agent utilisateur devrait ajuster l'espacement entre les glyphes en fonction des tables de crénage contenues dans la police qui sera utilisée (i.e., active l'auto-crénage).

Si une valeur de <longueur> est fournie, alors l'auto-crénage est désactivé. À la place, l'espacement entre les glyphes est établi à la valeur de <longueur> en question. Le scénario le plus courant, en dehors de la valeur auto, consiste à donner une valeur de 0 à la propriété 'kerning' pour ainsi désactiver l'auto-crénage.

Si on fournit une valeur de <longueur> sans identifiant d'unité (par exemple, un nombre non qualifié comme 128), l'agent utilisateur considère la valeur de <longueur> comme étant une valeur de largeur dans le système de coordonnées utilisateur courant.

Si on fournit une valeur de <longueur> avec l'un des identifiants d'unité (par exemple, .25em ou 1%), alors l'agent utilisateur convertit cette valeur de <longueur> en une valeur correspondante dans le système de coordonnées utilisateur courant, en appliquant les règles décrites dans la section Les unités.

Quand une valeur de <longueur> est fournie, celle-ci s'ajoute à la valeur d'espacement entre les caractères spécifiée par la propriété 'letter-spacing'.

'letter-spacing'
Valeur :   normal | <longueur> | inherit vf.
Valeur initiale :   normal
S'applique à :   ceux des éléments à contenu textuel
Héritée :   oui
Pourcentages :   sans objet
Média :   visuel
Animable :   oui

Cette propriété spécifie le comportement de l'espacement entre les caractères du texte, en plus de tout espacement dû à la propriété 'kerning'.

Pour SVG, si une valeur de <longueur> est fournie sans identifiant d'unité (par exemple, un nombre non qualifié tel que 128), l'agent utilisateur SVG considère cette valeur de <longueur> comme étant une valeur de largeur dans le système de coordonnées utilisateur courant.

Si une valeur de <longueur> est fournie avec l'un des identifiants d'unité (par exemple, .25em ou 1%), alors l'agent utilisateur convertit cette valeur de <longueur> en une valeur correspondante dans le système de coordonnées utilisateur courant, en appliquant les règles décrites dans la section Les unités.

Excepté les compléments apportés dans cette spécification, la définition normative de la propriété se trouve dans [CSS2-letter-spacing vf.].

'word-spacing'
Valeur :   normal | <longueur> | inherit vf.
Valeur initiale :   normal
S'applique à :   ceux des éléments à contenu textuel
Héritée :   oui
Pourcentages :   sans objet
Média :   visuel
Animable :   oui

Cette propriété spécifie le comportement de l'espacement entre les mots.

Pour SVG, si une valeur de <longueur> est fournie sans identifiant d'unité (par exemple, un nombre non qualifié tel que 128), l'agent utilisateur SVG considère cette valeur de <longueur> comme étant une valeur de largeur dans le système de coordonnées utilisateur courant.

Si une valeur de <longueur> est fournie avec l'un des identifiants d'unité (par exemple, .25em ou 1%), alors l'agent utilisateur convertit cette valeur de <longueur> en une valeur correspondante dans le système de coordonnées utilisateur courant, en appliquant les règles décrites dans la section Les unités.

Excepté les compléments apportés dans cette spécification, la définition normative de la propriété se trouve dans [CSS2-word-spacing vf.].

10.12 La décoration du texte

'text-decoration'
Valeur :   none | [ underline || overline || line-through || blink ] | inherit vf.
Valeur initiale :   none
S'applique à :   ceux des éléments à contenu textuel
Héritée :   non (voir explication)
Pourcentages :   sans objet
Média :   visuel
Animable :   oui

Cette propriété les décorations qui s'ajoutent au texte d'un élément. Les visionneurs SVG conformes ne sont pas obligés de reconnaître la valeur blink.

Excepté les compléments apportés dans cette spécification, la définition normative de la propriété se trouve dans [CSS2-text-decoration vf.]. On peut trouver les règles exprimant la syntaxe des valeurs de propriété CSS dans [CSS2-propdef vf.].

La spécification CSS2 [CSS2 vf.] définit le comportement de la propriété 'text-decoration' en utilisant les terminologies « éléments de type bloc » et « éléments de type en-ligne ». Pour les besoins de la propriété 'text-decoration' et de SVG, un élément 'text' est considéré comme étant un élément de type bloc et tout enfant éventuel d'un élément 'text' (par exemple, un élément 'tspan') comme étant un élé de type en-ligne.

Également, la définition CSS2 pour la propriété 'text-decoration' spécifie que la « couleur des décorations » reste la même pour les éléments descendants. SVG offrant un modèle de peinture permettant l'application de divers types de peinture (voir le chapitre La peinture : le remplissage, le liseré et les symboles marqueurs) à l'intérieur (i.e., le « remplissage ») comme au contour (i.e., le « trait ») d'un texte, SVG définit la propriété 'text-decoration' de telle façon que, pour un élément ayant une valeur spécifié pour cette propriété 'text-decoration', toutes les décorations sur son contenu et sur celui de ses descendants sont rendues avec les mêmes caractéristiques de remplissage et de liseré que celles présentes sur l'élément en question. Si on spécifie la propriété 'text-decoration' sur un descendant, alors cette spécification surclasse celle de son ancêtre.

Comme SVG permet au texte d'avoir à la fois un remplissage et un trait, l'ordre de dessin revêt une importance dans certaines circonstances pour les décorations du texte. Le dessin d'une décoration de texte devrait intervenir dans l'ordre suivant :

L'exemple textdecoration01 illustre des applications de la propriété 'text-decoration'. La première ligne de texte n'a aucune valeur pour 'text-decoration', c'est la valeur initiale 'text-decoration:none' qui est utilisée. La seconde ligne a une spécification de 'text-decoration:line-through'. La troisième ligne a une spécification de 'text-decoration:underline'. La quatrième ligne illustre la règle selon laquelle les décorations sont rendues en utilisant les propriétés de remplissage et de liseré présentes sur l'élément où la propriété 'text-decoration' est spécifiée. Comme celle-ci est spécifiée sur l'élément 'text', tout le texte qu'il contient a un souligné rendu avec les mêmes caractéristiques de remplissage et de liseré existantes sur l'élément 'text' (i.e., avec un remplissage bleu et un liseré rouge), bien que les divers mots aient des valeurs différentes pour leur remplissage et leur liseré. Cependant, le mot « différent » a une valeur spécifiée explicitement pour sa propriété 'text-decoration' ; ainsi, son souligné est rendu en utilisant les propriétés de remplissage et de liseré de l'élément 'tspan' qui le contient (i.e., remplissage en jaune, liseré vert foncé :

<?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="12cm" height="4cm" viewBox="0 0 1200 400"
     xmlns="http://www.w3.org/2000/svg">
  <desc>Exemple textdecoration01 - comportement de la propriété 'text-decoration'</desc>
  <rect x="1" y="1" width="1198" height="398" fill="none" stroke="blue" stroke-width="2" />
  <g font-size="60" fill="blue" stroke="red" stroke-width="1" >
    <text x="100" y="75">Texte normal</text>
    <text x="100" y="165" text-decoration="line-through" >Texte raturé</text>
    <text x="100" y="255" text-decoration="underline" >Texte souligné</text>
    <text x="100" y="345" text-decoration="underline" >
      <tspan>Un </tspan>
      <tspan fill="yellow" stroke="purple" >mot </tspan>
      <tspan fill="yellow" stroke="black" >avec </tspan>
      <tspan fill="yellow" stroke="blue" >un souligné</tspan>
      <tspan fill="yellow" stroke="darkgreen" text-decoration="underline" >différent</tspan>
    </text>
  </g>
</svg>
Exemple textdecoration01
Exemple textdecoration01 - simple texte sur un tracé

Voir cet exemple en SVG (seulement avec navigateurs gérant SVG et CSS)
 

10.13 Le texte sur un tracé

10.13.1 Introduction au texte sur un tracé

En plus du texte dessiné en ligne, SVG offre également la possibilité de placer un texte au long du tracé d'un élément 'path'. Pour indiquer qu'un bloc de texte doit être rendu au long du tracé d'un élément 'path', il faut inclure le texte en question, dans un élément 'textPath' qui comprend un attribut xlink:href avec une référence d'URI, à un élément 'path'.

10.13.2 L'élément 'textPath'

<!ENTITY % textPathExt "" >
<!ELEMENT textPath (#PCDATA|desc|title|metadata|tspan|tref|altGlyph|a|animate|set|animateColor
                %textPathExt;)* >
<!ATTLIST textPath
  %stdAttrs;
  %xlinkRefAttrs;
  xlink:href %URI; #REQUIRED
  %langSpaceAttrs;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  class %ClassList; #IMPLIED
  style %StyleSheet; #IMPLIED
  %PresentationAttributes-Color;
  %PresentationAttributes-FillStroke;
  %PresentationAttributes-FontSpecification;
  %PresentationAttributes-Graphics;
  %PresentationAttributes-TextContentElements;
  %graphicsElementEvents;
  startOffset %Length; #IMPLIED
  textLength %Length; #IMPLIED
  lengthAdjust (spacing|spacingAndGlyphs) #IMPLIED
  method (align|stretch) #IMPLIED
  spacing (auto|exact) #IMPLIED >

Définitions de l'attribut :

startOffset = "<longueur>"
Un décalage à partir du début de l'élément 'path' pour la position du texte courante initiale, calculé en utilisant l'algorithme de distance au long du tracé de l'agent utilisateur.
Si on donne une valeur de <longueur> autre qu'un pourcentage, alors la valeur de l'attribut startOffset représente une distance au long du tracé mesurée dans le système de coordonnées utilisateur courant.
Si c'est une valeur en pourcentate, alors la valeur de startOffset représente un pourcentage de la distance au long du tracé en entier. Ainsi, une valeur startOffset="0%" indique le point de départ de l'élément 'path' et une valeur startOffset="100%" le point d'arrivée de l'élément 'path'.
Une valeur négative provoque une erreur (voir Le traitement des erreurs).
Si l'attribut n'est pas spécifié, l'effet produit est le même que si une valeur de "0" était spécifiée.
Animable : oui.
method = "align | stretch"
Indique la méthode selon laquelle le texte devrait être rendu au long du tracé.
Une valeur de align signifie que les glyphes devraient être rendus en utilisant des transformations 2x3 simples de façon à ce que les glyphes ne soient pas étirés/déformés. Typiquement, ce sont des transformations complémentaires en rotation, en changement d'échellet et en translation qui sont effectuées pour chaque glyphe à rendre. En résultat, avec une valeur align, les polices dont les glyphes sont destinés à être reliés (par exemple, les polices cursives), les liaisons peuvent ne pas s'aligner correctement lors du rendu du texte sur un tracé.
Une valeur de stretch signifie que les contours du glyphe seront convertis en tracés, puis tous les points d'arrivée et de contrôle seront ajustés pour se trouver sur les vecteurs perpendiculaires au tracé, par là-même, étirant et déformant éventuellement les glyphes. Avec cette approche, les glyphes reliés, comme ceux des écritures cursives, conserveront leurs liaisons.
Si l'attribut n'est pas spécifié, l'effet produit est le même que si une valeur de align était spécifiée.
Animable : oui.
spacing = "auto | exact"
Indique comment l'agent utilisateur devrait déterminer l'espacement entre les glyphes devant être rendus au long du tracé.
Une valeur de exact signifie que les glyphes doivent être rendus exactement, en fonction des règles d'espacement spécifiées dans la section Les règles de disposition du texte sur un tracé.
Une valeur de auto signifie que l'agent utilisateur devrait employer des algorithmes de disposition du texte sur un tracé pour ajuster l'espacement entre les glyphes et obtenir un résultat visuellement satisfaisant.
Si l'attribut n'est pas spécifié, l'effet produit est le même que si une valeur de exact était spécifiée.
Animable : oui.
xlink:href = "<uri>"
Une référence d'URI vers l'élément 'path' sur lequel les glyphes seront rendus. element onto which the glyphs will be rendered. Si la valeur <uri> est une référence invalide (par exemple, l'élément n'existe pas ou l'élément appelé n'est pas un élément 'path'), alors l'élément 'textPath' se trouve en erreur et son contenu entier ne sera pas rendu par l'agent utilisateur.
Animable : oui.
Attributs définis ailleurs :
%stdAttrs;, %xlinkRefAttrs;, %langSpaceAttrs;, %testAttrs;, externalResourcesRequired, class, style, %PresentationAttributes-Color;, %PresentationAttributes-FillStroke;, %PresentationAttributes-FontSpecification;, %PresentationAttributes-Graphics;, %PresentationAttributes-TextContentElements;, %graphicsElementEvents;, textLength, lengthAdjust.

Les coordonnées des données de tracé dans l'élément 'path' appelé sont sensées être dans le même systè de coordonnées que l'élément 'text' courant, non pas dans celui où l'élément 'path' est défini. L'attribut transform sur l'élément 'path' appelé représente une transformation complémentaire, relative au système de coordonnées utilisateur courant de l'élément 'text' courant, y compris tous les ajustements au système de coordonnées utilisateur courant exercés par un éventuel attribut transform sur l'élément 'text' courant. En exemple, le fragment de contenu SVG suivant :

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <g transform="translate(25,25)">
    <defs>
      <path id="path1" transform="scale(2)" d="..." fill="none" stroke="red"/>
    </defs>
  </g>
  <text transform="rotate(45)">
    <textPath xlink:href="#path1">Texte au long du tracé1</textPath>
  </text>
</svg>

ceci devrait produire le même effet que ce fragment-ci :

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <g transform="rotate(45)">
    <defs>
      <path id="path1" transform="scale(2)" d="..." fill="none" stroke="red"/>
    </defs>
    <text>
      <textPath xlink:href="#path1">Texte au long du tracé1</textPath>
    </text>
  </g>
</svg>

Remarquer que la valeur transform="translate(25,25)" n'a aucun effet sur l'élément 'textPath', alors que la valeur transform="rotate(45)" s'applique à la fois sur l'élément 'text' et l'emploi de l'élément 'path' comme forme appelée pour le texte sur un tracé.

L'exemple toap01 illustre une application simple d'un texte sur un tracé :

<?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="12cm" height="3.6cm" viewBox="0 0 1000 300"
     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <defs>
    <path id="MonTrace"
          d="M 100 200 
             C 200 100 300   0 400 100
             C 500 200 600 300 700 200
             C 800 100 900 100 900 100" />
  </defs>
  <desc>Exemple toap01 - texte sur un tracé simple</desc>

  <use xlink:href="#MonTrace" fill="none" stroke="red"  />
  <text font-family="Verdana" font-size="42.5" fill="blue" >
    <textPath xlink:href="#MonTrace">
      En haut, puis en bas, et encore en haut
    </textPath>
  </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>
Exemple toap01
Exemple toap01 - simple texte sur un tracé

Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
 

L'exemple toap02 montre comment on peut inclure des éléments 'tspan' dans des éléments 'textPath' pour ajuster les attributs de style et la position du texte courante avant le rendu d'un glyphe particulier. Le premier mot « haut » qui survient est rempli en rouge. On utilise l'attribut dy pour décoller ce mot « haut » de la ligne de base.

<?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="12cm" height="3.6cm" viewBox="0 0 1000 300"
     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <defs>
    <path id="MonTrace"
          d="M 100 200 
             C 200 100 300   0 400 100
             C 500 200 600 300 700 200
             C 800 100 900 100 900 100" />
  </defs>
  <desc>Exemple toap02 - un 'tspan' dans un 'textPath'</desc>

  <use xlink:href="#MonTrace" fill="none" stroke="red"  />
  <text font-family="Verdana" font-size="42.5" fill="blue" >
    <textPath xlink:href="#MonTrace">
      En
      <tspan dy="-30" fill="red" >
        haut
      </tspan>
      <tspan dy="30">
        ,
      </tspan>
      puis en bas, et encore en haut
    </textPath>
  </text>

  <!-- Montre le contour du canvevas avec un élément 'rect' -->
  <rect x="1" y="1" width="998" height="298"
        fill="none" stroke="blue" stroke-width="2" />
</svg>
Exemple toap02
Exemple toap02 - tspan avec textPath

Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
 

L'exemple toap03 démontre l'utilisation de l'attribut startOffset sur l'élément 'textPath' pour spécifier la position de départ de la chaîne textuelle comme position particulière au long du tracé. Remarquer que les glyphes qui tombent au-delà du tracé ne sont pas rendus (voir la section Les règles de disposition du texte sur un tracé).

<?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="12cm" height="3.6cm" viewBox="0 0 1000 300"
     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <defs>
    <path id="MonTrace"
          d="M 100 200 
             C 200 100 300   0 400 100
             C 500 200 600 300 700 200
             C 800 100 900 100 900 100" />
  </defs>
  <desc>Exemple toap03 - texte sur un tracé avec attribut startOffset</desc>

  <use xlink:href="#MonTrace" fill="none" stroke="red"  />
  <text font-family="Verdana" font-size="42.5" fill="blue" >
    <textPath xlink:href="#MonTrace" startOffset="80%">
      En haut, puis en bas, et encore en haut
    </textPath>
  </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>
Exemple toap03
Exemple toap03 - texte sur un tracé avec l'attribut startOffset

Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
 

10.13.3 Les règles de disposition du texte sur un tracé

Conceptuellement, pour du texte sur un tracé, le tracé cible est déployé en un segment de droite soit horizontal, soit vertical. Pour une disposition du texte dans un flux horizontal, le tracé est déployé en un segment de droite hypothétique, tel que le début du tracé corresponde à la gauche du segment de droite. Pour une disposition du texte dans un flux vertical, le tracé est déployé en un segment de droite hypothétique, tel que le début du tracé corresponde au haut du segment de droite. Les règles de disposition du texte normales sont appliquées au segment de droite hypothétique puis le résultat est déposé en retour sur le tracé cible. Les règles de disposition pour un texte vertical ou bi-directionnel s'appliquent aussi au texte sur un tracé.

L'orientation de référence est déterminée individuellement pour chacun des glyphes rendus au long du tracé. Pour une disposition du texte dans un flux horizontal, l'orientation de référence d'un glyphe donné est le vecteur qui commence au point d'intersection sur le tracé auquel le glyphe est attaché et qui pointe dans une direction à 90 degrés, dans le sens inverse des aiguilles d'une montre, à partir de l'angle de la courbe au point d'intersection. Pour une disposition du texte dans un flux vertical, l'orientation de référence d'un glyphe donnée est celle du vecteur qui commence au point d'intersecion sur le tracé auquel le glyphe est attaché et qui pointe dans une direction à 180 degrés à partir de l'angle de la courbe au point d'intersection.

L'exemple toap04 illustre les règles de disposition particulières du texte sur un tracé qui viennent en complément des règles de disposition de texte de base pour un texte en ligne droite horizontale ou verticale.

<?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="12cm" height="3.6cm" viewBox="0 0 1000 300"
     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <defs>
    <path id="MonTrace"
          d="M 100 125 
             C 150 125 250 175 300 175
             C 350 175 450 125 500 125
             C 550 125 650 175 700 175
             C 750 175 850 125 900 125" />
  </defs>
  <desc>Exemple toap04 - règles de disposition de texte sur un tracé</desc>

  <use xlink:href="#MonTrace" fill="none" stroke="red"  />
  <text font-family="Verdana" font-size="60" fill="blue" letter-spacing="2" >
    <textPath xlink:href="#MonTrace">
      Choisir du riz ou du pain 
    </textPath>
  </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>
Exemple toap04
Exemple toap04 - règles de disposition du texte sur un tracé

Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
 

L'image suivante est un agrandissement du premier glyphe dans l'élément 'text'.

Image montrant un texte sur un tracé

Le point dans l'image ci-dessus montre l'endroit où le glyphe est attaché au tracé. La boîte autour du glyphe montre la rotation de celui-ci telle que son axe horizontal est parallèle à la tangente à la courbe au point où le glyphe se rattache à celle-ci. La boîte révèle aussi la chasse [N.d.T. charwidth] du glyphe (i.e., la quantité dont la position du texte courante avance horizontalement, quand le glyphe est dessiné selon une disposition du texte horizontale).

L'image suivante est un agrandissement encore plus fort qui montre le détail des règles de disposition.

Image montrant un texte sur un tracé

Pour une disposition du texte horizontale de gauche-à-droite (i.e., quand l'orientation du glyphe est perpendiculaire à la direction de progression en ligne), les règles de disposition sont comme suit :

On utilise des règles comparables pour la disposition sur un tracéde d'un texte vertical de haut-en-bas (i.e., quand l'orientation de glyphe est parallèle à la direction de progression en-ligne), ces règles de disposition sont les suivantes :

Dans les calculs ci-dessus, si le point-de-départ sur le tracé ou le point-de-fin sur le tracé tombent en dehors des extrêmités du tracé, alors étendre le tracé, au-delà de ses extrêmités, avec une ligne droite parallèle à la tangente au tracé en cette extrêmité, pour que le point-milieu sur le tracé puisse être calculé.

Quand la direction de progression en-ligne est horizontale, alors tout attribut x, sur un élément 'text', 'tspan', 'tref' ou 'altGlyph', représente un nouveau décalage absolu au long du tracé, fournissant ainsi une nouvelle valeur explicite de point-de-départ sur le tracé. Tout attribut y, sur un élément 'text', 'tspan', 'tref' ou 'altGlyph', est ignoré. Quand la direction de progression en-ligne est verticale, alors tout attribut y, sur un élément 'text', 'tspan', 'tref' ou 'altGlyph', représente un nouveau décalage au long du tracé, fournissant ainsi une nouvelle valeur explicite de point-de-départ sur le tracé. Tout attribut x, sur un élément 'text', 'tspan', 'tref' ou 'altGlyph', est ignoré.

10.14 Les glyphes alternatifs

Dans certaines situations, comme pour des ligatures, des polices spécialisées (par exemple, une police pour des symboles musicaux) ou d'autres glyphes de chaînes textuelles asiatiques, on doit employer un jeu de glyphes différent par rapport au(x) glyphe(s) qui correspondent normalement aux données du caractère en question.

L'élément 'altGlyph' apporte un contrôle des glyphes à utiliser pour le rendu de données textuelles particulières.

<!ENTITY % altGlyphExt "" >
<!ELEMENT altGlyph (#PCDATA %altGlyphExt;)* >
<!ATTLIST altGlyph
  %stdAttrs;
  %xlinkRefAttrs;
  xlink:href %URI; #IMPLIED 
  glyphRef CDATA #IMPLIED
  format CDATA #IMPLIED
  %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 >

Définitions de l'attribut :

xlink:href = "<uri>"
Une référence d'URI soit vers un élément 'glyph' dans un fragment de document SVG, soit vers un élément 'altGlyphDef'.

Si c'est une référence vers un élément 'glyph' qui est disponible, alors ce glyphe est rendu à la place du ou des caractères contenus dans l'élément 'altGlyph'.

Si c'est une référence vers un élément 'altGlyphDef' et s'il est trouvé un jeu de glyphes alternatifs approprié suite au traitement de cet élément 'altGlyphDef', alors ce sont ces glyphes alternatifs qui sont rendus, plutôt que le(s) caractère(s) contenus dans l'élément 'altGlyph'.

Animable : non.

glyphRef = "<chaîne>"
L'identifiant de glyphe de la police en question, dépendant de l'attribut format. (Même signification que l'attribut glyphRef sur l'élément 'glyphRef').
Animable : non.
format = "<chaîne>"
Le format de la police en question. Si le format de la police est l'un de ceux listés dans la spécification [CSS2-src vf.] (par exemple, TrueDoc™ Portable Font Resource ou Embedded OpenType), alors la valeur <chaîne> doit contenir une chaîne de format correspondant à celles définies dans [CSS2-src vf.] (par exemple, truedoc-pfr ou embedded-opentype). (Même signification que l'attribut format sur l'élément 'glyphRef').
Animable : non.
x = "<coordonnée>+"
Les valeurs de <coordonnée> sont traitées de la même manière que l'attribut x sur un élément 'tspan', ceci excepté : si les glyphes alternatifs appelés sont rendus à la place de caractères Unicode dans l'élément 'altGlyph', alors toutes les coordonnées absolues X spécifiée via un attribut x, sur cet élément ou sur tout élément 'text' ancêtre ou sur des éléments 'tspan', pour les caractères Unicode allant de 2 à <n> dans cet élément 'altGlyph', sont ignorées. Toute coordonnée absolue X spécifiée via un attribut x, sur cet élément ou sur tout élément 'text' ancêtre ou sur des éléments 'tspan', pour le premier caractère Unicode dans l'élément 'altGlyph', établit une nouvelle coordonnée absolue X pour la position du texte courante avant le rendu du premier glyphe alternatif.
Animable : oui.
y = "<coordonnée>+"
La coordonnée absolue Y correspondante pour le rendu de l'élément 'altGlyph'.
Animable : oui.
dx = "<longueur>+"
Les valeurs de <longueur> sont traitées de la même manière que l'attribut dx sur l'élément 'tspan', ceci excepté : si les glyphes alternatifs appelés sont rendus à la place des caractères Unicode dans l'élément 'altGlyph', alors toutes les coordonnées relatives X spécifiées via un attribut dx sur cet élément ou tout élément 'text' ancêtre ou sur des éléments 'tspan', pour les caractères allant de 2 à <n> dans l'élément 'altGlyph', sont ignorées. Toute coordonnée relative X spécifiée via un attribut dx sur cet élément ou tout élément 'text' ancêtre ou sur des éléments 'tspan', pour le premier caractère Unicode dans l'élément 'altGlyph', établit une nouvelle coordonnée relative X pour la position du texte courante avant le rendu du premier glyphe alternatif.
Animable : oui.
dy = "<longueur>+"
Les coordonnées relatives Y correspondantes pour le rendu de l'élément 'altGlyph'.
Animable : oui.
rotate = "<nombre>+"
Les valeurs de <nombre> sont traitées de la même manière que l'attribut rotate sur l'élément 'tspan', ceci excepté : si les glyphes alternatifs appelés sont rendus à la place des caractères Unicode dans l'étlément 'altGlyph', alors toutes les valeurs de rotation complémentaire spécifiées via un attribut rotate sur cet élément ou tout élément 'text' ancêtre ou sur des éléments 'tspan', pour les caractères Unicode allant de 2 à <n> dans l'élément 'altGlyph', sont ignorées. Les valeurs de rotation complémentaires spécifiées via un attribut rotate sur cet élément ou tout élément 'text' ancêtre ou sur des éléments 'tspan', pour le premier caractère Unicode dans l'élément 'altGlyph', établissent un nouvel angle de rotation complémentaire avant le rendu des glyphes alternatifs.
Animable : oui (non cumulatif, seulement les éléments 'set' et 'animate').
Attributs définis ailleurs :
%stdAttrs;, %xlinkRefAttrs;, %testAttrs;, %langSpaceAttrs;, externalResourcesRequired, class,, style, %PresentationAttributes-Color;, %PresentationAttributes-FillStroke;, %PresentationAttributes-FontSpecification;, %PresentationAttributes-Graphics;, %PresentationAttributes-TextContentElements; %graphicsElementEvents;.

Si l'appel de glyphes alternatifs ne résulte pas dans une identification concluante des glyphes alternatifs à utiliser, alors le(s) caractère(s) dans l'élément 'altGlyph' sont rendus comme si cet élément 'altGlyph' était un élément 'tspan'.

Un élément 'altGlyph' référence soit un élément 'glyph' ou 'altGlyphDef' via son attribut xlink:href, soit identifie un glyphe au moyen de propriétés de sélection de police, d'un identifiant de glyphe et d'un format de police. Si l'attribut xlink:href est spécifié, il est prioritaire et les autres propriétés et attributs d'identification de glyphe sont ignorés.

L'élément 'altGlyphDef' définit un jeu de substitutions de glyphe possible.

<!ENTITY % altGlyphDefExt "" >
<!ELEMENT altGlyphDef ((glyphRef+|altGlyphItem+) %altGlyphDefExt;) >
<!ATTLIST altGlyphDef
  %stdAttrs; >
Attributs définis ailleurs :
%stdAttrs;.

Un élément 'altGlyphDef' peut contenir l'un ou l'autre des suivants:

L'élément 'altGlyphItem' définit un jeu de glyphes de substitution possible candidat. Le premier élément 'altGlyphItem' dont les glyphes référencés sont disponibles est choisi. Ses glyphes sont rendus à la place du ou des caractères qui sont dans l'élément 'altGlyph' appelant.

<!ENTITY % altGlyphItemExt "" >
<!ELEMENT altGlyphItem (glyphRef+ %altGlyphItemExt;) >
<!ATTLIST altGlyphItem
  %stdAttrs; >
Attributs définis ailleurs :
%stdAttrs;.

L'élément 'glyphRef' définit un glyphe possible d'utilisation.

<!ELEMENT glyphRef EMPTY >
<!ATTLIST glyphRef
  %stdAttrs;
  %xlinkRefAttrs;
  xlink:href %URI; #IMPLIED
  class %ClassList; #IMPLIED
  style %StyleSheet; #IMPLIED
  %PresentationAttributes-FontSpecification;
  glyphRef CDATA #IMPLIED
  format CDATA #IMPLIED
  x %Number; #IMPLIED
  y %Number; #IMPLIED
  dx %Number; #IMPLIED
  dy %Number; #IMPLIED >

Définitions de l'attribut :

xlink:href = "<uri>"
Une référence d'URI vers un élément 'glyph' dans un fragment de document SVG. L'élément 'glyph' appelé est rendu comme glyphe alternatif.
Animable : non.
glyphRef = "<chaîne>"
L'identifiant de glyphe de la police en question, dépendant de l'attribut format.
Animable : non.
format = "<chaîne>"
Le format de la police en question. Si le format de la police est l'un de ceux listés dans la spécification [CSS2-src vf.] (par exemple, TrueDoc™ Portable Font Resource ou Embedded OpenType), alors la valeur <chaîne> doit contenir une chaîne de format correspondant à celles définies dans [CSS2-src vf.] (par exemple, truedoc-pfr ou embedded-opentype).
Animable : non.
x = "<nombre>"
Cette valeur représente la nouvelle coordonnée absolue X dans le système de coordonnées de la police pour ce glyphe.
Le système de coordonnées de la police est basé sur le modèle du carré em, décrit au chapitre Les polices vf. de la spécification « Les feuilles de style en cascade, niveau 2 » [CSS2 vf.].
Si l'attribut n'est pas spécifié, pour le premier élément 'glyphRef' enfant, l'effet produit est comme si la valeur spécifiée de l'attribut était "0", alors que, pour les éléments 'glyphRef' enfants subséquents, l'effet produit est comme si la valeur de l'attribut était établie à la coordonnée X terminale de l'élément 'glyphRef' précédent.
Animable : non.
y = "<nombre>"
La nouvelle coordonnée absolue Y correspondante dans le système de coordonnées de la police pour ce glyphe.
Animable : non.
dx = "<nombre>"
Cette valeur représente la coordonnée relative X dans le système de coordonnées de la police pour ce glyphe. Le glyphe est ainsi déplacé de la valeur d'unité de <nombre> le long de l'axe-x positif dans le système de coordonnées de la police, en complément de la coordonnée absolue X établie par l'attribut x (soit en raison d'une valeur explicite de x, soit en raison du traitement de la valeur par défaut de x).
Le système de coordonnées de la police est basé sur le modèle du carré em, décrit au chapitre Les polices vf. de la spécification « Les feuilles de style en cascade, niveau 2 » [CSS2 vf.].
Si l'attribut n'est pas spécifié, l'effet produit est le même que si une valeur de "0" était spécifiée.
Animable : non.
dy = "<nombre>"
Le nombre correspondant d'unités, dans le système de coordonnées de la police, dont il faut déplacer le glyphe le long de l'axe-y positif en fonction de la coordonnée absolue Y établie par l'attribut y.
Animable : non.
Attributs définis ailleurs :
%stdAttrs;, %xlinkRefAttrs;, class, style, %PresentationAttributes-FontSpecification;.

Un élément 'glyphRef' référence soit un élément 'glyph' dans un fragment de document SVG via son attribut xlink:href, soit identifie un glyphe au moyen de propriétés de sélection de police , d'un identifiant de glyphe et d'un format de police. Si les attributs et les propriétés spécifiés sont insuffisants pour l'identification d'un glyphe, alors l'élément 'glyphRef' est traité de la même manière que si la référence de glyphe était complète, mais celui-ci n'étant pas disponible. Si l'attribut xlink:href est spécifié, il est prioritaire et les autres attributs et propriétés pour l'identification du glyphe sont ignorés.

10.15 La gestion des blancs

SVG reconnaît l'attribut XML standard xml:space pour spécifier la gestion des caractères blancs dans les données textuelles d'un élément 'text'. L'agent utilisateur SVG associe des règles de traitement spéciales à cet attribut, comme décrit ci-dessous. Ce sont des comportements qui surviennent à la suite de l'interprétation XML [XML10 vf.] et de toute construction d'un Modèle Objet du Document [DOM2].

L'attribut xml:space, qui s'hérite, peut prendre l'une des deux valeurs suivantes :

L'exemple suivant illustre le fait que l'indentation peut être importante quand on utilise xml:space="default". Le fragment ci-dessous montre deux paires d'éléments 'text' similaires, les deux éléments 'text' régis par xml:space='default'. Pour ces exemples, il n'y a pas de blanc supplémentaire à la fin de chacune des lignes (i.e., le retour à la ligne intervient immédiatement après le dernier caractère visible).

[01]  <text xml:space='default'>
[02]    Exemple de blancs
[03]    lignes indentées
[04]  </text>
[05]  <text xml:space='preserve'>Exemple de blancs lignes indentées</text>
[06]
[07]  <text xml:space='default'>
[08]Exemple de blancs
[09]lignes non indentées
[10]  </text>
[11]  <text xml:space='preserve'>Exemple de blancs lignes non indentées</text>

La première paire d'éléments 'text' ci-dessus représente des données textuelles indentées. L'attribution xml:space='default' dans le premier 'text' indique à l'agent utilisateur de :

La seconde paire d'éléments 'text' ci-dessus représente des données textuelles non indentées. L'attribution xml:space='default' du troisième élément 'text' indique à l'agent utilisateur de :

Remarquer que les interpréteurs XML sont tenus de convertir les représentations standards des indicateurs de retour à la ligne (par exemple, la séquence littérale de deux caractères « #xD#xA » ou les littéraux autonomes #xD et #xA) en un seul caractère « #xA » avant de transmettre les données textuelles à l'application. Ainsi, chaque retour à la ligne en SVG sera représenté par le seul caractère #xA, qu'importe la représentation des retours à la ligne qui auraient été utilisés dans la ressource originale. (Voir La gestion des fins de ligne en XML vf.).

Toutes les fonctions du langage SVG ou du DOM de SVG, basées sur un numérotage de la position du caractèere, tels que les attributs x, y, dx, dy et rotate sur les éléments 'text', 'tspan', 'tref' et 'altGlyph', s'appuient sur la position du caractère après l'application des règles de gestion des blancs décrites ici. Notamment, pour une valeur xml:space="default", le cas se présente souvent où les blancs sont retirés en raison du traitement. L'indexation des numéros de position des caractères survient après le retrait des blancs selon les règles dans cette section.

L'attribut xml:space est :

    Animable : non.

10.16 Les opérations de sélection du texte et du presse-papier

Les visionneurs SVG conformes sur des systèmes autorisant la sélection de texte (par exemple, les systèmes équipés d'un dispositif de pointage, comme une souris) et disposant d'un presse-papier pour des opérations de copier/coller doivent gérer :

Une opération de sélection de texte commence dès que l'une des actions suivantes est effectuée :

Au cours de l'opération de sélection de texte (par exemple, l'utilisateur garde le bouton de la souris appuyé), tous les événements associés aux autres éléments graphiques sont ignorés (i.e., l'opération de sélection de texte est modale) et l'agent utilisateur SVG devra signaler dynamiquement quels caractères sont sélectionnés à l'aide d'une technique de contraste adéquate, telle que le rafraîchissement des glyphes concernés en couleurs inversées. Au fur et à mesure de la progression du pointeur lors de la sélection du texte, le dernier glyphe dans cette opération de sélection de texte est le glyphe, dans le même élément 'text', dont la cellule est la plus proche du pointeur. Tous les caractères de l'élément 'text' dont la position, dans cet élément 'text', est comprise entre le début et la fin de la sélection, seront contrastés, indépendamment de leur position sur le canevas et indépendamment des éléments graphiques éventuels qui pourraient être par-dessus le point de sélection final.

Une fois que l'opération de sélection de texte s'achève (par exemple, l'utilisateur relâche le bouton de la souris), le texte sélectionné devra rester contrasté jusqu'à ce que survienne un événement qui annule cette sélection, tel qu'un événement d'activation du dispositif de pointage (par exemple, appuyer sur un bouton de souris).

Le détail des règles pour déterminer quels caractères contraster au cours d'une opération de sélection de texte est donné à la section Remarques sur l'implémentation de la sélection de texte.

Pour les environnements disposant d'un presse-papier de système, l'agent utilisateur SVG est tenu de fournir une interface utilisateur pour l'initiation d'une copie du texte sélectionné courant vers le presse-papier du système. Il suffit que l'agent utilisateur SVG poste la chaîne textuelle sélectionnée dans le format de presse-papier approprié du système pour un texte plein, mais il serait préférable que l'agent utilisateur SVG puisse poster une alternative textuelle enrichie, qui capture les diverses propriétés de police associées à la chaîne textuelle en question.

Pour un texte bi-directionnel, l'agent utilisateur doit gérer la sélection du texte selon l'ordre logique, ce qui entraîne un contraste discontinu des glyphes à cause du ré-ordonnancement bi-directionnel des caractères. Les agents utilisateurs peuvent fournir un moyen alternatif pour la sélection d'un texte bi-directionnel dans un ordre de rendu visuel (i.e., après l'application des algorithmes de disposition de texte bi-directionnel), avec comme résultat que les données textuelles sélectionnées pourraient être logiquement discontinues. Dans ce cas, si l'utilisateur demande à copier un texte bi-directionnel dans le presse-papier, alors l'agent utilisateur doit effectuer les ajustements appropriés et ne copier que les caractères visuellement sélectionnés dans celui-ci.

Si possible, on recommandé que les producteurs de documents SVG essaient d'arranger leurs chaînes textuelles pour faciliter la sélection du texte dans un ordre correct dans les applications de visualisation SVG, comme les navigateurs Web.

10.17 Les interfaces du DOM

Les interfaces suivantes sont définies ci-dessous : SVGTextContentElement, SVGTextPositioningElement, SVGTextElement, SVGTSpanElement, SVGTRefElement, SVGTextPathElement, SVGAltGlyphElement, SVGAltGlyphDefElement, SVGAltGlyphItemElement, SVGGlyphRefElement.


L'interface SVGTextContentElement

L'interface SVGTextContentElement est héritée par diverses interfaces en relation avec le texte, telles que SVGTextElement, SVGTSpanElement, SVGTRefElement, SVGAltGlyphElement et SVGTextPathElement.


Définition IDL
interface SVGTextContentElement : 
                SVGElement,
                SVGTests,
                SVGLangSpace,
                SVGExternalResourcesRequired,
                SVGStylable,
                events::EventTarget { 

  // lengthAdjust Types
  const unsigned short LENGTHADJUST_UNKNOWN   = 0;
  const unsigned short LENGTHADJUST_SPACING     = 1;
  const unsigned short LENGTHADJUST_SPACINGANDGLYPHS     = 2;

  readonly attribute SVGAnimatedLength      textLength;
  readonly attribute SVGAnimatedEnumeration lengthAdjust;

  long     getNumberOfChars (  );
  float    getComputedTextLength (  );
  float    getSubStringLength ( in unsigned long charnum, in unsigned long nchars )
                  raises( DOMException );
  SVGPoint getStartPositionOfChar ( in unsigned long charnum )
                  raises( DOMException );
  SVGPoint getEndPositionOfChar ( in unsigned long charnum )
                  raises( DOMException );
  SVGRect  getExtentOfChar ( in unsigned long charnum )
                  raises( DOMException );
  float    getRotationOfChar ( in unsigned long charnum )
                  raises( DOMException );
  long     getCharNumAtPosition ( in SVGPoint point );
  void     selectSubString ( in unsigned long charnum, in unsigned long nchars )
                  raises( DOMException );
};

Groupe de définition des types lengthAdjust
Constantes définies
LENGTHADJUST_UNKNOWN L'énumération est établie à une valeur qui ne fait pas partie d'un des types prédéfinis. Tenter de définir une nouvelle valeur de ce type ou tenter de changer une valeur existante vers ce type est illégal.
LENGTHADJUST_SPACING Correspond à la valeur spacing.
LENGTHADJUST_SPACINGANDGLYPHS Correspond à la valeur spacingAndGlyphs.
attributs
readonly SVGAnimatedLength textLength
Correspond à l'attribut textLength sur l'élément en question.
readonly SVGAnimatedEnumeration lengthAdjust
Correspond à l'attribut lengthAdjust sur l'élément en question. La valeur doit être l'une des constantes d'ajustement de longueur spécifiées ci-dessus.
Méthodes
getNumberOfChars
Retourne le nombre total de caractères devant être rendus dans l'élément courant. Inclus les caractères qui sont appelés par un élément 'tref'.
Aucun paramètre
Valeur retournée
long Le nombre total de caractères.
Aucune exception
getComputedTextLength
La somme de toutes les valeurs d'avance issues du rendu de tous les caractères dans cet élément, dont la valeur d'avance des glyphes (horizontale ou verticale), l'effet des propriétés 'kerning', 'letter-spacing' et 'word-spacing' ainsi que les ajustements du fait des attributs dx et dy sur les éléments 'tspan'. Pour les environnements sans rendu, l'agent utilisateur devra faire des hypothèses raisonnables quant aux mesures des glyphes.
Aucun paramètre
Valeur retournée
float La distance d'avance du texte.
Aucune exception
getSubStringLength
La somme de toutes les valeurs d'avance issues du rendu de la sous-chaîne de caractères spécifiée, dont la valeur d'avance des glyphes (horizontale ou verticale), l'effet des propriétés 'kerning', 'letter-spacing' et 'word-spacing' ainsi que les ajustements du fait des attributs dx et dy su les éléments 'tspan'. Pour les environnements sans rendu, l'agent utilisateur devra faire des hypothèses raisonnables quant aux mesures des glyphes.
Paramètres
in unsigned long charnum L'index du premier caractère dans la sous-chaîne, le premier caractère ayant un index de 0.
in unsigned long nchars Le nombre de caractères dans la sous-chaîne.
Valeur retournée
float La distance d'avance du texte.
Exceptions
DOMException
INDEX_SIZE_ERR : déclenchée si le numéro du caractère est négatif ou si la somme de celui-ci et du nombre de caractères est supérieure ou égale au nombre de caractères de ce nœud.
getStartPositionOfChar
Retourne la position du texte courante avant le rendu du caractère dans le système de coordonnées utilisateur dans le ou les glyphes qui correspondent au caractère spécifié. La position du texte courante a déjà pris en compte les effets des éventuels ajustements entre caractères des propriétés 'kerning', 'letter-spacing' et 'word-spacing' ainsi que les ajustements du fait des attributs x, y, dx et dy. Si plusieurs caractères consécutifs ont un rendu inséparable (par exemple, comme un seul glyphe ou une séquence de glyphes), alors chacun des caractères inséparables retournera la position de départ du premier glyphe.
Paramètres
in unsigned long charnum L'index du caractère, le premier caractère ayant un index de 0.
Valeur retournée
SVGPoint La position de départ du caractère.
Exceptions
DOMException
INDEX_SIZE_ERR : déclenchée si le numéro du caractère est négatif ou supérieur ou égal au nombre de caractères de ce œud.
getEndPositionOfChar
Retourne la position du texte courante après le rendu du caractère dans le système de coordonnées utilisateur dans le ou les glyphes qui correspondent au caractère spécifié. La position du texte courante ne prend pas en compte les effets des éventuels ajustements entre caractères, pour la préparation du caractère suivant, comme ceux des propriétés 'kerning', 'letter-spacing' et 'word-spacing' ainsi que ceux du fait des attributs x, y, dx et dy. Si plusieurs caractères consécutifs ont un rendu inséparable (par exemple, comme un seul glyphe ou une séquence de glyphes), alors chacun des caractères inséparables retournera la position de fin du dernier glyphe.
Paramètres
in unsigned long charnum L'index du caractère, le premier caractère ayant un index de 0.
Valeur retournée
SVGPoint La position de fin du caractère.
Exceptions
DOMException
INDEX_SIZE_ERR : déclenchée si le numéro du caractère est négatif ou supérieur ou égal au nombre de caractères de ce œud.
getExtentOfChar
Retourne le rectangle le plus resserré qui définit les valeurs X et Y minimum et maximum dans le système de coordonnées utilisateur pour le rendu du ou des glyphes qui correspondent au caractère spécifié. Les calculs supposent que tous les glyphes occupent la totalité de leur cellule normale pour la police. Si plusieurs caractères consécutifs ont un rendu inséparable (par exemple, comme un seul glyphe ou une séquence de glyphes), alors chacun des caractères inséparables retournera la même étendue.
Paramètres
in unsigned long charnum L'index du caractère, le premier ayant un index de 0.
Valeur retournée
SVGRect Le rectangle qui englobe la totalité du ou des glyphes rendus.
Exceptions
DOMException
INDEX_SIZE_ERR : déclenchée si le numéro du caractère est négatif ou supérieur ou égal au nombre de caractères de ce œud.
getRotationOfChar
Retourne la valeur de la rotation, par rapport au système de coordonnées utilisateur courant utilisé pour rendre le ou les glyphes correspondant au caractère spécifié. Si plusieurs glyphes sont utilisés pour le rendu du caractère donné et que chacun des glyphes a une rotation différente (par exemple, un texte sur un tracé), l'agent utilisateur devra retourner une valeur moyenne (par exemple, l'angle de rotation au point milieu au long du tracé de tous les glyphes utilisés pour rendre ce caractère). Cette valeur de rotation est complémentaire aux rotations éventuelles du fait des propriétés 'glyph-orientation-horizontal' et 'glyph-orientation-vertical' ; ainsi, aucune rotation de glyphe issue de ces propriétés n'est inclue dans la valeur de rotation retournée. Si plusieurs caractères consécutifs ont un rendu inséparable (par exemple, comme un seul glyphe ou une séquence de glyphes), alors chacun des caractères inséparables retournera la même valeur de rotation.
Paramètres
in unsigned long charnum L'index du caractère, le premier ayant un index de 0.
Valeur retournée
float L'angle de rotation.
Exceptions
DOMException
INDEX_SIZE_ERR : déclenchée si le numéro du caractère est négatif ou supérieur ou égal au nombre de caractères de ce œud.
getCharNumAtPosition
Retourne l'index du caractère dont la boîte englobante de la cellule du glyphe correspondante contient le point spécifié. Les calculs supposent que tous les glyphes occupent leur cellule standard complète pour la police. S'il n'existe pas de tel caractère, une valeur de "-1" est retournée. S'il en existe plusieurs, le caractère, dans l'élément, dont les glyphes ont été rendus en dernier (i.e., prendre en compte tout ré-ordonnancement comme pour un texte bi-directionnel) est utilisé. Si plusieurs caractères consécutifs ont un rendu inséparable (par exemple, comme un seul glyphe ou une séquence de glyphes), alors l'agent utilisateur allouera un pourcentage égal de la quantité d'avance du texte à chacun des caractères incriminés pour la détermination de celui qui sera choisi.
Paramètres
in SVGPoint point Un point dans l'espace utilisateur.
Valeur retournée
long L'index du caractère qui est au point donné, le premier caractère ayant un index de 0.
Aucune exception
selectSubString
Sélectionne la sous-chaîne spécifiée comme si l'utilisateur l'avait sélectionnée interactivement.
Paramètres
in unsigned long charnum L'index du caractère de départ au point donné, le premier caractère ayant un index de 0.
in unsigned long nchars Le nombre de caractères dans la sous-chaîne. Si la valeur nchars spécifie plus de caractères qu'il y en a de disponibles, alors la sous-chaîne consistera de tous les caractères à partir de la valeur indiquée par charnum jusqu'à la fin de la liste de caractères.
Aucune valeur retournée
Exceptions
DOMException
INDEX_SIZE_ERR : déclenchée si le numéro du caractère est négatif ou supérieur ou égal au nombre de caractères de ce œud.

L'interface SVGTextPositioningElement

L'interface SVGTextPositioningElement est héritée par des interfaces en relation avec le texte : SVGTextElement, SVGTSpanElement, SVGTRefElement and SVGAltGlyphElement.


Définition IDL
interface SVGTextPositioningElement : SVGTextContentElement { 
  readonly attribute SVGAnimatedLengthList x;
  readonly attribute SVGAnimatedLengthList y;
  readonly attribute SVGAnimatedLengthList dx;
  readonly attribute SVGAnimatedLengthList dy;
  readonly attribute SVGAnimatedNumberList rotate;
};

attributs
readonly SVGAnimatedLengthList x
Correspond à l'attribut x sur l'élément en question.
readonly SVGAnimatedLengthList y
Correspond à l'attribut y sur l'élément en question.
readonly SVGAnimatedLengthList dx
Correspond à l'attribut dx sur l'élément en question.
readonly SVGAnimatedLengthList dy
Correspond à l'attribut dy sur l'élément en question.
readonly SVGAnimatedNumberList rotate
Correspond à l'attribut rotate sur l'élément en question.

L'interface SVGTextElement

L'interface SVGTextElement correspond à l'élément 'text'.


Définition IDL
interface SVGTextElement : 
                SVGTextPositioningElement,
                SVGTransformable {};


L'interface SVGTSpanElement

L'interface SVGTSpanElement correspond à l'élément 'tspan'.


Définition IDL
interface SVGTSpanElement : SVGTextPositioningElement {};


L'interface SVGTRefElement

L'interface SVGTRefElement correspond à l'élément 'tref'.


Définition IDL
interface SVGTRefElement : 
                SVGTextPositioningElement,
                SVGURIReference {};


L'interface SVGTextPathElement

L'interface SVGTextPathElement correspond à l'élément 'textPath'.


Définition IDL
interface SVGTextPathElement : 
                SVGTextContentElement,
                SVGURIReference { 

  // textPath Method Types
  const unsigned short TEXTPATH_METHODTYPE_UNKNOWN   = 0;
  const unsigned short TEXTPATH_METHODTYPE_ALIGN     = 1;
  const unsigned short TEXTPATH_METHODTYPE_STRETCH     = 2;
  // textPath Spacing Types
  const unsigned short TEXTPATH_SPACINGTYPE_UNKNOWN   = 0;
  const unsigned short TEXTPATH_SPACINGTYPE_AUTO     = 1;
  const unsigned short TEXTPATH_SPACINGTYPE_EXACT     = 2;

  readonly attribute SVGAnimatedLength              startOffset;
  readonly attribute SVGAnimatedEnumeration method;
  readonly attribute SVGAnimatedEnumeration spacing;
};

Groupe de définition des types de méthode textPath
Constantes définies
TEXTPATH_METHODTYPE_UNKNOWN L'énumération est établie à une valeur qui ne fait pas partie de l'un des types prédéfinis. Tenter de définir une nouvelle valeur de ce type ou tenter de changer une valeur existante ver ce type est illégal.
TEXTPATH_METHODTYPE_ALIGN Correspond à la valeur align.
TEXTPATH_METHODTYPE_STRETCH Correspond à la valeur stretch.
Groupe de définition des types d'espacement textPath
Constantes définies
TEXTPATH_SPACINGTYPE_UNKNOWN L'énumération est établie à une valeur qui ne fait pas partie de l'un des types prédéfinis. Tenter de définir une nouvelle valeur de ce type ou tenter de changer une valeur existante ver ce type est illégal.
TEXTPATH_SPACINGTYPE_AUTO Correspond à la valeur auto.
TEXTPATH_SPACINGTYPE_EXACT Correspond à la valeur exact.
attributs
readonly SVGAnimatedLength startOffset
Correspond à l'attribut startOffset sur l'élément 'textPath' en question.
readonly SVGAnimatedEnumeration method
Correspond à l'attribut method sur l'élément 'textPath' en question. La valeur doit être l'une des constantes de type de méthode spécifiés ci-dessus.
readonly SVGAnimatedEnumeration spacing
Correspond à l'attribut spacing sur l'élément 'textPath' en question. La valeur doit être l'une des constantes de type d'espacement spécifiées ci-dessus.

L'interface SVGAltGlyphElement

L'interface SVGAltGlyphElement correspond à l'élément 'altGlyph'.


Définition IDL
interface SVGAltGlyphElement : 
                SVGTextPositioningElement,
                SVGURIReference { 

           attribute DOMString glyphRef;
                       // déclenche une DOMException à l'initialisation
           attribute DOMString format;
                       // déclenche une DOMException à l'initialisation
};

attributs
DOMString glyphRef
Correspond à l'attribut glyphRef sur l'élément donné.
Exceptions à l'initialisation
DOMException
NO_MODIFICATION_ALLOWED_ERR : déclenchée lors d'une tentative de modifier la valeur d'un attribut en lecture seule.
DOMString format
Correspond à l'attribut format sur l'élément donné.
Exceptions à l'initialisation
DOMException
NO_MODIFICATION_ALLOWED_ERR : déclenchée lors d'une tentative de modifier la valeur d'un attribut en lecture seule.

L'interface SVGAltGlyphDefElement

L'interface SVGAltGlyphDefElement correspond à l'élément 'altGlyphDef'.


Définition IDL
interface SVGAltGlyphDefElement : SVGElement {};


L'interface SVGAltGlyphItemElement

L'interface SVGAltGlyphItemElement correspond à l'élément 'altGlyphItem'.


Définition IDL
interface SVGAltGlyphItemElement : SVGElement {};


L'interface SVGGlyphRefElement

L'interface SVGGlyphRefElement correspond à l'élément 'glyphRef'.


Définition IDL
interface SVGGlyphRefElement : 
                SVGElement,
                SVGURIReference,
                SVGStylable { 

           attribute DOMString glyphRef;
                       // déclenche une DOMException à l'initialisation
           attribute DOMString format;
                       // déclenche une DOMException à l'initialisation
           attribute float    x;
                       // déclenche une DOMException à l'initialisation
           attribute float    y;
                       // déclenche une DOMException à l'initialisation
           attribute float    dx;
                       // déclenche une DOMException à l'initialisation
           attribute float    dy;
                       // déclenche une DOMException à l'initialisation
};

attributs
DOMString glyphRef
Correspond à l'attribut glyphRef sur l'élément donné.
Exceptions à l'initialisation
DOMException
NO_MODIFICATION_ALLOWED_ERR : déclenchée lors d'une tentative de modifier la valeur d'un attribut en lecture seule.
DOMString format
Correspond à l'attribut format sur l'élément donné.
Exceptions à l'initialisation
DOMException
NO_MODIFICATION_ALLOWED_ERR : déclenchée lors d'une tentative de modifier la valeur d'un attribut en lecture seule.
float x
Correspond à l'attribut x sur l'élément donné.
Exceptions à l'initialisation
DOMException
NO_MODIFICATION_ALLOWED_ERR : déclenchée lors d'une tentative de modifier la valeur d'un attribut en lecture seule.
float y
Correspond à l'attribut y sur l'élément donné.
Exceptions à l'initialisation
DOMException
NO_MODIFICATION_ALLOWED_ERR : déclenchée lors d'une tentative de modifier la valeur d'un attribut en lecture seule.
float dx
Correspond à l'attribut dx sur l'élément donné.
Exceptions à l'initialisation
DOMException
NO_MODIFICATION_ALLOWED_ERR : déclenchée lors d'une tentative de modifier la valeur d'un attribut en lecture seule.
float dy
Correspond à l'attribut dy sur l'élément donné.
Exceptions à l'initialisation
DOMException
NO_MODIFICATION_ALLOWED_ERR : déclenchée lors d'une tentative de modifier la valeur d'un attribut en lecture seule.