4 septembre 2001

20 Les polices


Contenu


 

20.1 Introduction

La distribution fiable des polices est une obligation pour SVG. Les concepteurs ont besoin de créer un contenu SVG avec des polices arbitraires, en sachant que le même résultat graphique sera obtenu quand ce contenu sera visionné par n'importe quel utilisateur final, même si celui-ci ne dispose pas des polices nécessaires installées dans son système. Ceci va dans le même sens que le monde de l'impression, où le concepteur utilise une police donnée pour l'impression d'un dessin, le contenu graphique apparaissant exactement le même dans la version imprimée qu'il était apparu avec le système d'édition du concepteur.

SVG utilise les facilités offertes par les PolicesWeb vf., définies dans la spécification « Les feuilles de style en cascade (CSS), niveau 2 » [CSS2 vf.], comme mécanisme clé pour la distribution fiable de données de police aux utilisateurs finaux. Selon un scénario partagé, les applications d'édition génèrent des sous-ensembles compressés de PolicesWeb vf. pour tous les éléments textuels utilisés par un fragment de document SVG donné. Les PolicesWeb sont typiquement stockées dans une localisation relative au document appelant.

Un inconvénient des PolicesWeb jusqu'ici, c'est que les spécifications, comme [CSS2 vf.], n'exigent pas la reconnaissance de formats de polices particuliers. En conséquence, les différentes implémentations reconnaissent différents formats de polices Web, ce qui rend difficiles aux créateurs de sites Web de proposer un seul site utilisant les PolicesWeb qui fonctionne sur tous les agents utilisateurs.

Pour donner à SVG un format de police commun, dont la reconnaissance soit garantie par tous les visionneurs conformes SVG, SVG offre une facilité pour définir des polices. Cette facilité se nomme polices SVG.

Les polices SVG renforcent la richesse sémantique des graphiques représentant du texte. Par exemple, de nombreux logos de société consiste du nom de la société dessiné artistiquement. Dans certains cas, l'accessibilité peut se trouver améliorée en exprimant le logo sous forme d'une succession de glyphes dans une police SVG, puis en rendant le logo par un élément 'text' qui appelle cette police.

20.2 Aperçu sur les polices SVG

Une police SVG est définie par l'élément 'font' de SVG.

Le but des polices SVG est de permettre une distribution des contours de glyphe dans des environnements en affichage seul. Les polices SVG qui accompagnent les pages Web doivent n'être reconnues que dans des situations de navigation et de visionnage. Les applications d'édition graphique ou les outils de traduction de fichier ne doivent pas essayer de convertir des polices SVG en polices système. Les fichiers SVG sont destinés à être interchangeables entre deux créateurs de contenu, au contraire des polices SVG qui pourraient accompagner ces fichiers SVG. Ainsi, chaque créateur de contenu devra avoir l'autorisation d'utiliser la police donnée avant de pouvoir éditer avec succès le fichier SVG. L'élément font-face-name indique le nom de la police avec une licence à utiliser pour édition.

Les polices SVG contiennent des contours de police non corrigés. Pour cette raison, sur plusieurs implémentations, il y aura des limitations quant à la qualité et à la lisibilité du texte dans les petites tailles de police. Pour améliorer la qualité et la lisibilité dans ces petites tailles, les créateurs de contenu peuvent choisir d'utiliser une technologie de police alternative, comme les polices livrées avec les systèmes d'opération ou un format de PoliceWeb vf. autre.

Comme les polices SVG sont exprimées avec des éléments et des attributs SVG, une police SVG peut parfois occuper plus de place qu'une police exprimée dans un format de PoliceWeb, celles-ci étant conçues spécialement pour l'expression compacte des données de police. Pour une rapidité optimale du service des pages Web, les créateurs de contenu peuvent choisir d'utiliser une technologie de police alternative.

Un aspect essentiel des polices SVG est leur disponibilité garantie dans les agents utilisateurs SVG. Dans certaines situations, il peut être approprié qu'une police SVG soit le premier choix pour le rendu d'un texte. Dans d'autres situations, la police SVG peut représenter une police alternative de repli, au cas où la police de premier choix (éventuellement, une police système corrigée) n'était pas disponible pour un utilisateur donné.

Les caractéristiques et les attributs des polices SVG correspondent de près aux caractéristiques et aux paramètres décrits au chapitre "Les polices" vf. de la spécification « Les feuilles de style en cascade (CSS), niveau 2 » [CSS2 vf.]. Dans ce modèle, les diverses mesures des polices, comme les valeurs d'avance et les emplacements des lignes de base, et les contours de glyphe eux-mêmes sont exprimés en unités relativement au carré abstrait dont la hauteur représente la distance voulue entre les lignes de caractères de même taille. Celui-ci est appelé le carré em, c'est la grille de dessin sur laquelle les contours de glyphe sont définis. La valeur de l'attribut units-per-em sur l'élément 'font' spécifie en combien d'unités le carré em est divisé. Pour d'autres types de police, des valeurs communes sont, par exemple : 250 (Intellifont), 1000 (Type 1) et 2048 (TrueType, TrueType GX et Open-Type). À la différence des graphiques standards en SVG, où le système de coordonnées initial a un axe-y dirigé vers le bas (voir la section Le système de coordonnées initial), la grille de dessin des polices SVG, tout comme le système de coordonnées initial pour les glyphes, a un axe-y dirigé vers le haut pour une certaine cohérence avec les pratiques acceptées de l'industrie pour de nombreux formats de police courants.

Les polices SVG et leurs glyphes associés ne spécifient pas d'information sur les boîtes de délimitation. Comme les contours de glyphe sont exprimés par des éléments graphiques SVG, l'implémentation a le choix pour le rendu des glyphes entre l'utilisation d'appels de graphiques standards ou l'utilisation d'une technologie de rendu de police spéciale, auquel cas tous les calculs de boîte englobante maximum et de surplomb peuvent être effectués à partir de l'analyse des éléments graphiques contenus dans les contours de glyphe.

Une police SVG peut être soit incorporée dans le même document utilisant la police, soit stockée dans une ressource externe.

Voici un exemple montrant comment incorporer une police SVG dans un document SVG.

