<\body> > Le programme a été écrit en C++. Vous devez utiliser et l'utilitaire pour compiler . À l'heure actuelle, le source (situé dans le répertoire ) de est ventilé en plusieurs parties dans différents répertoires : <\itemize> Un jeu de structures de données de base et génériques dans le répertoire . Des ressources standards pour , tels les polices , les langages, encodages et dictionnaires dans le répertoire . Une boîte à outils graphiques (avec sa documentation pas très à jour) dans le répertoire . Le langage d'extension pour dans le répertoire . La partie typographique de l'éditeur dans le répertoire . L'éditeur dans le répertoire . Le serveur dans le répertoire . Toutes ces parties utilisent les structures de données définies dans . La boîte à outils graphiques dépend de en ce qui concerne les polices . Le langage d'extension est indépendant de et de . La partie typographique s'appuie sur toutes les autres parties, sauf . L'éditeur et le serveur utilisent toutes les autres parties. Les données de sont contenues dans le répertoire qui correspond à la distribution sans code source. En gros, on a les types de données suivantes : <\itemize> Données concernant les polices dans (encodage, fichiers, etc...). Données concernant les langages dans (modèles de césure, dictionnaires, etc...). Styles de document dans . Initialisation et autres programmes dans . Le répertoire contient diverses données, telle l'icône d'édition (). représente tous les textes par des arbres (pour un texte donnée, l'arbre correspondant est appelé ). Les noeuds d'un tel arbre sont étiquetés par des standards dont la liste figure dans les fichiers et . Les étiquettes des feuilles des arbres sont des chaînes, qui sont visibles (le texte réel) ou invisibles (telles les longueurs ou les définitions de macros). Le sens du texte et la manière dont il est typographié dépendent essentiellement de l'environnement actif. L'environnement consiste principalement en une table de hachage de type string,tree\>, c'est-à-dire une table de correspondance entre les variables d'environnement et leur valeur dans l'arbre. Le langage actif et la police courante sont des exemples de variables d'environnement ; de nouvelles variables peuvent être définies par l'utilisateur. Dans , toutes les chaînes de texte sont constituées de suites de symboles universels ou spéciaux. Un symbole spécial est un caractère, différent de , '> ou '>. Son sens peut varier en fonction de la police avec laquelle il est utilisé. Un symbole universel est une chaîne commençant par '>, suivi d'une suite arbitraire de caractères différent de , '> ou '>, et se terminant par '>. Le sens des caractères universels ne dépend pas de la police avec laquelle ils sont utilisés, mais des polices différentes peuvent les rendre de façon différente. Le langage d'un texte est capable de fournir une analyse sémantique détaillée d'une phrase du texte. Il peut, au minimum, découper la phrase en (qui sont de plus petites phrases) et donner à l'outil typographique des informations sur les espaces désirées entre les mots et sur les césures à appliquer. Plus tard, il se peut qu'on ajoute d'autres sémantiques aux langages. Par exemple, on pourrait implémenter des correcteurs orthographiques pour les langages naturels et des analyseurs syntaxiques pour les formules mathématiques et les langages de programmation. En gros, l'outil typographique de prend un arbre en entrée et renvoie un cadre en accédant et en modifiant l'environnement typographique. La classe est multifonctionnelle. Sa méthode principale est utilisée pour afficher le cadre sur un périphérique PostScript (soit l'écran, soit une imprimante). Mais elle contient aussi de nombreuses données de composition, tels les cadres logiques et les cadres d'encre, la position des scripts, etc... Les cadres servent aussi à passer d'un curseur physique (position sur l'écran) à un curseur logique (chemin dans l'arbre d'édition). En fait, les cadres sont, eux aussi, organisés sous forme d'arbre, ce qui facilite la conversion. Néanmoins, les routines de conversion peuvent être très complexes du fait de l'expansion des macros et des sauts de ligne et de page. Notez également qu'en plus d'une position horizontale et verticale le curseur physique possède aussi une position horizontale infinitésimale. En gros, cette coordonnée infinitésimale est utilisée dans certains cadres (par exemple pour les changements de couleur) pour ajouter une largeur infinitésimale. Vous trouverez dans le répertoire différentes routines de modification de l'arbre d'édition. Les modifications se déroulent en plusieurs étapes : <\enumerate> Un événement en entrée déclenche une action, comme par exemple , qui tente de modifier l'arbre d'édition. Toutes les modifications que ou ses sous-routines appliquent à l'arbre d'édition sont, en fait, décomposées en sept routines de modification élémentaires : , , , , , et . Avant d'exécuter la modification demandée, la routine de modification élémentaire envoie à toutes les vues du texte une notification concernant la modification. Lors de la notification, chaque vue met à jour plusieurs éléments, comme la position du curseur. Une notification est aussi envoyée à l'outil de composition du texte, car il maintient une liste des paragraphes déjà composés. Lorsque toutes les vues ont reçu notification de la modification, elle est alors réellement exécutée. Chaque action utilisateur, tels la frappe sur une touche ou un clic de souris, est responsable de l'insertion de entre les suites de modifications élémentaires. Lorsqu'une modification est annulée, l'édition revient au point d'annulation précédent. <\initial> <\collection> <\references> <\collection> |?>> > > |?>> > > > > |?>> <\auxiliary> <\collection> <\associate|toc> |math font series||1Introduction> |math font series||2Intern representation of texts> 2.1Text 2.2The language |math font series||3Typesetting texts> |math font series||4Making modifications in texts>