FR 2691819 A1 19931203 FR 9305583 A 19930510 La présente invention concerne le domaine des systèmes d'ordinateurs De façon plus particulière, elle concerne un appareil et un procédé de restitution d'implantations de lignes textuelles. Les ordinateurs sont prévus pour traiter, mémoriser et recouvrer des données selon un programme d'ordinateur Au fur et à mesure que les ordinateurs deviennent de plus en plus rapides, plus puissants, et en même temps d'un prix plus abordable, ils sont utilisés de façon croissante dans différents domaines. De façon peu surprenante, un domaine dans lequel des ordinateurs sont employés avec succès est celui du traitement de texte et des applications de publication de bureau. Dans la préparation de documents textuels, les applications des ordinateurs au traitement de texte et à la publication de bureau offrent à l'utilisateur une grande versatilité quant à leur aspect et quant aux éditions ultérieures éventuelles Des particularités comme la dimension, la police, l'implantation, le format, l'alignement, les contours, et les graphiques d'un document sont directement sous commande de l'utilisateur De plus, l'utilisateur commande le numérotage de pages, les notes de bas de page, les indentations, les soulignements, les caractères gras, les ombrages et la mise en italique d'un certains texte à l'intérieur du document En outre, les applications classiques de traitement de texte et de publication de bureau apportent à l'utilisateur des ordres commodes d'édition, comme chercher, insérer, annuler, couper, coller, et vérifier l'orthographe Des modifications du document peuvent être effectuées de façon globale ou sur des parties choisies seulement Le document textuel complété peut être mémorisé électronicienne (par exemple sur un disque souple, un disque dur, un disque optique) et recouvré ou mis à jour ultérieurement En fait, un accès à un document textuel peut être partagé par des utilisateurs multiples sur de multiples terminaux d'ordinateurs en utilisant un serveur de dossier sur un réseau d'ordinateurs De façon plus classique, un exemplaire du document textuel fini est effectuée sur un support par une impression sur un papier. Classiquement, l'utilisateur dispose d'une interface avec le système d'ordinateur au moyen d'un clavier AZERTY, ou d'un clavier QWERTY Une donnée textuelle est entrée dans le système d'ordinateur en tapant au clavier des caractères (par exemple des lettres, des chiffres et des symboles) Les caractères entrés sont sauvegardés temporairement dans la mémoire de l'ordinateur et sont affichés sur un dispositif d'affichage à tube à rayons cathodiques (CRT) Ensuite, l'utilisateur peut choisir d'entrée un texte additionnel, d'éditer le texte existant, d'écrire le document sur un milieu de mémorisation, ou d'imprimer le document. Dans des systèmes d'ordinateurs typiques de l'art antérieur, l'utilisateur entre un caractère dans le système d'ordinateur en actionnant ou en "tapant" une touche du clavier correspondant à ce caractère En actionnant cette touche, l'utilisateur amène un signal encodé électriquement représentant le caractère de cette touche à être engendré et envoyé à l'ordinateur. Certains des schémas d'encodage de caractères les plus largement utilisés incluent l'ASCII et 1 'EBCDIC Chaque caractère possède son propre code unique Sur la base des codes reçus du clavier, l'ordinateur engendre le glyphe correspondant à ce code Le glyphe est affiché sur l'écran d'affichage du tube à rayons cathodiques ou imprimé sur papier Par exemple, en actionnant la lettre "A" sur le clavier, un code hexadécimal de " 61 " est engendré et envoyé à l'ordinateur L'ordinateur engendre alors un glyphe "a" correspondant à ce code. Ainsi, des applications typiques de traitement de texte et de publication de bureau de l'art antérieur présentent essentiellement une correspondance de bijective, ou un-à-un, entre chaque caractère et un glyphe représentant ce caractère. Un inconvénient de l'art antérieur est que le résultat de cette correspondance bijective est un système plutôt inflexible Dans un tel système, le nombre de glyphes différents est limité au nombre de caractères disponibles Par exemple, étant donné un schéma d'encodage à 8 bits, il ne peut exister que 28 = 256 caractères différents Par conséquent, une police (c'est-à-dire une collection de glyphes qui présentent généralement dans leurs aspects un certain élément de cohérence de structure) est limitée à ne comprendre que 256 glyphes différents Certaines polices plus stylisées, artistiques et visuellement attrayantes, exigent une plus grande variété de glyphes. En outre, un inconvénient lié au procédé typique de l'art antérieur de restitution de texte est qu'il faut, pour ajouter un nouveau glyphe, assigner un code de caractère à chacun des nouveaux glyphes, afin de permettre à l'utilisateur d'accéder à ces glyphes Par conséquent, un espace de code de caractère de haute valeur est consommé si des glyphes additionnels sont souhaités. Un autre problème associé aux approches typiques de l'art antérieur de restitution de texte est que l'ensemble des caractères peut être trop petit pour restituer totalement une langue écrite Etant donné un ensemble de 256 caractères, il existe suffisamment de caractères pour représenter adéquatement les 23 lettres majuscules et minuscules (a-z) de l'alphabet romain, les chiffres arabes de O à 9, les ponctuations et divers autres symboles comprenant la majeure partie des langues occidentales et européennes modernes. Cependant, d'autres types d'écritures, comme l'arabe et l'indien, peuvent comprendre jusqu'à 500 formes contextuelles différentes pour une police fantaisie. Les approches antérieures ont consisté à choisir les 256 formes les plus importantes pour la présentation. Par conséquent, les procédés de restitution de texte de l'art antérieur ont rencontré des problèmes pour le traitement d'applications à langues multiples. Un autre problème associé au procédé de restitution de l'art antérieur, encore, est que la personne qui a conçu le système d'ordinateur a aussi spécifié, dans la plupart des cas, l'ensemble des caractères Un concepteur ultérieur de police, qui souhaite concevoir une police pour ce système d'ordinateur, est limité par l'ensemble prédéterminé de caractères Sinon, il n'existerait pas de mécanisme d'accès à ce glyphe particulier Par conséquent, le concepteur de police est limité à des structures qui ont été prévues par le concepteur de l'ordinateur. Ainsi, ce qui se révèle nécessaire est un schéma de restitution textuelle au moyen duquel il peut exister un grand nombre de glyphes différents pour un ensemble donné de caractères De cette manière, la plage d'éléments qu'un ordinateur peut restituer est fortement accrue. Au vu des problèmes associés avec les mécanismes typiques de restitution de texte de l'art antérieur, un objet de la présente invention est de permettre une commande totale de l'aspect de lignes du texte. Un autre objet de la présente invention est de restituer des lignes de texte en langues multiples, y compris un texte à afficher dans des écritures non romaines, comme l'arabe, l'indien ou le japonais. Un autre objet de la présente invention est de fournir un procédé flexible de restitution de ligne qui ne soit pas limité à une correspondance un-à-un entre chaque caractère et un glyphe représentant ce caractère. Un autre objet de la présente invention est de distinguer entre des glyphes et des codes de caractères afin de pouvoir restituer des formes sans que ces formes n'occupent un espace de code de caractère. Un autre objet de la présente invention est d'implanter une machine d'état fini afin de traiter des caractères entrés d'une manière telle que les glyphes sortis sont sensibles au contexte. De façon générale, ces objets de la présente invention ainsi que d'autres sont atteints par un moyen et un procédé de commande des aspects de lignes de texte en commandant l'aspect de glyphes représentant un texte, leur séquence affichée dans une ligne, et leur position par rapport à la ligne et les uns par rapport aux autres La présente invention utilise de nombreux sous-programmes différents pour créer en premier lieu les implantations des lignes et pour interroger, manipuler et traiter les implantations créées Dès lors qu'une implantation a été établie par l'un des sous- programmes de création, des sous-programmes de manipulation sont implantés afin de fournir des fonctions d'édition de texte. Ces sous-programmes vont chercher une information contenue dans des tables pourvues de données fournies par un concepteur de polices Des tables à consulter, souvent appelées simplement tables dans ce qui suit, sont implantées afin de mettre en oeuvre un procédé de prise d'un index donné de glyphe et de consultation d'une certaine information associée De plus, des tables asservies permettent un traitement par machine d'état fini De cette manière, des caractères entrés peuvent être traités d'une manière telle que le glyphe qui est affiché en définitive peut dépendre du contexte dans lequel il est utilisé D'autres tables incluent des tables de lignes de base, de ligatures, de carets, de limites optiques, de propriétés de glyphes, de métamorphoses de glyphes, de crénage de pistes, de justifications, de noms de particularités et de crénage. De façon plus particulière, l'invention réalise, selon un premier aspect, un système d'ordinateur destiné à restituer un texte, caractérisé en ce qu'il comprend: un moyen d'entrée pour entrer un caractère dans ledit système d'ordinateur; un générateur de codes de caractères couplé audit moyen d'entrée pour engendrer un code de caractère correspondant audit caractère; un moyen de mémoire pour mémoriser une police de caractères comprenant une table de police pourvue d'une série d'index de glyphes correspondante à une série de glyphes différents dans laquelle ledit caractère est pourvu d'une série d'index différents de glyphes pour ladite police; un processeur d'implantation dudit code de caractères sur l'un desdits index de glyphes en fonction de ladite table de police, ledit processeur traitant aussi l'un desdits index de glyphes d'une manière telle que l'aspect visuel d'un glyphe correspondant à l'un desdits index de glyphes est modifié; un moyen de sortie pour sortir ledit glyphe correspondant à l'un desdits index de glyphes. Le système d'ordinateur peut comprendre un moyen de corrélation entre ledit glyphe et ledit code de caractère, dès lors que ledit glyphe a été sorti par ledit moyen de sortie. Au moins un emplacement prévu pour un caret à l'intérieur dudit glyphe peut être déterminé par une information mémorisée dans ladite table de police. Ledit processeur traite l'un desdits index de glyphes en fonction d'un contexte dans lequel est utilisé ledit caractère et, de préférence, ledit processeur traite l'un desdits index de glyphes en fonction d'une machine d'état fini. Ledit processeur peut alors traiter l'un desdits index de glyphes d'une manière telle que ledit glyphe est créné selon deux axes. Ledit processeur peut aussi traiter alors l'un desdits index de glyphes d'une manière telle que ledit glyphe est créné en correspondance avec ledit contexte dudit caractère. Ledit processeur peut aussi traiter l'un desdits index de glyphes d'une manière telle que ledit glyphe est créné en fonction de ladite machine d'état fini. Ledit processeur peut traiter aussi l'un desdits index de glyphes d'une manière telle que ledit glyphe est justifié en fonction de l'information mémorisée dans ladite table de police: de façon avantageuse, ledit processeur traite, l'un desdits index de glyphes d'une manière telle que ledit aspect dudit glyphe est modifié en fonction de l'information de ladite table de police, afin de compenser un espace dans lequel ledit glyphe est justifié: ledit processeur peut en particulier, traiter l'un desdits index de glyphes d'une manière telle que ledit espace peut être ajouté/soustrait de façon disproportionnée sur l'un et l'autre des côtés dudit glyphe lorsque ledit glyphe est justifié. Dans le système préféré décrit plus haut, ledit processeur peut traiter l'un desdits index de glyphes d'une manière telle que ledit glyphe est positionné en fonction d'une ligne de base spécifiée par une information mémorisée dans ladite table de police. Dans ce système préféré, ledit processeur peut permettre une commande continue de ladite ligne de texte, ladite commande continue incluant un cadrage, une justification, un crénage et une ponctuation dite suspendue, c'est-à-dire en dépassement par rapport à l'alignement. Dans ce système préféré, ledit processeur traite l'un des index de glyphes selon des propriétés directionnelles par l'intermédiaire d'une deuxième machine d'état fini. Ce système préféré peut comprendre en outre des parties de ladite table de police qui sont invoquées dynamiquement par ledit processeur. Selon un deuxième aspect, la présente invention fournit un procédé de commande des aspects d'un texte, mis en oeuvre dans un système d'ordinateur pourvu d'un moyen d'entrée pour entrer un texte, d'un processeur, et d'un moyen de sortie dudit texte, caractérisé en ce qu'il comprend les étapes consistant à: spécifier un caractère à entrer dans ledit système d'ordinateur par ledit moyen d'entrée; engendrer un code de caractère correspondant audit caractère; implanter ledit code de caractère à un index de glyphes en fonction d'une table de police, ledit index de glyphes spécifiant un glyphe; traiter ledit index de glyphe d'une manière telle que l'aspect visuel dudit glyphe correspondant audit index de glyphe est modifié; sortir ledit glyphe correspondant audit index de glyphes. Le procédé peut comprendre en outre l'étape consistant à corréler ledit glyphe audit code de caractère dès lors que ledit glyphe a été sorti. Dans ce cas, un emplacement situé à l'intérieur dudit glyphe peut être déterminé par une information mémorisée dans ladite table de police. De façon avantageuse, ledit traitement dépend alors d'un contexte dans lequel le caractère est en cours d'utilisation. De préférence, ledit traitement est alors accompli en fonction d'une machine d'état fini. Si cette modalité préférée est incluse dans le procédé, ledit traitement peut créner ledit glyphe selon deux axes, et/ou il peut créner ledit glyphe en fonction dudit contexte dudit caractère, et/ou il peut créner ledit glyphe en fonction de ladite machine d'état fini. Si la modalité préférée décrite ci-dessus est incluse, ledit traitement peut justifier ledit glyphe en fonction d'une information mémorisée dans ladite table de police; dans ce cas, ledit traitement peut compenser un espace, lorsque ledit glyphe est justifié, en modifiant ledit aspect dudit glyphe en fonction d'une information de ladite table de police: en particulier, ledit traitement peut alors ajouter/soustraire un espace sur l'un et l'autre des côtés dudit glyphe afin de justifier ledit glyphe. Si la modalité préférée déjà mentionnée précédemment est incluse, ledit traitement peut sortir ledit glyphe en fonction d'une ligne de base spécifiée par une information mémorisée dans ladite table de police: en particulier, ledit traitement peut alors réaliser une commande continue d'une ligne de texte, ladite commande continue incluant un cadrage, une justification, un crénage et une ponctuation à hauteur d'indices. Si la modalité préférée indiquée plus haut est incluse dans le procédé celui-ci peut comprendre en outre l'étape consistant à invoquer dynamiquement des parties de ladite table de police. On va maintenant décrire la présente invention à titre d'exemple, et non à titre limitatif, à l'aide d'un mode de réalisation préféré représenté aux dessins annexés dans lesquels des références numériques semblables concernent des éléments semblables et dans lesquelles: La Figure 1 illustre le système d'ordinateur sur lequel est implanté le mode de réalisation préféré de la présente invention. La Figure 2 illustre des exemples dans lesquels la lettre "a" est combinée à différentes marques, d'o il résulte des ligatures diverses. La Figure 3 illustre diverses formes contextuelles de la lettre arabe "ha". La Figure 4 illustre un texte horizontal normalisé et deux équivalents verticaux; l'un dans lequel la police ne contient pas de formes additionnelles, adaptés à une substitution verticale et l'autre dans laquelle la police contient des formes additionnelles qui sont adaptées à une substitution verticale. La Figure 5 illustre l'effet du crénage. La Figure 6 illustre un trait d'union, situé entre deux lettres majuscules, qui devrait être rehaussé pour refléter les centres de ces caractères. La Figure 7 illustre un problème d'alignement, dans lequel différentes dimensions de la même police sont alignées à gauche. La Figure 8 illustre un exemple d'un défaut d'alignement optique aux bords extrêmes d'une ligne. il La Figure 9 illustre des guillemets suspendues à gauche et un point suspendu. La Figure 10 illustre trois écritures, dans lesquelles les lignes de base de chacune des écritures sont en concordance, mais la relation entre les écritures n'est pas correcte. La Figure il illustre trois passages: le texte original, justifié sans kashidas et justifié avec kashidas. La Figure 12 illustre trois cas différents d'attache d'une marque de tilde. La Figure 13 illustre un essai à point d'attaque. La Figure 14 illustre un schéma d'état d'échantillon pour engendrer des ligatures de "f", "fi", "ff" et "ffi". La Figure 15 est un schéma fonctionnel représentant le flux d'ensemble du processus d'implantation. La Figure 16 est un schéma fonctionnel illustrant des fonctionnalités du processeur non positionnel. La Figure 17 est un schéma fonctionnel représentant les fonctionnalités du processeur de métamorphose. La Figure 18 est un schéma fonctionnel représentant les fonctionnalités du processeur de sous- table. Les Figures 19 a et 19 b sont des schémas fonctionnels illustrant les fonctionnalités du processeur positionnel. La Figure 20 est un schéma fonctionnel illustrant les fonctionnalités du processeur de justification. La Figure 21 est un schéma fonctionnel illustrant les fonctionnalités du processeur de post-compensation. On va décrire un appareil et un procédé permettant à un utilisateur de commander l'aspect de caractères textuels, leur séquence affichée dans une ligne de texte, et leur position par rapport à la ligne de texte et l'un par rapport à l'autre Dans la description qui suit, pour un but d'explication, des structures spécifiques de données, des sous-programmes, des paramètres et des formats sont exposés afin de permettre une compréhension complète de la présente invention Il sera cependant évident à l'homme de l'art que ces détails spécifiques ne sont pas nécessairement utilisés pour mettre en oeuvre la présente invention. Dans d'autres exemples, des structures et circuits bien connus n'ont pas été représentés en détail afin d'éviter d'obscurcir de façon inutile la présente invention. Une partie de la description du présent document de brevet contient des matières qui sont soumises à une protection de droit d'auteur Le propriétaire des droits d'auteur n'émet aucune objection à ce que quiconque reproduise par photocopie le document de brevet ou la description de brevet, telle qu'elle apparaît dans la demande ou les enregistrements de brevets du Bureau des Brevets, mais se réserve par ailleurs tous les droits d'auteur, quels qu'ils soient. On définira en premier lieu la terminologie utilisée dans l'art. Une certaine partie de la terminologie la plus classiquement utilisée dans l'art de la restitution des textes est décrite ci-dessus La présente invention concerne des implantations qui décrivent l'aspect de lignes de texte Chaque implantation décrit une ligne unique de texte Une ligne unique de texte est comprise comme étant constituée d'un ou plusieurs passages de texte Un texte situé à l'intérieur d'un même passage partage le même style Un texte est défini en tant que mots de quelque chose d'écrit ou d'imprimé Le texte est affiché sous forme d'écritures Une écriture est définie comme un style d'écrit comprenant des caractères, ressemblant habituellement à une écriture manuscrite Des exemples de différents types d'écritures incluent le romain, l'arabe, l'indien, le chinois, le grec, l'hébreu, etc. Il est fondamental pour comprendre une implantation de saisir la distinction entre des caractères et des glyphes Un caractère est un objet abstrait pourvu d'une seule et unique signification sémantique ou phonétique (par exemple, A-Z, 0-9, l@#$%, etc) Un glyphe représente l'aspect visuel, graphique d'un caractère Par exemple, l'un quelconque des cinq glyphes: A, A, A,, et peut être utilisé pour représenter le caractère de la lettre majuscule "A". Une police est une collection de glyphes qui possèdent typiquement un élément de cohérence de structure dans leurs aspects Des aspects comme les sérifs ou empattements, l'épaisseur du trait, les ligatures et les formes contextuelles présentent un certain degré de communauté pour une police donnée. Certains exemples de police incluent l'Helvética, la Palatino, la Times, la Geneva, la Courier, la Chicago, la Monaco, etc Un sérif ou empattement est une fine ligne d'impression utilisée pour terminer les traits principaux d'un caractère Une ligature est une forme de restitution qui représente une combinaison de deux caractères individuels ou davantage Un exemple d'une ligature en anglais est celle d'une ligature "f" qui est formée par la combinaison de deux lettres séparées "f" et "i" Une forme contextuelle est une variante d'aspect d'un glyphe dont l'utilisation dépend de certains contextes Par exemple, en arabe, un caractère unique peut présenter de multiples formes contextuelles qui correspondant à ce caractère Le choix de celle des formes contextuelles différentes qui est affichée dépend de l'emplacement du caractère au début, au milieu ou à la fin d'un mot. On va maintenant décrire le système d'ordinateur. En se référant à la Figure 1, le système d'ordinateur sur lequel est implanté le mode de réalisation préféré de la présente invention est désigné par 100 Le système d'ordinateur 100 comprend un bus ou un autre moyen de communication 101 pour communiquer l'information et un moyen de traitement 102 couplé au bus 101 afin de traiter l'information Le système 100 comprend en outre une mémoire vive, ou REM, ou un autre dispositif de mémorisation dynamique 104 appelé mémoire principale, couplé au bus 101 pour mémoriser une information et des instructions à exécuter par le processeur 102 La mémoire principale 104 peut également être utilisée pour mémoriser des variables temporaires ou une autre information intermédiaire pendant que le processeur 102 exécute des instructions Le système d'ordinateur 100 comprend aussi une mémoire morte, ou ROM et/ou un autre dispositif statique de mémoire 106 couplé au bus 101 pour mémoriser une information statique et des instructions destinées au processeur 102, et un dispositif de mémoire de données 107, par exemple un disque magnétique ou un disque optique et son unité de disque correspondante Un dispositif de mémorisation de données 107 est couplé au bus 101 pour mémoriser une information et des instructions Le système d'ordinateur 100 peut en outre être couplé à un dispositif d'affichage 121, par exemple un tube à rayons cathodiques (CRT) couplé au bus 101 pour afficher une information à l'utilisateur de l'ordinateur Un dispositif d'entrée alphanumérique 122, incluant des touches alphanumériques et autres, peut également être couplé au bus 101 pour communiquer au processeur 102 une information et des choix d'ordres Un dispositif additionnel d'entrée d'utilisateur est la commande de curseur 123, par exemple une souris, une balle roulante, ou des touches de direction de curseur, couplée au bus 101 pour communiquer au processeur 102 une information de direction et des choix d'ordres et pour commander le déplacement du curseur sur l'affichage 121 Le dispositif d'entrée présente typiquement deux degrés de liberté selon deux axes, un premier axe (par exemple x) et un deuxième axe (par exemple y) ce qui permet au dispositif de spécifier une position quelconque du plan Un autre dispositif qui peut être couplé au bus 101 est un dispositif 124 d'impression sur support qui peut être utilisé pour imprimer des instructions, des données ou une information sur un milieu comme un papier, une pellicule, ou des types de milieux similaires Enfin, un système d'ordinateur 100 peut être couplé à un dispositif d'enregistrement et/ou de relecture sonore 125, par exemple un moyen de numérisation audio couplé à un microphone pour enregistrer une information En outre, le dispositif peut inclure un haut-parleur qui est couplé à un convertisseur numérique à analogique (N/A) pour la relecture des sons numérisés. Dans le mode de réalisation actuellement préféré, le système d'ordinateur 100 est un ordinateur de la famille Macintosh (R), par exemple le Macintosh (R) II fabriqué par Apple (R) Computer Inc de Cupertino, Californie (Apple et Macintosh sont des marques déposées d e Apple Computer Inc) Le processeur 102 est un processeur de l'une des familles 68000, par exemple le 68000, le 68020, ou le 68030 fabriqué par Motorola, Inc de Schaumburg, Illinois. On va maintenant décrire des particularités d'implantation de ligne. La présente invention permet à un utilisateur de commander l'aspect de glyphes individuels, l'ordre de glyphes sur la ligne, et l'emplacement spatial de glyphes sur la ligne Les deux premières possibilités sont non positionnelles En d'autres termes, elles concernent des transformations de l'aspect et de l'ordre des glyphes sur la ligne, plutôt que le positionnement des glyphes La troisième possibilité est positionnelle, elle concerne la position d'un glyphe par rapport à la ligne de base et aux glyphes adjacents Ces possibilités sont commandées par des tables de la police. Le mode de réalisation actuellement préféré effectue une substitution de forme, dans laquelle un ou plusieurs glyphes sont remplacés par un ou plusieurs autres glyphes selon un processus prédéterminé Une substitution de forme inclut tant une ligature qu'une génération de forme contextuelle La Figure 2 illustre des exemples dans lesquels la lettre "a" est combinée à différentes marques d'accent, d'o il résulte diverses ligatures Par exemple, le glyphe "a" combiné avec la marque ""' peut être remplacé par le glyphe "à" 200 La combinaison d'une lettre et d'un accent, dont le résultat est une lettre avec accent, est représentée en 201 Un exemple d'une lettre avec accent et d'une marque appliquée est représenté en 202 Une lettre avec ligature à accent appliqué est représentée en 203 Une lettre avec ligature à accent appliqué et marque appliquée est représentée en 204 La Figure 3 illustre diverses formes contextuelles de la lettre arabe "ha". La forme de cette lettre varie, selon qu'elle est isolée, ou au début, ouau milieu, ou à la fin d'un mot On notera que le même code de caractère est utilisé dans chaque cas La présente invention détermine, sur la base des conditions actuelles, celui de ces glyphes qui est adapté et affiche ensuite le glyphe correct C'est la décision du concepteur de police que de choisir entre l'utilisation de ligatures et de formes contextuelles. Dans la présente invention, des ligatures peuvent être divisées en vue d'une interaction Etant donné une implantation qui implante des ligatures et un caret clignotant positionné à la gauche de cette ligature, il existe deux approches pour traiter cette situation lorsqu'un utilisateur presse la touche de flèche droite L'approche indivisible traite la ligature sous forme d'ensemble indivisible dans des buts d'emplacement de caret L'approche divisible permet au caret d'apparaître à l'intérieur de la ligature Dans les deux cas, une édition s'effectue un caractère à la fois, et non un glyphe à la fois Par exemple, si le caret était positionné sur la droite de la ligature, un retour arrière unique n'annule pas toute la ligature. Au lieu de cela, il n'annule que le "i", en laissant un caractère "f". La présente invention traite également des fractions au moyen de formes additionnelles et de formes contextuelles Une forme additionnelle est une variante, souvent ornementale, d'un glyphe existant. Certains des choix des variantes additionnelles sont effectués par le concepteur de polices lorsque la police est créée Des collections de formes additionnelles sont groupées par le concepteur et sont listées dans une table appelée table de formes additionnelles Il est possible d'accéder à la table de formes additionnelles par une application dans un appel d'implantation et les formes spécifiques additionnelles sont utilisées De cette manière, étant donné un code de caractère de fraction, un concepteur de police peut établir une table de police qui reconnaît des chaînes du type "chiffres, fractions, chiffres" S'il n'existe aucune forme fractionnelle tracée au préalable, il est possible de substituer des glyphes de chiffre plus petits de formes additionnelles supérieurs ou inférieurs, c'est-à-dire à hauteur d'exposants ou d'indices En variante, une table de crénage transversale au courant peut être établie pour faire glisser des chiffres par rapport à la ligne de base. L'invention permet aussi une substitution verticale de formes Une substitution verticale est un type de variante additionnelle dans laquelle un code donné de glyphe est remplacé par une variante de forme dans une ligne verticale On notera que cette procédure n'est pas équivalente à une rotation du glyphe Dans la présente invention, les formes tournées verticalement existent dans la police et sont indiquées de cette manière dans les tables de police Il n'existe aucune substitution de caractères La Figure 4 illustre un texte horizontale normalisé 400 et deux équivalents verticaux; l'un dans lequel la police 401 ne contient aucune formes additionnelle adaptée à une substitution verticale et l'autre dans laquelle la police 402 contient des formes additionnelles adaptés à une substitution verticale. De plus, des variantes additionnelles peuvent être utilisées pour engendrer de petites majuscules Au lieu de rétrécir simplement des majuscules à des dimensions légèrement plus petites, l'invention permet une spécification des petites majuscules en tant que formes spéciales de variantes additionnelles. La présente invention inclut aussi des particularités permettant de supporter une restitution du texte dans des directions différentes: horizontale ou verticale, de gauche à droite ou de droite à gauche. L'utilisateur présente les caractères dans l'ordre phonétique, et non dans l'ordre visuel La présente invention effectue un nouvel ordonnancement et un nouvel agencement linguistiques Des langues restituées de la droite vers la gauche (par exemple l'Hébreu et l'Arabe) peuvent être mélangées avec des langues restituées de la gauche vers la droite Le numéro de niveau de nouvel ordonnancement de chaque passage de texte est spécifié Le numéro de niveau de nouvel ordonnancement commande la manière dont la ligne est ordonnée de nouveau Dans certaines langues (par exemple des dérivés de l'indien, des marqueurs de voyelles dans de nombreuses langues du Sud-Est), certains nouveaux agencements d'un ordre visuel de glyphes peuvent se produire même si l'écrit est considéré de la gauche vers la droite Quel que soit ce phénomène, le texte est entré dans l'ordre de frappe et la présente invention agence l'ordre visuel correct. La présente invention commande également le positionnement des glyphes A la différence de fonctions non positionnelles qui commandent des identités et des transformations de glyphes, les fonctions positionnelles modifient les positions des glyphes dans une ligne Ces modifications positionnelles incluent les modifications effectuées pendant la justification, le crénage, le suivi, l'écriture à hauteur d'exposants ou d'indices Les modifications positionnelles peuvent se produire par l'intermédiaire de tables des polices ou peuvent être spécifiées par une application. Un aspect du positionnement de glyphes est celui des décalages positionnels: décalage selon le courant et transversalement au courant Des décalages transversalement au courant élèvent ou abaissent tout le passage de style, et le déplacement horizontal correspondant pour un texte vertical Ceci peut également être utilisé pour des effets d'écriture à hauteur d'exposants ou d'indices On y parvient en décalant d'un déport donné (vers le haut ou le bas) chaque glyphe du style Des décalages selon le courant resserrent ou relâchent l'espacement entre chaque glyphe du passage, et ils peuvent également être utilisés pour un crénage ou un espacement manuel entre lettres Un alignement selon le courant est accompli en décalant d'un déport donné chaque glyphe du passage de style, plus près du glyphe précédent ou plus loin de celui-ci L'exemple suivant illustre un décalage selon le courant: ab c de Le troisième et le quatrième glyphes, (c'est-à-dire "c" et "d") reçoivent des valeurs de décalage selon le courant qui sont ajoutées sur leurs côtés gauches Lorsque le texte est décalé vers l'amont ou l'aval, la limite entre les glyphes est ajustée pour être à mi-distance entre l'avance du glyphe précédent et l'origine du glyphe qui le suit. Un autre aspect du positionnement de glyphes est celui du crénage Le crénage est défini comme l'ajustement fin à l'espacement normal qui se produit entre deux glyphes ou davantage On y parvient habituellement afin d'améliorer l'espacement apparent de lettres entre des caractères qui "s'ajustent entre eux" naturellement Des tables de polices spécifient la distance dont l'espacement entre deux glyphes doit être augmenté ou diminué La distance peut dépendre d'autres glyphes que les deux seuls glyphes adjacents Elle peut également dépendre de glyphes précédents ou suivants. Les tables de police implantent N glyphes dans N 1 valeurs de crénage (c'est-à-dire dans N 1 décalages positionnels entre glyphes) Lors d'un crénage, le déport est effectivement divisé entre les caractères. La Figure 5 illustre l'effet d'un crénage L'exemple situé à droite illustre dans le cas d'un crénage la position d'un caret entre deux caractères. Un crénage transversal au courant permet le déplacement de caractères perpendiculairement à l'orientation de ligne du texte Par exemple, un trait d'union entre deux lettes majuscules doit être rehaussé pour correspondre aux centres de ces caractères, comme illustré à la Figure 6 Un crénage transversal au courant est nécessaire pour certaines formes d'écriture (par exemple le Talique) Il peut également être utilisé pour aider à la création de fractions. Un autre aspect du positionnement de glyphes encore est celui du suivi Des largeurs de glyphes sont étendues ou contractées en appliquant à un glyphe une valeur de suivi Cette valeur, appelée le numéro de suivi, spécifie si l'espacement entre caractères doit être resserré ou élargi Les décalages positionnels réels sont le résultat d'une interpolation à deux dimensions basée sur le numéro de suivi, la dimension du texte en points et les valeurs de seuil Cette donnée est mémorisée dans une table de suivi qui correspond à la police particulière Les valeurs de seuil sont utilisées afin de permettre des quantités non linéaires de suivi Par exemple, un ensemble de valeurs peut être utilisé pour un texte de 8 à 12 points, alors que d'autres ensembles peuvent être utilisés pour des textes de 12 à 15 points, de 15 à 36 et au-delà de 36. Un positionnement de glyphes peut également être utilisé pour aligner optiquement des bords de texte. Dans certains cas, des glyphes semblent s'aligner de façon incorrecte aux marges Cet effet d'optique est provoqué par deux facteurs En premier lieu, des largeurs d'avance de glyphes contiennent une quantité d'espace blanc additionnel pour tenir compte d'un espacement normal entre glyphes Puisque cet espace varie avec la dimension de police, il produit certaines anomalies la Figure 7 illustre ce problème d'alignement dans lequel différentes dimensions de la même police sont alignées à gauche Le deuxième problème est que des lignes incurvées ne semblent pas, en raison de certains effets d'optique, s'aligner de façon appropriée avec des lignes droites Afin de compenser ce problème, des lettres incurvées sont conçues de manière à s'étendre légèrement au-dessous de la ligne de base afin de sembler s'aligner avec des lettres droites. Le même effet se produit sur les bords extrêmes de lignes Un exemple est illustré à la Figure 8 Le "O" est aligné avec les "H" en ce sens que le bord noir gauche du "H" est aligné avec le bord noir gauche du "O" Cependant, ces deux lettres ne semblent pas être correctement alignées Afin de compenser ces effets, la présente invention applique une information d'alignement contenue dans la police Lors de la détermination des bords avant et arrière d'une ligne de texte, qu'il s'agisse d'arrêt de tabulation ou de débuts de ligne, la présente invention utilise les bords avant et arrière optiques On y parvient en lisant une paire de déports, à partir des bords du glyphe, contenus dans les tables de polices. Une fonction de la présente invention est de déterminer s'il est permis à un caractère de "dépasser" à partir d'une extrémité d'une ligne ou des deux extrémités Cette fonction est appliquée à la ponctuation, par exemple des guillemets ou des points. La Figure 9 représente un point d'interrogation "dépassant" à gauche et un point. Le mode de réalisation actuellement préféré de la présente invention contient un aspect selon lequel une implantation peut être centrée à l'intérieur d'une largeur particulière Un centrage est effectué sous forme de fonction continue au lieu d'être limité à quelques états spéciaux (par exemple gauche, centre ou droit) On y parvient en utilisant un facteur de centrage allant de 0,0 (gauche) à 1,0 (droite). En outre, la présente invention permet un alignement à des lignes de bases multiples La ligne de base d'un caractère est une ligne qui définit la position du caractère par rapport à d'autres caractères Une ligne de base est utilisée comme référence à partir de laquelle les caractères croissent proportionnellement En d'autres termes, la partie ascendante d'un caractère croît vers le haut à partir de la ligne de base, alors que la partie descendante du caractère croît vers le bas Cependant, il peut exister des différences spectaculaires dans les proportions générales de caractères par rapport à la ligne de base. La Figure 10 illustre trois écrits 1000 à 1002 dans lesquels les lignes de base situées à l'intérieur de chacun des écrits sont en concordance, mais les relations entre les écrits en Romain 1000, en indien 1001 et en Chinois 1002 sont incorrectes Les lignes de base devraient être alignées sur une base entre-écrits. Un alignement correct de lignes de base entre écrits est représenté pour les écrits 1003 à 1005. Une autre fonction apportée par la présente invention est celle d'une justification La justification est le processus "d'élargissement" ou de "rétrécissement" typographique d'une ligne de texte pour qu'elle s'ajuste à l'intérieur d'une largeur donnée Des parties d'intervalles de ligne sont assignées à différentes classes de glyphes à niveaux de priorité différents A la différence de certains modèles de justification de l'art antérieur basés sur une assignation proportionnelle de l'espace blanc additionnel selon un rapport fixe entre les espaces entre mots et les espaces entre caractères, le mode de réalisation actuellement préféré permet d'assigner un espace blanc à un niveau donné de priorité jusqu'à ce que l'intervalle soit entièrement rempli ou qu'une quantité maximale spécifiée soit atteinte Par conséquent, un espacement entre caractères ne se produit pas nécessairement aussi souvent que dans des modèles proportionnels Si l'intervalle peut être satisfait par un espacement entre mots, il sera utilisé de cette manière sans qu'il soit nécessaire d'effectuer un espacement entre caractères. Chaque police réalise un ensemble d'implantations par défaut depuis l'index de glyphes jusqu'à la classe de priorité L'intervalle est généralement rempli en commençant par la classe dont la priorité est la plus élevée et en descendant vers la classe dont la priorité est la plus faible ou jusqu'à ce qu'il n'y ait plus aucun intervalle à remplir Il est possible de donner à une application au niveau du passage une priorité supérieure à la priorité assignée aux glyphes. Il existe deux actions différentes qui peuvent se produire en ce qui concerne la justification: ajouter de l'espace blanc parce qu'une ligne est trop courte, et enlever de l'espace blanc parce qu'une ligne est trop longue Différentes priorités et limites sont employées, selon que la ligne doit augmenter ou diminuer En outre, au lieu de supposer toujours une division 50-50 dans la répartition de l'intervalle à l'intérieur d'un glyphe donné, il est prévu des valeurs séparées de spécifications pour les bords avant et arrière d'un glyphe De plus, des applications peuvent être prioritaires par rapport à la justification qui se produirait normalement, ou bien par une priorité concernant le comportement d'un passage entier de texte et/ou par une spécification d'un comportement différent pour un glyphe spécifique. Un intervalle illimité peut être assigné à un passage Dès lors qu'il est déterminé qu'un intervalle illimité a été assigné à un passage, tout l'intervalle restant est ensuite assigné à ce passage, sous réserve du processus de boucle de priorité décrit ci-dessus. Par conséquent, une application peut effectuer un traitement normal à un niveau et être pourvue, au niveau qui suit vers le bas, d'un intervalle illimité qui utilise l'intervalle restant. Le processus de justification est un processus continu Il n'est pas limité simplement à "rien" ou "plein" Bien plutôt, un facteur de justification continu allant de 0,0 à 1,0 est utilisé, par exemple, pour apporter à des paragraphes un aspect rempli irrégulier à droite Par exemple, un facteur de justification de 0,8 spécifie que 80 % de l'intervalle est rempli sur une ligne. Selon une forme de justification utilisée en Arabe, au lieu d'utiliser un espace blanc, on allonge des caractères en utilisant une barre d'extension, appelée un kashida La Figure 11 illustre trois passages, le passage 1100 étant le texte original, élément passage 1101 étant justifié sans kashidas et le passage 1102 étant justifié avec des kashidas Des kashidas sont supportés par les tables de polices Les tables de polices contiennent des glyphes spéciaux de barre de prolongement. La présente invention permet également des attaches De nombreuses langues utilisent des marques d'accents flottants ou marques de voyelles qui "s'attachent" à d'autres glyphes Des attaches sont traitées en implantant une table de ligatures qui reconnaît les attaches et produit le glyphe approprié. Par exemple, une table des ligatures pourrait être utilisée pour mettre en concordance la séquence de caractères "A" suivie par l'attache "-" pour donner un glyphe "A". Une variante de mode de réalisation de traitement des attaches est de former dynamiquement des composites d'un glyphe avec un certain autre glyphe Le glyphe récepteur est appelé la forme de base Le fait consistant à appliquer des attaches est réalisé par l'intermédiaire de points d'ancrage, qui sont des points de commande à l'intérieur de la donnée d'ensemble de la forme de base pour identifier des positions d'attache Une table d'attache de la police est mise en oeuvre afin d'identifier des points de commande dans divers glyphes Ces points de commande spécifient un alignement précis des glyphes La Figure 12 illustre trois cas différents 1201 à 1202 pour attacher une marque de tilde Dans le cas 1200, la marque est centrée au-dessus du centre de la lettre Il est clair que cette approche est peu adaptée lorsqu'elle est appliquée à des lettres asymétriques, comme la lettre "L" Dans le cas 1201, la marque est appliquée dans la largeur du glyphe à un certain décalage fixe L' aspect visuel de cette approche n'est pas attrayant lui non plus Les meilleurs résultats sont ceux du cas 1202 dans lequel chaque lettre possède, en plus de la marque, une information d'ancrage spécifiant l'emplacement correct des marques, quelle que soit la configuration de la lettre et de la marque. Dès lors d'une implantation a été créée, il est possible d'y accéder par des essais par point atteint. L'essai par point atteint est le processus consistant à convertir un emplacement situé à l'intérieur d'une ligne en un déport de caractère dans la chaîne d'origine qui correspond à cet emplacement Dès lors qu'un glyphe correspondant à un point atteint a été positionné, deux distances représentant les parties du glyphe situées sur chacun du point atteint sont calculées En se référant à la Figure 13, la première distance partielle correspond à la distance 1301-1300 et la dernière distance partielle correspond à 1302- 1300 Les termes "première" et "dernière" concernent l'implantation d'origine, quel que soit le caractère ou la directionnalité du passage. Les déports de caractères dans la chaîne d'origine qui correspondent au glyphe atteint qui a été trouvé sont classés comme un déport de côté atteint ou un déport de côté non atteint Le déport de côté atteint est le déport correspondant au côté le plus voisin du point atteint (par exemple " 5 " à la Figure 13) et le déport du côté non atteint est l'autre déport de ce glyphe (par exemple " 4 " à la Figure 13) Ce processus est sensible à la nature à 16 bits des codes des caractères et des ligatures. La présente invention utilise un traitement contextuel de glyphe sur une base de ligne Une ligne est représentée dans la mémoire de l'ordinateur sous une forme de réseau de glyphes Un réseau de glyphes est un réseau d'enregistrement de glyphes qui sont mémorisés dans l'ordre d'affichage Chaque enregistrement de glyphe contient diverses données concernant le glyphe, y compris son index de glyphe Le réseau de glyphes est traité par une machine d'état fini La machine d'état fini utilise une table de classes et un réseau d'états Une table de classes implante des index de glyphes dans des classes Un réseau d'états définit des ensembles de règles pour implanter une classe dans un nouvel état et un effet qui modifie le train de glyphes La machine d'état fini maintient un index dans le réseau d'états, appelé l'état actuel L'état actuel est initialisé à une valeur spéciale, appelé état initial. Pour chaque glyphe du réseau de glyphes, la machine d'état fini calcule sa classe et implante cette classe et l'état actuel dans une action et un nouvel état Elle effectue cette action, place l'état actuel à l'état nouveau, et continue avec le glyphe suivant du réseau de glyphes Lorsque tous les glyphes du réseau de glyphes ont été traités, la machine d'état fini effectue l'action dans l'état actuel indiqué par une classe spéciale appelée fin de texte. La Figure 4 illustre un exemple d'une machine d'état fini permettant d'engendrer les ligatures suivantes: "fi", "f 1 ","ff", "ffi", et "ffl" La machine d'état fini commence un état initial 1400 Une première action 1403 d'un caractère "f" étant détectée, ceci amène la machine d'état fini à une transition vers l'état 1401 Tout autre caractère (représenté par un "x") autre qu'un "f" amène la machine d'état fini à rester dans l'état 1400 comme indiqué par l'effet 1412. A partir de l'état 1401, si le résultat d'un deuxième action est l'entrée du caractère "i" 1405, ceci amène la génération d'une ligature "fi", et la machine d'état fini effectue une transition en retour vers l'état 1400 Si le résultat de la deuxième action est la génération de l'entrée du caractère " 1 " 1406, ceci provoque la génération d'une ligature "f 1 ", et la machine d'état fini effectue une transition en retour vers l'état 1400 Si la deuxième action est un autre caractère "f" 1407, la machine d'état fini effectue une transition vers l'état 1402 Dans le cas contraire, pour toutes les autres deuxièmes actions 1404, la machine d'état fini effectue une transition en retour vers l'état 1400 A partir de l'état 1402, si le résultat d'un troisième effet est un "f" 1408, la machine d'état fini effectue une transition vers l'état 1401 Si le résultat d'une troisième action est un caractère "i" 1410, une ligature "fi" est engendrée et la machine d'état fini effectue une transition vers l'état 1400 Si le résultat d'une troisième action est un caractère "i" 1411, une ligature "ffii" est engendrée, et la machine d'état fini effectue une transition en retour vers l'état 1400 Tous les autres caractères (représentés par le "x") 1409 amènent la machine d'état fini en retour vers l'état 1400. On va maintenant décrire en se référant aux Figures 15 à 21 le flux d'ensemble de logique d'implantation de ligne c'est-à-dire le flux d'ensemble de logique comprenant le code d'implantation de ligne. Des rectangles arrondis aux figures signifient des ensembles de données, alors que des rectangles à coins carrés signifient des traitements Une flèche allant vers un rectangle à coins carrés représente une entrée vers ce processus Une flèche sortant d'un rectangle représente une sortie de ce processus La Figure 15 décrit le flux d'ensemble du processus d'implantation. L'entrée 1501 comprend le texte à implanter Ce texte prend la forme de codes de caractères qui sont dans l'ordre phonétique, c'est-à-dire dans l'ordre o l'on épellerait les lettres une à une L'entrée 1502 comprend un ensemble d'information de style à appliquer au texte 1501 L'information de style inclut, sans y être limitée, la police, la dimension de texte, les options par passage, qui commandent directement le fonctionnement des diverses parties du processus d'implantation L'entrée 1503 comprend des options qui s'appliquent à toute la ligne qui est implantée (à la différence des styles 1502 qui affectent des passages uniques) Les options 1503 incluent des spécifications du degré de justification et de l'alignement droite/gauche présent dans les lignes, qui sont spécifiés comme valeurs continues allant de zéro à un. Ces entrées sont envoyées dans le processeur non positionnel 1504 Le processeur non positionnel 1504 utilise les entrées 1501 à 1503 ainsi qu'une donnée 1505 lue dans des tables de polices, pour créer un réseau de restitution d'index de glyphe 1506 Ces index correspondent à l'aspect visuel ordonné correct du texte Ces index 1506 sont envoyés au processeur positionnel 1507 qui les utilise en même temps qu'une donnée 1508 lue dans d'autres tables de polices pour déterminer plusieurs sorties finales 1509 à 1511 à partir du processus d'implantation d'ensemble Ces sorties incluent une liste finale des glyphes finalement déterminés 1509 dans l'ordre correct d'affichage; une information de caret 1510 qui spécifie pour tous les glyphes 1509 les bords qui peuvent être choisis; et des positions finales de chaque glyphe 1511 On notera que l'information de caret 1510 fournit une information non seulement pour des bords simples de glyphes mais aussi pour des bords complexes de glyphes, comme il s'en produit dans le traitement de textes en arabe, en hébreux et en hindi. * La Figure 16 représente la fonctionnalité du processeur non positionnel de façon plus détaillée Le processeur non positionnel convertit dans l'ordre phonétique les codes de caractères entrés 1501 pour restituer des index de glyphes 1506 dans l'ordre de restitution Ceci s'effectue en trois étapes principales: l'implantation du caractère au glyphe, le nouvel ordonnancement de glyphe, et la métamorphose de glyphe. L'implantation de caractère à glyphe 1504 utilise les tables "cmap" 1505 des polices spécifiées par les styles de textes entrés 1502 afin de convertir les codes de caractères 1501 en leurs index de glyphes correspondants 1606 Ces index de glyphes sont utilisés pour recouvrer des propriétés de glyphe 1607 à partir des tables "prop" 1605 des polices Des propriétés de glyphes contiennent des informations, définissant par exemple les index de glyphe qui correspondent à des glyphes qui peuvent dépasser dans la marge (ce que l'on appelle "une ponctuation suspendue"), les index de glyphes qui correspondent à des glyphes d'espaces blancs, et la direction de restitution des glyphes. L'étape 1608 de nouvel ordonnancement de glyphe utilise les propriétés de direction de restitution des glyphes 1607 afin de faire passer les index de glyphes de l'ordre phonétique à l'ordre de restitution 1610. L'algorithme utilisé est décrit en détail dans l'annexe A du The Unicode Standard (ou La norme unicode) version 1 0, volume 1, publié par Addison Wesley, ISBN 0-201-56788-1. Une métamorphose de glyphe est accomplie par le processeur de métamorphose 1611 Elle modifie les index de glyphes 1611 en index de glyphes de restitution 1506 sur la base des tables "mort" 1612 provenant des polices et des styles de textes 1609 (qui font partie des styles de textes d'ensemble 1502). La Figure 17 illustre le processeur de métamorphose de façon plus détaillée Le processeur de métamorphose modifie l'identité de glyphe sur la base des tables "mort" 1704 des polices spécifiées par les styles de textes 1502 A la base, les tables "mort" consistent en en- têtes suivis par une liste ordonnée de sous-tables Chaque sous-table spécifie un type particulier de modification d'identité de glyphe, par exemple une formation de ligatures ou une substitution de formes additionnelles. Le processeur de métamorphose consiste en trois phases principales Dans la première phase 1703, il utilise les demandes 1701 de particularités d'implantation, qui font partie des styles de textes 1502, et une information des en-têtes des tables "mort" 1704 pour calculer un ensemble de "sélecteurs de sous- tables" 1706. Dans la deuxième phase 1707, le processeur de sous-table modifie les index de glyphe 1610 selon les spécifications des sous-tables choisies par lessélecteurs de sous-tables, d'o résultent les index de glyphe de restitution 1710 Le processeur de sous-table est décrit de façon plus détaillée à la Figure 18. Dans la phase finale 1711, des demandes 1709 de substitution de glyphe, qui font également partie des styles de textes 1502, sont utilisées pour apporter d'autres modifications aux index de glyphes 1710, d'o résultent les index de glyphe 1506. La Figure 18 illustre de façon plus détaillée le processeur de sous-table Le processeur 1802 utilise les sélecteurs de sous-table 1706 pour produire une liste ordonnée de sous- tables 1804 à partir de toutes les sous-tables contenues dans les tables "mort" 1803. Ces sous-tables sont utilisées l'une après l'autre, dans l'ordre dans lequel elles sont présentes dans la table "mort", pour modifier les index de glyphes En d'autres termes, les index de glyphes qui constituent la sortie de la première sous-table constituent l'entrée de la deuxième sous-table, et ainsi de suite. Des index de glyphes apparaissent en 1807 dans le schéma On notera que les index de glyphes, dans l'ordre de restitution 1807 commencent, lors de l'entrée au processeur de sous-table, en étant exactement égaux aux index de glyphes de l'ordre de restitution 1610. Les sous-tables sont de deux types de base: des tables d'état 1805 et des tables à consulter 1806 Le processeur 1808 de tables d'état traite les tables d'état 1805, en modifiant ainsi les index de glyphes 1807 en fonction des index de glyphes environnants Il existe trois types de tables d'état: tables d'état de substitution de ligatures, tables d'état de substitution contextuelle de glyphes, et tables d'état de nouvel agencement indien Des tables d'état de substitution de ligatures remplacent les index de glyphes de deux glyphes ou davantage par l'index de glyphe d'une ligature représentant la combinaison de ces glyphes Des tables d'état de substitution contextuelle de glyphes modifient les indices de glyphes sur la base de leur contexte (par exemple selon qu'ils sont au début, au milieu ou à la fin d'un mot). Les tables d'état de nouvel agencement indien produisent, dans l'ordre des index de glyphes, de petites modifications qui sont nécessaires pour restituer les écrits sur la base de l'alphabet Devanagari. Le processeur 1809 de tables à consulter traite les tables à consulter 1806 en modifiant ainsi des index de glyphes 1807 sans prendre en compte le contexte environnant De telles modifications sont utilisées pour des actions comme des variantes additionnelles et la substitution de petites majuscules. La sortie finale du processeur de sous-table est constituée par les index de glyphes 1710, qui sont le résultat du traitement de la sous- table finale de la liste 1804 La Figure 19 décrit de façon détaillée le processeur non positionnel Quand le processeur non positionnel a terminé sa tache, le processeur positionnel suit Ce processeur prend l'ensemble d'index de glyphes 1506 qui a été engendré par le processeur non positionnel et détermine l'emplacement o chacun des glyphes devrait être placé Il y parvient en créant en premier lieu un réseau de positions delta 1901 qui sont initialisées à des valeurs correspondant à des valeurs des styles de textes 1502 Cet ensemble de delta initiaux 1901 est ensuite traité par un sous- programme 1902 qui utilise une donnée de crénage située dans des tables 1903 de polices Ce processus applique un crénage indépendamment dans deux positions: horizontale et verticale La sortie de ce processus est un nouvel ensemble de positions delta 1904 Puis, ces deltas 1904 sont traités par un sous-programme 1905 qui applique un suivi Le sous-programme 1905 prend les deltas 1904 et les index de glyphes 1906, ainsi qu'une donnée de suivi située dans des tables de polices 1906 et produit des deltas cumulatifs modifiés 1907. Ces deltas 1907 sont ensuite traités par un sous- programme 1908 qui applique des décalages de ligne de base Le sousprogramme 1908 prend les deltas 1907 et les index de glyphes 1506 ainsi qu'une donnée de ligne de base située dans des tables de polices 1909 et produit, comme sortie, des deltas cumulatifs modifiés 1910 Les deltas 1910 sont ensuite traités par un sous- programme 1912 qui justifie le texte Le sous-programme 1912 prend les deltas 1910, les index de glyphes 1506 et les priorités 1911 (qui sont prises à partir de l'information 1502 de styles de textes), ainsi qu'une donnée de justification située dans la table de polices 1913, et produit les sorties finales du processus d'implantation 1909, 1510 et 1511. Les détails du processeur de justification 1912 sont illustrés à la Figure 20, à laquelle on se référera On notera qu'il est possible que le processeur de justification 1912 modifie le contenu de l'ensemble 1506 d'index de glyphes de restitution Si ceci s'est produit, le processeur positionnel recommence à l'étape de crénage 1902 en utilisant l'ensemble modifié 1506 d'index de glyphes de restitution. La Figure 20 décrit le processeur de justification En premier lieu, les index de glyphes de restitution 1506 sont mesurés par le processus 2001 afin de trouver leurs largeurs d'avance Ces mesures métriques 2002, ainsi que les priorités 2011 prises dans les styles de textes 1502 et que la donnée provenant de la table "just" de la police 2004, deviennent ensuite les entrées d'un processus 2003 Le processus 2003 détermine les facteurs et les classes de chaque glyphe Les facteurs maximaux 2005 de justification qui sont créés par le processeur 2003 indiquent la quantité maximale d'espace qui peut être additionnée sur l'un et l'autre des côtés de chaque glyphe de la ligne Les classes de justification 2101 créées par le processus 2003 sont décrites à la Figure 21 (le processeur de post-compensation) On notera que ces facteurs maximaux 2005, ainsi que les facteurs finaux 2007 qui en sont dérivés, sont séparés en cases gauches (ou supérieures) et droites (ou inférieures) et également en valeurs séparées pour les cas dans lesquels la ligne doit augmenter ou diminuer, L'étape suivante du processeur de justification consiste à prendre les facteurs maximaux 2005 et les dimensions métriques par glyphe 2002 et à effectuer les calculs réels 2006 qui déterminent la quantité d'espace qui est effectivement ajoutée sur chaque côté de chaque glyphe de la ligne Ces facteurs finaux 2007 sont ensuite envoyés, en même temps que les index 1506 de glyphes de restitution et que la donnée provenant de la table "just" de la police 2009, au processeur de post- compensation 2008 (voir Figure 21) Lorsque le processus 2008 est achevé, les sorties finales (c'est- à-dire 1509, 1510 et 1511) de tous les processus d'implantation sont assemblées entre elles. La Figure 21 décrit le processeur de post- compensation Le processeur de post-compensation effectue de petites modifications aux glyphes finaux justifiés afin d'améliorer encore l'aspect de la ligne de texte qui est implantée Chaque glyphe est observé dans le processus 2102 afin de trouver ce que l'on appelle sa classe d'action Les entrées au processus 2102 sont les index 1506 de glyphes de restitution, les classes de justification 2101 (créées par le processus 2003), les facteurs finaux 2007 et les données de compensation provenant de la table "just" de la police 2009 Dès lors que cette classe d'action est déterminée, une détermination est effectuée Si la classe d'action indique qu'aucune action ne doit être entreprise 2103, rien d'autre n'est effectué au glyphe. Si la classe d'action indique qu'une décomposition de ligature soit se produire, l'ensemble des index de glyphes de restitution 1506 est modifié pour refléter cette décomposition Si la classe d'action indique qu'un kashida (c'est-à-dire une barre d'expansion) doit être ajouté, la barre est ajoutée Si la classe d'action indique qu'un glyphe doit changer d'identité, l'ensemble des index de glyphes de restitution 1506 est alors modifié afin de refléter le nouvel index de glyphe Si la classe d'action indique qu'un glyphe doit se déformer de manière ductile, ceci est effectué. Toutes ces actions se produisent dans la boucle d'action, processus 2108 On notera que, dans les cas 2104 et 2106, la case de décision listée après le processus 1912 à la Figure 19 prendra la branche "oui" en forçant le processeur positionnel à retraiter la ligne Dans les cas 2103, 2105 et 2107, la case de décision prendra la branche "non", en arrivant ainsi à l'ensemble final de glyphes dans leur ordre final d'affichage 1509. On va maintenant décrire les formats de tables de polices. La description qui suit détaille les formats des diverses tables qui peuvent être ajoutées à des polices True Type TM en support de la fonctionnalité d'implantation de ligne On exposera des détails concernant la manière dont les diverses particularités implantées sont commandées par la police. On donnera d'abord les détails de la recherche binaire. Afin d'amener l'implantation à être effectuée aussi rapidement que possible, un grand nombre des tables décrites ci-dessous contiennent des données qui accélèrent le processus de recherche pour l'entrée associé à un index particulier de glyphe Cette donnée est connue dans une structure Bin Srch Header, dont la forme est la suivante: Type Nom Description uint 16 unit Size Dimension d'une unité de consultation pour cette recherche uintl 6 n Units Nombre d'unités de la dimension précédente à rechercher uint 16 search Range Produit de unit Size par la puissance de deux la plus grande qui est inférieure ou égale à n Units uint 16 entry Selector Le log de base 2 de la plus grande puissance de 2 inférieure ou égale à n Units. uint 16 range Shift Le produit de unit Size par la différence entre n Units et la plus grande puissance de 2 inférieure ou égale à n Units. Afin d'accélérer encore le processeur de recherche, une valeur de seuil détermine quand la recherche binaire doit être abandonnée et une simple recherche sérielle devrait la remplacer Afin de s'assurer que ce processus opère de la façon la plus efficace, il est important de se rappeler d'inclure après toutes les autres unités une unité spéciale "end of search table", c'est-à-dire fin de la table de recherche La valeur associée à cette unité devrait être Ox FFFF La présence de cette valeur spéciale permet à la recherche logique d'être aussi rapide que possible, pour un coût relativement minimal d'espace additionnel dans la table de police. On va maintenant décrire les tables à consulter souvent appelées simplement tables dans ce qui suit. Les tables constituent une manière de prendre un index donné de glyphe et de consulter une information. Certaines tables impliquent des groupements en permettant à de nombreux index différents de glyphes d'être traités de la même manière, (c'est-à-dire de consulter pour eux la même information) D'autres effectuent simplement une consultation simple du type en réseau, étant donné l'index de glyphe Des tables à consulter présentent différents formats, pourvus chacun d'un numéro de format. Table Description de Format O Format de réseau simple La table est un simple réseau de valeurs à consulter de 16 bits, indexées par un index de glyphe. 2 Format unique de segment Un segment est défini comme une plage continue d'index de glyphes O Dans ce format chaque segment sans recouvrement possède une valeur unique de consultation qui est applicable à tous les glyphes du segment. (Des implantations de segments sont décrites ci- dessous). 4 Format de réseau de segments Une implantation de segments est effectuée (comme avec le format précédent) mais le résultat de la consultation, n'est pas le résultat d'une consultation unique pour tous les glyphes du segment, mais il est lui-même un réseau dont la base est l'index du glyphe de début dans le segment. 6 Format unique de table La donnée à consulter est une liste triée de paires résultat de consultation>. 8 Format de réseau ajusté La donnée à consulter est un simple réseau ajusté indexé par un index de glyphe (Des réseaux ajustés sont décrits ci- dessous). Etant donné les valeurs de format indiquées ci- dessus, la description de haut niveau d'une table à consulter est la suivante: Type Nom Description uint 16 format Format de cette table (l'une des valeurs ci- dessus) (variable) fs Header En-tête spécifique au format: - chacun d'eux est décrit ci-après suivi par la donnée réelle. Pour une table à consulter de format 0, le fs Header est simplement un réseau de valeurs à consulter de 16 bits. Pour une table de format 2 ou 4, le fs Header est décrit ci-dessous: Type Nom Description Bin Srch Header bin Srch Header Les unités de cette recherche binaire sont des Lookup Segments,(en traduction littérale: des segments à consulter), dont la longueur minimale est toujours de 6 (voir ci-dessous pour leur format). Lookup Segment segmentsll Les segments réels Ceux-ci doivent être dans l'ordre trié, sur la base du premier mot de chacun (c'est-à- dire par le dernier glyphe de chaque segment). Un Lookup Segment est défini de la façon suivante: Type Nom Description uint 16 last Glyph Index du dernier glyphe de ce segment. uintl 6 first Glyph Index du premier glyphe de ce segment. uintl 6 valeur lJ La valeur à consulter. Pour une table de format 2, cette valeur est appliquée uniformément à tous les glyphes du segment. Pour une table de format 4, la valeur est un simple uint 16, qui est un déport depuis le début de la table vers un réseau de valeurs; ce réseau est indexé en prenant l'index de glyphe donné et en soustrayant la valeur first Glyph (c'est-à-dire que c'est un réseau ajusté commençant à first Glyph). Pour la table de format 6, le fs Header est décrite de la façon suivante: Type Nom Description Bin Srch Header bin Srch Header Les unités de cette recherche binaire sont des Lookup Singles, (en traduction littérale: des éléments uniques à consulter), dont la longueur minimale est toujours de 4 (voir ci-dessous pour le format). Lookup Single entrées ll Les entrées réelles, triées par l'index de glyphe. Un Lookup Single est défini de la façon suivante Type Nom Description uint 16 glyph Index de glyphe. uint 16 value ll La valeur à consulter (d'une dimension arbitraire) Pour une table de format 8, le fs Header est défini de la façon suivante: Type uint 16 Nom first Glyph uint 16 glyph Count uint 16 value Array ll On va maintenant Une table d'état Description Index du premier glyphe inclus dans le réseau ajusté Nombre total de glyphes (qui sera le dernier glyphe moins first Glyph plus un). Les valeurs à consulter (indexées par l'index de glyphe first Glyph). décrire les tables d'état. décrit les tables utilisées par la machine d'état fini Elle spécifie l'implantation de classe, le réseau d'état et l'ensemble d'actions La machine d'état fini lit ces tables et les applique au réseau de glyphes Une table d'état débute par un en- tête de table d'état, qui est défini de la façon suivante. Type Nom Description uint 16 state Size Dimension d'un état, en multiplets (limités à 8 bits; la dimension est de 16 bits dans des buts d'alignement). uint 16 class Table Déport de multiplet du début de la table d'état à la table de classe. uint 16 state Array Déport de multiplet du début de la table d'état au réseau d'état. uint 16 entry Table Déport de multiplet du début de la table d'état à la table d'entrée. La table de classe implante un index de glyphe dans une classe Une classe est une collection de glyphes qui possèdent en commun une certaine propriété. Des exemples de classes peuvent être des chiffres arithmétiques, des lettres qui forment une ligature avec un 'If" précédent, et des caractères qui séparent des mots. L'implantation est effectuée en utilisant un réseau ajusté pour implanter une plage d'index de glyphes dans des codes de classes à huit bits. Type Nom Description uint 16 first Glyph Index de glyphe du premier glyphe de la table de classe. uint 16 n Glyphs Nombre de glyphes dans la table de classe. uint 8 class Array ll Les codes de classes (indexés par l'index de glyphes first Glyph). Des codes de classes sont dans la plage lO state Size 1 l Le code de classe O est la fin d'un texte, et ne doit pas apparaître dans le réseau de classe Le code de classe 1 est en dehors des limites. Le code de classe 1 sera assigné à tous les index de glyphes qui sont inférieurs à first Glyph ou qui sont supérieurs ou égaux à first Glyph + n Glyphs Le code de classe 1 peut également apparaître dans le réseau de classe Le code de classe 2 est annulé; le traitement contextuel enlève parfois un glyphe du réseau de glyphes en remplaçant son index de glyphe pafr l'index de glyphe annulé, Ox FFFF Ce code de glyphe est automatiquement assigné à une annulation de classe, qui ne devrait pas apparaître dans le réseau de classes. Tous les autres codes de classes peuvent être assignés. Afin de limiter la dimension de la table de classe, il faut concevoir des polices d'une manière telle que des glyphes qui seront traités par une table d'état donnée possèdent des index de glyphes qui sont dans une petite plage Un état est un réseau d'index d'entrée à huit bits: Type Nom Description uint 8 entrylstate Sizel Index vers la table d'entrée (indexé par le code de classe). Le réseau d'états est un simple réseau d'états. La première entrée du réseau d'états est l'état initial. Les formats des valeurs de la table d'entrée sont les suivants: Type Nom Description uint 16 new State Déport de multiplet du début uint 16 f lags uintl 6 glyph Offsets lJ de la table d'état vers le le nouvel état. Drapeaux spécifiques à la table. Déports optionnels vers des tables par glyphe Voir ci- dessous. La valeur new State est mémorisée en tant que déport de multiplet en vue d'un accès rapide: l'adresse de l'index de table d'entrée est la somme de l'adresse de table d'entrée, du new State et du code de classe Ceci signifie que le nombre maximal d'états dépend de state Size et du déport du réseau d'états par rapport au début de la table d'état. Le contenu du champ de drapeaux est spécifique à la table Voir les définitions des tables "mort", "just" et "kern" quant aux détails. Certaines actions calculent de façon optionnelle une valeur en utilisant un index de glyphes en tant qu'index vers une table par glyphe Les tables ne contiennent des entrées que pour les glyphes qui seront utilisés pour indexer dans la table Le déport est un déport de mot signé depuis le début de la table d'état jusqu'à l'emplacement o l'entrée de l'index O de glyphe serait si elle était dans la table Ceci permet de calculer l'adresse d'une entrée particulière comme étant: (index de glyphe + déport)* 2 + adresse de table d'état On notera que ceci signifie que le déport peut être, soit négatif, soit positif, selon le plus petit index de glyphe de la table et l'emplacement o la table commence par rapport au début de la table d'état. Des en- têtes de table d'état sont incorporés dans d'autres tables La table de classe, le réseau de table et les tables d'entrées devraient suivre l'en- tête de la table d'incorporation et peuvent être dans un ordre quelconque Les tables de classe et d'entrée doivent être alignées en mots Toutes les tables par glyphe suivront celles-ci et doivent être alignées en mots. On a maintenant décrire la table de ligne de base: étiquettée tag "bsln" La table de ligne de base contient une information qui identifie diverses positions de lignes de base par rapport à la ligne de base fondamentale de la police (c'est-à-dire un carré d'espace fine, ou e f, le mot espace étant employé ici au féminin) ainsi que les glyphes qui prendraient normalement ces lignes de base Par exemple, une police Romaine peut contenir une information concernant l'endroit o est située pour ses glyphes la ligne de base des petites majuscules La table de ligne de base peut également désigner un comportement de ligne de base par défaut pour des ensembles de glyphes. Le mode de réalisation actuellement préféré de la présente invention utilise de deux manières l'information fournie dans cette table En premier lieu, un ajustement automatique de ligne de base à une ligne de base commune est effectué en consultant la classe de ligne de base de chaque glyphe, et en ajustant ensuite cette position de glyphe (si nécessaire) à la ligne de base commune Puis, une information fournie par le client est utilisée pour spécifier la position de chaque ligne de base dans la ligne d'ensemble Pour une information plus complète concernant la manière dont les lignes de base sont manipulées, on verra la documentation sur le Line Layout Manager, c'est-à-dire, le gestionnaire d'implantation de ligne Les valeurs de ligne de base suivantes sont définies ( 32 valeurs différentes au total; on se réfère à ce nombre dont la documentation qui suit en tant que number Of Baseline Classes): Valeur ligne Description de base 0 Ligne de base Romaine Ceci définit l'alignement utilisé dans la plupart des langues à écriture romaine, o la majeure partie des caractères est située au-dessus de la ligne de base, des parties étant éventuellement au-dessous de celle-ci Cette ligne de base apparaît près du bas de la ligne entière. 1 Ligne de base idéographique centrée. Ceci définit le comportement utilisé par les écritures idéographiques chinoise, japonaise, coréenne, qui se centrent d'elles-mêmes à mi-chemin de la hauteur de ligne. 2 Ligne de base idéographique basse Ceci définit également, comme la valeur précédente, le comportement utilisé en Chinois, en Japonais et en Coréen, mais les glyphes étant légèrement abaissés d'une manière telle que les idéographes qui apparaissent adjacents à des caractères romains semblent descendre légèrement au-dessous de la ligne de base romaine. 3 Ligne de base suspendue Ceci définit l'alignement à utiliser dans les écritures en Devanagari et dérivés, o la majeure partie de l'espace des glyphes est située au-dessous de la ligne de base, certaines parties étant éventuellement au-dessus de celle- ci, et o la ligne de base elle-même apparaît au voisinage du sommet de la ligne. Cette valeur est également utilisée pour des petites majuscules. 4 Ligne de base mathématique Ceci définit l'alignement utilisé pour postionner des mathématiques, o des opérateurs comme le signe moins doivent être centrés. Elle est habituellement rendue égale à la moitié de la hauteur x d'une police. Il s'agit de lignes de base horizontales actuellement sans assignation. 18 à 31 Les être l'un Format de table o Ligne de base verticale centrée Ceci concerne un texte vertical qui est centré sur la ligne de base verticale. Offset Vertical Baseline Ceci concerne un texte vertical qui n'est pas centré sur la ligne de base verticale Un exemple de ceci peut concerner le Mongolien. Ces lignes de bases verticales sont actuellement sans assignation. formats des tables de lignes de base peuvent des formats suivants Description Basé à distance, aucune implantation Pour ce type de table, des décalages sont spécifiés en unités de distance pure F Unités en anglais, que l'on appelera ici F Unités Une simple ligne de base par défaut est désignée pour tous les glyphes de la police, de sorte qu'aucune table d'implantation n'est associée à ce format. Basé à distance, avec implantation Le format est le même que le format O avec l'addition d'une table d'implantation qui permet à des glyphes différents de la police d'avoir des lignes de base "naturelles" désignées différentes (des glyphes non couverts par la table d'implantation reçoivent la ligne de base par défaut mentionnée ci-dessus). Basé sur un point de commande, sans à 15 implantation Pour ce type de table, un glyphe particulier de la police est désigné comme possédant un ensemble de points de commande qui sont utilisés après suggestions, pour définir les positions de lignes de base. Comme pour le format 0, une valeur unique de ligne de base par défaut est désignée pour tous les glyphes de la police, de sorte qu'aucune table d'implantation n'est associée à ce format. 3 Basé sur point de commande avec implantation. Ce format est le même que le format 2, avec l'addition d'une table d'implantation; les autres commentaires sont comme pour le format 1. A chacun de ces formats est associée une structure qui contient sa donnée spécifique de format. Pour une table de format 0, sa partie spécifique au format est appelée un Format O Part et son format est le suivant: Type Nom Description uint 16 deltas ll Il existe 32 deltas pour la ligne de base intrinsèque de la police (carré carré e f) pour les 32 classes différentes de ligne de base Voir illustration ci-dessous. Pour une table de format 1, la partie spécifique au format est appelée un Formatl Part et son format est le suivant Type Nom Description uintl 6 delta l I Il existe 32 deltas pour la ligne de base intrinsèque de la police (carré e f) pour les 32 classes différentes de ligne de base Voir illustration ci-dessous. Lookup Table mapping Data Table à consulter (format quelconque) implantant des glyphes à leurs classes de base intrinsèques A tous les glyphes qui ne seront pas couverts par la table est assignée une classe de ligne de base par défaut. Pour une table de format 2, la partie spécifique au format est appelée un Format 2 Part, et son format est le suivant: Type Nom Description uint 16 std Glyph Index de glyphe du glyphe dans cette police à utiliser pour définir les valeurs de ligne de base Ce glyphe doit contenir un ensemble de points de commande (dont les numéros sont contenus dans le champ suivant) qui sera utilisé, éventuellement après suggestion, pour déterminer les distances de ligne de base. uint 16 ctl Pointsll Réseau de 32 nombres de points communs Ceux-ci sont associés au std Glyph Une valeur de Ox FFFF signifie qu'il n'existe aucun point de commande correspondant dans le std Glyph. Pour une table de format 3, la part spécifique au format est appelée une Format 3 Part et son format est le suivant: Type Nom Description uintl 6 std Glyph Index de glyphe du glyphe dans cette police à utiliser pour définir les valeurs de ligne de base Ce glyphe doit contenir un ensemble de points de commande (dont les numéros sont contenus dans le champ suivant) qui sera utilisé, éventuellement après suggestion, pour déterminer les distances de ligne de base. uintl 6 ctlPointsll Réseau de 32 nombres de points communs Ceux-ci sont associés au std Glyph Une valeur de Ox FFFF signifie qu'il n'existe aucun point de commande correspondant dans le std Glyph. Lookup Table mapping Data Table à consulter (format quelconque) implantant des glyphes à leurs classes de base intrinsèques A tous les glyphes qui neseront pas couverts par la table est assignée une classe de ligne de base par défaut. Etant donné ces éléments spécifiques au format, la structure de haut niveau de la table de la ligne de base est la suivante Type Nom Description fixe version Numéro de version de la table de ligne de base (Ox OO 010000 pour la version initiale). uint 16 format Format de la table de ligne de base (selon les valeurs ci-dessus). uint 16 default Baseline Valeur de ligne de base par défaut à utiliser pour tous les glyphes (formats O et 2) ou en l'absence de données d'implantation pour un glyphe particulier (formats 1 et 3) (variable) parts Donnée spécifique au format Ceci sera, soit un Format Opart, soit un Formatlpart, soit un Format 2 Part, soit un Format 3 Part selon les définitions ci-dessus. Afin d'illustrer comment tout ceci fonctionne, on en représente maintenant un exemple; pour les buts du * présent exemple, on considère le format de distance. Considérons le tracé suivant "D" en police Romaine. On voit ici le "D" situé dans le carré e f, et la ligne de base naturelle ici est au point Y = O des coordonnées de police De cette manière, en l'absence d'implantation, différentes dimensions de ce glyphe seront restituées en possédant cette ligne en commun, c'est-à- dire que le stylet reste toujours sur cette ligne. Dans le diagramme qui suit, on ajoute la définition de deux lignes de base: Romaine et suspendue La ligne de base Romaine est en fait la même que la ligne de base de la police, de sorte que son delta serait zéro La ligne de base suspendue est située à une certaine distance au- dessus de la ligne de base naturelle Son delta serait donc un nombre positif (de l'ordre 1500 F Unités, peut-être). Cette information de delta est utilisée pendant l'implantation de ligne afin d'amener en premier lieu tous les glyphes de la ligne à une ligne de base commune et à les déplacer ensuite vers un emplacement final, comme représenté dans le diagramme qui suit: On va maintenant donner un exemple d'une table de ligne de base (sans point de commande) On crée par exemple une table de ligne de base pour une police contenant en mélange des kanji et des lettres Romaines Le but est de donner à toutes les lettres Romaines la valeur de la ligne de base Romaine et à tous les kanji la valeur de la ligne de base idéographique centrée Pour les buts de la présente illustration, on suppose que les glyphes Romains occupent des indices de glyphes de 2 à 270 et que les kanji occupent les indices de glyphes de 271 à 8200. En outre, on suppose que la ligne de base intrinsèque kanji est du style Romain (c'est-à-dire que les glyphes reposent au bas du carré e f) Une quantité de décalage de 855 F Unités est incluse pour aligner l'une et l'autre De plus, on suppose que la hauteur de majuscule des lettres Romaines est de 1520 (c'est-à-dire la distance de la ligne de base suspendue) Une table d'échantillon est donnée ci- dessous: Décalage/longueur Valeur Commentaire 0/4 Ox O 0010000 Numéro de version ( 1,0 en format à point fixe). 4/2 1 Le format de table de 1 signifie que c'est une table de distance à laquelle une table à consulter est associée. 6/2 1 La ligne de base par défaut est la ligne de base idéographique centrée. En spécifiant cette valeur, il suffit d'inclure les glyphes non- kanji dans la table à consulter. (Le Formatl Part commence ici) 8/2 O Delta de la ligne de base naturelle à la ligne de base Romaine est zéro. 10/2 855 Delta de la ligne de base naturelle à la ligne de base idéographique centrée. 12/2 O Ne pas s'occuper de ligne de base idéographique basse. 14/2 1520 Delta de la ligne de base naturelle à la ligne de base suspendue. 16/56 0 Ne pas s'occuper d'inclure les autres lignes de base. (Deuxième partie de Formatl Part et la table à consulter) 72/2 2 Format de table à consulter 2 (format de table à segment unique). (Les cinq champs suivants sont le Bin Srch Header) 74/2 6 Dimension d'un Lookup Segment ( 2 multiplets pour l'index de glyphe de début, 2 multiplets pour l'index de glyphe de fin, et 2 multiplets pour la valeur de ligne de base). 76/2 1 Nombre d'entrées de la table. 78/2 6 Plage de recherche. 80/2 O Sélecteur d'entrée. 82/2 O Décalage de plage. (Les entrées Lookup Segment commencent ici) 84/2 270 Index de glyphe de fin pour kanji. 86/2 2 Index de glyphe de début pour kanji. 88/2 O Valeur de ligne de base pour glyphes de cette plage (c'est-à-dire kanji). /2 Ox FFFF Valeur spéciale toujours nécessaire à la fin des tables à consulter de segments. 92/2 Ox FFFF Glyphe de début est le même que la valeur spéciale. 94/2 O Cette valeur est sans importance. On va maintenant donner un exemple de table de ligne de base (avec point de commande) Cet exemple utilise le même ensemble de base que le précédent, avec l'addition d'une information de point de commande en vue d'une mise en place plus précise des décalages de ligne de base Le glyphe 22 est désigné comme le glyphe contenant l'information de point de commande Ce glyphe possède le point de commande N'80 à la ligne de base Romaine, le point de commande N O 81 à la ligne de base idéographique centrée, et le point de commande N O 82 à la ligne de base suspendue. Déport/ Valeur Commentaire longueur 0/4 Ox O 001000 Numéro de version ( 1,0 en format à point fixe). 4/2 3 Format de table de 3 signifie que c'est une table de distance à laquelle est associée une table à consulter. 6/2 1 Comme dans l'exemple précédent, on désigne la ligne de base par défaut comme la ligne de base idéographique centrée; (Le Format 3 Part commence ici) 8/2 22 Index de glyphe du glyphe contenant l'info de point de commande (on l'appellera le "glyphe normalisé" ci-dessous). /2 80 Point de commande de la ligne de base Romaine dans le glyphe normalisé. 12/2 81 Point de commande de la ligne de base idéographique centrée dans le glyphe normalisé. 14/2 Ox FFFF Valeur spéciale signifiant l'absence de point de commande pour cette classe de ligne de base. 16/2 82 Point de commande pour la ligne de base suspendue dans le glyphe normalisé. 18/56 Ox FFFF Valeur spéciale signifiant l'absence de point de commande pour ces classes de ligne de base. (La dernière section de Format 3 Part est la table à consulter) 74/2 2 Table à consulter de format 2 (format de table à segment unique). (Les cinq champs suivants sont le Bin Srch Header) 76/2 6 Dimension d'un Lookup Segment ( 2 multiplets pour l'index de glyphe de début, 2 multiplets pour l'index de glyphe de fin, et 2 multiplets pour la valeur de ligne de base). 78/2 1 Nombre d'entrées de la table. /2 6 Plage de recherche. 82/2 o Sélecteur d'entrée. 84/2 O Décalage de plage (Les entrées de Lookup Segment commencent ici). 86/2 270 Index de glyphe de fin pour le kanji. 88/2 2 Index de glyphe de début pour kanji. /2 O Valeur de ligne de base pour les glyphes de cette plage (c'est-à- dire kanji). 92/2 O x FFFF Valeur spéciale toujours nécessaire à la fin des tables à consulter de segments. 94/2 O x FFFF Glyphe de début est le même que la valeur spéciale. 96/2 O Cette valeur est sans importance. On va maintenant décrire la table de Caret de ligature, étiquetée "Icar" La table de Caret de ligature est utilisée pour identifier des points de division naturelle à l'intérieur de ligatures Ces points de division sont utilisés pour permettre l'illusion d'édition complète d'un texte, même à l'intérieur d'une ligature En utilisant cette donnée, le mode de réalisation actuellement préféré de la présente invention permet à l'utilisateur de ne choisir que la partie "i" d'une ligature "fi" par exemple, bien que le "fi" lui-même ne soit qu'un glyphe unique Une table de caret de ligature possède l'un des formats suivants: Format Description de table 0 Linéaire Dans ce format, les valeurs associées à un glyphe sont des valeurs de F Unités uniques, représentant des positions le long de la ligne de base par lesquelles les sous-divisions sont effectuées d'une manière orthogonale à la ligne de base. 1 Point de commande Ce format est semblable au format 0, mais les divisions, au lieu d'être exécutées à des distances spécifiées en F Unités, sont effectuées à l'emplacement suggéré d'un point de commande spécifié. Seule l'une des coordonnées de ce point est utilisée (la coordonnée x pour des valeurs métriques horizontales, ou la coordonnée y pour des valeurs métriques verticales). La structure d'ensemble de la table de caret de ligature est la suivante: Type Nom Description fixe version Numéro de version de la table de caret de ligature (Ox OO Ol OOQO pour la version initiale). uintl 6 format Format de la table de caret de ligature (l'une des valeurs ci-dessus). (variable) lookup data Table à consulter implantant des glyphes à des déports de uintl 6 à partir du début de la table de caret de ligature vers la valeur Lig Caret Class Entry pour le glyphe spécifié. La structure Lig Caret Class Entry (dont le déport est contenu dans l'entrée unique à consulter de la table à consulter) est de la structure suivante: Type Nom Description uintl 6 count Nombre de int 16 qui suivent. int 16 partialslcountl Valeurs uniques représentant soit des distances en F Unités pour des tables de format 0, soit des numéros de points de commande pour des tables de format 1. On va maintenant donner un exemple d'une table de caret de ligature (sans point de commande). On suppose que la donnée de caret de ligature des ligatures ""fi" et "f Il" d'une police romaine doit être incluse En premier lieu, soit 192 l'index de glyphe de "fi" et 556 la distance en F Unités dans le "fi" pour la division De même, il est donné que l'index de glyphe de "fi" est de 193, que sa distance en F Unités est 561. La table aurait l'aspect suivant: déport/ Valeur Commentaire longueur 0/4 Ox OO 010000 Numéro de version ( 1,0 en format fixe). 4/2 O Format de table de O signifie que c'est une table linéaire. (La donnée à consulter commence ici). 6/2 6 Table de format 6 (format de table unique). 8/2 /2 12/2 14/2 16/2 (Les 18/2 /2 22/2 24/2 26/2 28/2 (Les /2 32/2 32/2 4 Dimension d'un Lookup Single ( 2 multiplets pour l'index de glyphe) et 2 multiplets pour le déport depuis le début de la table de caret de ligature). 2 Nombre d'entrées de la table. 8 Plage de recherche (voir section sur les tables, ci-dessus). 1 Sélecteur d'entrée (voir section sur les tables, ci-dessus) O Plage de décalage entrées Lookup Single commencent ici) 192 Code de glyphe, ou Glyphcode, de "fi". déport à Lig Caret Class Entry pour "fi". Ox FFFF Code de glyphe pour "fl". déport à Lig Caret Class Entry pour "fl". Valeur de fin spéciale (voir description dans la section de table). O Valeur spéciale de fin. Lig Caret Class Entries commencent ici). 1 "fi" seul à un emplacement de caret de ligature interne. 556 Le déport en F Unités. 1 "fl I" seul à un emplacement de caret de ligature interne. 36/2 561 Le déport en Funités. On va maintenant décrire les tables de liaisons optiques étiquetées "opbd". Les tables de liaisons optiques contiennent une information identifiant les bords optiques de glyphes. Cette information est utilisée pour amener les bords de lignes d'une ligne de texte à s'aligner d'une manière visuellement plus plaisante (on notera que cette information n'est jamais utilisée à l'intérieur d'une ligne, mais seulement aux bords d'une ligne) Pour chaque glyphe pour lequel il existe une information de bord optique, il existe dans cette table quatre nombre spécifiant des deltas vers les bords optiques gauche, supérieur, droit et inférieur Ces deltas sont les quantités dont le glyphe devrait être déplacé afin d'aligner son bord optique. Les conventions de signes sont les mêmes que les conventions de signes pour le système de coordonnées de la police Par exemple, un delta de côté gauche de 50 Funités associé, par exemple, à une majuscule "C" signifierait que le glyphe doit être décalé de F Unités vers la gauche pour les lignes qui commencent par ce "C" majuscule. L'un des formats de cette table permet aux bords optiques d'être spécifiés au moyen de points de commande et non de valeurs de F Unités Dans ce cas, le point de commande lui-même désigne la position à l'intérieur du glyphe qui doit être alignée avec le bord de la ligne de texte. Des tables de liaisons optiques peuvent présenter l'un de ces formats: Format Description de table 0 Distance dans ce format, les valeurs associées à un glyphe sont en F Unités. 1 Point de commande Dans ce format, les emplacements des bords optiques de glyphes sont spécifiés par des points de commande. Dans ce format, on spécifie la valeur e 60 spéciale 1 pour indiquer qu'aucun point de commande de bord optique n'est spécifié pour un bord donné. La structure d'ensemble de la table de limites optiques est la suivante: Type Nom Description fixe version Numéro de version de la table de limites optiques ( O x 00010000 pour la version initiale). uintl 6 format Format de la table de limites optiques (l'une des valeurs ci-dessus). (variable) lookup data Table à consulter implantant des glyphes à des déports uintl 6 à partir du début de la table de limites optiques à un enregistrement contenant les 4 valeurs int 16 (interprétées comme distances ou comme points de commande, selon le format de table). On va maintenant donner un exemple d'une table de limites optiques (format de distance) On va décrire un exemple d'une police Romaine pour laquelle une donnée de bord optique est décrite pour des lettres arrondies Elle inclut une donnée optique pour deux glyphes, "O" (index de glyphe 10 pour cette police) et "A" (index de glyphe 43) On notera que cette même approche peut être étendue à une série de glyphes Une quantité de côté supérieur est incluse pour le "A", puisque son attrait visuel est souhaité tant pour le texte vertical que pour le texte horizontal. Déport/ Valeur longueur 0/4 4/2 (La d 6/2 8/2 /2 12/2 14/2 16/2 (Les 18/2 /2 22/2 24/2 26/2 28/2 /2 32/2 34/2 36/2 Commentaires Ox O 0010000 Numéro de version ( 1,0 en format fixe). 0 Le format de table de O signifie que c'est une table de distance. aonnée de table commence ici) 6 Format de table 6 (format de table unique). 4 Dimension d'un Lookup Single ( 2 multiplets pour l'index de glyphe, et 2 multiplets pour le déport). 2 Nombre d'entrées de la table. 8 Plage de recherche (voir section sur les tables à consulter, ci- dessus). 1 Sélecteur d'entrée (voir section sur les tables à consulter, ci- dessus). 0 Décalage de plage. entrées Lookup Single commencent ici) Code de glyphe de "O". Déport pour les limites pour l Oi I 43 Code de glyphe pour "A". 38 Déport aux limites pour "A". Ox FFFF Valeur spéciale de fin de table à consulter de format 6. 0 Il s'agit simplement d'un déport vide correspondant à la valeur spéciale de fin de table. Delta de côté gauche. 0 Delta de côté supérieur. Delta de côté droit. 0 Delta de côté inférieur. 38/2 10 Delta de côté gauche. /2 15 Delta de côté supérieur (on se rappelle que positif est vers le haut dans le système de coordonnées de police). 42/2 O Delta de côté droit. 44/2 O Delta de côté inférieur. On va maintenant donner des exemples de limites optiques (format à point de commande) En supposant qu'il faut inclure les deux mêmes glyphes que dans l'exemple précédent, cet exemple spécifie les positions optiques à l'aide de points de commande au lieu de les spécifier à l'aide de distances réelles On notera la valeur spéciale de " 1 " qui signifie qu'aucune information optique n'est incluse pour le côté donné. Décalage Valeur Commentaire longueur 0/4 Ox OO 010000 Numéro de version ( 1,0 en format 4/2 (La donnée 6/2 8/2 /2 12/2 14/2 de table à fixe). Format de table de 1 signifie qu'il s'agit d'une table de point de commande. consulter commence ici). Table à consulter de format 6 (format de table unique). Dimension d'un Lookup Single ( 2 multiplets pour l'index de glyphe, et 2 multiplets pour le déport). Nombre d'entrées de la table. Plage de recherche (voir section sur les tables à consulter, ci- dessus). Sélecteur d'entrée (voir section sur les tables à consulter, ci- dessus). 16/2 O Décalage de plage. (Les entrées Lookup Single commencent ici) 18/2 10 Code de glyphe de "O". 20/2 30 Déport pour les limites pour "O" 22/2 43 Code de glyphe pour "A". 24/2 38 Déport aux limites pour "A". 26/2 Ox FFFF Valeur spéciale de fin de table à consulter de format 6. 28/2 O Il s'agit simplement d'un déport vide correspondant à la valeur spéciale de fin de table. /2 36 Point de commande commandant le bord optique de côté gauche. 32/2 1 Aucun effet optique sur le bord supérieur pour "O". 34/2 37 Point de commande commandant le bord optique de côté droit. 36/2 Aucun effet optique sur le côté inférieur pour le "O". 38/2 32 Point de commande commandant le bord optique de côté gauche. /2 41 Point de commande commandant le bord optique de côté supérieur. 42/2 1 Aucun effet optique de côté droit pour le "A". 44/2 1 Aucun effet optique du côté inférieur pour le "A". On va maintenant donner la table des propriétés de glyphes, étiquetée "prop". La table de propriétés de glyphes contient différentes propriétés associées à chaque glyphe d'une police Un exemple d'une propriété est "ce glyphe peut être suspendu au bord gauche/supérieur d'une ligne". Une valeur de propriété unique est une quantité à 16 bits comprenant différents bits pour des propriétés différentes Ces bits sont définis de la façon suivante: Valeur Interprétation de masque Le glyphe est un flotteur (c'est-à-dire un accent flottant, une marque de voyelle, etc). Le glyphe peut être suspendu au bord gauche d'une ligne horizontale ou au bord supérieur d'une ligne verticale. Le glyphe peut être suspendu au bord droit d'une ligne horizontale ou au bord inférieur d'une ligne verticale. Si ce bit est vrai, deux choses sont vraies: ce glyphe est un glyphe de mise entre crochets (par exemple parenthèse, crochet, accolade etc); et l'autre glyphe correspondant à celui-ci est de droite à gauche Si ce glyphe n'est pas un glyphe de mise entre crochets, ou simplement si l'autre est de gauche à droite, ce bit est faux Voir ci-dessous une autre description de glyphe de mise entre crochets. Déport au glyphe de mise entre crochets correspondant Zéro si ce n'est pas un glyphe de mise entre crochets Voir ci- * dessous pour une description détaillée des glyphes de mise entre crochets. Ceux-ci doivent être zéro dans la version 1 de cette table Ils sont réservés pour des propriétés ultérieures. Ces quatre bits contiennent la classe de directionnalité du glyphe (voir table suivante) Pour une description de la Ox 8000 Ox 4000 Ox 2000 OX 1000 Ox OFOO Ox OOFO Ox OOOF signification de ces valeurs, voir le document Unicode. La classe de directionnalité d'un glyphe est l'une des onze valeurs suivantes (selon la définition du document Unicode): Classe de Description directionnalité (Les trois premières valeurs sont les classes fortes) O Fort de gauche à droite. 1 Fort de droite à gauche (non Arabe). 2 Lettres Arabes (droite à gauche). (Les cinq valeurs suivantes sont les classes faibles) 3 Nombre Européen. 4 Séparateur de nombre Européen. 5 Terminateur de nombre Européen. 6 Nombre Arabe. 7 Séparateur de nombre commun. (Les quatre valeurs finales sont les classes neutres) 8 Séparateur de bloc. 9 Séparateur de segment. Espace blanc. il Autres neutres. 12 à 15 Ces valeurs ne sont pas utilisées. Le format d'une table de propriétés de glyphes est le suivant: Type Nom Description fixe version Numéro de version de la table de base (Ox OOO 10000 pour la version initiale). uintl 6 format Format de la table de propriétés de glyphes, mis à O si aucune donnée à consulter n'est présente, mis à 1 si donnée à consulter est présente. uintl 6 default Propriétés par défaut à appliquer à un glyphe si ce glyphe n'est pas présent dans la table à consulter. (variable) lookup data Table de données à consulter pour des propriétés de glyphes non définies par défaut. On va maintenant donner un exemple d'une table de propriétés de glyphe. On donne ci-dessous un exemple d'une police contenant des caractères tant Hébreux que Romains. Puisque de nombreux glyphes partagent des propriétés semblables, une table à consulter de format 2 (segment unique) est implantée D'autres choix utiles ici peuvent consister en un format 6 (si seuls quelques glyphes diffèrent de la définition par défaut), ou des formats O ou 8 (là o le nombre de segments pourrait devenir prohibitif dans le cas contraire). Déport/ Valeur Commentaire longueur 0/4 Ox OO 010000Numéro de version ( 1,0 en o format fixe) Format 1: une donnée à consulter est présente. Les propriétés par défaut sont de gauche à droite, et ne peuvent pas être suspendues à l'une quelconque des extrémités de ligne, et il ne s'agit pas de flotteur On notera que, en désignant ceci comme propriété par défaut, il suffit de fournir une donnée pour les glyphes qui diffèrent de cette valeur par défaut. 4/2 6/2 (La table à consulter commence ici) 8/2 2 Table à consulter de format 2 (format de table à segment unique). 10/2 6 Dimension d'un Lookup Segment ( 2 multiplets pour l'index de glyphe de début, 2 multiplets pour l'index de glyphe de fin, et 2 multiplets pour les valeurs de propriétés). 12/2 2 Nombre d'entrées de la table. 14/2 12 Plage de recherche (voir section sur les tables à consulter, ci-dessus). 16/2 1 Sélecteur d'entrée (voir section sur les tables à consulter ci-dessus). 18/2 o Décalage de plage. (Les entrées Lookup Segment commencent ici) 84/2 2 Index de glyphe de fin pour l'espace. 86/2 2 Index de glyphe de début pour l'espace. 88/2 10 Propriétés pour l'espace (Espace blanc). /2 225 Index de glyphe de fin pour les glyphes Hébreux. 92/2 150 Index de glyphe de début pour les glyphes Hébreux. 94/2 Ox 0001 Propriétés de ces glyphes (de droite à gauche). On va maintenant décrire la table de métamorphose de glyphe étiquetée "mort". La table de métamorphose de glyphe spécifie un ensemble de transformations de texte, appelées particularités de texte Des exemples de particularités de texte sont la formation de ligatures, le numéro de style, et le caractère orné Bien qu'un ensemble normalisé de particularités de texte ait été défini, les concepteurs de polices sont libres de définir leur ensemble propre. La table de métamorphose de glyphe consiste en un en-tête suivi par une ou plusieurs chaînes de métamorphose Chaque chaîne de métamorphose contient une spécification des particularités de texte qu'elle décrit et une ou plusieurs sous-tables de métamorphose, spécifiant un ensemble de transformations atomiques qui, lorsqu'elles sont appliquées au réseau de glyphes dans l'ordre approprié, y provoquent les transformations de texte conformes aux particularités de texte. A l'intérieur d'une chaîne de métamorphose, des particularités de texte sont spécifiées par un Text Feature, c'est-à-dire une particularité de texte en traduction littérale. Type Nom Description uint 16 feature Type Le type de particularité. uint 16 feature Setting La définition de la pa Le type de Pa particularité particulière. Type de Description particularité o rticularité. rticularité spécifie Formation de ligature. Caractère orné contextuel. Substitution de case. Substitution verticale. Nouvel agencement de style indien. Style de numéro. Caractère orné non contextuel. Marques diacritiques. Ensemble de particularités. la 9 Elévation(supérieurs et inférieurs) Fractions Pour chaque particularité de texte, la définition de particularité spécifie une variante particulière de la particularité Par exemple, une définition de particularité de la particularité de formation de ligature peut-être "ligatures normales" et une définition de la particularité de style de nombres pourrait être "mettre les nombres en colonnes". Définition de Description particularité 0 Normal: ne former que les ligatures qui sont normalement utilisées. 1 Supprimer: ne former aucune ligature. 2 Obligatoire: ne former que les ligatures qui sont nécessaires pour une restitution correcte. 3 Optionnel: former toutes les ligatures possibles. Les définitions actuellement préférées pour la particularité de caractère orné contextuel sont: Définition de Description particularité 0 Normal: utiliser les glyphes ornés normaux selon le contexte. Supprimer: n'utiliser aucun glyphe orné. Variante 1: utiliser selon le contexte les glyphes ornés venant la variante 1 de l'ensemble. Variante 2: utiliser selon le contexte les glyphes ornés venant la variante 2 de l'ensemble. Variante 3: utiliser selon le contexte les glyphes ornés venant la variante 3 de l'ensemble. Variante 4: utiliser selon le contexte les glyphes ornés venant la variante 4 de l'ensemble. Les définitions actuelles pour la particularité de substitution majuscule/minuscule sont: Définition de Description particularité O Aucune: n'exécuter aucune substitution majuscule/minuscule. 1 Majuscule: remplacer les minuscules par des majuscules. 2 Minuscule: remplacer les majuscules par des minuscules. 3 Petite majuscules: remplacer les minuscules par de petites majuscules. Les définitions actuelles pour la particularité de substitution verticale sont: Définition de Description particularité O Normal: substituer des variantes verticales quand le texte est vertical. 1 Aucune: ne substituer aucune variante verticale. 2 Toujours: Substituer toujours les variantes verticales, même dans un texte horizontal. Les définitions actuelles pour la particularité de nouvel agencement de style indien sont: Définition de Description particularité o Normal: effectuer un nouvel agencement de style indien. Supprimer: n'effectuer aucun nouvel agencement de style indien. Les définitions actuelles pour la particularité de style de nombre sont: Définition de Description particularité 0 Alignement: utiliser le nombre de style à alignement "normal". 1 Classique: utiliser les nombres de style "classique". 2 Mise en colonne: utiliser la mise en colonne des nombres. Les particularités actuellement définies pour la particularité de caractère orné non contextuel sont Définition de Description particularité 0 Simple: utiliser des glyphes simples. 1 Orné 1: utiliser glyphes de l'ensemble orné 1. 2 Orné 2: utiliser glyphes de l'ensemble orné 2. 3 Orné 3: utiliser glyphes de l'ensemble orné 3. 4 Orné 4: utiliser glyphes de l'ensemble orné 4. Orné 5: utiliser glyphes de l'ensemble orné 5. Les définitions actuelles pour les particularités de marques diacritiques sont Définition de Description particularité 0 Montrer: montrer marques diacritiques dans leurs positions normales. Cacher: ne montrer aucune marque diacritique. Mettre en série: représenter les marques diacritiques comme glyphes séparés. Les définitions actuelles pour la particularité d'ensemble de particularités sont: Définition de Description particularité 0 Vide: un ensemble sans particularité. 1 Simple: un ensemble de particularités qui produit un texte "simple". 2 Fantaisie 1: un ensemble de particularités qui produit un texte "fantaisie". 3 Fantaisie 2: un ensemble de particularités qui produit un texte "fantaisie". 4 Fantaisie 3: un ensemble de particularités qui produit un texte "fantaisie". Les définitions actuelles pour la particularité d'élévation sont: Définition de Description particularité O Normal: aucun déport par rapport à la ligne de base; 1 Supérieur: un glyphe prévu pour être placé au-dessus de la ligne de base. 2 Inférieur: un glyphe prévu pour être placé au-dessous de la ligne de base. Les particularités actuellement définies pour la particularité de fraction sont Définition de Description particularité o Normal: former normalement les ligatures (existantes) de fraction. Supprimer: ne former normalement aucune ligature. Construire: synthétiser des fractions à partir des supérieurs et inférieurs. L'en-tête de table de métamorphose de glyphe possède le format suivant: Type Nom Description fixe version Numéro de version de la table de métamorphose de glyphe (Ox OO 010000 pour la version initiale). uint 32 n Chains Nombre de chaînes de métamorphose qui suivent. Chaque chaîne de métamorphose commence par une limite de mot long (c'est- à-dire un multiple de 4 multiplets), et possède un en-tête spécifiant les particularités de la chaîne et leurs relations aux sous-tables de la chaîne. Type Nom Description uint 32 default Flags Les drapeaux de sous- particularités par défaut de cette chaîne (voir ci- dessous). unit 32 chain Length La longueur de la chaîne en multiplets, y compris cet en-tête. uint 16 n Feature Entries Le nombre d'entrées de la table de particularités de la chaîne (voir ci-dessous). uint 16 n Subtables Le nombre de sous-tables de la chaîne. En général, la transformation de texte spécifiée par une combinaison donnée de particularité et de définition est composée de plus d'une transformation atomique Cette relation est décrite dans la table de particularités de chaînes en utilisant un ensemble d'une valeur de 32 bits appelé les drapeaux de sous- particularités Les bits des drapeaux de sous- particularités représentent chacun un sous-ensemble particulier de toutes les transformations atomiques décrites par les sous-tables de la chaîne Bien qu'il n'existe aucune limitation quant à la manière dont ces drapeaux de sous-tables sont utilisés, il existe habituellement un bit unique pour chaque combinaison de particularité et de définition Par exemple, Ox OO 000001 pourrait signifier "ligatures obligatoires", O x 00000002 pourrait signifier "ligatures normales" et O x 000000004 pourrait signifier "ligatures optionnelles". L'en-tête de chaîne est suivi par la table de particularités qui est un réseau d'entrée de table de particularités: Type Nom Description Text Feature feature Le type et la définition de particularité. uint 32 enable Flags Les drapeaux des sous- particularités que cette particularité et cette définition valident. uint 32 disable Flags Complément des drapeaux des sous- particularités que cette particularité et cette définition valident. La table de particularité est utilisée pour calculer les drapeaux de sous-particularités pour établir une liste de particularités et de définitions demandées Le résultat est initialisé à default Flags de la chaîne Puis, les entrées de la table de particularités sont parcourues dans l'ordre et, si la particularité et la définition se trouvent dans la liste demandée, le résultat est traité en porte ET avec disable Flags de l'entrée et est traité en porte OU avec enable Flags de l'entrée Lorsque ceci est fini, le résultat contient les drapeaux de sous-particularités correspondant à la liste des particularités demandées. On notera que, si la liste des particularités demandées est vide, le résultat est le default Flags de la chaîne, c'est-à-dire que le default Flags spécifie les sous- particularités qui sont demandées "par défaut" On notera aussi que l'ordre d'entrée dans la liste de particularités demandées n'est pas important et que l'ordre des entrées dans la table de particularités est important Les entrées ultérieures dans la table de particularités sont prioritaires par rapport à des entrées antérieures dans la table Ceci est nécessaire parce que seul le concepteur de police connaît la relation entre les particularités et les sous- particularités En utilisant les exemples ci-dessus de drapeaux de sousparticularités, le default Flags de la chaîne peut être O x 00000003 (pour formation normale de ligature) et les entrées de la table de particularités, pour la particularité de formation de ligature, pourrait être: Particularité Définition Drapeaux de Drapeaux validation d'invalidation Formation de Obligatoire O x OO 000001 O x FFFFFFF 9 ligature (complément de O x 00000006) Formation de Normal O x OO 000001O x FFFFFFFB ligature (complément de O x 00000004) Formation de Optionnel O x 00000007 O x FFFFFFFF ligature (complément de O x 00000000) Formation de Suppression O x OO 000000 O x FFFFFFF 8 ligature (complément de O x 00000007) Cette table de particularités est établie d'une manière telle que la définition optionnelle valide aussi les sous-particularités normale et obligatoire et que la définition normale valide aussi la particularité obligatoire La définition de suppression invalide les sous-particularités de toutes les autres définitions. Chaque table de particularités se termine par une entrée de la particularité de texte d'ensemble de particularités portant la définition vide qui convertit tous les drapeaux de sous- particularités de la chaîne. Particularité définition Drapeau de Drapeau de validation d'invalidation Ensemble de Vide Ox O 0000000Ox O 0000000 particularités (complément de Ox FFFFFFFF) Il est commode de maintenir ensemble dans une chaîne unique les particularités de texte qui partagent des sous-particularités Bien qu'il n'existe aucune restriction de ce type, une chaîne unique de métamorphose est suffisante à moins que les particularités de texte de la police ne puissent pas être spécifiées au moyen de 32 sous-particularités. Les longueurs des sous-tables sont des multiples de 4 multiplets Un remplissage doit être ajouté à la fin de la sous-table pour assurer ceci. La table de particularités est suivie par les sous-tables, qui décrivent les transformations atomiques constituant les sous- particularités de la chaîne Bien que chaque particularité atomique possède son propre format, les sous-tables commencent par un en-tête commun. Type Nom Description uintl 6 length Longueur de la sous-table, y compris cet en-tête, en multiplets. uint 16 coverage Drapeaux de couverture et type de transformation atomique (voir ci- dessous). uint 32 sub Feature Flags Drapeaux de sous- particularités que décrivent cette sous-table. Le champ sub Feature Flags comprend un bit mis à un pour chaque sousparticularité dont la transformation exige la transformation atomique spécifiée par la sous- table Des sous-tables sont parcourues dans l'ordre et sont appliquées au réseau de glyphes si le résultat d'un traitement en porte ET de leurs sub Feature Flags à l'aide des drapeaux de sous-particularités demandées est non nul. Par exemple, en utilisant la table de particularités ci- dessus, il existerait trois sous- tables: l'une o les sub Feature Flags sont mis à 0 x OO 000001 pour les ligatures obligatoires, une o les sub Feature Flags sont mis à O x 00000002 pour les ligatures normales qui ne sont pas obligatoires, et une o les sub Feature Flags sont mis à O x 00000004 pour des ligatures optionnelles qui ne sont ni obligatoires ni normales Ainsi, la sous-table obligatoire est appliquée si la définition de formation de ligature est obligatoire, normale ou optionnelle, la sous-table normale est appliquée si le définition de formation de ligature est normale ou optionnelle, et la sous-table optionnelle est appliquée si la définition de formation de ligature est optionnelle. De cette manière, les sous-tables individuelles sont plus simples puisque chacune traite un sous-ensemble particulier de toutes les ligatures En revanche, une demande de ligatures optionnelles signifie que trois sous-tables sont appliquées Ce qui donne la table de particularités Particularité Formation de ligature Formation de ligature Formation de ligature Formation de ligature suivantes: Définition Obligatoire (complément Normal (complément Optionnel (complément Suppression (complément Drapeaux de Drapeaux validation d'invalidation 0 x OO 000001 O x FFFFFFF 9 de O x 00000006) 0 x 00000002 Ox FFFFFFFA de O x 00000005) 0 x 00000004 O x FFFFFFFC de O x 00000003) 0 x 00000000 O x FFFFFFF 8 de O x 00000007) Toute demande de formation de ligature amène un drapeau unique de sous-particularité à être placé pour la définition demandée avec la priorité la plus élevée. Ici aussi, il existerait trois sous-tables: l'une o les sub Feature Flags sont mis à Ox OO 000001 pour les ligatures obligatoires, une o les sub Feature Flags sont mis à Ox 00000002 pour les ligatures obligatoires et normales, et une o les sub Feature Flags sont mis à Ox 000000004 pour les ligatures obligatoires, normales et optionnelles Les sous-tables normales et optionnelles seraient plus complexes (puisque la table normale serait une duplication des ligatures de la sous-table obligatoire et que la table optionnelle inclurait une duplication des ligatures de la sous- table optionnelle), mais une sous-table au plus serait appliquée au réseau de glyphes, ce qui prendrait moins de temps qu'appliquer trois sous-tables. Cette table de particularités pourrait être utilisée avec les sous- tables venant du premier exemple en changeant leur sub Feature Flags en Ox 00000007, Ox 00000006 et Ox 00000004 respectivement. Les bits du champ de couverture possèdent l'interprétation suivante Valeur de Interprétation masque Ox 8000 Si elle est mise à 1, cette sous-table ne Ox 4000 Ox 3 FF 8 Ox 0007 devrait être appliquée qu'à un texte vertical Si elle est mise à zéro, cette sous-table ne devrait être appliquée qu'à un texte horizontal. Si elle est mise à 1, cette sous-table devrait traiter le réseau de glyphes en ordre descendant Si elle est mise à zéro, cette sous-table devrait traiter le réseau de glyphes en ordre ascendant. Ces bits sont réservés et devraient être mis à zéro. Ces bits spécifient le type de sous-table. (voir ci-dessous). Le type de sous-table spécifie le type de transformation atomique que la sous-table décrit Les valeurs définies sont: Type de Description sous-table *0 Nouvel agencement indien. 1 Substitution de glyphes contextuelle. 2 Substitution de ligature. 0 3 (Non défini) 4 Substitution de glyphes non contextuelle. L'en-tête de sous-table commun est suivi par un sous-en-tête dont le format dépend du type de sous- table. La sous-table de nouvel agencement indien est une table d'état: Type Nom Description State Header st Header En-tête de table d'état de nouvel agencement indien. Les actions d'une sous-table de nouvel agencement indien n'utilisent aucune table par glyphe Les drapeaux spécifiques à la table possèdent le format suivant: Valeur de Interprétation masque Ox 8000 mark First: s'il est mis, faire du clvphe Ox 4000 Ox 2000 Oxl FFO actuel le premier glyphe à agencer de nouveau. s'il est mis, ne pas avancer vers le glyphe suivant afin d'aller vers l'état nouveau. mark Last: s'il est mis, faire du glyphe actuel le dernier glyphe à agencer de nouveau. Ces bits sont réservés et devraient être mis à zéro. Ox OOOF Verbe de nouvel agencement (cf ci-dessous). Une action de nouvel agencement indien spécifie un nouvel agencement de l'ordre d'une plage continue de glyphes dans le réseau de glyphes Les drapeaux mark First et mark Last sont utilisés pour rappeler la position de cette plage dans le réseau de glyphes, et le verbe est utilisé pour spécifier le type de nouvel agencement Les valeurs du premier et du dernier glyphes sont définies avant que le verbe ne soit appliqué La table ci-dessous indique les nouveaux agencements possibles, o A, B, C et D représentent des glyphes individuels et x représente une séquence arbitraire de glyphes: Verb Résultats 00 Aucun changement La sous-table contextuelle est aussi Type Nom State Header st Header de substitution de glyphe une table d'état. Description L'en-tête de table d'état de substitution de glyphe contextuelle. uint 16 substitution Déport de multiplet du Table début de la table d'état vers le début des tables de substitution (voir ci- dessous) Les actions d'une sous-table de substitution de glyphe contextuelle possèdent des drapeaux spécifiques à la table et deux déports vers des tables par glyphe. Type Nom Description uint 16 new State Déport de multiplet du début de la table d'état vers le nouvel état. uint 16 flags Drapeaux spécifiques à la table. uintl 6 mark Offset Déport du début de la table d'état vers la table de substitution pour le glyphe marqué. uint 16 current Offset Déport depuis le début de la table d'état vers la table de substitution pour le glyphe actuel. Le champ de drapeaux spécifique à la table possède l'interprétation suivante: Valeur de Interprétation masque 0 x 8000 set Mark: s'il est mis, faire du glyphe courant le glyphe "marqué". 0 x 4000 S'il est mis, ne pas avancer vers le glyphe suivant aller d'aller à l'état nouveau. Ox 3 FFF Ces bits sont réservés et doivent être mis à zéro. Une substitution contextuelle de glyphe spécifie la substitution d'autres glyphes tant pour le glyphe à la position actuelle du réseau de glyphes que pour un glyphe précédent dans le réseau de glyphes appelé le glyphe "marqué" La substitution est effectuée en utilisant des tables par glyphe appelées des tables de substitution Si le drapeau set Mark est mis, le glyphe actuel devient le glyphe marqué quand les substitutions ont été effectuées. La sous-table de substitution de ligature est également une table stable: Type Nom Description State Header st Header L'en-tête de table d'état de substitution de ligature. uint 16 lig Action Table Déport de multiplet du début de la table d'état vers les tables d'action de ligature (voir ci-dessous). uint 16 Component Table Déport de multiplet du début de la table d'état vers le début des tables de déport de composant (voir ci- dessous). uint 16 ligaturetable Déport de multiplet du début de la table d'état vers le début des tables de ligature (voir ci- dessous). Les actions d'une sous-table de substitution de ligature possèdent un champ de drapeaux spécifiques à la table dont l'interprétation est la suivante: Valeur de Interprétation masque Ox 8000 set Component: si mis, faire du glyphe actuel un glyphe de composant (voir ci- dessous). Ox 4000 si mis, ne pas avancer vers le glyphe suivant avant d'aller au nouvel état. Ox 3 FFF Déport de multiplet de la table d'état vers la liste d'action de ligature, qui est un multiple de 4. La sous-table de substitution de ligature spécifie la substitution d'un glyphe de ligature pour un ensemble de glyphes de composants Si le drapeau set Component est placé, le glyphe actuel est rappelé en tant que composant de la ligature en poussant, sur une pile, son emplacement dans le réseau de glyphes. L'épaisseur de la pile est de seize, ce qui signifie qu'une ligature peut être formée d'un nombre de composants pouvant atteindre seize Si le déport n'est pas nul, il indique une liste d'actions de ligatures de 32 bits La liste d'actions de ligatures doit être alignée en longueur et son format est le suivant. Valeur de Interprétation masque Ox 80000000 dernier: s'il est placé, ceci est la dernière action de la liste. Ox 40000000 mémoriser: s'il est placé, remplacer le glyphe marqué par la ligature (voir ci- dessous). Ox 3 FFFFFFF Déport de mot du début de la table d'état vers la table de décalage de composant. La liste d'actions de ligatures spécifie la manière d'utiliser des glyphes composants pour construire un multiplet décalé dans une table d'index de glyphes de ligatures La table est triée, quant aux racines, par composants, c'est-à-dire en premier lieu par le premier composant, puis par le deuxième composant, et ainsi de suite Par exemple, la figure ci- dessous montre une table de ligatures d'un ensemble fictionnel de ligatures composé de "a", "'b"t ou "ic' suivi de "d"l, te"t ou "fl" suivi de l"gl", lh"l ou "i". Le déport vers la table de ligatures est calculé comme la somme des déports de chaque composant Chaque entrée de la liste d'actions de ligatures contient le déport vers une table par glyphes qui donne le déport du composant correspondant Etant donné un déport de la première ligature dans la table qui commence par un ensemble particulier de composants, la table de déport de composant pour le composant suivant contiendrait des déports relatifs à la première ligature contenant le composant particulier En utilisant la table des ligatures de l'exemple, le déport de "a" serait de 0, le déport de "b" serait de 18, le déport de "c" serait de 36, le déport de "d" serait de " O ", le déport de "e" serait de 6, le déport de "f" serait de 12, le déport de "g" serait de " O ", le déport de "h" serait de 2, et le déport de "i" serait de 4 Ainsi, le déport de "bfh" est 18 + 12 + 2 = 32, et le déport de "aei" est O + 6 + 4 = 10 Ce déport est fixe par rapport au début de la table de ligature Pour produire un déport par rapport au début de la table d'état, l'une des tables de déport de composant a besoin du déport de la table de ligature ajouté à ses valeurs. Lorsque chaque entrée de la liste d'actions est traitée, le composant correspondant est sorti de la pile Si le drapeau de mémoire de l'entrée est effacé, le glyphe de composant est remplacé par l'index de glyphe annulé; si la mémoire du dernier drapeau est placée, le déport accumulé est utilisé pour aller chercher un index de glyphe de la ligature, qui remplace le glyphe de composant Ainsi, une ligature à N composants est formée en remplaçant les glyphes de composants par le glyphe de ligature suivi par N 1 glyphes annulés Lorsque toute la liste d'actions de ligature a été traitée, la position de chaque glyphe de ligature dans le réseau de glyphes est poussée de nouveau sur la pile de composants de façon que les ligatures puissent être utilisées comme composants dans d'autres ligatures. Habituellement, une liste d'actions de ligatures ne forme qu'une seule ligature, de sorte que les drapeaux de mémorisation ne sont placés pour aucune entrée Des ligatures multiples peuvent être formées en plaçant le drapeau de mémoire sur des entrées intermédiaires de la liste d'actions La limite est que la pile de composants ne peut se rappeler que seize composants. On notera que, pour des ligatures simples à deux caractères, il est plus simple d'utiliser une sous- table de substitution contextuelle pour remplacer le premier glyphe par le glyphe de la ligature et l'autre glyphe par le glyphe annulé. La sous-table de substitution de glyphe non contextuelle est une table à consulter qui implante un index unique de glyphe dans un autre index de glyphe: Type Nom Description Lookup Table Table La table de substitution non contextuelle de glyphes. On va maintenant décrire la table de crénage de piste étiquetée "trak". La table de crénage de piste contient une donnée que l'implantation utilise pour effectuer des ajustements à l'espacement entre les caractères Cet effet est semblable à un crénage, mais, dans le crénage de bits, ce ne sont pas les identités de la paire de caractères qui commandent la quantité, mais plutôt la dimension en points et un nombre spécifié de pistes. Pour les dimensions en points et/ou les nombres de pistes qui ne sont pas directement inclus, l'implantation effectuera une interpolation à deux dimensions. Le format d'une table de crénage de piste est le suivant: Type Nom Description fixe version Numéro de version de la table de uintl 6 format uintl 6 horiz Offset uint 16 vert Offset ligne de base (Ox O 0010000 pour la version initiale). format de la table de crénage de piste (mis à 0). Déport depuis le début de la table de crénage de piste vers Track Data pour le texte horizontal (ou O si aucun déport). Déport depuis le début de la table de crénage de piste vers Track Data pour le texte vertical (ou O si le déport est nul). uint 16 (pad word) Toujours présent (et mis à 0). Track Data horiz Data Track Data pour le texte horizontal (éventuel). Track Data vert Data Track Data pour le texte vertical (éventuel). Le format d'une table Track Data (qui doit être aligné en mot long) est le suivant: Type Nom Description uint 16 n Tracks Nombre de pistes séparées incluses dans cette table. uint 16 n Sizes Nombre de dimensions en points incluses dans cette table. uint 32 size Table Offet Déport depuis le début de la table de crénage de piste jusqu'au début de la sous-table de dimensions. Track Table Entry track Tablell Réseau ln Tracksl d'enregistrement de Track Table Entry. fixe size Tablell Réseau ln Sizesl de valeurs de dimensions. Le format d'un Track Table Entry est le suivant: Type Nom Description fixe track Valeur de piste pour cet enregistrement. uint 16 name ID identification, ou HIC dans la table de désignation de cette piste (il s'agit d'une chaîne, par exemple "lâche", "très serrée", etc) uint 16 offset Déport depuis le début de la table de crénage de piste jusqu'aux valeurs de pistage, ou suivi, par dimensions pour cette piste. Les valeurs réelles de pistage, en F Unités, sont mémorisées dans la table comme déport Le processus travaille de la façon suivante: en premier lieu, les Track Table Entries individuelles sont recherchées pour retrouver celle qui correspond à une valeur donnée de piste S'il existe une concordance exacte, la solution est satisfaisante; sinon les deux valeurs adjacentes sont utilisées pour une interpolation Dès lors que ces valeurs sont déterminées, la table de dimensions (à size Table Offset) est recherchée quant à la dimension spécifiée Ici aussi, si une concordance exacte n'est pas trouvée, une interpolation est effectuée Pour la dimension, l'index est calculé; l'index est utilisé pour accéder à la mémoire appropriée de la table de Funités mémorisées à offset. On va maintenant donner un exemple de table de crénage de piste. Il est représenté ci-dessous un exemple d'une table de crénage de piste qui se compose de deux pistes (serrée à 1 et lâche à 1), avec des valeurs spécifiques d'un texte de 12 points et de 24 points. Déport/ Valeur Commentaire longueur 0/4 Ox OO 010000Numéro de version ( 1,0 en format à point fixe). 4/2 o Format O est le seul défini dans cette version. 6/2 12 Déport vers Track Data pour le texte horizontal. 8/2 O Déport vers Track Data pour le texte vertical ( O = aucun). /2 O Remplissage (pour assurer que la table de Track Data suivante est alignée en longs mots). (Le Track Data pour le texte horizontal est le suivant) 12/2 2 Nombre de pistes. 14/2 2 Nombre de dimensions. 16/4 36 Déport vers la sous-table appropriée. (Les deux enregistrements Track Table Entry suivent) /4 Ox FFF 0000 Représentation de point fixe de 1 (première piste). 24/2 25 HIC dans table de désignation pour chaîne "serrée". 26/2 40 Déport vers deux valeurs de pistage par dimension pour cette piste. 28/4 Ox O O 0010000 Représentation de point fixe de + 1 (deuxième piste). 32/2 26 HIC dans table de désignation d'une chaîne "lâche". 34/2 44 Déport vers deux valeurs de pistage par dimension pour cette piste. (La sous-table de dimensions lc'est-à-dire le réseau size Tablel suit) 36/4 Ox OOOC 0000 Représentation de point fixe de 12 points. /4 O x 00180000 Représentation de point fixe de 24 points. (Ici commencent les valeurs de pistage par dimension dont les décalages ont été inclus dans les enregistrements Track Table Entry) 44/2 15 F Unités de pistage serré à 12 points. 46/2 7 F Unités de pistage serré à 24 points. 48/2 50 F Unités de pistage lâche à 12 points. F Unités de pistage lâche à 24 /2 20 points. On va maintenant décrire la table de justification, étiquetée "just" La table de justification contient une information qui commande la manière dont se produit une justification de ligne Cette table est complexe parce qu'il existe de nombreuses options différentes qu'un concepteur de police peut choisir pour commander une justification, y compris les suivantes: Spécification de facteurs séparés de justification pour le côté gauche et le côté droit d'un glyphe quelconque; Spécification d'ensembles différents de facteurs de justification à utiliser dans des cas o la ligne doit se relâcher ainsi que de cas o la ligne doit se resserrer; Spécification de glyphes kashida qui sont des glyphes qui sont utilisés pour relier des glyphes dans des écritures liées (par exemple l'Arabe ou la Romaine cursive); Commande de l'ordre dans lequel des glyphes participent au processus de justification; Choix de certains glyphes comme illimités (c'est-à-dire qu'ils absorbent toujours tout l'espace restant pendant la justification); Désignation contextuelle, à base de table d'état, de comportements de justification d'une manière telle que le glyphe identique puisse se comporter de façon très différente dans des contextes différents On notera ici que les tables d'état commandant ce processus résident en fait dans la table de métamorphose de glyphe, dans un but d'efficacité; et on se référera à la description de cette table pour une information plus complète; et possibilité de défaire des ligatures et de les ramener à leurs éléments composants si une quantité excessive d'espaces blancs est ajouté pendant la justification. L'information de cette table est utilisée par le gestionnaire d'implantation de ligne pour effectuer une justification complexe, à ligne multilingue, d'une manière permettant une typographie aussi correcte que possible. On va maintenant décrire la justification de lignes en utilisant des polices True Type TM. Avant de décrire en détail le format des tables, on décrit le processus d'ensemble de justification de ligne afin d'établir un contexte de la description détaillée de la table On considère une ligne comme une collection de glyphes à chacun desquels sont associés des facteurs situés à sa gauche et à sa droite, qui sont des fractions d'une e f dont le glyphe peut croître ou décroître sur chaque côté Par exemple, une valeur de 2, 5 pour le facteur de croissance sur le côté droit signifie que 2,5 e f d'espace blanc au-plus peuvent être ajoutés sur le côté droit du glyphe. Certains glyphes sont également désignés comme illimités, ce qui signifie qu'ils peuvent absorber tout l'espace disponible sur une ligne. A chaque glyphe d'une ligne est associée une classe de justification, identifiée de façon contextuelle, qui permet à l'ensemble de facteurs utilisés avec ce glyphe de varier à différents emplacements de la ligne Chaque glyphe possède une priorité de justification qui identifie l'étape à laquelle le glyphe commence à participer à une justification. Le processus de justification s'effectue de la façon suivante En premier lieu, on considère l'ensemble de glyphes situé au niveau de priorité de justification le plus élevé sur la ligne Etant donné un intervalle qu'il faut remplir afin de justifier une ligne de texte, les différentes dimensions en points des glyphes sont multipliées par leurs facteurs de gauche et de droite pour parvenir à une distance additionnelle totale à laquelle l'ensemble de glyphes pourrait contribuer, en se rappelant d'exclure les extrémités de lignes En cumulant cette distance, on notera les glyphes (éventuels) qui possèdent l'attribut illimité. Il existe maintenant trois cas parmi lesquels il est possible de choisir Si cette distance additionnelle totale cumulée concorde exactement avec l'intervalle à remplir, on ajoute l'addition à l'ensemble de glyphes et on sort Si la distance additionnelle cumulée est supérieure à l'intervalle à remplir, on détermine le rapport entre l'espace nécessaire et l'espace additionnel total, et on applique cette fraction (qui est inférieure à un) à la distance maximale de chacun des glyphes Si la distance additionnelle cumulée totale n'est pas encore suffisante pour remplir l'espace nécessaire, une poursuite de l'action dépend de la présence ou de l'absence de glyphes illimités dans cet ensemble de priorités S'il existe des glyphes illimités, le nouvel intervalle restant est calculé en soustrayant la distance additionnelle totale de l'intervalle nécessaire, et en proportionnant ensuite ce reste aux glyphes illimités S'il n'existe aucun glyphe illimité, ce niveau de priorité est terminé Le nouvel espace nécessaire (qui est égal à l'ancien espace diminué de la distance qui vient d'être proportionnée) est calculé Ce même algorithme est implanté au niveau de priorité inférieur immédiatement suivant. S'il existe encore un intervalle nécessaire à remplir quand tous les niveaux de priorité ont été traités, (ce qui peut arriver s'il n'existe aucun glyphe illimité à aucun emplacement de la ligne), le niveau de priorité le plus élevé qui est apparu en fait sur la ligne est initialisé afin de remplir proportionnellement le reste de ces glyphes. Le format d'une table de justification est le suivant: Type Nom Description fixe version Numéro de version de la valeur de justification ( O x 00010000 pour la version initiale). uint 16 format Format de table de justification (mis à 0). uint 16 horiz Offset Déport de multiplet du début de la table de justification jusqu'à Justification Header pour le texte horizontal. uint 16 vert Offset Déport de multiplet du début de la table de justification jusqu'à Justification Header pour le texte vertical. Le format d'un Justification Header est le suivant: Type Nom Description uint 16 just Class Table Offset Déport vers la table d'état de classe de justification (voir ci- dessous). uint 16 wdc Table Offset Déport depuis le début de la table de justification jusqu'au début de la sous- table contenant les Width Delta Clusters. uint 16 pc Table Offset Déport depuis le début de la table de justification jusqu'au début de la sous- table de post-compensation (mis à zéro en l'absence de déport). (variable) lookup Table Table à consulter pour l'implantation du glyphe de facteur de justification La table à consulter est un déport de 16 bits depuis le début de la table width Delta Clusters jusqu'au width Delta Cluster spécifique de ce segment. (variable) Width Delta Clusters Width Delta Clusters réel (Format décrit ci-dessus). (variable) postcomp Table Table réelle de post-compensation (éventuelle). Le format de la table d'état de classe de justification est le même que celui des sous-tables contenues dans la table "mort" (cf cette référence): Type Nom Description State Header st Header L'en-tête de table d'état d'insertion de justification. Pour cette table d'état, les entrées de la table d'entrée ne comprennent que le new State et les drapeaux; il n'existe aucun glyph Offset. L'interprétation des drapeaux de cette table d'état est la suivante: Valeur de Interprétation masque 0 x 8000 set Mark: s'il est placé, faire du glyphe actuel le "glyphe marqué" (voir ci-dessous). O x 4000 S'il est placé ne pas avancer au glyphe suivant avant d'aller au nouvel état. 0 x 3 F 80 La classe de justification du "glyphe marqué" est non zéro. 0 x OO 7 F La classe de justification du glyphe actuel est non zéro. Une classe de justification est une valeur à 7 bits Au fur et à mesure qu'une ligne est en cours d'analyse, il est assigné à chaque glyphe une classe de justification, étant donnés son identité et le contexte C'est la combinaison de l'index de glyphe et de la classe de justification qui est utilisée pour consulter des comportements de justification, et non l'index de glyphe seul De cette manière, les différences subtiles du comportement de justification du même glyphe peuvent être prévues Dans les descriptions ci-dessus, ce type est appelé Just Class. Si les champs de classe de justification sont nuls, ils sont utilisés pour placer la classe de justification du glyphe correspondant Si le drapeau set Mark est placé, la position du glyphe actuel dans le réseau de glyphes est rappelée, ce qui en fait le glyphe marqué. Un Width Delta Cluster est une collection d'un ou plus Width Delta Records associés à un glyphe particulier et d'une ou plusieurs classes de justification Il commence sur une limite de mot long et son format est le suivant: Type Nom Description uint 32 count Nombre d'enregistrements uint 32 qui suivent. just Class La classe de justification qui est associée au Width Delta Record suivant (seuls 7 bits de celui-ci sont utilisés, le reste étant utilisé comme remplissage pour garantir un alignement de mot long de l'enregistrement suivant). Width Deltarecord wd Record Le Width Delta Record réel. Un Width Delta Record contient une information concernant les facteurs de justification à gauche et à droite (ou au-dessus et au-dessous) et une donnée concernant une classe de glyphe Son format est le suivant: Type Nom Description fixe before Grow Limit Nombre maximal de e f dont le glyphe peut croître sur le côté gauche ou le côté extérieur. fixe before Shrink Limit Nombre maximal d'e f dont le glyphe peut être réduit sur le côté gauche ou le côté supérieur. fixe after Grow Limit Nombre maximal de e f dont le glyphe peut croître sur le côté droit ou inférieur. fixe after Shrink Limit Nombre maximal de e f dont le glyphe peut décroître sur le côté droit ou inférieur. uint 16 grow Flags Drapeaux commandant le cas de croissance (voir description de bits individuels ci-dessous). uint 16 shrink Flags Drapeaux commandant le cas de décroissance (voir description de bits individuels ci-dessous). Les bits grow Flags et shrink Flags sont interprétés de la façon suivante: Valeur de Interprétation masque Oxl OOO Le glyphe peut prendre un intervalle illimité Ceci signifie que, lorsque c'est le tour du glyphe de participer au processus de justification, lui- même (et tous les autres glyphes de la ligne présentant cet ensemble de bits) absorbe tout l'espace restant. Ox OOOF La priorité de justification du glyphe, selon la liste ci-dessous, est mémorisée dans ces bits. Ox EFFO Ceux-ci doivent être zéro dans la version 1 de cette table Ils sont réservés pour des drapeaux de justification ultérieurs. La priorité de justification d'un glyphe est un nombre compris entre zéro et trois qui commande l'instant o le glyphe entre dans le processus de justification Plus la valeur est basse, plus un glyphe commence tôt à participer Les interprétations par défaut de ces quatre valeurs sont représentées ci- dessous. Priorité de Signification justification o Priorité Kashida Il s'aait de la priorité la plus élevée pendant une justification; tous les glyphes possédant cette priorité sont traités en premier. Priorité d'espace blanc Tous les glyphes d'espaces blancs (identifiés dans la table des propriétés des glyphes) obtiennent cette priorité Ces glyphes sont traités après les Kashida. Priorité entre caractères Cette priorité devrait être utilisée pour tous les glyphes restants; des glyphes possédant cette priorité sont traités après les glyphes d'espace blanc pendant une justification. 3 Priorité nulle Cette priorité devrait être utilisée pour des glyphes qui ne participent à une justification qu'après les priorités précédentes Puisque tous les glyphes possèdent normalement l'une des trois valeurs précédentes, cette valeur n'est normalement pas nécessaire. Cependant, s'il existe des glyphes qui ne participent pas à une justification, et que l'on ne souhaite pas placer leurs facteurs à zéro, il est possible d'assigner en variante à ces glyphes la priorité nulle. On va maintenant donner un exemple d'une table simple de justification. L'exemple qui suit est une police Romaine contenant le répertoire habituel de glyphes Des facteurs de justification du caractère d'espace, et un ensemble différent de facteurs pour d'autres caractères, sont définis Il ne s'agit pas d'une police cursive, de sorte qu'il n'existe aucun glyphe à priorité kashida De plus, aucun glyphe n'est traité spécialement, de sorte qu'une classe de justification zéro est utilisée Pour les buts de cet exemple, le glyphe 2 est le glyphe d'espace, et les glyphes 3 à 275 constituent les glyphes non espace de la police. Déport/ Valeur Commentaire longueur 0/4 Ox 00010000 Le numéro de version est 1 0. 4/2 O Zéro est le format actuel de table de justification. 6/2 10 Déport vers le début de la table de Justification Header horizontale. 8/2 O Déport vers le début de la sous-table Justification Header verticale ( O = aucun). (La sous-table de Justification Header horizontale commence ici) /2 12/2 14/2 (La t 16/2 18/2 /2 22/2 24/2 26/2 (Les 0 Déport vers la table d'état de classe de justification ( O = aucun); ceci signifie que chaque glyphe reçoit le zéro *de just Class). 48 Déport vers le début des width delta clusters. 0 Déport vers le début de la table de post-compensation ( O = aucun). table à consulter commence ici) 2 Format 2 de table à consulter (format de table à segment unique). 6 Dimension d'une Lookup Single ( 2 multiplets pour l'index de glyphe de départ, 2 multiplets pour l'index de glyphe de fin, et 2 multiplets pour le départ). 2 Nombre d'entrées dans la table. 12 Plage de recherche (voir section sur les tables à consulter, ci-dessus). 1 Sélecteur d'entrée (voir section sur les tables à consulter ci-dessus). 0 Décalage de plage. entrées Lookup Segment commencent ici) 28/2 /2 32/2 34/2 36/2 38/2 /2 42/2 44/2 46/2 Ox FFFF Ox FFFF o O o (Les Width Delta Clusters concerne l'espace blanc). 48/4 1 52/4 o O Glyphe de fin dans ce segment. Glyphe de début dans ce segment (espace blanc). Déport depuis le début de la table Width Delta Clusters à ce Width Delta Cluster spécifique. Glyphe de fin dans ce segment. Glyphe de début dans ce segment (non-espace blanc). Déport depuis le début de la table de Width Delta Clusters jusqu'à ce Width Delta Cluster spécifique. Glyphe de fin (segment final spécial). Glyphe de début (segment final spécial). Déport depuis le début de la table de Width Delta Clusters jusqu'à ce Width Delta Cluster spécifique. Remplissage afin de garantir que la table de Width Delta Clusters (qui suit) commence sur une limite de mot long. commencent ici; le premier Compte du nombre de paires de qui suivent. La classe de justification est zéro. 56/4 O x 00008000 Avant limite de croissance. /4 O x FFFFF 500 Avant limite de décroissance. 64/4 O x 00008000 Après limite de croissance. 68/4 O x FFFFF 500 Après limite de décroissance. 72/2 O x 0001 Drapeaux de croissance (priorité d'espace blanc). 74/2 O x 0001 Drapeaux de décroissance (priorité d'espace blanc). (Le deuxième Width Delta Cluster commence ici, pour ce qui n'est pas les espaces blancs). 76/4 1 Compte de paires de Width Delta Record> qui suivent. /4 O La classe de justification est zéro. 84/4 O x 00002500 Avant limite de croissance. 88/4 O x FFFFF 500 Avant limite de décroissance. 92/4 O x 00002500 Après limite de croissance. 96/4 O x FFFFF 500 Après limite de décroissance. 100/2 O x 0002 Drapeaux de croissance (priorité entre caractères). 102/2 O x 0002 Priorité entre caractères. On va maintenant décrire la sous-table de post- compensation. La sous-table de post-compensation permet au concepteur de police de spécifier des comportements spéciaux de justification qui se produisent dans certaines circonstances. Le format de la table de post-compensation est le suivant: Type Nom Description (variable) pc Lookup Table Table à consulter implantant des index de glyphes à des déports de multiplets de 16 bits à partir du début de la sous-table de post-compensation jusqu'à l'enregistrement Postcompensation Action pour ce glyphe Une valeur de zéro signifie qu'il n'existe aucune action. (variable) pc Action Records Enregistrement d'actions dont les déports sont contenus dans la table à consulter précédente. Le format des enregistrements de Postcompensation Action est le suivant: Type Nom Description uint 32 action Count Nombre de action Subrecords dans le réseau suivant. Action Subrecord act Subrecordll Données de Action Subrecord (réseau de action Count de celles-ci). L'enregistrement Action Subrecord doit être aligné sur un mot long et trié par classe d'actions Son format est Type uint 16 uint 16 uint 32 (variable) (variable) le suivant: Nom action Class action Type action Length action Data padding Description Valeur de Just Class associée au Action Subrecord suivant. Quel type d'action de post-compensation. Longueur de cet Action Subrecord (doit être un multiple de 4). Donnée spécifique à action Type. Remplissage: si nécessaire pour garantir qu'action Length est un multiple de 4. Un action Type de O est une action de décomposition Cette action permet aux ligatures d'être décomposées en retour vers leurs éléments composants si la quantité d'espace additionnel entre caractères en cours d'addition par justification est excessive ou insuffisante Le format de la partie action Data du Action Subrecord pour action Type = O est: Type Nom Description fixe lower Limit Si le nombre de e f dont le glyphe est actuellement comprimé est inférieur à (la valeur absolue) de cette valeur limite, effectuer la décomposition. fixe upper Limit Si le nombre de e f dont on augmente le glyphe dépasse cette valeur, effectuer la décomposition. uint 16 order Ordre dans lequel cette ligature est décomposée; utilisable par exemple, pour obtenir que des ligatures peu fréquentes se décomposant avant des ligatures plus fréquentes Les ligatures sur la ligne seront décomposées selon des valeurs croissantes de ce champ d'ordre. uint 16 decomposed Count Nombre d'indices de glyphes à 16 bits qui suivent; la ligature est décomposée en retour vers ces glyphes. uint 16 glyphsll Réseau de glyphes décomposés. Un action Type de 1 est une action inconditionnelle d'addition de glyphes Ceci signifie que, si un espace est ajouté, quel qu'il soit, le glyphe unique spécifié est ajouté après ce glyphe et il est échelonné de façon linéaire dans la direction de ligne afin de remplir l'intervalle Ceci est utile pour de simples barres horizontales kashida Le format de la partie action Data de Action Subrecord pour action Type = 1 est le suivant: Type Nom Description uint 16 add Glyph Glyphe à ajouter si un espacement est ajouté. Un action Type de 2 est une action conditionnelle d'addition de glyphe Il en résulte deux effets En premier lieu, comme pour sa contre-partie additionnelle, il ajoute un glyphe spécifié après ce glyphe Cependant, au lieu de vérifier simplement quant à toute fractions additionnelles d'une e f en cours d'addition, il vérifie la croissance vis-à-vis d'un facteur particulier Si la croissance est inférieure à ce facteur, il agit exactement comme l'action inconditionnelle d'addition de glyphe En revanche, si la croissance est supérieure ou égale à ce facteur, ce glyphe est remplacé par une variante de forme, et l'excès est recalculé sur la base de ce nouveau glyphe. Puis, le glyphe additionné est mis en extension comme précédemment, par ce nouveau facteur Cet action Type est utile, par exemple, pour une substitution d'un nun final Arabe (c'est-à-dire si la largeur est supérieure à une certaine valeur, un glyphe de configuration différente est substitué) Le format de la partie action Data de Action Subrecord pour action Type = 2 est le suivant: Type Nom Description fixe subst Threshhold Nombre de e f o ce alv Dhe uint 16 add Glyph est remplacé par la valeur de subst Glyph, et o le facteur de croissance est recalculé. Glyphe à ajouter comme kashida Si cette valeur est Ox FFFF, aucun glyphe additionnel n'est ajouté On notera qu'une justification devra en général être refaite si un glyphe est ajouté. uint 16 subst Glyph Glyphe à substituer à ce glyphe si le facteur de croissance est au moins subst Threshhold. Une action Type de 3 est une action d'extension de glyphe Il n'effectue aucune insertion de glyphes additionnels Bien plutôt, il applique un facteur d'étirage, ou d'extension, à un glyphe existant au lieu de lui ajouter de l'espace blanc Il existe aucune partie action Data du Action Subrecord pour action Type = 3. Un action Type de 4 spécifie une justification ductile Ceci amène la configuration réelle du glyphe à varier, à l'aide d'un mécanisme de variations de police Le format de la partie action Data du Action Subrecord pour action Type = 4 est le suivant: Type Nom Description ulong variation Axis L'étiquette à 4 multiplets identifiant l'axe ductile Ceci devrait être la valeur hexadécimale de O x 64756374. fixe minimum Limit La valeur la plus faible de l'axe de ductilité qui apporte encore un aspect acceptable. Normalement ceci sera 1 0. fixe no Stretch Value Ceci est la valeur par défaut qui correspond à l'absence de variation d'aspect. Normalement, ceci sera également 1 0. fixe maximum Limit La valeur la plus élevée de l'axe de ductilité qui donne encore un aspect acceptable. On va maintenant donner un exemple d'une table de justification (avec post-compensation et table d'état de classe de justification). On représente ci-dessous une police Arabe pourvue de capacités kashida Le glyphe kashida utilisé est un glyphe numéro 226 Les assignations de glyphes suivants sont implantées: 2 est l'espace blanc, 3 à 225 sont les glyphes classiques, et 226 est le kashida On utilise une table d'état qui assigne une classe de justification 1 au premier glyphe (c'est-à-dire visuellement le plus à gauche) de chaque mot, et une classe de justification O à tous les autres glyphes. En premier lieu, les glyphes à capacité kashida font l'objet d'une identification contextuelle par la table de classe de justification En deuxième lieu, les facteurs réels d'addition d'e f sont spécifiés comme illimités pour ces glyphes Finalement, étant donné ces facteurs illimités de croissance d'e f, la table de compensation prend ces glyphes et ajoute des kashidas d'une largeur appropriée. Déport/ Valeur Commentaire longueur 0/4 Ox OOO 10000 Le numéro de version est 1 0. 4/2 O O est le format actuel de table de justification. 6/2 10 Déport vers le début d'une sous-table de Justification Header horizontal. 8/2 O Déport vers le début d'une sous-table de Justification Header vertical (O = aucun). (La sous-table commence ici) de Justification Header horizontal /2 12/2 14/2 (La 16/2 18/2 /2 22/2 24/2 26/2 (Les 28/2 30/2 32/2 34/2 168 Déport vers la table d'état de classe de justification. 48 Déport vers le début de width delta clusters. 128 Déport vers le début de la table de post-compensation. donnée à consulter commence ici) 2 Format 2 de table à consulter (format de table à segment unique). 6 Dimension d'un Lookup Single ( 2 multiplets pour l'index de glyphe de début, 2 multiplets pour l'index de glyphe de fin, et 2 multiplets pour le déport). 4 Nombre d'entrées de la table. 24 Plage de recherche (voir section sur les tables à consulter, ci-dessus). 2 Sélecteur d'entrée (voir section sur les tables à consulter, ci-dessus). 0 Décalage de plage. entrées Lookup Segment commencent ici) 2 Glyphe de fin dans ce segment. 2 Glyphe de début dans ce segment (espace blanc). 0 Déport depuis le début de la table de Width Delta Clusters jusqu'à ce Width Delta Cluster spécifique. 226 Glyphe de fin de ce segment. 36/2 3 Glyphe de début de ce segment (non-espace blanc). 38/2 28 Déport depuis le début de la table de Width Delta Clusters jusqu'à ce Width Delta Cluster spécifique. /2 Ox FFFF Glyphe de fin (segment final spécial). 42/2 Ox FFFF Glyphe de début (segment final spécial). 44/2 O Déport depuis le début de la table de Width Delta Clusters jusqu'à ce Width Delta Cluster spécifique. 46/2 O Remplissage pour garantir que la table de Width Delta Clusters (qui suit) commence à une limite de mot long. (Les Width Delta Clusters commencent ici; le premier concerne l'espace blanc) 48/4 1 Compte de nombres de paires Width Delta Record> qui suivent. 52/4 O La classe de justification est zéro. 56/4 O x 00008000 Avant limite de croissance. /4 Ox FFFFF 500 Avant limite de décroissance. 64/4 O x 00008000 Après limite de croissance. 68/4 Ox FFFFF 500 Après limite de décroissance. 72/2 Ox OO 01 Drapeaux de croissance (priorité d'espace blanc). 74/2 Ox OO 01 Drapeaux de décroissance (priorité d'espace blanc). (Le deuxième Width Delta Cluster commence ici, pour les éléments autres que espace blanc) 76/4 2 Compte de nombres de paires Width Delta Record> qui suivent. /4 O Classe de justification est zéro. 84/4 O x 00002500 Avant limite de croissance. 88/4 O x FFFFF 500 Avant limite de décroissance. 92/4 O x 00002500 Après limite de croissance. 96/4 O x FFFFF 500 Après limite de décroissance. 100/2 O x 0002 Drapeaux de croissance (priorité entre caractères). 102/2 O x 0002 Drapeaux de décroissance (priorité entre caractères). 104/4 1 Valeur Just Class signifiant un glyphe identifié comme adapté à recevoir un kashida. 108/4 O x 00002500 Avant limite de croissance. 112/4 O x FFFFF 500 Avant limite de décroissance. 116/4 O x 00002500 Après limite de croissance. 120/4 O x FFFFF 500 Après limite de décroissance. 124/2 O x 1000 Drapeaux de croissance (priorité kashida, potentiel illimité de croissance: ceci est normal pour des glyphes kashida). 126/2 O x 0002 Drapeaux de décroissance (priorité entre caractères). (La sous-table de post-compensation commence ici On note que l'on se trouve déjà à un alignement de mot long, de sorte qu'aucun remplissage additionnel n'est nécessaire) 128/2 2 La table à consulter est de format 2 (format à segment unique). 130/2 6 Dimension d'un Lookup Segment ( 2 multiplets pour l'index de 132/2 134/2 136/2 138/2 (Le single /2 142/2 144/2 146/2 148/2 /2 (Les enregi glyphe de début, 2 multiplets pour l'index de glyphe de fin, et 2 multiplets pour le déport vers l'enregistrement Postcompensation Action de cette classe). 1 Nombre d'entrées de la table. 6 Plage de recherche (voir section sur des tables à consulter, ci-dessus). O Sélecteur d'entrée (voir section sur les tables à consulter ci-dessus). 0 Décalage de plage. lookup segment est ici) 226 Dernier glyphe de toute la police. 2 Glyphe de début de toute la police. 24 Déport depuis le début de la sous-table de postcomp jusqu'à ce actionrecord. Ox FFFF Glyphe de fin (segment spécial final). Ox FFFF Glyphe de début (segment final spécial). 0 Déport depuis le début de la sous-table de post-compensation jusqu'à ce action record. Lstrements Postcompensation Action commencent Nombre de Action Subrecords qui suivent. (Action Subrecord suit) ici) 152/4 1 156/2 1 Valeur de Just Class associée au Action Subrecord suivant. 158/2 1 Le action Type est une addition inconditionnelle de glyphe. 160/4 12 La longueur de ce Action Subrecord. 164/2 226 Le glyphe à ajouter (action Data) est le glyphe kashida. 166/2 O Remplissage pour garantir l'alignement de mot long. (La table d'état de classe de justification commence ici) 168/2 4 Le state Size est 4 Ceci reflète les trois classes fixes (fin de texte, hors limites et glyphe annulé) et une classe que l'on ajoute (lettre). /2 8 Déport depuis le début de la table d'état jusqu'à la table de classe. 172/2 236 Déport depuis le début de la table d'état jusqu'au réseau d'état. 174/2 248 Déport depuis le début de la table d'état jusqu'à la table d'entrée. (La table de classe commence ici) 176/2 3 Premier glyphe que l'onimplante. 178/2 223 Compte (va jusqu'à glyphe 225). /223 Ox O 10101 223 multiplets contenant chacun la valeur 1 Ceux- ci constituent les classes de justification des glyphes 3 à 225. 403/1 O Remplissage pour ramener à un alignement de mots. (Le réseau d'état commence ici) 404/4 0,0,0,1 L'état initial Ceci indique que l'on utilise l'entrée NO O de table entrée pour les classes de fin de texte, les hors limites et le glyphe annulé, et que l'on utilise la l'entrée N'1 de table d'entrée pour la lettre de classe. 408/4 0,0,0,1 L'état non lettre Ceci indique la même chose que l'entrée précédente de réseau d'état. 412/4 0,0,2,2 L'état lettre Ceci indique que l'on utilise l'entrée No O de table d'entrée pour les classes de fin de texte et hors limites, et que l'on utilise l'entrée N 02 de table d'entrée pour les classes à glyphe annulé et à lettre. (La table d'entrée commence ici) 416/2 240 L'entrée N'0 de la table d'entrée nous amène vers l'état non lettre. 418/2 O L'entrée N'0 de la table d'entrée n'affecte pas la classe de justification. 420/2 244 L'entrée N'1 de table d'entrée nous amène à l'état lettre. 422/2 Ox O 001 L'entrée N'1 de table d'entrée place à 1 la classe de justification du glyphe actuel. 424/2 244 L'entrée N 2 de table d'entrée nous amène à l'état lettre. 426/2 O L'entrée N 2 de table d'entrée n'affecte pas la classe de justification. On va maintenant décrire des extensions de la table de crénage, étiqueté "kern". Un format 1 de sous-table de crénage contient une table d'état qui permet un crénage contextuel d'un nombre de glyphes pouvant atteindre huit L'en-tête spécifique de format pour une sous-table 1 de format ressemble à ce qui suit: *Type Nom Description State Header st Header L'en-tête de table d'état de uint 16 Les contextuel à la table Valeur de masque crénage contextuel. value Table Déport en multiplets depuis le début de la sous-table jusqu'au début de la table de valeur de crénage (voir ci- dessous). actions d'une sous-table de crénage contiennent un champ de drapeaux spécifiques dont l'interprétation est la suivante: Interprétation 0 x 8000 pousser: s'il est placé, pousser ce glyphe sur la pile de crénage. 0 x 4000 S'il est placé, ne pas avancer vers le glyphe suivant avant d'aller au nouvel état. 0 x 3 FFF value Offset: déport de multiplet depuis le début de la sous-table jusqu'à la table de valeur des glyphes sur la pile de crénage. Si le drapeau de poussée est placé, la position du glyphe actuel dans le réseau de glyphes est poussée sur une pile pouvant atteindre huit glyphes, appelée la pile de crénage Si le value Offset est non zéro, il indique une table de valeurs La table de valeurs est une liste de valeurs de crénage en F Unités Chaque valeur fait sortir un glyphe de la pile de crénage et lui applique la valeur de crénage La fin de liste est marquée par une valeur impaire L'interprétation exacte de la valeur est déterminée par le champ de couverture dans l'en-tête de sous-table. REVENDICATIONS 1 Système d'ordinateur ( 100) destiné à restituer un texte, caractérisé en ce qu'il comprend: un moyen d'entrée ( 122, 123) pour entrer un caractère dans ledit système d'ordinateur ( 100); un générateur de codes de caractères couplé audit moyen d'entrée ( 122, 123) pour engendrer un code de caractère correspondant audit caractère; un moyen de mémoire ( 104, 106, 107) pour mémoriser une police de caractères comprenant une table de police pourvue d'une série d'index de glyphes correspondant à une série de glyphes différents dans laquelle ledit caractère est pourvu d'une série d'index différents de glyphes pour ladite police; un processeur ( 102) d'implantation dudit code de caractères sur l'un desdits index de glyphes en fonction de ladite table de police, ledit processeur ( 102) traitant aussi l'un desdits index de glyphes d'une manière telle que l'aspect visuel d'un glyphe correspondant à l'un desdits index de glyphes est modifié; un moyen de sortie ( 121, 124) pour sortir ledit glyphe correspondant à l'un desdits index de glyphes. 2 Système d'ordinateur ( 100) selon la revendication 1, caractérisé en ce qu'il comprend un moyen de corrélation entre ledit glyphe et ledit code de caractère, dès lors que ledit glyphe a été sorti par ledit moyen de sortie ( 121, 124). 3 Système d'ordinateur ( 100) selon la revendication 2, caractérisé en ce que au moins un emplacement prévu pour un caret à l'intérieur dudit glyphe est déterminé par une information mémorisée ( 104, 106, 107) dans ladite table de police. 4 Système d'ordinateur ( 100) selon la revendication 1, caractérisé en ce que ledit processeur ( 102) traite l'un desdits index de glyphes en fonction d'un contexte dans lequel est utilisé ledit caractère. Système d'ordinateur ( 100) selon la revendication 4, caractérisé en ce que ledit processeur ( 102) traite l'un desdits index de glyphes en fonction d'une machine d'état fini. 6 Système d'ordinateur ( 100) selon la revendication 5, caractérisé en ce que ledit processeur ( 102) traite l'un desdits index de glyphes d'une manière telle que ledit glyphe est créné selon deux axes. 7 Système d'ordinateur ( 100) selon la revendication 5, caractérisé en ce que ledit processeur ( 102) traite l'un desdits index de glyphes d'une manière telle que ledit glyphe est créné en correspondance avec ledit contexte dudit caractère. 8 Système d'ordinateur ( 100) selon la revendication 5, caractérisé en ce que ledit processeur ( 102) traite l'un desdits index de glyphes d'une manière telle que ledit glyphe est créné en fonction de ladite machine d'état fini. 9 Système d'ordinateur ( 100) selon la revendication 5, caractérisé en ce que ledit processeur ( 102) traite l'un desdits index de glyphes d'une manière telle que ledit glyphe est justifié en fonction de l'information mémorisée ( 104, 106, 107) dans ladite table de police. 10 Système d'ordinateur ( 100) selon la revendication 9, caractérisé en ce que ledit processeur ( 102) traite l'un desdits index de glyphes d'une manière telle que ledit aspect dudit glyphe est modifié en fonction de l'information de ladite table de police, afin de compenser un espace dans lequel ledit glyphe est justifié. 11 Système d'ordinateur ( 100) selon la revendication 10, caractérisé en ce que ledit processeur ( 102) traite l'un desdits index de glyphes d'une manière telle que ledit espace peut être ajouté/soustrait de façon disproportionnée sur l'un et l'autre des côtés dudit glyphe lorsque ledit glyphe est justifié. 12 Système d'ordinateur ( 100) selon la revendication 5, caractérisé en ce que ledit processeur ( 102) traite l'un desdits index de glyphes d'une manière telle que ledit glyphe est positionné en fonction d'une ligne de base spécifiée par une information mémorisée ( 104, 106, 107) dans ladite table de police. 13 Système d'ordinateur ( 100) selon la revendication 5, caractérisé en ce que ledit processeur ( 102) permet une commande continue de ladite ligne de texte, ladite commande continue incluant un cadrage, une justification, un crénage et une ponctuation suspendue. 14 Système d'ordinateur ( 100) selon la revendication 5, caractérisé en ce que ledit processeur ( 102) traite l'un des index de glyphes selon des propriétés directionnelles par l'intermédiaire d'une deuxième machine d'état fini. Système d'ordinateur ( 100) selon la revendication 5, caractérisé en ce que il comprend en outre des parties de ladite table de police qui sont invoquées dynamiquement par ledit processeur ( 102). 16 Procédé de commande des aspects d'un texte, mis en oeuvre dans un système d'ordinateur pourvu d'un moyen d'entrée pour entrer un texte, d'un processeur, et d'un moyen de sortie dudit texte, caractérisé en ce qu'il comprend les étapes consistant à: spécifier un caractère à entrer dans ledit système d'ordinateur par ledit moyen d'entrée; engendrer un code de caractère correspondant audit caractère; implanter ledit code de caractère à un index de glyphes en fonction d'une table de police, ledit index de glyphes spécifiant un glyphe; traiter ledit index de glyphe d'une manière telle que l'aspect visuel dudit glyphe correspondant audit index de glyphe est modifié; sortir ledit glyphe correspondant audit index de glyphes. 17 Procédé selon la revendication 16, caractérisé en ce qu'il comprend en outre l'étape consistant à corréler ledit glyphe audit code de caractère dès lors que ledit glyphe a été sorti. 18 Procédé selon la revendication 17, caractérisé en ce que un emplacement situé à l'intérieur dudit glyphe est déterminé par une information mémorisée dans ladite table de police. 19 Procédé selon la revendication 18, caractérisé en ce que ledit traitement dépend d'un contexte dans lequel le caractère est en cours d'utilisation. Procédé selon la revendication 19, caractérisé en ce que ledit traitement est accompli en fonction d'une machine d'état fini. 21 Procédé selon la revendication 20, caractérisé en ce que ledit procédé crène ledit glyphe selon deux axes. 22 Procédé selon la revendication 20, caractérisé en ce que ledit traitement crène ledit glyphe en fonction dudit contexte dudit caractère. 23 Procédé selon la revendication 20, caractérisé en ce que ledit traitement crène ledit glyphe en fonction de ladite machine d'état fini. 24 Procédé selon la revendication 20, caractérisé en ce que ledit traitement justifie ledit glyphe en fonction d'une information mémorisée dans ladite table de police. Procédé selon la revendication 24, caractérisé en ce que ledit traitement compense un espace, lorsque ledit glyphe est justifié, en modifiant ledit aspect dudit glyphe en fonction d'une information de ladite table de police. 26 Procédé selon la revendication 25, caractérisé en ce que ledit traitement ajoute/soustrait un espace sur l'un et l'autre des côtés dudit glyphe afin de justifier ledit glyphe. 27 Le procédé selon la revendication 20, caractérisé en ce que ledit traitement sort ledit glyphe en fonction d'une ligne de base spécifiée par une information mémorisée dans ladite table de police. 28 Procédé selon la revendication 27, caractérisé en ce que ledit traitement réalise une commande continue d'une ligne de texte, ladite commande continue incluant un cadrage, une justification, un crénage et une ponctuation à hauteur d'indices. 29 Procédé selon la revendication 20, caractérisé en ce qu'il comprend en outre l'étape consistant à invoquer dynamiquement des parties de ladite table de police.