<?xml version="1.0" standalone="yes"?>
<svg width="400px" height="300px"
  xmlns = 'http://www.w3.org/2000/svg'>
  <defs>
    <font id="Police1" horiz-adv-x="1000">
      <font-face font-family="Super Sans" font-weight="bold" font-style="normal"
          units-per-em="1000" cap-height="600" x-height="400"
          ascent="700" descent="300"
          alphabetic="0" mathematical="350" ideographic="400" hanging="500">
        <font-face-src>
          <font-face-name name="Super Sans Bold"/>
        </font-face-src>
      </font-face>
      <missing-glyph><path d="M0,0h200v200h-200z"/></missing-glyph>
      <glyph unicode="!" horiz-adv-x="300"><!-- Contour du glyphe point d'exclamation --></glyph>
      <glyph unicode="@"><!-- Contour du glyphe @ --></glyph>
      <!-- autres glyphes -->
    </font>
  </defs>
  <text x="100" y="100" 
           style="font-family: 'Super Sans', Helvetica, sans-serif;
                  font-weight: bold; font-style: normal">Texte 
    avec police incorporée</text>
</svg>

Voici un exemple montrant comment utiliser la facilité @font-face vf. offerte par CSS pour la référence d'une police SVG stockée dans un fichier externe. Tout d'abord, le fichier de police SVG qui est appelé :

<?xml version="1.0" standalone="yes"?>
<svg width="100%" height="100%"
 xmlns = 'http://www.w3.org/2000/svg'>
  <defs>
    <font id="Police2" horiz-adv-x="1000">
      <font-face font-family="Super Sans" font-weight="normal" font-style="italic"
          units-per-em="1000" cap-height="600" x-height="400"
          ascent="700" descent="300"
          alphabetic="0" mathematical="350" ideographic="400" hanging="500">
        <font-face-src>
          <font-face-name name="Super Sans Italic"/>
        </font-face-src>
      </font-face>
      <missing-glyph><path d="M0,0h200v200h-200z"/></missing-glyph>
      <glyph unicode="!" horiz-adv-x="300"><!-- Contour du glyphe point d'exclamation --></glyph>
      <glyph unicode="@"><!-- Contour du glyphe @ --></glyph>
      <!-- autres glyphes -->
    </font>
  </defs>
</svg>

Puis le fichier SVG qui utilise/référence la police SVG ci-dessus :

<?xml version="1.0" standalone="yes"?>
<svg width="400px" height="300px"
 xmlns = 'http://www.w3.org/2000/svg'>  <defs>
    <style type="text/css">
      <![CDATA[
        @font-face {
          font-family: 'Super Sans'; 
          font-weight: normal;
          font-style: italic;
          src: url("mapolice.svg#Police2") format(svg)
        }
      ]]>
   </style>
  </defs>
  <text x="100" y="100"
           style="font-family: 'Super Sans'; font-weight:normal;
                  font-style: italic">Texte avec police appelée</text>
</svg>

20.3 L'élément 'font'

L'élément 'font' définit une police SVG.

<!ENTITY % fontExt "" >
<!ELEMENT font (%descTitleMetadata;,font-face,
                   missing-glyph,(glyph|hkern|vkern %fontExt;)*) >
<!ATTLIST font
  %stdAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  class %ClassList; #IMPLIED
  style %StyleSheet; #IMPLIED
  %PresentationAttributes-All;
  horiz-origin-x %Number; #IMPLIED
  horiz-origin-y %Number; #IMPLIED
  horiz-adv-x %Number; #REQUIRED
  vert-origin-x %Number; #IMPLIED
  vert-origin-y %Number; #IMPLIED
  vert-adv-y %Number; #IMPLIED >

Définitions des attributs :

