.ps (extension)

.ps (extension)

PostScript

Logo Adobe PostScript 3

Apparu en 1982
Auteur John Warnock & Chuck Geschke
Développeur Adobe Systems
Paradigme multiparadigme : orienté pile, procédurale
Typage dynamic, strong
Influencé par Forth
A influencé PDF
Implémentations Adobe PostScript, TrueImage, Ghostscript
PostScript

Extension de fichier

.ps

Type MIME

application/postscript

Développé par

Adobe Systems

Type de format

format de fichier d'impression

Origine de

Encapsulated PostScript

Le PostScript est un langage informatique spécialisé dans la description de pages, mis au point par Adobe. Il repose sur des formulations vectorielles de la plupart de ses éléments. Il sait aussi traiter les images matricielles (en mode point).

Ce langage inter-plateformes permet d'obtenir un fichier unique comportant tous les éléments décrivant la page (textes, images, polices, couleurs, etc.).

PostScript est devenu pratiquement un standard, la plupart des imprimantes lasers haut de gamme peuvent traiter directement le format PostScript. Sur les autres ou les plus anciennes, il fallait utiliser un filtre logiciel en entrée pour convertir le langage PostScript au format raster compréhensible par les anciennes imprimantes).

D'autres rejetons de PostScript sont

Sommaire

Le langage

Postscript est un langage complet, qui permet le codage de tout algorithme. Bien qu'il soit tout à fait possible d'écrire directement de tels programmes, ils sont en général fabriqués par d'autres programmes, des pilotes d'impression par exemple.

Le Postscript est indissociable de l'environnement dans lequel il sera exécuté. Étant donné le caractère totalement dynamique de ce langage, il sera en fait interprété.

L'interpréteur est composé d'une pile, et d'un ou plusieurs dictionnaires. La pile sert de stockage temporaire pour les paramètres des fonctions, puis pour leurs résultats. Les dictionnaires permettent le stockage des variables, ainsi que du code des fonctions.

Un programme PostScript est composé d'une séquence de mots séparés par des espaces, tabulation (TAB), retour chariot (CR), avance de ligne (LF), ou commentaires. L'interpréteur analyse chaque mot du programme PostScript séquentiellement en fonctionnant comme un calculateur en notation polonaise inverse, c’est-à-dire que chaque mot est évalué, puis le (ou les) résultat de cette évaluation est placé au sommet de la pile, et ainsi de suite.

Exemple, pour effectuer le calcul numérique simple b2 - 4ac, cela pourra se coder :

b b mul 4 a mul c mul sub

PostScript supporte cinq types de mots :

  • constante numérique entière ou réelle : 123 ou 3.14157, l’évaluation ajoute la valeur numérique au sommet de la pile ;
  • constante chaîne : ce sont des tableaux de caractères encadrés par des parenthèses, ex (Abc) représente la chaîne « Abc » ;
  • référence à un nom : /a représente le nom « a », qui pourra permettre de nommer une variable ou une fonction ; la référence est ajoutée au sommet de la pile ;
  • nom : ce peut être le nom d'une procédure prédéfinie ou créée, d'une variable, d'un dictionnaire ; le nom est cherché dans les dictionnaires actifs, puis si c’est une valeur, elle est placée sur la pile, et si c’est une fonction, elle est appelée (exécutée) ; l'évaluation d’une fonction pourrait utiliser les valeurs au sommet de la pile et les remplacer par les éventuels résultats ;
  • constructeur : quatre constructeurs permettent de créer des structures de données de taille variable, ils sont composés de caractères appariés suivants, qui délimitent le début et la fin de la structure :
    • [ et ] : des tableaux quelconques.
    • < et > : des tableaux d’octets codés en hexadécimal.
    • << et >> : des dictionnaires.
    • { et } : du code exécutable.
La première partie du constructeur place une marque sur la pile, puis les éléments de cette structure sont placés successivement sur la pile, enfin la partie droite du constructeur récupère tous les éléments depuis la dernière marque dans la pile et « fabrique » la structure correspondante et la met sur la pile.

Les dictionnaires sont des tableaux avec seulement deux colonnes.

  • la première colonne peut contenir une valeur utilisée comme index, ou une référence à un nom ou à tout autre objet, cependant le nom ou la valeur est unique dans cette colonne pour toutes les lignes du tableau ;
  • et la seconde, une valeur quelconque associée à ce nom ou cette valeur.
  • avec cette propriété, un dictionnaire fonctionne donc comme un tableau à une colonne, mais dont l'index peut être de valeur ou de type quelconque, et n'est pas restreinte à un simple intervalle d'entiers.

