Mystical
(suberic.net)- Mystical est un système de notation qui dessine les programmes PostScript sous forme de structures circulaires ressemblant à des cercles magiques ; la documentation le traite comme un langage, mais il s’agit en réalité plutôt d’une représentation visuelle de PostScript
- Sa structure centrale est le ring : les tableaux exécutables
{}, les tableaux non exécutables[]et les dictionnaires<< >>sont distingués par des bordures, des étoiles, des triangles et des polygones - Le texte et les sigils placés sur le bord d’un ring transforment les opérateurs, variables, mots-clés, chaînes et noms PostScript en symboles ou en formes décorées
mystical.psrend les tableaux, tableaux exécutables et dictionnaires sous forme d’images Mystical, tandis quemystify.pyenveloppe un programme PostScript dans un dessin Mystical de 8 pouces de large sur une page 8,5x11, en convertissant aussi les commentaires- Il n’existe actuellement pas d’interpréteur capable de lire une image Mystical pour effectuer un calcul ; on en est au stade où une personne peut convertir l’image en PostScript puis l’exécuter
Une notation qui dessine PostScript comme un cercle magique
- Mystical est né de l’objectif de créer un langage de programmation ressemblant à un cercle magique
- En pratique, il s’agit plutôt d’une manière d’écrire ou de dessiner du PostScript sous une forme évoquant un cercle magique
- L’installation et les documents de prise en main sont fournis séparément
Structure fondée sur des rings
- Un programme Mystical est composé de rings
- Un ring est une bande circulaire dotée d’une bordure intérieure et d’une bordure extérieure, dans laquelle sont placés du texte et des sigils
- Le contenu du ring principal commence à l’extrémité droite, à 3 heures, et progresse dans le sens antihoraire
- Cela suit le système d’angles de PostScript et reflète aussi l’hypothèse selon laquelle le ring est écrit depuis l’extérieur
- Un sous-ring commence au point relié à la structure qui l’a appelé
-
Trois types de rings
- Un tableau exécutable correspond aux
{ }de PostScript ; il possède de simples bordures circulaires à l’intérieur et à l’extérieur, avec une étoile à l’intérieur - Les points de début et de fin d’un tableau exécutable sont indiqués par un symbole tiré du signe alchimique du « travail accompli »
- Un tableau non exécutable correspond aux
[ ]de PostScript ; il est similaire au tableau exécutable, mais sans étoile - Les points de début et de fin d’un tableau non exécutable sont indiqués par de simples triangles
- Un dictionnaire correspond aux
<< >>de PostScript ; il est représenté par un polygone avec une double bordure extérieure et une bordure intérieure simple - Les marqueurs de début et de fin d’un dictionnaire sont les mêmes que pour les tableaux
- L’ordre des éléments dans l’image d’un dictionnaire peut différer de celui du texte PostScript
- Car PostScript ne préserve pas l’ordre d’insertion dans les dictionnaires
- Un tableau exécutable correspond aux
-
Structures imbriquées et contraintes
- Lorsqu’une structure apparaît à l’intérieur d’une autre, une ligne part d’un petit cercle ou point à l’emplacement d’inclusion et rejoint le sigil de début/fin du sous-ring
- Dans PostScript,
[ ]ou<< >>peuvent être utilisés d’une manière difficile à traiter pour Mystical - Il faut éviter les formes qui, comme dans l’exemple, répartissent les limites d’un tableau entre une condition ou une branche
- Les commandes comme
gsave/grestoreoubegin/endsont susceptibles d’être utilisées de façon déséquilibrée ou de traverser des boucles ; elles sont donc traitées comme des sigils ordinaires
Texte et sigils
- Sur le bord d’un ring se trouvent du texte ou des sigils
- Les noms écrits sous la forme
/nameen PostScript sont représentés dans Mystical par un triangle entourant ou chevauchant le texte du nom ou son sigil - Les chaînes PostScript
()sont représentées sous forme de cartouche contenant le texte de la chaîne -
Sigils standard
- De nombreux opérateurs intégrés ont leur propre sigil standard
- Lorsqu’ils apparaissent comme opérateurs ou noms, le sigil est utilisé à la place du texte, mais cela ne s’applique pas à l’intérieur des chaînes
- Les sigils standard ont généralement été créés en combinant la première lettre de la commande avec une illustration du concept ; certains utilisent un dessin plus explicite ou un langage visuel standardisé
- La liste complète est disponible dans Standard Sigils
- Catégories d’opérateurs traitées dans les exemples
dup,copy,add,mul,negfor,forall,repeatif,ifelse, opérateurs de comparaisonmoveto,lineto,arc,curveto,stroke,fillgsave,grestore,translate,scale,rotate- Opérateurs de définition et de consultation des couleurs
dict,begin,end,def,get,put,length
-
Sigils utilisateur
- Les sigils de nouvelles fonctions ou de nouveaux noms peuvent être ajoutés à
sigil_bankà l’exécution - Un sigil utilisateur doit tenir dans un carré de 1 unité centré sur l’origine, et ses coordonnées ne doivent pas dépasser 0,5
- Le système de coordonnées peut être transformé par commodité
- Utiliser
nstrokeau lieu destrokepermet d’obtenir le même effet calligraphique que les sigils standard - Les sigils destinés aux variables utilisateur peuvent être conçus selon n’importe quel système de sigils
- Les exemples utilisent principalement des collisions de lettres inspirées du système de Chaos Magick de Spare
- Les kameas, wheels, Square Word Calligraphy, Circular Gallifreyan, sitelen sitelen, dessins, jeux de mots, etc. sont également possibles
- Les nouveaux noms dérivés d’opérateurs officiels peuvent inclure le sigil standard de l’opérateur correspondant
- Les sigils de nouvelles fonctions ou de nouveaux noms peuvent être ajoutés à
Notation combinée pour /name { ring } def
defpossède un sigil distinct, mais le motif consistant à pousser un nom, puis une fonction, puis à définir cette fonction sous ce nom revient souvent- Mystical fournit une syntaxe spéciale pour la forme
/name { ring } def- Elle utilise le triangle de nom ordinaire
- L’extrémité de la ligne de connexion est placée juste sous le nom
- Le sigil
defest entièrement omis
- Cette syntaxe est étendue aux deux autres types de rings par souci de simplification
- Lorsqu’on utilise
defautrement, le sigildefordinaire est conservé - Une notation combinée similaire pour
/name { ring }à l’intérieur d’un dictionnaire a été envisagée, mais elle n’est pas appliquée car le risque de traitement incorrect est élevé
Gestion des commentaires
- Les commentaires de Mystical sont affichés sous forme de petit texte dans une bulle incomplète pointant vers un emplacement précis du programme
- Les vrais commentaires PostScript disparaissent avant que le moteur de rendu Mystical ne les voie ;
mystify.pyles transforme donc en séquences de code détectables - Par exemple, un commentaire comme
% Show a standard message, centered horizontallyest transformé sous la forme suivante(Show a standard message, centered horizontally) /mystical_comment_flag pop pop
- Le moteur de rendu peut détecter ce motif et l’afficher comme un commentaire Mystical
Exemples d’algorithmes
- L’illustration en haut de la page est un exemple de Quicksort
- Un exemple de l’algorithme du PGCD d’Euclide est également inclus
- Cet exemple utilise la fonction
/arg {exch def} defde dmmlib
- Cet exemple utilise la fonction
Fonctions de génération d’images Mystical
- Toutes les fonctions sont définies dans
mystical.ps mystical- Prend un tableau, un tableau exécutable ou un dictionnaire et le rend sous forme Mystical
- Descend dans les sous-structures si nécessaire pour les dessiner
- L’image complète est mise à l’échelle pour tenir dans le cercle unité
mystical_evoke- Identique à
mystical, mais prend en entrée un nom à rechercher dans le dictionnaire courant
- Identique à
mystical_evoke_label- Similaire à
mystical_evoke, mais ajoute en haut la notation combinée nom-définition - Fait pivoter l’image pour que le sigil du nom apparaisse à l’endroit
- Similaire à
- Les trois fonctions existent aussi en versions suffixées par
_unscaled- Ces versions sautent l’étape de mise à l’échelle
- Comme l’épaisseur du ring est de 1 unité, l’image devient assez grande
- Le mode d’emploi figure dans Mystical usage notes
Programme de génération d’images Mystical
- Le seul programme actuellement fourni est le script Python
mystify.py mystify.pyeffectue deux tâches- Il enveloppe un programme PostScript complet dans du code qui le dessine comme un programme Mystical, et le place au centre d’une page 8,5x11 avec une largeur de 8 pouces
- Il convertit les lignes de commentaires PostScript commençant par
%en commentaires Mystical
- Les commentaires tout au début du fichier ne sont pas convertis
- Exemple :
%!PS
- Exemple :
- Les lignes de commentaires adjacentes ayant la même indentation sont traitées comme un seul long commentaire contenant des sauts de ligne
-
Contraintes de mise en page
- Le code actuel calcule une mise en page pour éviter les collisions entre les cercles enfants
- Le calcul est excessivement prudent, ce qui peut étaler très largement la plupart des programmes
- L’exemple de la page a été créé en exécutant les fonctions d’analyse et de mise en page
mystical_get_spell,mystical_make_evocation_ligature, puis en ajustant le résultat et en appelantdraw_sigiletdraw_link - La mise en page par défaut est prévue pour être améliorée
Peut-on le considérer comme un langage ?
- Actuellement, Mystical est une manière de dessiner des programmes PostScript
- Il n’existe pas d’interpréteur prenant une image Mystical en entrée pour effectuer le calcul approprié
- Une personne pourrait lire une image Mystical et l’exécuter, ou, plus vraisemblablement, la convertir en programme PostScript avant de l’exécuter
Possibilité d’application à d’autres langages
- Cette approche semble applicable à des langages composés uniquement d’opérateurs, comme Forth
- Elle pourrait être difficile à appliquer à des langages ayant une structure de phrases plus complexe
- On ne sait pas si créer un nouveau ring à chaque accolade ou indentation deviendrait excessivement compliqué
Aucun commentaire pour le moment.