horiz-origin-x = "<nombre>"
La coordonné-x, dans le système de coordonnées de la police, de l'origine d'un glyphe à utiliser lors du dessin d'un texte orienté horizontalement. (Remarquer que l'origine s'applique à tous les glyphes de la police).
Si l'attribut n'est pas spécifié, l'effet produit est comme si une valeur de "0" était spécifiée.
Animable : non.
horiz-origin-y = "<nombre>"
La coordonnée-y, dans le système de coordonnées de la police, de l'origine d'un glyphe à utiliser lors du dessin d'un texte orienté horizontalement. (Remarquer que l'origine s'applique à tous les glyphes de la police).
Si l'attribut n'est pas spécifié, l'effet produit est comme si une valeur de "0" était spécifiée.
Animable : non.
horiz-adv-x = "<nombre>"
L'avance horizontale par défaut après le rendu d'un glyphe dans une orientation horizontale. Les largeurs des glyphes ne doivent pas être négatives, même si le glyphe est rendu typiquement de droite-à-gauche, comme dans les écritures hébreue et arabe.
Animable : non.
vert-origin-x = "<nombre>"
La coordonnée-x par défaut, dans le système de coordonnées de la police, de l'origine d'un glyphe à utiliser lors du dessin d'un texte orienté verticalement.
Si l'attribut n'est pas spécifié, l'effet produit est comme si l'attribut avait reçu la moitié de la valeur effective de l'attribut horiz-adv-x.
Animable : non.
vert-origin-y = "<nombre>"
La coordonnée-y par défaut, dans le système de coordonnées de la police, de l'origine d'un glyphe à utiliser lors du dessin d'un texte orienté verticalement.
Si l'attribut n'est pas spécifié, l'effet produit est comme si l'attribut avait reçu la position spécifiée par l'attribut ascent de la police.
Animable : non.
vert-adv-y = "<nombre>"
L'avance verticale par défaut après le rendu d'un glyphe dans une orientation verticale.
Si l'attribut n'est pas spécifié, l'effet produit est comme si une valeur d'un em était spécifiée (voir l'attribut units-per-em).
Animable : non.

Attributs définis par ailleurs :
%stdAttrs;, externalResourcesRequired, class, style, %PresentationAttributes-All;.

Chaque élément 'font' doit avoir un élément enfant 'font-face' qui décrit diverses caractéristiques de la police.

20.4 L'élément 'glyph'

L'élément 'glyph' définit l'aspect graphique d'un glyphe donné. Le système de coordonnées du glyphe est défini par les divers attributs dans l'élément 'font'.

Le graphique qui représente l'élément 'glyph' peut être soit une seule spécification de données de tracé dans l'attribut d, soit un document SVG arbitraire comme contenu d'un élément 'glyph'. Ces alternatives sont traitées différemment (voir ci-dessous).

<!ENTITY % glyphExt "" >
<!ELEMENT glyph (desc|title|metadata|defs|
                   path|text|rect|circle|ellipse|line|polyline|polygon|
                   use|image|svg|g|view|switch|a|altGlyphDef|
                   script|style|symbol|marker|clipPath|mask|
                   linearGradient|radialGradient|pattern|filter|cursor|font|
                   animate|set|animateMotion|animateColor|animateTransform|
                   color-profile|font-face
                   %glyphExt;)* >
<!ATTLIST glyph
  %stdAttrs;
  class %ClassList; #IMPLIED
  style %StyleSheet; #IMPLIED
  %PresentationAttributes-All;
  unicode CDATA #IMPLIED
  glyph-name CDATA #IMPLIED
  d %PathData; #IMPLIED
  orientation CDATA #IMPLIED
  arabic-form CDATA #IMPLIED
  lang %LanguageCodes; #IMPLIED
  horiz-adv-x %Number; #IMPLIED
  vert-origin-x %Number; #IMPLIED
  vert-origin-y %Number; #IMPLIED
  vert-adv-y %Number; #IMPLIED >

Définitions des attributs :

unicode = "<chaîne>"
Un ou plusieurs caractères Unicode qui indiquent la séquence de caractères Unicode qui correspond à ce glyphe. Si un caractère est fournit, alors ce glyphe correspond au caractère Unicode donné. Si plusieurs caractères sont fournis, alors ce glyphe correspond à cette séquence de caractères Unicode donnée. L'un des usages d'une séquence de caractères est la ligature. Par exemple, si on a unicode="ffl", alors le glyphe donné sera utilisé pour rendre la séquence des caractères « f », « f » et « l ».

Il est souvent utile de se reporter aux caractères en utilisant des références de caractère XML, exprimées en notation hexadécimale, ou décimale. Par exemple, la valeur unicode="ffl" pourrait être exprimée comme des références de caractère XML en notation hexadécimale par unicode="&#x66;&#x66;&#x6c;" ou en notation décimale par unicode="&#102;&#102;&#108;".

L'attribut unicode contribut au processus pour décider quel(s) glyphe(s) utiliser pour représenter quel(s) caractère(s). Voir la section Les règles de sélection des glyphes. Si l'attribut unicode n'est pas fourni pour un élément 'glyph' donné, alors la seule manière pour utiliser ce glyphe sera via une référence dans l'élément 'altGlyph' .
Animable : non.
glyph-name = "<nom> [, <nom> ]* "
Un nom pour le glyphe. On recommande que les noms de glyphe soient uniques dans une police. On peut utiliser les noms de glyphe pour les cas où les numéros de caractère Unicode ne fournissent pas suffisamment d'information pour l'accès au glyphe correct, comme quand il y a plusieurs glyphes par caractère Unicode. Les noms de glyphe peuvent être appelés dans les définitions d'un élément kerning.
Animable : non.
d = "<données-de-tracé>"
La définition du contour d'un glyphe, à partir de la même syntaxe que celle de l'attribut d sur un élément 'path'. Voir la section Les données de tracé.
Voir ci-dessous pour une discussion au sujet de cet attribut.
Animable : non.
orientation = "h | v"
Indique que le glyphe donné ne doit être utilisé que pour une direction de progression en-ligne particulière (i.e., horizontale ou verticale). Si l'attribut n'est pas spécifié, alors le glyphe peut être utilisé dans tous les cas (i.e., dans les directions de progression en-ligne horizontale et verticale).
Animable : non.
arabic-form = "initial | medial | terminal | isolated"
Pour les glyphes arabes, indique laquelle des quatre formes possibles le glyphe représente.
Animable : non.
lang = "%LanguageCodes;"
La valeur de l'attribut est une liste de noms de langue, séparés par des virgules, comme défini dans [RFC3066]. Le glyphe peut être utilisé si la valeur de l'attribut xml:lang correspond exactement avec l'une des langues données en paramètre ou si elle est exactement égale à l'un des préfixes de langue tel que le premier caractère de balise qui suit le préfixe est « - ».
Animable : non.
horiz-adv-x = "<nombre>"
L'avance horizontale après le rendu du glyphe dans une orientation horizontale. Si l'attribut n'est pas spécifié, l'effet produit est comme si l'attribut avait la valeur de l'attribut horiz-adv-x de la police.
Les largeurs de glyphe ne doivent pas être négatives, même si le glyphe est typiquement rendu de droite-à-gauche, comme dans les écritures hébreue et arabe.
Animable : non.
vert-origin-x = "<nombre>"
La coordonnée-x, dans le système de coordonnées de la police, de l'origine du glyphe à utiliser lors du dessin d'un texte orienté verticalement.
Si l'attribut n'est pas spécifié, l'effet produit est comme si celui-ci avait la valeur de l'attribut vert-origin-x de la police.
Animable : non.
vert-origin-y = "<nombre>"
La coordonnée-y, dans le système de coordonnées de la police, de l'origine d'un glyphe à utiliser lors du dessin d'un texte orienté verticalement.
Si l'attribut n'est pas spécifié, l'effet produit est comme si celui-ci avait la valeur de l'attribut vert-origin-y de la police.
Animable : non.
vert-adv-y = "<nombre>"
L'avance verticale après le rendu d'un glyphe dans une orientation verticale.
Si l'attribut n'est pas spécifié, l'effet produit est comme si celui-ci avait la valeur de l'attribut vert-adv-y de la police.
Animable : non.

Attributs définis par ailleurs :
%stdAttrs;, style, class, %PresentationAttributes-All;.

On peut spécifier le graphique pour l'élément 'glyph' en utilisant soit l'attribut d, soit un document SVG arbitraire comme contenu dans l'élément 'glyph'.

Si l'attribut d est spécifié, alors les données de tracé dans celui-ci sont traitées comme suit :

Si l'élément 'glyph' a des enfants, alors ces éléments enfants sont rendus d'une manière similaire au rendu d'un symbole appelé par un élément 'use'. L'effet de rendu est comme si le contenu des éléments 'glyph' appelés était cloné en profondeur dans un arbre DOM non exposé séparé. L'arbre DOM cloné n'étant pas exposé, le DOM de SVG ne présente pas cette instance clonée.

Pour ceux des agents utilisateurs qui gèrent le style avec CSS, le clonage en profondeur conceptuel, de l'élément 'glyph' appelé dans un arbre DOM non exposé, reproduit également toutes les valeurs de propriété, issues de la cascade CSS [CSS2-CASCADE vf.], sur l'élément 'glyph' appelé et son contenu et applique de la même façon toutes les valeurs de propriété sur l'élément 'font'. Les sélecteurs CSS2 peuvent s'appliquer sur les éléments originaux (i.e., ceux appelés) parce que ces éléments font partie de la structure formelle du document. Les sélecteurs CSS2 ne peuvent s'appliquer su l'arbre DOM cloné (conceptuellement) parce que le contenu de cet arbre ne fait pas partie de la structure formelle du document.

L'héritage de propriété, cependant, fonctionne comme si l'élément 'glyph' appelé était inclus textuellement en tant qu'enfant cloné en profondeur dans l'arbre du document. L'élément 'glyph' appelé hérite des propriétés de l'élément qui contient les caractères correspondant avec l'élément 'glyph'. L'élément 'glyph' n'hérite pas des propriétés des parents originaux de l'élément 'font'.

Dans le contenu généré, pour chaque instance d'un élément 'glyph' donné, un élément 'g' est créé, celui-ci transporte toutes les valeurs de propriété résultant de la cascade CSS [CSS2-CASCADE vf.] sur l'élément 'font' de l'élément 'glyph' appelé. Dans cet élément 'g' se trouve un autre élément 'g' qui transporte toutes les valeurs de propriété résultant de la cascade CSS [CSS2-CASCADE vf.] sur l'élément 'glyph'. Le contenu original de l'élément 'glyph' est cloné en profondeur dans l'élément 'g' interne.

Si l'élément 'glyph' possède à la fois un attribut d et des éléments enfants, l'attribut d est rendu en premier, puis les éléments enfants.

En général, l'attribut d est rendu de la même façon que des polices système. Par exemple, un motif en tiret aura habituellement la même apparence, que celui-ci soit appliqué à une police système ou à une police SVG qui définit ses glyphes en utilisant l'attribut d. De nombreuses implémentations pourront rendre rapidement les glyphes définis dans l'attribut d et utiliser un cache de police pour des gains de performance par la suite.

La définition d'un glyphe, en incluant des éléments enfants dans l'élément 'glyph', apporte une plus grande souplesse, mais aussi plus de complexité. On peut utiliser différentes techniques de remplissage et de liseré sur différentes parties des glyphes. Par exemple, la base d'un « i » pourrait être en rouge et le point en bleu. Cette approche entraîne une complexité inhérente aux unités. Toutes les propriétés, spécifiées sur des éléments de texte, qui admettent une valeur de longueur, telle que la propriété 'stroke-width', peuvent amener à des résultats surprenants, étant donné que la valeur de longueur sera interprétée dans le système de coordonnées du glyphe.

20.5 L'élément 'missing-glyph'

L'élément 'missing-glyph' définit le graphique à utiliser, au cas où, essayant de dessiner un glyphe d'une police donnée, le glyphe donné n'est pas défini. Les attributs sur l'élément 'missing-glyph' revêtent la même signification que ceux correspondant sur l'élément 'glyph' element.

<!ENTITY % missing-glyphExt "" >
<!ELEMENT missing-glyph (desc|title|metadata|defs|
                   path|text|rect|circle|ellipse|line|polyline|polygon|
                   use|image|svg|g|view|switch|a|altGlyphDef|
                   script|style|symbol|marker|clipPath|mask|
                   linearGradient|radialGradient|pattern|filter|cursor|font|
                   animate|set|animateMotion|animateColor|animateTransform|
                   color-profile|font-face
                   %missing-glyphExt;)* >
<!ATTLIST missing-glyph
  %stdAttrs;
  class %ClassList; #IMPLIED
  style %StyleSheet; #IMPLIED
  %PresentationAttributes-All;
  d %PathData; #IMPLIED
  horiz-adv-x %Number; #IMPLIED
  vert-origin-x %Number; #IMPLIED
  vert-origin-y %Number; #IMPLIED
  vert-adv-y %Number; #IMPLIED >
Attributs définis par ailleurs :
%stdAttrs;, class, style, %PresentationAttributes-All;, d, horiz-adv-x, vert-origin-x, vert-origin-y, vert-adv-y.

20.6 Les règles de sélection des glyphes

Lors de la détermination du ou des glyphes pour le dessin d'une séquence de caractères donnée, une recherche est effectuée sur l'élément 'font', partant de son premier élément 'glyph' jusqu'au dernier, dans l'ordre logique, pour vérifier si la séquence de caractères Unicode prochaine à rendre correspond à celle spécifiée dans l'attribut unicode de l'élément 'glyph' donné. La première correspondance vérifiée est utilisée. Ainsi, la ligature«ffl  » devra être définie dans la police avant le glyphe « f », autrement le « ffl » ne sera jamais sélectionné.

Remarquer que toute survenue d'un élément 'altGlyph' a préséance sur les règles de sélection de glyphe ci-dessus dans une police SVG.

20.7 Les éléments 'hkern' et 'vkern'

Les éléments 'hkern' et 'vkern' définissent des paires de crénage pour des paires de glyphes, orientés horizontalement et verticalement respectivement.

Les paires de crénage identifient les paires de glyphes dans une seule police, dont l'espacement entre glyphes est ajusté quand les glyphes de la paire sont rendus côte à côte. En plus de l'obligation pour ces paires de glyphes d'être de la même police, le crénage d'une police SVG ne survient que si les deux glyphes correspondent à des caractères ayant les mêmes valeurs de propriété 'font-family', 'font-size', 'font-style', 'font-weight', 'font-variant', 'font-stretch', 'font-size-adjust' et 'font'.

Un exemple de paire de crénage : la combinaison de lettres « Va », pour laquelle le résultat typographique aura meilleure apparence si les lettres « V » et « a » étaient rendues légèrement rapprochées.

En SVG, un texte de droite-à-gauche, ou bi-directionnel, est disposé selon un processus en deux étapes, décrit dans la section Les relations avec la bi-directionnalité. Si on utilise des polices SVG, les caractères sont ré-ordonnés, avant le crénage, selon un ordre de rendu visuel de gauche-à-droite (ou de haut-en-bas, pour un texte vertical). Puis le crénage issu des polices SVG est appliqué à celles des paires de glyphes dont le rendu est contigu. Le premier glyphe dans la paire de crénage est celui de gauche (ou du haut) dans l'ordre de rendu visuel. Le second glyphe dans la paire de crénage est celui de droite (ou du bas).

Pour la commodité des concepteurs de police et pour minimiser les tailles des fichiers, un seul élément 'hkern', ou 'vkern', peut définir une seule valeur d'ajustement du crénage entre un jeu de glyphes (par exemple, une étendue de caractères Unicode) et un autre (par exemple, une autre étendue de caractères Unicode).

L'élément 'hkern' définit des paires de crénage et des valeurs d'ajustement sur la valeur d'avance horizontale, lors du dessin d'une paire de glyphes dont le rendu est contigu, les deux rendus horizontalement (i.e., côte à côte). L'espacement entre les caractères est réduit de la valeur de l'ajustement de crénage. (Un ajustement de crénage négatif augmente cet espacement).

<!ELEMENT hkern EMPTY >
<!ATTLIST hkern
  %stdAttrs;
  u1 CDATA #IMPLIED
  g1 CDATA #IMPLIED
  u2 CDATA #IMPLIED
  g2 CDATA #IMPLIED
  k %Number; #REQUIRED >

Définitions des attributs :

u1 = "[<caractère> | <étendue-unicode> ] [, [<caractère> | <étendue-unicode>] ]* "
Une séquence de caractères Unicode séparés par des virgules (se reporter à la description de l'attribut unicode de l'élément 'glyph' pour comment exprimer des caractères Unicode individuels) et/ou d'étendues de caractères Unicode (voir la description des étendues de caractères Unicode dans [CSS2 vf.]) qui identifie un jeu des premiers glyphes possibles dans la paire de crénage. Si un caractère Unicode donné dans le jeu a plusieurs éléments 'glyph' qui lui correspondent (i.e., il y a plusieurs éléments 'glyph' avec une même valeur d'attribut unicode, mais différentes valeurs d'attribut glyphName), alors tous ces glyphes sont inclus dans le jeu. Le caractère de séparation est la virgule ; ainsi, pour le crénage d'une virgule, spécifier celle-ci comme faisant partie d'une étendue de caractères Unicode ou comme un nom de glyphe en utilisant l'attribut g1. Le jeu total des premiers glyphes possibles dans la paire de crénage est la réunion des glyphes spécifiés par les attributs u1 et g1.
Animable : non.
g1 = "<nom> [, <nom> ]* "
Une séquence de noms de glyphe séparés par des virgules (i.e., des valeurs qui correspondent aux attributs glyphName sur les éléments 'glyph') qui identifie un jeu de premiers glyphes possibles dans la paire de crénage. Tous les glyphes avec le nom de glyphe donné sont inclus dans le jeu. Le jeu total des premiers glyphes possibles dans la paire de crénage est la réunion des glyphes spécifiés par les attributs u1 et g1.
Animable : non.
u2 = "[<nombre> | <étendue-unicode>] [, [<nombre> | <étendue-unicode>] ]* "
Pareil que pour l'attribut u1, à la différence que l'attribut u2 spécifie les seconds glyphes possibles dans la paire de crénage.
Animable : non.
g2 = "<nom> [, <nom> ]* "
Pareil que pour l'attribut g1, à la différence que l'attribut g2 spécifie les seconds glyphes possibles dans la paire de crénage.
Animable : non.
k = "<nombre>"
La quantité dont il faut diminuer l'espacement entre deux glyphes d'une paire de crénage. La valeur est exprimée dans le système de coordonnées de la police.
Si l'attribut n'est pas spécifié, l'effet produit est comme si une valeur de "0" était spécifiée.
Animable : non.

Attributs définis par ailleurs :
%stdAttrs;.

Au moins une valeur pour u1 ou pour g1 et au moins une valeur pour u2 ou pour g2 doivent être fournies.

L'élément 'vkern' définit des paires de crénage et des ajustements de valeur sur la valeur d'avance verticale, lors du dessin de paires de glyphes empilés verticalement. L'espacement entre les caractères est réduit de la valeur de l'ajustement de crénage.

<!ELEMENT vkern EMPTY >
<!ATTLIST vkern
  %stdAttrs;
  u1 CDATA #IMPLIED
  g1 CDATA #IMPLIED
  u2 CDATA #IMPLIED
  g2 CDATA #IMPLIED
  k %Number; #REQUIRED >
Attributs définis par ailleurs :
%stdAttrs;, u1, g1, u2, g2, k.

20.8 La description d'une police


20.8.1 Aperçu sur les descriptions de police

Une description de police jette un pont entre la spécification de police de l'auteur et les données de police, qui sont les données nécessaires pour le formatage du texte et pour le rendu des glyphes abstraits auxquels les caractères correspondent - les contours proportionnels effectifs ou des bitmaps. Les polices sont appelées par des propriétés, telle que la propriété 'font-family'.

Chaque description de police spécifiée est ajoutée à la base de données de police et ainsi être utilisée pour sélectionner les données de police concernées. La description de police contient des descripteurs, tels que la localisation des données de police sur le Web et des caractérisations de ces données de police. Les descripteurs de police sont également nécessaires pour la correspondance des propriétés de police avec des données de police particulières. Le degré des détails peut aller du simple nom de la police jusqu'à une liste des largeurs de glyphe.

Se reporter au chapitre traitant des polices dans la spécification CSS2 [CSS2 : Les polices vf.] pour plus d'information.


20.8.2 Les autres moyens pour fournir une description de police

On peut spécifier des descriptions de police avec l'une ou l'autre des façons suivantes :


20.8.3 L'élément 'font-face'

L'élément 'font-face' correspond directement à la facilité @font-face vf. dans CSS2. On peut l'utiliser pour décrire les caractéristiques de toute police, une police SVG ou autre.

Quand il est utilisé pour décrire les caractéristiques d'une police SVG contenue dans le même document, on recommande que l'élément 'font-face' soit un enfant de l'élément 'font' qu'il décrit, de cette façon l'élément 'font' peut être auto-contenu et complètement décrit. Dans ce cas, tous les éléments 'font-face-src' dans l'élément 'font-face' sont ignorés, étant donné que l'élément 'font-face' est sensé décrire les caractéristiques de son élément 'font' parent.

<!ELEMENT font-face (%descTitleMetadata;,font-face-src?,definition-src?) >
<!ATTLIST font-face 
  %stdAttrs;
  font-family CDATA #IMPLIED
  font-style CDATA #IMPLIED
  font-variant CDATA #IMPLIED
  font-weight CDATA #IMPLIED
  font-stretch CDATA #IMPLIED
  font-size CDATA #IMPLIED
  unicode-range CDATA #IMPLIED
  units-per-em %Number; #IMPLIED
  panose-1 CDATA #IMPLIED
  stemv %Number; #IMPLIED
  stemh %Number; #IMPLIED
  slope %Number; #IMPLIED
  cap-height %Number; #IMPLIED
  x-height %Number; #IMPLIED
  accent-height %Number; #IMPLIED
  ascent %Number; #IMPLIED
  descent %Number; #IMPLIED
  widths CDATA #IMPLIED
  bbox CDATA #IMPLIED
  ideographic %Number; #IMPLIED
  alphabetic %Number; #IMPLIED
  mathematical %Number; #IMPLIED
  hanging %Number; #IMPLIED
  v-ideographic %Number; #IMPLIED
  v-alphabetic %Number; #IMPLIED
  v-mathematical %Number; #IMPLIED
  v-hanging %Number; #IMPLIED
  underline-position %Number; #IMPLIED
  underline-thickness %Number; #IMPLIED
  strikethrough-position %Number; #IMPLIED
  strikethrough-thickness %Number; #IMPLIED
  overline-position %Number; #IMPLIED
  overline-thickness %Number; #IMPLIED >

Définitions des attributs :

font-family = "<chaîne>"
Même syntaxe et sémantique que pour le descripteur 'font-family' vf. dans une règle @font-face vf..
Animable : non.
font-style = "all | [ normal | italic | oblique] [, [normal | italic | oblique]]*"
Même syntaxe et sémantique que pour le descripteur 'font-style' vf. dans une règle @font-face vf.. Le style d'une police. Admet les mêmes valeurs que la propriété 'font-style', à la différence qu'une liste de valeurs séparées par des virgules est permise.
Si l'attribut n'est pas spécifié, l'effet produit est comme si une valeur de "all" était spécifiée.
Animable : non.
font-variant = "[normal | small-caps] [,[normal | small-caps]]*"
Même syntaxe et sémantique que pour le descripteur 'font-variant' vf. dans une règle @font-face vf.. Indique si c'est la variante en petites capitales d'une police. Admet les mêmes valeurs que la propriété 'font-variant', à la différence qu'une liste de valeurs séparées par des virgules est permise.
Si l'attribut n'est pas spécifié, l'effet produit est comme si une valeur de "normal" était spécifiée.
Animable : non.
font-weight = "all | [normal | bold |100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900] [, [normal | bold |100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900]]*"
Même syntaxe et sémantique que pour le descripteur 'font-weight' vf. dans une règle @font-face vf..
La graisse d'une police par rapport aux autres dans la même famille de polices. Admet les mêmes valeurs que la propriété 'font-weight' mais avec trois exceptions :
  • les mots-clés relatifs ("bolder", "lighter") ne sont pas permis ;
  • une liste de valeurs séparées par des virgules est permise, pour les polices qui contiennent plusieurs graisses ;
  • un mot-clé supplémentaire est admis : "all" ; il indique que la police va être retenue pour toutes les graisses possibles, soit qu'elle contient plusieurs graisses, soit qu'elle n'en contient qu'une.
Si l'attribut n'est pas spécifié, l'effet produit est comme si une valeur de "all" était spécifiée.
Animable : non.
font-stretch = "all | [ normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded] [, [ normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded] ]*"
Même syntaxe et sémantique que pour le descripteur 'font-stretch' vf. dans une règle @font-face vf.. Indique la nature condensée ou étirée d'une police par rapport aux autres dans la même famille de polices. Admet les mêmes valeurs que la propriétés 'font-stretch', mais excepté que :
  • les mots-clés relatifs ("wider", "narrower") ne sont pas permis ;
  • une liste de valeurs séparées par des virgules est permise ;
  • le mot-clé "all" est admis.
Si l'attribut n'est pas spécifié, l'effet produit est comme si une valeur de "normal" était spécifiée.
Animable : non.
font-size = "<chaîne>"
Même syntaxe et sémantique que pour le descripteur 'font-size' vf. dans la règle @font-face vf..
Animable : non.
unicode-range = "<étendue-unicode> [, <étendue-unicode>]*"
Même syntaxe et sémantique que pour le descripteur 'unicode-range' vf. dans la règle @font-face vf.. L'étendue des caractères ISO 10646 [UNICODE] éventuellement couverte par les glyphes dans la police. Exceptés les informations complémentaires fournies dans cette spécification, la définition normative de l'attribut se trouve dans [CSS2 vf.].
Si l'attribut n'est pas spécifié, l'effet produit est comme si une valeur de "U+0-10FFFF" était spécifiée.
Animable : non.
units-per-em = "<nombre>"
Même syntaxe et sémantique que pour le descripteur 'units-per-em' vf. dans la règle @font-face vf.. Le nombre d'unités de coordonnée sur le carré em, la taille de la grille de dessin sur laquelle les glyphes se disposent.
Cette valeur est presque toujours nécessaire, comme pratiquement tous les autres attributs requièrent la définition d'une grille de dessin.
Si l'attribut n'est pas spécifié, l'effet produit est comme si une valeur de "1000" était spécifiée.
Animable : non.
panose-1 = "[<entier>]{10}"
Même syntaxe et sémantique que pour le descripteur 'panose-1' vf. dans la règle @font-face vf.. Le nombre Panose-1, qui consiste en dix entiers décimaux, séparés par des blancs. Exceptés les informations complémentaires fournies dans cette spécification, la définition normative de l'attribut se trouve dans [CSS2] vf..
Si l'attribut n'est pas spécifié, l'effet produit est comme si une valeur de "0 0 0 0 0 0 0 0 0 0" était spécifiée.
Animable : non.
stemv = "<nombre>"
Même syntaxe et sémantique que pour le descripteur 'stemv' vf. dans la règle @font-face vf..
Animable : non.
stemh = "<nombre>"
Même syntaxe et sémantique que pour le descripteur 'stemh' vf. dans la règle @font-face vf..
Animable : non.
slope = "<nombre>"
Même syntaxe et sémantique que pour le descripteur 'slope' vf. dans la règle @font-face vf.. L'angle du trait vertical de la police. Exceptées les informations complémentaires fournies dans cette spécification, la définition normative de l'attribut se trouve dans [CSS2] vf..
Si l'attribut n'est pas spécifié, l'effet produit est comme si une valeur de "0" était spécifiée.
Animable : non.
cap-height = "<nombre>"
Même syntaxe et sémantique que pour le descripteur 'cap-height' vf. dans la règle @font-face vf.. La hauteur des glyphes en haut de casse dans la police dans le système de coordonnées de la police.
Animable : non.
x-height = "<nombre>"
Même syntaxe et sémantique que pour le descripteur 'x-height' vf. dans la règle @font-face vf.. La hauteur des glyphes en bas de casse dans la police dans le système de coordonnées de la police.
Animable : non.
accent-height = "<nombre>"
La distance à partir de l'origine jusqu'au sommet des caractères accentués, mesurée dans le système de coordonnées de la police.
Si l'attribut n'est pas spécifié, l'effet produit est comme si celui-ci avait la valeur de l'attribut ascent. Si on utilise cet attribut, on doit aussi spécifier l'attribut units-per-em.
Animable : non.
ascent = "<nombre>"
Même syntaxe et sémantique que pour le descripteur 'ascent' vf. dans la règle @font-face vf.. La hauteur maximum des glyphes sans accent de la police dans le système de coordonnées de la police.
Si l'attribut n'est pas spécifié, l'effet produit est comme si celui-ci avait une valeur égale à la différence entre les valeurs des attributs units-per-em et vert-origin-y de la police correpondante.
Animable : non.
descent = "<nombre>"
Même syntaxe et sémantique que pour le descripteur 'descent' vf. dans la règle @font-face vf.. La profondeur maximum des glyphes sans accent de la police dans le système de coordonnées de la police.
Si l'attribut n'est pas spécifié, l'effet produit est comme si celui-ci avait la valeur de l'attribut vert-origin-y de la police correspondante.
Animable : non.
widths = "<chaîne>"
Même syntaxe et sémantique que pour le descripteur 'widths' vf. dans la règle @font-face vf..
Animable : non.
bbox = "<chaîne>"
Même syntaxe et sémantique que pour le descripteur 'bbox' vf. dans la règle @font-face vf..
Animable : non.
ideographic = "<nombre>"
Pour les dispositions de glyphes orientés horizontalement, indique la coordonnée d'alignement des glyphes pour obtenir un alignement sur la ligne de base "ideographic". La valeur représente un décalage dans le système de coordonnées de la police. Si cet attribut est fourni, alors on doit également spécifier l'attribut units-per-em .
Animable : non.
alphabetic = "<nombre>"
Même syntaxe et sémantique que pour le descripteur 'baseline' vf. dans la règle @font-face vf.. Pour les dispositions de glyphes orientés horizontalement, indique la coordonné d'alignement des glyphes pour obtenir un alignement sur la ligne de base "alphabetic". La valeur représente un décalage dans le système de coordonnées de la police. Si cet attribut est fourni, alors on doit également spécifier l'attribut units-per-em.
Animable : non.
mathematical = "<nombre>"
Même syntaxe et sémantique que pour le descripteur 'mathline' vf. dans la règle @font-face vf.. Pour les dispositions de glyphes orientés horizontalement, indique la coordonnée d'alignement des glyphes pour obtenir un alignement sur la ligne de base "mathematical". La valeur représente un décalage dans le système de coordonnées de la police. Si cet attribut est fourni, alors on doit également spécifier l'attribut units-per-em.
Animable : non.
hanging = "<nombre>"
Pour les dispositions de glyphes orientés horizontalement, indique la coordonnée d'alignement des glyphes pour obtenir un alignement sur la ligne de base "hanging". La valeur représente un décalage dans le système de coordonnées de la police. Si cet attribut est fourni, alors on doit également spécifier l'attribut units-per-em.
Animable : non.
v-ideographic = "<nombre>"
Pour les dispositions de glyphes orientés verticalement, indique la coordonnée d'alignement des glyphes pour obtenir un alignement sur la ligne de base "ideographic". La valeur représente un décalage dans le système de coordonnées de la police en fonction de l'attribut vert-origin-x propre au glyphe. Si cet attribut est fourni, alors on doit également spécifier l'attribut units-per-em.
Animable : non.
v-alphabetic = "<nombre>"
Pour les dispositions de glyphes orientés verticalement, indique la coordonnées d'alignement des glyphes pour obtenir un alignement sur la ligne de base "alphabetic". La valeur représente un décalage dans le système de coordonnées de la police en fonction de l'attribut vert-origin-x propre au glyphe. Si cet attribut est fourni, alors on doit également spécifier l'attribut units-per-em
Animable : non.
v-mathematical = "<nombre>"
Pour les dispositions de glyphes orientés verticalement, indique la coordonnée d'alignement des glyphes pour obtenir un alignement sur la ligne de base "mathematical". La valeur représente un décalage dans le système de coordonnées de la police en fonction de l'attribut vert-origin-x propre au glyphe. Si cet attribut est fourni, alors on doit également spécifier l'attribut units-per-em.
Animable : non.
v-hanging = "<nombre>"
Pour les dispositions de glyphes orientés verticalement, indique la coordonnée d'alignement des glyphes pour obtenir un alignement sur la ligne de base "hanging". La valeur représente un décalage dans le système de coordonnées de la police en fonction de l'attribut vert-origin-x propre au glyphe. Si on fournit cet attribut, alors on doit également spécifier l'attribut units-per-em.
Animable : non.
underline-position = "<nombre>"
La position idéale du trait de souligné dans le système de coordonnées de la police. Si on fournit cet attribut, alors on doit également spécifier l'attribut units-per-em.
Animable : non.
underline-thickness = "<nombre>"
L'épaisseur idéale du trait de souligné, exprimée comme une longueur dans le système de coordonnées de la police. Si cet attribut est fourni, alors on doit également spécifier l'attribut units-per-em.
Animable : non.
strikethrough-position = "<nombre>"
La position idéale du trait de barré dans le système de coordonnées de la police. Si cet attribut est fourni, alors on doit également spécifier l'attribut units-per-em.
Animable : non.
strikethrough-thickness = "<nombre>"
L'épaisseur idéale du trait de barré, exprimée comme une longueur dans le système de coordonnées de la police. Si cet attribut est fourni, alors on doit également spécifier l'attribut units-per-em.
Animable : non.
overline-position = "<nombre>"
La position idéale du trait au-dessus dans le système de coordonnées de la police. Si cet attribut est fourni, alors on doit également spécifier l'attribut units-per-em.
Animable : non.
overline-thickness = "<nombre>"
L'épaisseur idéale du trait au-dessus, exprimée comme une longueur dans le système de coordonnées de la police. Si cet attribut est fourni, alors on doit également spécifier l'attribut units-per-em.
Animable : non.
Attributs définis par ailleurs :
%stdAttrs;.

Les éléments et les attributs suivants correspondent au descripteur 'src' dans une règle @font-face. (Se reporter aux descriptions de [La règle @font-face vf.] et [Le descripteur 'src' vf.] dans la spécification CSS2).

Quand un élément 'font-face-uri' appelle une police SVG, alors celui-ci doit référencer un élément 'font' de SVG, et par là-même requérir l'emploi d'un identifiant de fragment (voir [URI]). L'élément 'font' appelé peut être local (i.e., dans le même document que l'élément 'font-face-uri') ou distant (i.e., dans un document différent).

