Mystical
(suberic.net)- Mystical, PostScript programlarını büyü çemberine benzeyen dairesel bir yapıda çizen bir gösterim biçimidir; belgede bir dil gibi ele alınsa da gerçekte PostScript’in görsel bir temsiline daha yakındır
- Temel yapı ring’dir; çalıştırılabilir diziler
{}, çalıştırılamayan diziler[]ve sözlükler<< >>, kenarlıklar, yıldızlar, üçgenler ve çokgenlerle ayırt edilir - Ring kenarındaki metinler ve sigil’ler, PostScript operatörlerini, değişkenlerini, anahtar sözcüklerini, dizelerini ve adlarını sembollere ya da süslü biçimlere dönüştürür
mystical.psdizileri, çalıştırılabilir dizileri ve sözlükleri Mystical görselleri olarak render eder;mystify.pyise PostScript programlarını 8.5x11 sayfada 8 inç genişliğinde Mystical çizimle sarar ve yorumları da dönüştürür- Şu anda Mystical görsellerini okuyup hesaplama yapan bir yorumlayıcı yoktur; ancak bir insanın görseli PostScript’e çevirip çalıştırabileceği düzeydedir
PostScript’i büyü çemberi gibi çizen gösterim
- Mystical, büyü çemberini andıran bir programlama dili yapma hedefinden doğdu
- Gerçekte ise PostScript yazmanın ya da çizmenin, büyü çemberine benzeyen bir yoluna daha yakındır
- Kurulum ve başlangıç belgeleri ayrıca sunulur
Ring tabanlı yapı
- Mystical programları ring’lerden oluşur
- Ring, iç ve dış kenarlığı olan dairesel bir şerittir; içinde metinler ve sigil’ler yer alır
- Ana ring’in içeriği, sağ uç olan saat 3 yönünden başlar ve saat yönünün tersine akar
- PostScript’in açı sistemini izler; ayrıca ring’in dış taraftan yazıldığı varsayımını da yansıtır
- Alt ring’ler, kendilerini çağıran yapıya bağlandıkları noktadan başlar
-
Üç ring türü
- Çalıştırılabilir dizi, PostScript’teki
{ }karşılığıdır; içinde ve dışında basit dairesel kenarlıklar bulunur ve içinde yıldız şekli yer alır - Çalıştırılabilir dizinin başlangıç ve bitiş noktaları, simyadaki “iş tamamlandı” sembolünden alınan bir sembolle gösterilir
- Çalıştırılamayan dizi, PostScript’teki
[ ]karşılığıdır; çalıştırılabilir diziye benzer ama yıldız şekli yoktur - Çalıştırılamayan dizinin başlangıç ve bitiş noktaları basit üçgenlerle gösterilir
- Sözlük, PostScript’teki
<< >>karşılığıdır; çift dış kenarlık ve tek iç kenarlığa sahip bir çokgen olarak gösterilir - Sözlüğün başlangıç ve bitiş noktası işaretleri dizilerle aynıdır
- Sözlük görselindeki öğe sırası, PostScript metninden farklı olabilir
- Çünkü PostScript’te sözlüğe ekleme sırası korunmaz
- Çalıştırılabilir dizi, PostScript’teki
-
İç içe yapılar ve kısıtlar
- Bir yapı başka bir yapının içinde göründüğünde, içerme noktasındaki küçük daireden ya da noktadan bir çizgi çıkar ve alt ring’in başlangıç-bitiş sigil’ine bağlanır
- PostScript’te
[ ]veya<< >>, Mystical’ın işlemesini zorlaştıracak biçimlerde kullanılabilir - Örnekteki gibi dizi sınırlarını koşullu ifadeler ya da dallanmalar içinde bölmekten kaçınmak gerekir
gsave/grestore,begin/endgibi komutlar dengesiz kullanılmaya ya da döngüleri keserek geçmeye daha yatkın olduğundan normal sigil olarak ele alınır
Metin ve sigil’ler
- Ring’in kenarında metin veya sigil yer alır
- PostScript’te
/nameolarak yazılan adlar, Mystical’da ad metnini ya da sigil’i saran veya onunla örtüşen bir üçgen ile gösterilir - PostScript dizeleri
(), dize metnini içeren bir kartuş biçimiyle ifade edilir -
Standart sigil’ler
- Birçok yerleşik operatörün kendi standart sigil’i vardır
- Operatör ya da ad olarak göründüklerinde metin yerine sigil kullanılır; ancak dizelerin içinde uygulanmaz
- Standart sigil’ler çoğunlukla komutun ilk harfi ile kavrama ait bir çizimin birleşiminden oluşturulmuştur; bazıları ise daha açıklayıcı çizimler ya da standartlaştırılmış bir görsel dil kullanır
- Tam liste Standard Sigils sayfasında görülebilir
- Örneklerde ele alınan operatör kategorileri
dup,copy,add,mul,negfor,forall,repeatif,ifelse, karşılaştırma operatörlerimoveto,lineto,arc,curveto,stroke,fillgsave,grestore,translate,scale,rotate- Renk ayarlama ve sorgulama operatörleri
dict,begin,end,def,get,put,length
-
Kullanıcı sigil’leri
- Yeni fonksiyonların veya adların sigil’leri çalışma zamanında
sigil_bank’e eklenebilir - Kullanıcı sigil’leri, merkezi orijin olan 1 birimlik kare içine sığmalıdır; koordinat değerleri 0.5’i aşmamalıdır
- Kolaylık için koordinat sistemi dönüştürülebilir
strokeyerinenstrokekullanılırsa standart sigil’lerle aynı kaligrafik etki elde edilir- Kullanıcı değişkenlerine yönelik sigil’ler herhangi bir sigil sistemiyle tasarlanabilir
- Örnekler çoğunlukla Spare’in Chaos Magick sisteminden esinlenen letter collision kullanır
- kameas, wheels, Square Word Calligraphy, Circular Gallifreyan, sitelen sitelen, çizimler, kelime oyunları vb. de mümkündür
- Resmî operatörlerden türetilen yeni adlar, ilgili operatörün standart sigil’ini içerebilir
- Yeni fonksiyonların veya adların sigil’leri çalışma zamanında
/name { ring } def için birleşik gösterim
defiçin ayrı bir sigil vardır; ancak bir adı push edip, bir fonksiyonu push ettikten sonra o ada fonksiyonu tanımlama kalıbı sıkça görülür- Mystical,
/name { ring } defbiçimi için özel sözdizimi sağlar- Normal ad üçgeni kullanılır
- Bağlantı çizgisinin ucu adın hemen altına yerleştirilir
defsigil’i tamamen atlanır
- Bu sözdizimi, basitleştirme amacıyla diğer iki ring türüne de genişletilmiştir
defbaşka biçimlerde kullanıldığında normaldefsigil’i aynen kullanılır- Sözlük içindeki
/name { ring }için de benzer bir birleşik gösterim düşünülmüştü, ancak yanlış işlenme olasılığı yüksek olduğu için uygulanmadı
Yorumların işlenme biçimi
- Mystical yorumları, program içindeki belirli bir noktayı işaret eden tamamlanmamış konuşma balonu içindeki küçük metin olarak gösterilir
- Gerçek PostScript yorumları Mystical renderer görmeden önce kaybolduğundan,
mystify.pyyorumları algılanabilir kod dizilerine dönüştürür - Örneğin
% Show a standard message, centered horizontallygibi bir yorum şu biçime dönüştürülür(Show a standard message, centered horizontally) /mystical_comment_flag pop pop
- Renderer bu kalıbı algılayıp Mystical yorumu olarak gösterebilir
Örnek algoritmalar
- Sayfanın üst kısmındaki çizim Quicksort örneğidir
- Euclid’in GCD algoritması örneği de dahildir
- Bu örnek dmmlib’in
/arg {exch def} deffonksiyonunu kullanır
- Bu örnek dmmlib’in
Mystical görsel oluşturma fonksiyonları
- Tüm fonksiyonlar
mystical.psiçinde tanımlıdır mystical- Dizileri, çalıştırılabilir dizileri ve sözlükleri alıp Mystical biçimde render eder
- Gerekirse alt yapılara inerek çizer
- Tüm görsel birim çember içine sığacak şekilde ölçeklenir
mystical_evokemysticalile aynıdır; ancak girdi olarak geçerli sözlükte aranacak adı alır
mystical_evoke_labelmystical_evoke’a benzer; ancak üst tarafa ad-tanım birleşik gösterimini ekler- Ad sigil’i düz görünecek şekilde görseli döndürür
- Üç fonksiyonun da
_unscaledekli sürümleri vardır- Bu sürümler ölçekleme adımını atlar
- Ring kalınlığı 1 birim olduğundan görsel oldukça büyür
- Kullanım Mystical usage notes sayfasındadır
Mystical görsel oluşturma programı
- Şu anda sunulan program, tek bir Python betiği olan
mystify.py’dir mystify.pyiki iş yapar- PostScript programının tamamını Mystical programı çizen kodla sarar ve 8.5x11 sayfanın ortasına 8 inç genişliğinde yerleştirir
%ile başlayan PostScript yorum satırlarını Mystical yorumlarına dönüştürür
- Dosyanın en başındaki yorum dönüştürülmez
- Örn:
%!PS
- Örn:
- Aynı girintiye sahip bitişik yorum satırları, satır sonları içeren tek bir uzun yorum olarak işlenir
-
Yerleşim kısıtları
- Mevcut kod, alt çemberlerin çakışmaması için yerleşimi hesaplar
- Hesaplama aşırı güvenli olduğundan çoğu program çok geniş yayılabilir
- Sayfa örneği, ayrıştırma ve yerleşim fonksiyonları olan
mystical_get_spell,mystical_make_evocation_ligatureçalıştırıldıktan sonra sonucu ayarlayıpdraw_sigil,draw_linkçağrılarak oluşturulmuştur - Varsayılan yerleşimin iyileştirilmesi planlanıyor
Dil olarak görülebilir mi
- Şu anda Mystical, PostScript programlarını çizmenin bir yoludur
- Mystical görsellerini girdi olarak alıp uygun hesaplamayı yapan bir yorumlayıcı yoktur
- Bir insan Mystical görselini okuyup çalıştırabilir; daha olası olarak da bunu bir PostScript programına çevirip sonra çalıştırabilir
Başka dillere uygulanabilirlik
- Bu yaklaşım, Forth gibi yalnızca operatörlerden oluşan diller için de uygulanabilir görünüyor
- Daha karmaşık cümle yapısına sahip dillere uygulanması zor olabilir
- Süslü parantezler ya da her girinti için yeni bir ring oluşturmanın aşırı karmaşık hale gelip gelmeyeceği bilinmiyor
Henüz yorum yok.