Le dictionnaire est géré comme une table de hachage (grâce à une fonction de hachage prédéfinie par le langage lui-même) et on peut en prédéfinir lors de sa création la taille initiale en fonction du nombre de couples nom-valeur qu'on veut y stocker, pour limiter les collisions (cependant PostScript sait redimensionner dynamiquement un dictionnaire en fonction du nombre de collisions sur les noms, ou de son taux de remplissage). Les dictionnaires de PostScript servent principalement (mais pas seulement) à définir (dynamiquement) la portée des variables nommées et référencées ailleurs dans le langage.

Parmi les opérateurs prédéfinis, le plus important est def, il permet d'ajouter une association nom-valeur dans le dictionnaire courant, ce qui permet de définir de nouvelles variables avec leur valeur, ou de modifier leur valeur, et de définir ou redéfinir des fonctions. On constate donc, qu’en Postscript, le code exécutable est une donnée, presque comme les autres, et peut être créé à la volée, modifié.

Exemples :

  • /pi 3.14157 def : définit la variable de nom pi, avec la valeur numérique 3,14157 ;
  • /compteur compteur 1 add def : ajoute 1 à la variable nommée compteur.
  • /incremente {1 add} def : définit la fonction incremente, qui ajoute 1 au paramètre
  • /compteur compteur incremente def : recherche la valeur associée à la variable nommée "compteur" dans le dictionnaire actuel et remplace ce nom par sa valeur, puis cette valeur est incrémentée grâce à la fonction définie au-dessus, et le résultat est stocké (par la fonction "def") dans la variable nommée par "/compteur" dans le dictionnaire actuel. Autrement dit la variable nommée "compteur" dans la portée d'un dictionnaires (en commençant la recherche par le dictionnaire actuel) sera incrémentée.

Dans le dernier exemple ci-dessus, rien n'indique que la variable nommée "compteur" sera la même que celle dont on a extrait la valeur. En effet "def" sert à stocker une association nom-valeur uniquement dans le dictionnaire actuel, et aucun des autres dictionnaires dans la pile de portée. Hors, la lecture de la variable compteur (la seconde référence dans le code ci-dessus) peut retourner la valeur d'une variable trouvée dans autre dictionnaire que le dictionnaire actuel (ou produire une exception à l'exécution si aucun des dictionnaires dans la pile de portée ne contient une variable de ce nom) : dans ce cas, une nouvelle variable sera ajoutée par "def" dans le dictionnaire actuel, sans modifier la variable d'origine où elle a été trouvée et qui conservera donc sa valeur; cependant tant que le dictionnaire courant sera actif, la nouvelle variable masquera l'ancienne. Ce dispositif permet donc de gérer des variables locales autrement que par une position relative dans la pile.

PostScript peut différencier les références à une variable (par son nom indiqué après un "/") et celles à sa valeur. Cependant la référence n'est résolue dans aucune dictionnaire de portée tant qu'on ne l'a pas associée à un dictionnaire pour la rechercher. Quand un nom est utilisé sans "/" initial, il est immédiatement recherché lors de la compilation de la fonction dans les dictionnaires de portée actifs (en commençant par le dictionnaire courant lors de la compilation et non celui qui sera actif à l'exécution de la fonction), alors le nom de la variable est remplacé à l'exécution dans la pile par la valeur associée à ce nom dans le dictionnaire où le nom a été trouvé.

Aussi, pour créer une référence complète à une variable bien définie et non sa valeur ou une autre variable de même nom dans un autre dictionnaire, on doit indiquer non seulement le nom de cette variable, mais aussi une référence au dictionnaire qui la contient et où elle doit être recherchée. Si on ne référence pas le dictionnaire (par exemple en ne préfixant pas par un /), la résolution du nom est dynamique et peut donc référencer des variables différentes en fonction du contexte d'exécution.

Postcript définit donc deux contextes distincts d'utilisation d'une référence à une variable:

  • dans le contexte de compilation d'une définition de fonction, la référence trouvée dans le dictionnaire courant (au moment de la compilation) est résolue immédiatement, mais la valeur n'est pas immédiatement déréférencée; au lieu de cela, la référence est empilée et sera stockée ensuite dans le code au moment où la fonction sera effectivement définie.
  • puis lorsque le code de la fonction est exécutée, toute référence de variable empilée s'exécute en la remplaçant dans par la valeur de la variable indépendamment du dictionnaire courant.