<!ELEMENT font-face-src (font-face-uri|font-face-name)+ >
<!ATTLIST font-face-src 
  %stdAttrs; >

<!ELEMENT font-face-uri (font-face-format*) >
<!ATTLIST font-face-uri 
  %stdAttrs;
  %xlinkRefAttrs;
  xlink:href %URI; #REQUIRED >

<!ELEMENT font-face-format EMPTY >
<!ATTLIST font-face-format 
  %stdAttrs;
  string CDATA #IMPLIED >

<!ELEMENT font-face-name EMPTY >
<!ATTLIST font-face-name 
  %stdAttrs;
  name CDATA #IMPLIED >

L'élément 'definition-src' correspond au descripteur 'definition-src' dans CSS2. (Se reporter à la description [Le descripteur 'definition-src' vf.] dans la spécification CSS2).

<!ELEMENT definition-src EMPTY >
<!ATTLIST definition-src 
  %stdAttrs;
  %xlinkRefAttrs;
  xlink:href %URI; #REQUIRED >
Attributs définis par ailleurs :
%stdAttrs;, %xlinkRefAttrs;, xlink:href.

20.9 Les interfaces du DOM

Les interfaces suivantes sont définies ci-dessous : SVGFontElement, SVGGlyphElement, SVGMissingGlyphElement, SVGHKernElement, SVGVKernElement, SVGFontFaceElement, SVGFontFaceSrcElement, SVGFontFaceUriElement, SVGFontFaceFormatElement, SVGFontFaceNameElement, SVGDefinitionSrcElement.


