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

Linux for Playstation I & II, bu sefer tamamı bedava ve açık!

larweda

Sony'nin Linux`lu Playstation II kutusunu çıkaracağını duyurmasının ardından PS üzerinde Linux çalıştırabilmek için sabırsızlıkla bekleyenler için bu sefer tamamı açık kodlu olan ve bedava olan bir alternatif var: Çek bir firma olan Blokman Trading`in Runix'i. Playstation 1 için 2.4 Linux çekirdeğinin alfa sürümünü piyasaya süren Blokman Trading, temmuz ayında çekirdeğin beta sürümünü, ekim ayında da kararlı bir sürümünü çıkaracağını duyurdu. Playstation II için de bir çekirdek yazıldığı söyleniyor, ancak PS2 için verilen bir tarih yok.
Sony, Linux for Playstation II`den sadece 1000 adet üreteceğini ve sadece Japon pazarında piyasaya süreceğini duyurmuştu.

LINUXnet'in 2. sayısı bayilerde

MaXCoDeR

Türkiye'nin ilk ve tek Linux dergisi LINUXnet'in 2. sayısı bayilerde! LINUXnet yeni sayısında %10 daha kalın, bir CD daha fazla hediyeli.

LINUXnet'in hediyesi toplam 6 CD'de Mandrakelinux 10.1 Community, SUSE 9.1 Personal, Knoppix 3.6 ve LINUXnet Özel CD'si yer alıyor.

Derginin tüm içeriğini görmek için www.linuxnet.com.tr adresini ziyaret edebilirsiniz.

Masaüstünde Linux Evrimi

barisozyurt

Linux dünyasının en büyük şirketleri güçlerini birleştirdi! ArkLinux, Codeweavers, Debian.org, DesktopLinux.com, KDE, Linux Professional Institute (LPI), Lycoris, The Linux Terminal Server Project (LTSP), Mandrakesoft, NeTraverse, OpenOffice.org, Questnet (Support4Linux.com), Samba.org, theKompany, SuSE, TransGaming Technologies, TrustCommerce, Xandros, Ximian firma ve geliştirici grupları, Linux'u masaüstüne en çok kullanılan işletim sistemi haline getirmek için güçlerini birleştirdiklerini ve bir konsorsiyum oluşturduklarını açıkladılar:
http://www.desktoplinuxconsortium.org/
Yukardaki isimleri bir kez daha okuyun ve hepsini yanyana koyun; neler olacak, tahmin edebiliyor musunuz?

Çekirdekten Haber Var

anonim

Linux çekirdeğinin 2.4.29-rc1 versiyonu yayınlandı. Bu konunun taşıdığı haber değeri ise bu versiyonun kullanıcıların root haklarına ulaşmasını sağlayan önemli sayılabilecek bir güvenlik açığını da düzeltiyor olması. Bu açık aynı zamanda 2.6 serisi çekirdekleri de etkiliyor. 2.6 serisinde bu açığı kapatmak için gereken yamayı ( Alan Cox tarafından ) burada bulabilirsiniz.

Linux çekirdeğinde bir diğer gelecek vaat eden gelişme ise Jake Moilanen tarafından duyuruldu. Kerneltrap'ın haberine göre Moilanen'ın geliştirdiği genetik algoritma sayesinde %1-%3 arasında değişen oranda performans artışı sağlanıyor. IO zamanlayıcı ve Cpu zamanlayıcılarının kendilerini en iyi performansı verecek şekilde ayarlanmasına dayanan algoritma için Moilanen "Sağlanan performans artışı çok yüksek olmamasına rağmen söz konusu zamanlayıcılar hakkında uzman birisinin bu oranı yükseltebileceğini düşünüyorum" dedi.

Busy Box - Minimalist Linux meraklılarına

sundance

Hep merak etmişimdir madem Windows`a alternatif, neden Linux`da devamlı şişiyor diye. Glibc, KDE filan derken dev gibi bir sistem karşımıza çıkıyor. Herşey bir yana temel *nix komutları için bile mblarca yer ve Lib5, Lib6 kullanmamız gerekiyor.

Benzer bir kaygı ile BusyBox ekibi, hemen hemen bütün temel Linux komutlarını tek bir dosyada toplamışlar, hem de UPX`lendikten sonra sadece 130K`a inen bir tek dosyada.

Hangi komutlar mı var bu 130K`nın içinde ? ...