Mystical
(suberic.net)- Mystical es una notación para dibujar programas de PostScript como una estructura circular que parece un círculo mágico; en la documentación se trata como si fuera un lenguaje, pero en realidad está más cerca de una representación visual de PostScript
- La estructura central es el anillo (ring), y distingue arreglos ejecutables
{}, arreglos no ejecutables[]y diccionarios<< >>con bordes, estrellas, triángulos y polígonos - El texto en el borde del anillo y los sigilos (sigils) convierten operadores, variables, palabras clave, cadenas y nombres de PostScript en símbolos o formas decoradas
mystical.psrenderiza arreglos, arreglos ejecutables y diccionarios como imágenes Mystical, ymystify.pyenvuelve un programa PostScript en un dibujo Mystical de 8 pulgadas de ancho sobre una página de 8.5x11, convirtiendo también los comentarios- Actualmente no existe un intérprete que lea imágenes Mystical y las ejecute; el nivel actual es que una persona puede convertir la imagen a PostScript y ejecutarla
Notación para dibujar PostScript como un círculo mágico
- Mystical surgió del objetivo de crear un lenguaje de programación que se pareciera a un círculo mágico
- En la práctica, está más cerca de una forma de escribir o dibujar PostScript para que parezca un círculo mágico
- La instalación y la guía de introducción se ofrecen por separado
Estructura basada en anillos
- Un programa Mystical se compone de anillos (rings)
- Un anillo es una banda circular con borde interior y exterior, dentro de la cual se colocan texto y sigilos
- El contenido del anillo principal empieza en el extremo derecho, en la posición de las 3 en punto, y fluye en sentido antihorario
- Esto sigue el sistema angular de PostScript y también refleja la idea de que el anillo se escribe desde afuera
- Los subanillos empiezan en el punto conectado con la estructura que los invocó
-
Tres tipos de anillo
- Los arreglos ejecutables corresponden a
{ }en PostScript, tienen bordes circulares simples por dentro y por fuera, y una estrella en el interior - El punto de inicio y fin de un arreglo ejecutable se marca con un símbolo tomado del signo alquímico de “obra completada”
- Los arreglos no ejecutables corresponden a
[ ]en PostScript y son similares a los ejecutables, pero sin estrella - El punto de inicio y fin de un arreglo no ejecutable se marca con un triángulo simple
- Los diccionarios corresponden a
<< >>en PostScript y se representan como un polígono con doble borde exterior y un solo borde interior - Las marcas de inicio y fin de un diccionario son iguales a las de los arreglos
- El orden de los elementos en la imagen del diccionario puede diferir del texto PostScript
- Esto se debe a que en PostScript no se preserva el orden de inserción en los diccionarios
- Los arreglos ejecutables corresponden a
-
Estructuras anidadas y restricciones
- Cuando una estructura aparece dentro de otra, sale una línea desde el pequeño círculo o punto del lugar de inclusión y se conecta con el sigilo de inicio o fin del subanillo
- En PostScript,
[ ]o<< >>pueden usarse de maneras que Mystical tiene dificultades para procesar - Deben evitarse formas como las del ejemplo, donde los límites de un arreglo se dividen dentro de una condición o una bifurcación
- Comandos como
gsave/grestoreybegin/endtienen alta probabilidad de usarse de forma desbalanceada o cruzando bucles, así que se tratan como sigilos normales
Texto y sigilos
- En el borde del anillo se colocan texto o sigilos
- Los nombres que en PostScript se escriben como
/namese representan en Mystical con un triángulo que envuelve o se superpone al texto o sigilo del nombre - Las cadenas
()de PostScript se representan como un cartucho que contiene el texto de la cadena -
Sigilos estándar
- Muchos operadores integrados tienen su propio sigilo estándar
- Cuando aparecen como operador o nombre, se usa el sigilo en lugar del texto, pero esto no se aplica dentro de cadenas
- Los sigilos estándar suelen crearse combinando la primera letra del comando con una imagen del concepto; algunos usan ilustraciones más descriptivas o un lenguaje visual estandarizado
- La lista completa puede verse en Standard Sigils
- Categorías de operadores tratadas como ejemplo
dup,copy,add,mul,negfor,forall,repeatif,ifelse, operadores de comparaciónmoveto,lineto,arc,curveto,stroke,fillgsave,grestore,translate,scale,rotate- Operadores para establecer y consultar color
dict,begin,end,def,get,put,length
-
Sigilos de usuario
- Los sigilos para nuevas funciones o nombres pueden agregarse en tiempo de ejecución a
sigil_bank - Los sigilos de usuario deben caber dentro de un cuadrado unitario centrado en el origen, y los valores de coordenadas no deben exceder 0.5
- Por conveniencia, se puede transformar el sistema de coordenadas
- Si se usa
nstrokeen lugar destroke, se obtiene el mismo efecto caligráfico que tienen los sigilos estándar - Los sigilos para variables de usuario pueden diseñarse con cualquier sistema de sigilos
- Los ejemplos usan principalmente colisión de letras inspirada en el sistema de Chaos Magick de Spare
- También pueden usarse kameas, wheels, Square Word Calligraphy, Circular Gallifreyan, sitelen sitelen, dibujos, juegos de palabras, etc.
- Los nombres nuevos derivados de operadores oficiales pueden incluir el sigilo estándar de ese operador
- Los sigilos para nuevas funciones o nombres pueden agregarse en tiempo de ejecución a
Notación combinada para /name { ring } def
deftiene su propio sigilo, pero es común el patrón de empujar un nombre, luego una función, y definir esa función con ese nombre- Mystical ofrece una sintaxis especial para la forma
/name { ring } def- Se usa el triángulo normal del nombre
- El extremo de la línea de conexión se coloca justo debajo del nombre
- El sigilo de
defse omite por completo
- Esta sintaxis se extiende también a los otros dos tipos de anillo para simplificar
- Cuando
defse usa de otra manera, se mantiene el sigilo normal dedef - Se consideró una notación combinada similar para
/name { ring }dentro de diccionarios, pero no se aplica porque sería fácil procesarla mal
Cómo se manejan los comentarios
- Los comentarios en Mystical se muestran como texto pequeño dentro de un globo de diálogo incompleto que apunta a un punto específico del programa
- Los comentarios reales de PostScript desaparecen antes de que el renderizador Mystical pueda verlos, así que
mystify.pylos transforma en una secuencia de código detectable - Por ejemplo, un comentario como
% Show a standard message, centered horizontallyse convierte a la forma siguiente(Show a standard message, centered horizontally) /mystical_comment_flag pop pop
- El renderizador puede detectar este patrón y mostrarlo como comentario Mystical
Algoritmos de muestra
- La figura de la parte superior de la página es un ejemplo de Quicksort
- También se incluye un ejemplo del algoritmo de MCD de Euclides
- Este ejemplo usa la función
/arg {exch def} defde dmmlib
- Este ejemplo usa la función
Funciones para generar imágenes Mystical
- Todas las funciones están definidas en
mystical.ps mystical- Recibe un arreglo, arreglo ejecutable o diccionario y lo renderiza en forma Mystical
- Si hace falta, desciende también a las estructuras subordinadas y las dibuja
- La imagen completa se escala para ajustarse al círculo unitario
mystical_evoke- Igual que
mystical, pero recibe como entrada un nombre para buscar en el diccionario actual
- Igual que
mystical_evoke_label- Similar a
mystical_evoke, pero agrega arriba la notación combinada de nombre-definición - Rota la imagen para que el sigilo del nombre se vea derecho
- Similar a
- Las tres funciones también tienen versiones con sufijo
_unscaled- Estas versiones omiten la etapa de escalado
- Como el grosor del anillo es de 1 unidad, la imagen se vuelve bastante grande
- El uso está en Mystical usage notes
Programa para generar imágenes Mystical
- Actualmente solo se ofrece un programa: el script de Python
mystify.py mystify.pyrealiza dos tareas- Envuelve un programa PostScript completo con código para dibujarlo como un programa Mystical y lo coloca centrado en una página de 8.5x11 con un ancho de 8 pulgadas
- Convierte las líneas de comentarios de PostScript que empiezan con
%en comentarios Mystical
- No convierte los comentarios del principio del archivo
- Ejemplo:
%!PS
- Ejemplo:
- Las líneas de comentario adyacentes con la misma sangría se tratan como un único comentario largo con saltos de línea incluidos
-
Restricciones de diseño
- El código actual calcula la disposición para evitar que los subcírculos choquen entre sí
- El cálculo es excesivamente conservador, así que la mayoría de los programas pueden quedar muy dispersos
- El ejemplo de página se creó ejecutando las funciones de parsing y layout
mystical_get_spellymystical_make_evocation_ligature, ajustando luego el resultado y llamando adraw_sigilydraw_link - Hay planes de mejorar el layout predeterminado
¿Puede considerarse un lenguaje?
- Actualmente Mystical es una forma de dibujar programas de PostScript
- No existe un intérprete que reciba imágenes Mystical como entrada y realice el cálculo correspondiente
- Una persona podría leer y ejecutar una imagen Mystical o, de forma más realista, convertirla a un programa PostScript y ejecutarla
Posibilidad de aplicarlo a otros lenguajes
- Este enfoque parece aplicable también a lenguajes de solo operadores como Forth
- Puede resultar difícil aplicarlo a lenguajes con estructuras sintácticas más complejas
- No está claro si crear un nuevo anillo por cada llave o nivel de sangría terminaría volviéndose demasiado complejo
Aún no hay comentarios.