L'interface SVGFontElement

L'interface SVGFontElement correspond à l'élément 'font'.

L'accès orienté objet aux attributs de l'élément 'font' via le DOM de SVG n'est pas disponible.


Définition IDL
interface SVGFontElement : 
                SVGElement,
                SVGExternalResourcesRequired,
                SVGStylable {};


L'interface SVGGlyphElement

L'interface SVGGlyphElement correspond à l'élément 'glyph'.

L'accès orienté objet aux attributs de l'élément 'glyph' via le DOM de SVG n'est pas disponible.


Définition IDL
interface SVGGlyphElement : 
                SVGElement,
                SVGStylable {};


L'interface SVGMissingGlyphElement

L'interface SVGMissingGlyphElement correspond à l'élément 'missing-glyph'.

L'accès orienté objet aux attributs de l'élément 'missing-glyph' via le DOM de SVG n'est pas disponible.


Définition IDL
interface SVGMissingGlyphElement : 
                SVGElement,
                SVGStylable {};


L'interface SVGHKernElement

L'interface SVGHKernElement correspond à l'élément 'hkern'.

L'accès orienté objet aux attributs de l'élément 'hkern' via le DOM de SVG n'est pas disponible.


Définition IDL
interface SVGHKernElement : SVGElement {};


L'interface SVGVKernElement

