Türkçe ile *NIX'i Barıştırmak

0
misafir
Diyelim ki, yazıcıdan türkçe bir metin çıkartmanız gerekiyor. Ama yeni kurulmuş bir BSD konsolundasınız; ya da KDE çalışıtırıyorsunuz ama türkçe klavyeniz yok. Ne yapabilirsiniz? Bu yazıda sadece geleneksel *nix araçları kullanarak neler yapabileceğinizi anlatmaya çalışacağım.
Önce vi kullanarak -Emacs de kullanabilirsiniz tabii- benim uydurduğum basit bir markup dili ile türkçe metninizi yazın. Aşağıda bu dil ile yazılmış türk alfabesini görebilirsiniz:
ABCCxDEFGGxHIIxJKLMNOOxPRSSxTUUxVYZ
abccxdefggxhixijklmnooxprssxtuuxvyz
Gördüğünüz gibi dil basit. 'x' harfi alfabemizde yer almadığı için onu noktalı harflerin noktası yerine kullanıyoruz. Bunun tek istisnası 'x'in küçük 'ı'nın noktasını silmek için kullanılması. Daha sonra aşağıdaki sed programcığını kullanarak metin dosyanızı groff kaynağına çevirin.
#!/usr/bin/sed -f
#Turkish Markup Language ile yazilan metinleri groff kaynagina cevirir.
#Once kafayi(header) yazalim.
#Burada s`den ve g`den sonra gelen harflerin kucuk ve buyukleri ile 
#Buyuk i tanimlaniyor. C`den, o`dan ve u`dan sonra gelen harfler zaten
#groff`ta tanimli olarak geliyor. i`nin noktasiz olani da oyle.
i\
.AM\
.acc*over-def breve \\(ab\
.acc*over-def dot \\(a.\
\
.char \\(yg g\\*[breve]\
.char \\(yG G\\*[breve]\
.char \\(s, s\\*,\
.char \\(S, S\\*,\
.char \\(I. I\\*[dot]\
.LP
#Simdi regular expressions ile donusumleri yapalim.
s/cx/\\\(\,c/g
s/Cx/\\\(\,C/g
s/gx/\\\(yg/g
s/Gx/\\\(yG/g
s/ix/\\\(\.i/g
s/Ix/\\\(I\./g
s/ox/\\\(\:o/g
s/Ox/\\\(\:O/g
s/sx/\\\(s\,/g
s/Sx/\\\(S\,/g
s/ux/\\\(\:u/g
s/Ux/\\\(\:U/g
#X yazmak da mumkun olsun.
s/kx/x/g
s/Kx/X/g
Elde ettiğiniz groff kaynağını 'groff -ms' komutu ile postscript dosyasına çevirdikten sonra basılmaya hazır dosyanız elinizde olacaktır. Artık bu son dosyayı 'lpr' komutu ile yazıcıya gönderebilirsiniz. Tabii programları teker teker çalıştırıp fazladan dosyalar oluşturmak yerine *nix borularını(pipe) da kullanabilirsiniz. Şöyle ki:
sed -f tuxrkcxe.sed metin.txt | groff -ms | lpr
Notlar:
  • Debian GNU/Linux kullanıyorsanız,
    apt-get install groff
    yapmanız gerekebilir.
  • sed programını 'tuxrkcxe.sed' adıyla kaydettiğinizi varsaydım.
  • Programda küçük bir hata var. Kafa(header) bölümünü gereksiz yere tekrar tekrar yazıyor. Ama program yine de çalışıyor.

Görüşler

0
tongucyumruk
Peki buna gerçekten gerek var mı? Emacs ve benzeri metin editörleri zaten halihazırda birçok giriş yöntemi desteği ile geliyorlar. Bir örnek için şunara bakabilirsiniz:

M-x set-input-method <RET> latin-5-postfix

Bu komut sayesinde türkçe karakterleri şu şekilde yazabilirsiniz:

s, = ş
g~ = ğ

Veya LaTeX tarzı giriş metodunu kullanıp aşağıdaki gibi yazabilirsiniz:

\\pi = Pi karakteri
\\int = integral karakteri.

Bu arada yanlış anlaşılmasın, bence fikriniz oldukça güzel. Özellikle türkçe klavye vs... bulamadığmız durumlarda türkçe yazabilmek için tam bir kurtarıcı. Ancak bence "x" karakterini temel alan bir sistem yerine elimizdeki sed betiğini postfix veya prefix yazım tarzını işleyecek biçimde değiştirmek mantıklı olacaktır.

Not: Tabii bir diğer seçenekte doğrudan LaTeX ile yazmak olabilir. Düz metinden LaTeX belgesi üretmek herhalde o kadar da zor değildir...
0
misafir
Katılıyorum. Tabii ki Perl atasözünün de söylediği gibi, bir işi yapmanın birden fazla yolu var. Burada iki amacım vardı: biri basit bir markup ortaya koymak. Yani yumuşak g'yi her yazmak istediğimizde latex'te "\\u g" yazmak yerine sadece "gx" yazmak. İkincisi de basit araçları kullanarak bile neler yapılabileceğini göstermek.
0
misafir
Pardon, LaTeX demek istemiştim :-)
0
FZ
Her seferinde gx yazmak yerine misal Ctrl ile Alt arasındaki arasındaki o anlamsız Win tuşunu Emacs ortamında (ya da belki VIM, vi?) programlasak da Win+g bastığımızda ğ ya da g~ filan bassa böylece iki tuşa ayrı ayrı basmak yerine tek bir tuş kombinasyonu kullanmış olsak?
0
FZ
gx basmak istersem nasıl yazacağım? (çok dikkatli okumadım yazıyı, kaçırmış olabilirim, mazur görün) bir tür "escape" mekanizması var mı yukarıda?
0
misafir
Onu "gkx" diye yazabilirsiniz. sed scriptinin son üç satırında mekanizmayı görebilirsiniz.
0
FZ
Yani gkx yazarsam gx elde ediyorum. Pekiyi gkx yazmak istersem? gkkx? Ya gkkx yazmak istersem? O zaman da gkkkx? Bunun yerine başına bir sembol koysak ve bu sözcüğü (ya da belki başka bir gruplandırma yöntemi ile cümleyi, vs. ya da ayracımız, gruplandırıcımız her ne ise, çift tırnak arasına alıp vs.) yorumlama desek nasıl olurdu?
0
misafir
Mümkün tabii ama sed scripti ile zor gibi görünüyor. Daha gelişmiş bir versiyonu awk ile yazmayı düşünüyorum. Hatta aynı markup'ı ve html'deki &#XXX kodlarını kullanarak türkçe karakterli html oluşturmayı da bu programa eklemek istiyorum. Önerileriniz için teşekkürler.
0
FZ
Bu benim aklıma nereden geldi, hmm, sanırım Lisp'ten ve C# dillerinden geldi.

Nasıldı C# ortamında, sürekli "escape" yapmak yerine

@"Oh rahat rahat \ gibi özel anlamı olan şeyleri işte böyle \ basayım, başlarına ekstra bir şey yazmakla uğraşmayayım misal hemen \\t yazayım olduğu gibi görünsün \\\\t yazmama gerek kalmasın, vs."

gibi.

Ya da işte Common Lisp'teki reader macro mevzusu gibi, nasıldı misal #| gibi bir şeyi s-exp'nin (symbolic expression) başına koyunca onun tamamının etkilenmesi, vs.
0
misafir
Eğer programcı arkadaşlardan bu markup'ı beğenenler varsa istedikleri dilde 'implement' edebilirler. Özgür bir lisansla lisansladım gitti :-) Benim awk öğrenmemi beklemek zorunda değiller. Belki de en uygunu groff için yeni bir macro yazmak olacaktır.
0
misafir
Benim de aklıma bu geldi söylediklerinizden.
0
misafir
Programı awk dili ile yeniden yazdım. Böylece haberde sözedilen hata da giderildi. Şöyle:

#!/usr/bin/awk -f

BEGIN{  print ".AM";

        print ".acc*over-def breve \\\\(ab";

        print ".acc*over-def dot \\\\(a.";

        print ".char \\\\(yg g\\\\*[breve]";

        print ".char \\\\(yG G\\\\*[breve]";

        print ".char \\\\(s, s\\\\*,";

        print ".char \\\\(S, S\\\\*,";

        print ".char \\\\(I. I\\\\*[dot]";

        print ".LP";}

{       gsub(/cx/,"\\\\(,c");

        gsub(/Cx/,"\\\\(,C");

        gsub(/gx/,"\\\\(yg");

        gsub(/Gx/,"\\\\(yG");

        gsub(/ix/,"\\\\(.i");

        gsub(/Ix/,"\\\\(I.");

        gsub(/ox/,"\\\\(:o");

        gsub(/Ox/,"\\\\(:O");

        gsub(/sx/,"\\\\(s,");

        gsub(/Sx/,"\\\\(S,");

        gsub(/ux/,"\\\\(:u");

        gsub(/Ux/,"\\\\(:U");

        gsub(/kx/,"x");

        gsub(/Kx/,"X");

        print;}

Görüş belirtmek için giriş yapın...

İlgili Yazılar

Küçücük bir Linux Daha - Damn Small Linux

LeChuck

Özellikle Knoppix ile popüler olmaya başlayan Live-CD Linux dağıtımlarına bir yenisi daha eklendi. Sadece 50 MB olan ve piyasadaki mini-CDlere ve kart CDlere bile rahatça sığabilecek bu yeni sürüm kurtarma CDsi olarak ve/veya MS Windows kullanan arkadaşlara hava atmak için kullanılabilir. Bu minik ama sevimli dağıtım hakkında daha ayrıntılı bilgi http://www.damnsmalllinux.org adresinden edinilebilir.

....eee ne demişler...önemli olan boyu değil işlevi :P

Kartvizitte Linux

tongucyumruk

Bir iş görüşmesinden sonra kartvizitinizi bırakmak istiyorsunuz. Ama öyle sıradan bir kartvizit bırakmak herhalde bir geek'e yakışmaz. Bu iş için kartvizit şeklindeki yazılabilir CD'lerden kullanmak daha uygun bir tercih olacaktır. Peki ama CD'nin içeriği ne olacak? Herhalde hiçbirimizin 30MB olacak kadar uzun bir CV'si yoktur. Bunun yerine o CD'ye linux yüklemeye ne dersiniz? FSF'deki amcalar bu fikri oldukça iyi bulmuş olacaklarki Bootable Businness Card projesi başlamış. Projenin amacı küçük kartvizit CD'lere sığabilecek boyutta, sadece CD'den çalışabilecek bir dağıtım üretmek. Tabiiki dağıtımın tek amacı karizmatik bir kartvizit üretmek değil. İçerdiği programlar sayesinde sistemlerin post-mortem analizinden Debian kurulumuna kadar birçok iş için kullanmanız mümkün. Dağıtımın sitesinden isolarını indirebilir, bunları kendi ihtiyaçlarınıza göre düzenleyip (mesela LiLo açılışta kartvizitinizi ekrana yazabilir) etkileyici iş başvuruları yapabilirsiniz. Not: Sanırım yılın ilk haberi oldu ha?

Linux´ta aygıt sürücüsü yazma üzerine

urxalit

Başlığa bakıp acele etmeyin. Driver yazmayacak olsanız bile Serdar Köylü'nün yazdığı bu yazıyı mutlaka okuyun. Windows-Unix farklarına, mimarilerine, OLE ve Pipe'lara, Linux'un donanımları kullanışına vs değinen güzel bir makale. Biraz da M$'a taş var... ;)

http://www.acikkod.org/savunma/linuxenv.html

Yeni bir Unix kabuğu, vshnu

sundance

Tamam, Unix dinazorusunuz, komut satırı en güzeli diyorsunuz, fakat yine de arada kimse bakmazken Midnight Commander açıp "oh be ne rahatmış?" dediğiniz de oluyor mu?

Ya da, bash'in vi komut satırını kullandığınızda "işte bu" dediğiniz oluyor mu?

Sizler için de görsel bir kabuk var: Vshnu. Hem de ne kabuk, hem komut satırına hizmet veriyor, hem vi komutlarını alıyor, hem de Perl scriptleri ile makrolar kabul ediyor. Dahası kendisi de bir perl scripti, hatta sıkı durun bir Perl modülü. Bir deneyin derim şahsen...

Yönetici Bakış Açısı İle GNU/Linux

FZ

Son birkaç haberimizde GNU/Linux´un kamudaki kullanımına dair önemli gelişmeleri vurgulamıştık. Şimdi bakışlarımızı tekrar iş dünyasına çeviriyoruz ve önemli bir makaleden birkaç alıntı yapıyoruz (not: bu yazı geeklere ya da programcılara falan değil doğrudan YÖNETİCİLERE yöneliktir ;-) :

- Son zamanlara dek açık kodlu yazılım dünyası KB Toys bilgi işlem yöneticisi Tom Jeffery´nin umurunda değildi. Ancak 1,300 oyuncak satış merkezi için 10,000 kadar yeni yazar kasa (daha doğrusu para kasalarına sahip PC´ler) kurmak ve bunlara uygun yazılım aramak gerekince ve aranan şartlara uyan üç yazılımın da GNU/Linux üzerinde Java ile geliştirildiği görülünce durum biraz (!) değişti. Jeffery aday sistemlerin sergilediği esnekliği, kolay geliştirilebilirliği ve geniş desteği görünce etkilenmişti...