Mystical
(suberic.net)- Mystical adalah cara notasi yang menggambar program PostScript dalam struktur melingkar yang tampak seperti lingkaran sihir; dalam dokumennya diperlakukan seperti bahasa, tetapi sebenarnya lebih dekat ke representasi visual PostScript
- Struktur intinya adalah ring, yang membedakan array eksekusi
{}, array non-eksekusi[], dan dictionary<< >>dengan batas, bintang, segitiga, dan poligon - Teks dan sigil di tepi ring mengubah operator, variabel, keyword, string, dan nama PostScript menjadi simbol atau bentuk berhias
mystical.psmerender array, array eksekusi, dan dictionary menjadi gambar Mystical, sementaramystify.pymembungkus program PostScript menjadi gambar Mystical selebar 8 inci pada halaman 8.5x11, serta mengonversi komentar- Saat ini tidak ada interpreter yang membaca gambar Mystical untuk melakukan komputasi; baru sebatas manusia dapat mengubah gambar menjadi PostScript lalu menjalankannya
Notasi yang menggambar PostScript seperti lingkaran sihir
- Mystical berawal dari tujuan membuat bahasa pemrograman yang menyerupai lingkaran sihir
- Dalam praktiknya, ini lebih dekat ke cara menulis atau menggambar PostScript agar terlihat seperti lingkaran sihir
- Dokumen instalasi dan pengantar disediakan secara terpisah
Struktur berbasis ring
- Program Mystical tersusun dari ring
- Ring adalah pita melingkar dengan batas dalam dan luar, tempat teks dan sigil ditempatkan
- Isi ring utama dimulai dari ujung kanan, yaitu arah jam 3, lalu mengalir berlawanan arah jarum jam
- Ini mengikuti sistem sudut PostScript, sekaligus mencerminkan asumsi bahwa ring ditulis dari sisi luar
- Ring turunan dimulai dari titik yang terhubung dengan struktur yang memanggilnya
-
Tiga tipe ring
- Array eksekusi setara dengan
{ }di PostScript; memiliki batas lingkaran sederhana di bagian dalam dan luar, serta bentuk bintang di dalamnya - Titik awal dan akhir array eksekusi ditandai dengan simbol yang diambil dari lambang alkimia “pekerjaan selesai”
- Array non-eksekusi setara dengan
[ ]di PostScript; mirip dengan array eksekusi, tetapi tanpa bentuk bintang - Titik awal dan akhir array non-eksekusi ditandai dengan segitiga sederhana
- Dictionary setara dengan
<< >>di PostScript; ditampilkan sebagai poligon dengan batas luar ganda dan batas dalam tunggal - Penanda titik awal dan akhir dictionary sama seperti array
- Urutan item pada gambar dictionary bisa berbeda dari teks PostScript
- Sebab di PostScript urutan penyisipan dictionary tidak dipertahankan
- Array eksekusi setara dengan
-
Struktur bersarang dan batasan
- Jika satu struktur muncul di dalam struktur lain, sebuah garis keluar dari lingkaran kecil atau titik pada lokasi penyisipan dan terhubung ke sigil awal/akhir ring turunan
- Di PostScript,
[ ]atau<< >>dapat digunakan dengan cara yang sulit diproses oleh Mystical - Bentuk yang memecah batas array di dalam conditional atau branch seperti pada contoh sebaiknya dihindari
- Perintah seperti
gsave/grestoredanbegin/endberpotensi besar digunakan secara tidak seimbang atau melintasi loop, sehingga diperlakukan sebagai sigil biasa
Teks dan sigil
- Di tepi ring ditempatkan teks atau sigil
- Nama yang ditulis sebagai
/namedi PostScript ditampilkan di Mystical sebagai segitiga yang membungkus atau menimpa teks nama atau sigil - String PostScript
()direpresentasikan sebagai bentuk cartouche yang berisi teks string -
Sigil standar
- Banyak operator bawaan memiliki sigil standar sendiri
- Saat muncul sebagai operator atau nama, sigil digunakan sebagai pengganti teks, tetapi tidak diterapkan di dalam string
- Sigil standar umumnya dibuat dengan menggabungkan huruf pertama perintah dan gambar konsepnya; sebagian memakai gambar yang lebih deskriptif atau bahasa visual terstandardisasi
- Daftar lengkap dapat dilihat di Standard Sigils
- Kategori operator yang dibahas sebagai contoh
dup,copy,add,mul,negfor,forall,repeatif,ifelse, operator perbandinganmoveto,lineto,arc,curveto,stroke,fillgsave,grestore,translate,scale,rotate- Operator pengaturan dan pembacaan warna
dict,begin,end,def,get,put,length
-
Sigil pengguna
- Sigil untuk fungsi atau nama baru dapat ditambahkan ke
sigil_banksaat runtime - Sigil pengguna harus masuk ke dalam persegi 1 unit yang berpusat pada titik asal, dan nilai koordinat tidak boleh melebihi 0.5
- Sistem koordinat dapat diubah demi kemudahan
- Dengan memakai
nstrokealih-alihstroke, efek kaligrafis seperti sigil standar dapat diperoleh - Sigil untuk variabel pengguna dapat dirancang dengan sistem sigil apa pun
- Contohnya terutama menggunakan letter collision yang terinspirasi dari sistem Chaos Magick milik Spare
- kameas, wheels, Square Word Calligraphy, Circular Gallifreyan, sitelen sitelen, gambar, permainan kata, dan lainnya juga dimungkinkan
- Nama baru yang diturunkan dari operator resmi dapat memuat sigil standar milik operator tersebut
- Sigil untuk fungsi atau nama baru dapat ditambahkan ke
Notasi gabungan untuk /name { ring } def
defmemiliki sigil tersendiri, tetapi pola mendorong nama, mendorong fungsi, lalu mendefinisikan fungsi pada nama itu sering muncul- Mystical menyediakan sintaks khusus untuk bentuk
/name { ring } def- Menggunakan segitiga nama biasa
- Ujung garis penghubung diletakkan tepat di bawah nama
- Sigil
defdihilangkan sepenuhnya
- Sintaks ini juga diperluas ke dua tipe ring lainnya demi penyederhanaan
- Saat
defdigunakan dengan cara lain, sigildefbiasa tetap digunakan - Notasi gabungan serupa untuk
/name { ring }di dalam dictionary sempat dipertimbangkan, tetapi tidak diterapkan karena berisiko tinggi diproses secara keliru
Cara menangani komentar
- Komentar Mystical ditampilkan sebagai teks kecil di dalam balon ucapan tidak lengkap yang menunjuk ke titik tertentu dalam program
- Komentar PostScript asli menghilang sebelum terlihat oleh renderer Mystical, sehingga
mystify.pymengubah komentar menjadi urutan kode yang bisa dideteksi - Misalnya komentar seperti
% Show a standard message, centered horizontallydiubah menjadi bentuk berikut(Show a standard message, centered horizontally) /mystical_comment_flag pop pop
- Renderer dapat mendeteksi pola ini dan menampilkannya sebagai komentar Mystical
Contoh algoritme
- Gambar di bagian atas halaman adalah contoh Quicksort
- Contoh algoritme GCD Euclid juga disertakan
- Contoh ini menggunakan fungsi
/arg {exch def} defdari dmmlib
- Contoh ini menggunakan fungsi
Fungsi pembuat gambar Mystical
- Semua fungsi didefinisikan di
mystical.ps mystical- Menerima array, array eksekusi, dan dictionary, lalu merendernya dalam bentuk Mystical
- Jika perlu, menggambar hingga ke struktur turunan
- Seluruh gambar diskalakan agar pas dengan lingkaran unit
mystical_evoke- Sama seperti
mystical, tetapi menerima nama yang akan dicari di dictionary saat ini sebagai input
- Sama seperti
mystical_evoke_label- Mirip dengan
mystical_evoke, tetapi menambahkan notasi gabungan nama-definisi di bagian atas - Gambar diputar agar sigil nama terlihat tegak
- Mirip dengan
- Ketiga fungsi semuanya memiliki versi dengan akhiran
_unscaled- Versi ini melewati tahap penskalaan
- Karena ketebalan ring adalah 1 unit, gambarnya menjadi cukup besar
- Cara penggunaan ada di Mystical usage notes
Program pembuat gambar Mystical
- Program yang saat ini disediakan hanyalah satu skrip Python,
mystify.py mystify.pymelakukan dua tugas- Membungkus seluruh program PostScript dengan kode yang menggambarnya sebagai program Mystical, dan menempatkannya di tengah halaman 8.5x11 dengan lebar 8 inci
- Mengonversi baris komentar PostScript yang diawali
%menjadi komentar Mystical
- Komentar di bagian paling awal file tidak dikonversi
- Contoh:
%!PS
- Contoh:
- Baris komentar berdekatan dengan indentasi yang sama diperlakukan sebagai satu komentar panjang yang memuat line break
-
Batasan layout
- Kode saat ini menghitung layout agar lingkaran turunan tidak saling bertabrakan
- Perhitungannya terlalu aman, sehingga sebagian besar program bisa tersebar sangat lebar
- Contoh halaman dibuat dengan menjalankan fungsi parsing dan layout
mystical_get_spell,mystical_make_evocation_ligature, lalu menyesuaikan hasilnya dan memanggildraw_sigil,draw_link - Layout default direncanakan untuk diperbaiki
Apakah bisa dianggap sebagai bahasa
- Saat ini Mystical adalah cara menggambar program PostScript
- Tidak ada interpreter yang menerima gambar Mystical sebagai input lalu menjalankan komputasi yang sesuai
- Manusia dapat membaca gambar Mystical dan menjalankannya, atau yang lebih realistis, manusia dapat mengubahnya menjadi program PostScript lalu menjalankannya
Kemungkinan penerapan ke bahasa lain
- Pendekatan ini tampaknya juga bisa diterapkan pada bahasa yang hanya berisi operator, seperti Forth
- Untuk bahasa dengan struktur kalimat yang lebih kompleks, penerapannya mungkin sulit
- Belum jelas apakah membuat ring baru untuk setiap kurung kurawal atau indentasi akan membuatnya menjadi terlalu rumit
Belum ada komentar.