L'interface SVGVKernElement correspond à l'élément 'vkern'.

L'accès orienté objet aux attributs de l'élément 'vkern' via le DOM de SVG n'est pas disponible.


Définition IDL
interface SVGVKernElement : SVGElement {};


L'interface SVGFontFaceElement

L'interface SVGFontFaceElement correspond à l'élément 'font-face'.

L'accès orienté objet aux attributs de l'élément 'font-face' via le DOM de SVG n'est pas disponible.


Définition IDL
interface SVGFontFaceElement : SVGElement {};


L'interface SVGFontFaceSrcElement

L'interface SVGFontFaceSrcElement correspond à l'élément 'font-face-src'.


Définition IDL
interface SVGFontFaceSrcElement : SVGElement {};


L'interface SVGFontFaceUriElement

L'interface SVGFontFaceUriElement correspond à l'élément 'font-face-uri'.

L'accès orienté objet aux attributs de l'élément 'font-face-uri' via le DOM de SVG n'est pas disponible.


Définition IDL
interface SVGFontFaceUriElement : SVGElement {};


L'interface SVGFontFaceFormatElement

L'interface SVGFontFaceFormatElement correspond à l'élément 'font-face-format'.

L'accès orienté objet aux attributs de l'élément 'font-face-format' via le DOM de SVG n'est pas disponible.


Définition IDL
interface SVGFontFaceFormatElement : SVGElement {};


L'interface SVGFontFaceNameElement

L'interface SVGFontFaceNameElement correspond à l'élément 'font-face-name'.

L'accès orienté objet aux attributs de l'élément 'font-face-name' via le DOM de SVG n'est pas disponible.


Définition IDL
interface SVGFontFaceNameElement : SVGElement {};


L'interface SVGDefinitionSrcElement

L'interface SVGDefinitionSrcElement correspond à l'élément 'definition-src'.

L'accès orienté objet aux attributs de l'élément 'definition-src' via le DOM de SVG n'est pas disponible.


Définition IDL
interface SVGDefinitionSrcElement : SVGElement {};