FR2691819A1 - Appareil et procédé de génération d'implantations textuelles de lignes. - Google Patents

Appareil et procédé de génération d'implantations textuelles de lignes. Download PDF

Info

Publication number
FR2691819A1
FR2691819A1 FR9305583A FR9305583A FR2691819A1 FR 2691819 A1 FR2691819 A1 FR 2691819A1 FR 9305583 A FR9305583 A FR 9305583A FR 9305583 A FR9305583 A FR 9305583A FR 2691819 A1 FR2691819 A1 FR 2691819A1
Authority
FR
France
Prior art keywords
glyph
glyphs
character
processor
indexes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
FR9305583A
Other languages
English (en)
Other versions
FR2691819B1 (fr
Inventor
Opstad David Gene
Mader Eric Richard
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Apple Inc
Original Assignee
Apple Computer Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Apple Computer Inc filed Critical Apple Computer Inc
Publication of FR2691819A1 publication Critical patent/FR2691819A1/fr
Application granted granted Critical
Publication of FR2691819B1 publication Critical patent/FR2691819B1/fr
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
    • G06K7/1404Methods for optical code recognition
    • G06K7/1408Methods for optical code recognition the method being specifically adapted for the type of code
    • G06K7/143Glyph-codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/103Formatting, i.e. changing of presentation of documents
    • G06F40/109Font handling; Temporal or kinetic typography
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/103Formatting, i.e. changing of presentation of documents
    • G06F40/111Mathematical or scientific formatting; Subscripts; Superscripts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/189Automatic justification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K19/00Record carriers for use with machines and with at least a part designed to carry digital markings
    • G06K19/06Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code
    • G06K19/06009Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking
    • G06K19/06037Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking multi-dimensional coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • General Engineering & Computer Science (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Algebra (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Electromagnetism (AREA)
  • Toxicology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Controls And Circuits For Display Device (AREA)

Abstract

L'invention concerne un 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; un générateur de codes de caractères couplé au moyen d'entrée 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. L'invention concerne aussi un procédé correspondant.

Description

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 <index de glyphe,
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 <classes de justification, Width Delta Record > 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 <classes de justification,
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 <classes de justification,
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 <classe de justification,
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.

Claims (23)

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.
FR9305583A 1992-05-12 1993-05-10 Appareil et procede de generation d'implantations textuelles de lignes. Expired - Lifetime FR2691819B1 (fr)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US07/881,789 US5416898A (en) 1992-05-12 1992-05-12 Apparatus and method for generating textual lines layouts

Publications (2)

Publication Number Publication Date
FR2691819A1 true FR2691819A1 (fr) 1993-12-03
FR2691819B1 FR2691819B1 (fr) 1996-10-25

Family

ID=25379219

Family Applications (1)

Application Number Title Priority Date Filing Date
FR9305583A Expired - Lifetime FR2691819B1 (fr) 1992-05-12 1993-05-10 Appareil et procede de generation d'implantations textuelles de lignes.

Country Status (2)

Country Link
US (1) US5416898A (fr)
FR (1) FR2691819B1 (fr)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0661670A2 (fr) * 1994-01-04 1995-07-05 Digital Equipment Corporation Système et méthode de génération de glyphes pour des caractères inconnus
EP0672982A1 (fr) * 1994-03-18 1995-09-20 Hewlett-Packard Company Système d'imprimante avec procédure de police de caractères comprimées permettant d'éparquer de la mémoire

Families Citing this family (97)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5664086A (en) 1993-04-16 1997-09-02 Adobe Systems Incorporated Method and apparatus for generating digital type font, and resulting fonts using generic font and descriptor file
US5598520A (en) * 1994-09-26 1997-01-28 Microsoft Corporation Methods and apparatus for hinting a font for controlling stem width as font size and resolution of output device vary
US5710880A (en) * 1994-11-03 1998-01-20 Microsoft Corporation Method and system for creating a graphic image with geometric descriptors
US5778361A (en) * 1995-09-29 1998-07-07 Microsoft Corporation Method and system for fast indexing and searching of text in compound-word languages
US5828771A (en) * 1995-12-15 1998-10-27 Xerox Corporation Method and article of manufacture for determining whether a scanned image is an original image or fax image
US5926189A (en) * 1996-03-29 1999-07-20 Apple Computer, Inc. Method and apparatus for typographic glyph construction including a glyph server
US5937420A (en) * 1996-07-23 1999-08-10 Adobe Systems Incorporated Pointsize-variable character spacing
JP3317852B2 (ja) * 1996-07-30 2002-08-26 シャープ株式会社 文字生成装置
US5870084A (en) * 1996-11-12 1999-02-09 Thomson Consumer Electronics, Inc. System and method for efficiently storing and quickly retrieving glyphs for large character set languages in a set top box
US6288726B1 (en) * 1997-06-27 2001-09-11 Microsoft Corporation Method for rendering glyphs using a layout services library
US6321243B1 (en) * 1997-06-27 2001-11-20 Microsoft Corporation Laying out a paragraph by defining all the characters as a single text run by substituting, and then positioning the glyphs
EP0902378A3 (fr) * 1997-09-15 2003-07-16 Canon Kabushiki Kaisha Architecture de polices de caractères et outil de création pour la production de textes enrichis
AUPO951397A0 (en) 1997-09-29 1997-10-23 Canon Information Systems Research Australia Pty Ltd A method for digital data compression
US6754875B1 (en) * 1998-11-17 2004-06-22 Adobe Systems Incorporated Applying a computer-implemented test to determine whether to replace adjacent characters in a word with a ligature glyph
IL130688A0 (en) * 1999-02-26 2000-06-01 Ibm Bidirectional network language support
JP4232260B2 (ja) * 1999-03-03 2009-03-04 ソニー株式会社 フォント制御方法及び装置
US7064757B1 (en) * 1999-05-07 2006-06-20 Apple Computer, Inc. Automatic synthesis of font tables for character layout
US6547830B1 (en) * 1999-08-13 2003-04-15 Pixo, Inc. Methods and apparatuses for display and traversing of links in page character array
US6704116B1 (en) * 1999-08-19 2004-03-09 Saad D. Abulhab Method and font for representing Arabic characters, and articles utilizing them
US6563502B1 (en) * 1999-08-19 2003-05-13 Adobe Systems Incorporated Device dependent rendering
US6762770B1 (en) * 1999-10-29 2004-07-13 Apple Computer, Inc. Method and system for the representation of color and other attributes in bitmap fonts
US6803913B1 (en) * 1999-12-01 2004-10-12 Microsoft Corporation Warping text along a curved path
US7071941B2 (en) * 2000-02-12 2006-07-04 Adobe Systems Incorporated Method for calculating CJK emboxes in fonts
US7305617B2 (en) * 2000-02-12 2007-12-04 Adobe Systems Incorporated Method for aligning text to baseline grids and to CJK character grids
JP5465819B2 (ja) 2000-02-12 2014-04-09 アドビ システムズ, インコーポレイテッド テキストグリッド作成ツール
US6771267B1 (en) * 2000-03-22 2004-08-03 Adobe Systems Incorporated Merging digital fonts
JP3795784B2 (ja) * 2000-09-25 2006-07-12 アドビ システムズ, インコーポレイテッド アイコン表示付き文字組空き量設定装置、文字組空き量設定プログラム及びそれを記録した記録媒体
JP4112200B2 (ja) 2000-09-25 2008-07-02 アドビ システムズ, インコーポレイテッド 文字組空き量設定装置、文字組空き量設定プログラム及びそれを記録した記録媒体
US6981209B1 (en) * 2000-09-26 2005-12-27 Microsoft Corporation Automatic layout of vertical flow oriented characters within a defined area
US7296227B2 (en) 2001-02-12 2007-11-13 Adobe Systems Incorporated Determining line leading in accordance with traditional Japanese practices
US7167274B2 (en) * 2001-09-28 2007-01-23 Adobe Systems Incorporated Line leading from an arbitrary point
US7039862B2 (en) 2002-05-10 2006-05-02 Adobe Systems Incorporated Text spacing adjustment
US20040100499A1 (en) * 2002-11-21 2004-05-27 International Business Machines Corporation Apparatus, system and method of configuring desktops based on text label directional properties
EP1431881B1 (fr) * 2002-12-18 2009-07-29 Microsoft Corporation Détermination automatique de caractéristiques appropriées de police de caractères
US7271806B2 (en) * 2002-12-18 2007-09-18 Microsoft Corporation International automatic line height system and method
US20040119714A1 (en) * 2002-12-18 2004-06-24 Microsoft Corporation International automatic font size system and method
US7385606B2 (en) * 2002-12-18 2008-06-10 Microsoft Corporation International font measurement system and method
US7123261B2 (en) * 2002-12-26 2006-10-17 Adobe Systems Incorporated Coordinating grid tracking and mojikumi spacing of Japanese text
US20040125107A1 (en) * 2002-12-26 2004-07-01 Mccully Nathaniel M. Coordinating grid tracking and mojikumi spacing of Japanese text
WO2005001675A2 (fr) * 2003-06-30 2005-01-06 Hyder Syed S Generation algorithmique d'une calligraphie arabe, farsie ou urdu
US7719536B2 (en) * 2004-03-31 2010-05-18 Adobe Systems Incorporated Glyph adjustment in high resolution raster while rendering
US7580039B2 (en) 2004-03-31 2009-08-25 Adobe Systems Incorporated Glyph outline adjustment while rendering
US7639258B1 (en) 2004-03-31 2009-12-29 Adobe Systems Incorporated Winding order test for digital fonts
US20060045344A1 (en) 2004-09-02 2006-03-02 Adi, Llc Handprint recognition test deck
US7594171B2 (en) * 2004-10-01 2009-09-22 Adobe Systems Incorporated Rule-based text layout
US9122655B2 (en) * 2004-11-15 2015-09-01 International Business Machines Corporation Pre-translation testing of bi-directional language display
US20110289398A1 (en) * 2004-11-26 2011-11-24 Philip King Chin Method of displaying data in a table with a fixed header
US11461077B2 (en) * 2004-11-26 2022-10-04 Philip K. Chin Method of displaying data in a table with fixed header
US7623130B1 (en) * 2005-04-25 2009-11-24 Apple Inc. Text rendering with improved command stream operations
ATE373274T1 (de) * 2005-07-01 2007-09-15 Pdflib Gmbh Verfahren zur identifizierung von wörtern in einem elektronischen dokument
US20070008564A1 (en) * 2005-07-06 2007-01-11 Harcourt Assessment, Inc. Image element alignment for printed matter and associated methods
US7712018B2 (en) * 2005-12-12 2010-05-04 Microsoft Corporation Selecting and formatting warped text
US7505040B2 (en) * 2005-12-19 2009-03-17 Microsoft Corporation Composite characters font hinting
US7707515B2 (en) * 2006-01-23 2010-04-27 Microsoft Corporation Digital user interface for inputting Indic scripts
JP2007240848A (ja) * 2006-03-08 2007-09-20 Seiko Epson Corp 表示プログラム、データ構造及び表示装置
US7603351B2 (en) * 2006-04-19 2009-10-13 Apple Inc. Semantic reconstruction
US8201088B2 (en) * 2006-07-25 2012-06-12 Monotype Imaging Inc. Method and apparatus for associating with an electronic document a font subset containing select character forms which are different depending on location
US8077974B2 (en) 2006-07-28 2011-12-13 Hewlett-Packard Development Company, L.P. Compact stylus-based input technique for indic scripts
US20080068383A1 (en) * 2006-09-20 2008-03-20 Adobe Systems Incorporated Rendering and encoding glyphs
GB2454856B (en) * 2006-09-19 2011-08-24 Adobe Systems Inc Image mask generation
US7786994B2 (en) * 2006-10-26 2010-08-31 Microsoft Corporation Determination of unicode points from glyph elements
US8559624B1 (en) 2006-12-29 2013-10-15 Edward J Zajac Cyphometry consisting of ciferglifs, chaotiglyphs and word auras
US20080244511A1 (en) * 2007-03-30 2008-10-02 Microsoft Corporation Developing a writing system analyzer using syntax-directed translation
US7925091B2 (en) * 2007-03-30 2011-04-12 Microsoft Corporation Displaying text of a writing system using syntax-directed translation
US8078965B2 (en) * 2007-05-01 2011-12-13 Microsoft Corporation Automatic switching fonts on multilingual text runs
US9269332B2 (en) 2007-09-04 2016-02-23 Apple Inc. Font preloading
US8122353B2 (en) * 2008-11-07 2012-02-21 Yahoo! Inc. Composing a message in an online textbox using a non-latin script
WO2010094121A1 (fr) * 2009-02-20 2010-08-26 Mohamed Madi Mohsen Clavier pour langues fondées sur les caractères arabes
US9319444B2 (en) 2009-06-22 2016-04-19 Monotype Imaging Inc. Font data streaming
JP4884572B2 (ja) * 2009-10-22 2012-02-29 三菱電機株式会社 車載用表示装置
US8615709B2 (en) 2010-04-29 2013-12-24 Monotype Imaging Inc. Initiating font subsets
CA2856245C (fr) * 2011-11-18 2019-08-13 Store Electronic Systems Procede et systeme d'affichage d'informations de produit sur des etiquettes electroniques
US9734132B1 (en) * 2011-12-20 2017-08-15 Amazon Technologies, Inc. Alignment and reflow of displayed character images
JP5294359B1 (ja) * 2012-03-28 2013-09-18 Necインフロンティア株式会社 イメージデータ生成方法、イメージデータ生成装置及びイメージデータ生成プログラム
JP5975272B2 (ja) * 2012-07-12 2016-08-23 アルパイン株式会社 リスト表示装置、リスト表示方法およびリスト表示用プログラム
US9817615B2 (en) 2012-12-03 2017-11-14 Monotype Imaging Inc. Network based font management for imaging devices
WO2014100582A2 (fr) 2012-12-21 2014-06-26 Monotype Imaging Inc. Prise en charge de polices de caractères en couleurs
US9626337B2 (en) 2013-01-09 2017-04-18 Monotype Imaging Inc. Advanced text editor
US20140320527A1 (en) * 2013-04-30 2014-10-30 Microsoft Corporation Hardware glyph cache
US9317777B2 (en) 2013-10-04 2016-04-19 Monotype Imaging Inc. Analyzing font similarity for presentation
CN103761220B (zh) * 2014-01-20 2017-09-05 深圳市英威诺科技有限公司 一种资讯软件的文字排版技术方法
US9691169B2 (en) 2014-05-29 2017-06-27 Monotype Imaging Inc. Compact font hinting
EP3251112A4 (fr) * 2015-01-30 2018-10-24 E Ink Corporation Commande de police pour des unités d'affichage électro-optiques ainsi qu'appareil et procédés associés
US10115215B2 (en) 2015-04-17 2018-10-30 Monotype Imaging Inc. Pairing fonts for presentation
US10055659B2 (en) 2015-05-04 2018-08-21 King Fahd University Of Petroleum And Minerals Systems and associated methods for arabic handwriting using synthetic extension concatenation and synthesis
US11537262B1 (en) 2015-07-21 2022-12-27 Monotype Imaging Inc. Using attributes for font recommendations
IN2015CH05327A (fr) * 2015-10-05 2015-10-16 Wipro Ltd
US20170249292A1 (en) * 2016-02-29 2017-08-31 Microsoft Technology Licensing, Llc Conditional determination of lookups in glyph processing
US11334750B2 (en) 2017-09-07 2022-05-17 Monotype Imaging Inc. Using attributes for predicting imagery performance
US10909429B2 (en) 2017-09-27 2021-02-02 Monotype Imaging Inc. Using attributes for identifying imagery for selection
WO2019089578A1 (fr) 2017-10-30 2019-05-09 Monotype Imaging Inc. Identification de police à partir d'imagerie
US10699058B2 (en) * 2018-05-10 2020-06-30 Adobe Inc. Digital content design system using baseline units to control arrangement and sizing of digital content
US20210019366A1 (en) * 2019-07-15 2021-01-21 Relativity Oda Llc Text Extraction Heuristics
CN114065701A (zh) * 2020-07-31 2022-02-18 华为技术有限公司 文本显示方法、编译方法及相关设备
US11314925B1 (en) * 2020-10-22 2022-04-26 Saudi Arabian Oil Company Controlling the display of diacritic marks
US11886794B2 (en) 2020-10-23 2024-01-30 Saudi Arabian Oil Company Text scrambling/descrambling
US11734492B2 (en) 2021-03-05 2023-08-22 Saudi Arabian Oil Company Manipulating diacritic marks

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0257401A2 (fr) * 1986-08-08 1988-03-02 Wang Laboratories Inc. Editeur de texte pour des textes multidimensionnels ou multidirectionnels
EP0309090A2 (fr) * 1987-09-22 1989-03-29 International Business Machines Corporation Système de traitement et méthode de données pour l'affichage de symboles graphiques
US4833627A (en) * 1986-08-29 1989-05-23 The Toles Group Computerized typesetting correction system
CA1258135A (fr) * 1986-04-24 1989-08-01 Derek K.W. Smith Structuration de flux de donnees pour caracteres arabes

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60140472A (ja) * 1983-12-28 1985-07-25 Hitachi Ltd 対話型フオント・パタ−ン作成・修正・合成制御装置
US4827254A (en) * 1984-10-30 1989-05-02 Canon Kabushiki Kaisha Display apparatus adapted to display various types of modified characters
US5175811A (en) * 1987-05-20 1992-12-29 Hitachi, Ltd. Font data processor using addresses calculated on the basis of access parameters
US5251293A (en) * 1987-09-02 1993-10-05 Ascii Corporation Character display apparatus
US5257351A (en) * 1987-09-22 1993-10-26 International Business Machines Corporation Selective processing of a data stream based on font format
US5201032A (en) * 1988-06-02 1993-04-06 Ricoh Company, Ltd. Method and apparatus for generating multi-level character
JPH073635B2 (ja) * 1988-12-21 1995-01-18 富士通株式会社 白抜き文字の作成方法
US5289169A (en) * 1991-01-31 1994-02-22 Frame Technology Corporation Composite underlining functions for text processors
US5185818A (en) * 1991-06-05 1993-02-09 Adobe Systems Incorporated Method of substituting fonts and displaying characters

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1258135A (fr) * 1986-04-24 1989-08-01 Derek K.W. Smith Structuration de flux de donnees pour caracteres arabes
EP0257401A2 (fr) * 1986-08-08 1988-03-02 Wang Laboratories Inc. Editeur de texte pour des textes multidimensionnels ou multidirectionnels
US4833627A (en) * 1986-08-29 1989-05-23 The Toles Group Computerized typesetting correction system
EP0309090A2 (fr) * 1987-09-22 1989-03-29 International Business Machines Corporation Système de traitement et méthode de données pour l'affichage de symboles graphiques

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
MARK DAVIES ET AL: "Unicode", 1990 INTERNATIONAL CONFERENCE ON SYSTEMS, MAN AND CYBERNETICS, LOS ANGELES, USA, pages 499 - 504, XP000215394 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0661670A2 (fr) * 1994-01-04 1995-07-05 Digital Equipment Corporation Système et méthode de génération de glyphes pour des caractères inconnus
EP0661670A3 (fr) * 1994-01-04 1996-06-05 Digital Equipment Corp Système et méthode de génération de glyphes pour des caractères inconnus.
EP0672982A1 (fr) * 1994-03-18 1995-09-20 Hewlett-Packard Company Système d'imprimante avec procédure de police de caractères comprimées permettant d'éparquer de la mémoire

Also Published As

Publication number Publication date
FR2691819B1 (fr) 1996-10-25
US5416898A (en) 1995-05-16

Similar Documents

Publication Publication Date Title
FR2691819A1 (fr) Appareil et procédé de génération d&#39;implantations textuelles de lignes.
US20240095297A1 (en) System for comparison and merging of versions in edited websites and interactive applications
AU2021205057B2 (en) System and method for automated conversion of interactive sites and applications to support mobile and other display environments
US6952210B1 (en) Method of generating multiple master typefaces containing kanji characters
EP0020932B1 (fr) Système de traitement et d&#39;affichage de texte
US20010020956A1 (en) Graphic image design
US20150195421A1 (en) Method for water-marking digital books
Powers Beginning Css3
JP2004527933A (ja) 装飾画像をテキスト及び/もしくは絵模様で代替する改善された装置及び方法
AU2019226189A1 (en) A system for comparison and merging of versions in edited websites and interactive applications
JP2004213607A (ja) 日本語テキストの調整用グリッドトラッキング及び文字組間隔
US20070177215A1 (en) Text rendering contrast
FR2757655A1 (fr) Systeme de publication de medias electroniques pour la preparation et/ou l&#39;edition de texte et d&#39;images
Padova Adobe InDesign Interactive Digital Publishing: Tips, Techniques, and Workarounds for Formatting Across Your Devices
CN106021204A (zh) 多重复字字库的制作与使用
Cohen Take Control of PDFpen
Birnbaum et al. Bdinski sbornik encoding guidelines
Mac OS Issue Table of Contents 2006, Number
Hoekwater et al. Electronic Documents 264 Wikipublisher: A Web-based system to make online and print versions of the same content/John Rankin 270 Character encoding/Victor Eijkhout Fonts 278 lxfonts: LATEX slide fonts revived/Claudio Beccari 283 Reshaping Euler: A collaboration with Hermann Zapf/Hans Hagen
Carnes et al. Issue Table of Contents 2006, Number
Adams et al. Designing for Outside the Box
BR112016018388B1 (pt) Dispositivo implementável em um sistema criador de website e método para um sistema criador de website

Legal Events

Date Code Title Description
CD Change of name or company name