Ce comportement pour le déréferencement d'une variable (accès en lecture) est donc très différent de celui du stockage d'une variable avec def qui se fait toujours selon le dictionnaire courant au seul moment de l'exécution.

Opérateurs

tout pop élimine l'élément de la pile
tout1 tout2 exch tout2 tout1 échange les deux éléments
nombre1 nombre2 add somme renvoie nombre1 plus nombre2
nombre1 nombre2 div quotient renvoie nombre1 divisé nombre2
entier1 entier2 idiv quotient renvoie entier1 divisé entier2

Implémentation

PostScript est sous licence de la société Adobe. Néanmoins il existe un interpréteur PostScript libre, Ghostscript.

Voir aussi

Articles connexes

  • Encapsulated PostScript (EPS): Format d'images en Postscript.
  • Ghostscript: Interpréteur PostScript et PDF, libre, toutes plates-formes & ses interfaces graphiques : GSView, etc.
  • PDF: Portable Document Format
  • PPD: Printer Postscript Description, fichier de description des caractéristiques d'une imprimante Postscript.
  • TeX
  • LaTeX
  • PCL
  • XPS : format XML de description de pages développé par Microsoft.
  • Forth : langage de programmation basé sur les mêmes principes (pile, dictionnaire, notation polonaise inverse...).

Liens et documents externes

  • Portail de l’informatique Portail de l’informatique
Ce document provient de « PostScript ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article .ps (extension) de Wikipédia en français (auteurs)

Игры ⚽ Нужен реферат?

Regardez d'autres dictionnaires:

  • Extension Algébrique — En mathématiques et plus particulièrement en algèbre, une extension algébrique L sur un corps K est une extension de corps dans laquelle tous les éléments sont algébriques sur K c’est à dire sont racines d un polynôme non nul à coefficients dans… …   Wikipédia en Français

  • Extension algebrique — Extension algébrique En mathématiques et plus particulièrement en algèbre, une extension algébrique L sur un corps K est une extension de corps dans laquelle tous les éléments sont algébriques sur K c’est à dire sont racines d un polynôme non nul …   Wikipédia en Français

  • extension — [ ɛkstɑ̃sjɔ̃ ] n. f. • 1361; bas lat. extensio, de extendere « étendre » 1 ♦ Didact. Action de se développer dans le sens de la longueur; son résultat. « Une matière ductile qui par son extension devient un filet herbacé » (Buffon). ⇒ allongement …   Encyclopédie Universelle

  • Extension De Galois — En mathématiques, une extension de Galois (parfois nommée extension galoisienne) est une extension de corps finie normale séparable. L ensemble des automorphismes de l extension possède une structure de groupe appelé groupe de Galois. Cette… …   Wikipédia en Français

  • Extension de galois — En mathématiques, une extension de Galois (parfois nommée extension galoisienne) est une extension de corps finie normale séparable. L ensemble des automorphismes de l extension possède une structure de groupe appelé groupe de Galois. Cette… …   Wikipédia en Français

  • Extension galoisienne — Extension de Galois En mathématiques, une extension de Galois (parfois nommée extension galoisienne) est une extension de corps finie normale séparable. L ensemble des automorphismes de l extension possède une structure de groupe appelé groupe de …   Wikipédia en Français

  • Extension De Corps — En mathématiques, plus particulièrement en algèbre, l extension d un corps K est un corps L qui contient K comme sous corps. Par exemple, , le corps des nombres complexes, est une extension de , le corps des nombres réels, lequel est lui même un… …   Wikipédia en Français

  • Extension Quadratique — En mathématiques, et plus précisément en algèbre dans le cadre de la théorie de Galois, une extension quadratique est une extension de corps de dimension deux. Si K est un corps commutatif, souvent celui des nombres rationnels, alors une… …   Wikipédia en Français

  • Extension Simple — En mathématiques et plus précisément en algèbre dans le cas de la théorie de Galois, une extension de corps L d un corps K est dite simple si et seulement s il existe un élément l de L tel que L est égal à K[l]. Une extension simple est finie si… …   Wikipédia en Français

  • Extension Séparable — Une extension algébrique L d un corps K est dite séparable si et seulement si le polynôme minimal de tout élément de L n admet que des racines simples. Ce critère est une hypothèse nécessaire pour établir un théorème important de la théorie de… …   Wikipédia en Français

  • Extension separable — Extension séparable Une extension algébrique L d un corps K est dite séparable si et seulement si le polynôme minimal de tout élément de L n admet que des racines simples. Ce critère est une hypothèse nécessaire pour établir un théorème important …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”