John Perr taraf�ndan. Yazar Hakk�nda: 1994'ten beri Linux kullan�c�s�; LinuxFocus'un Frans�z edit�rlerinden biridir. ��indekiler: |
�zet:
Bu ders, m4 makro i�lemci kullan�larak metin veya HTML dosyalar�n�n bak�m�n�n nas�l kolayla�t�r�laca��n� anlatmaktad�r.
Metin edit�rleri kullan�l�rken bir makro komut diline s�k�a ihtiya� duyulur. Bu edit�rlerin �o�u, kendi �zelliklerinde bu dilleri zaten bulundururlar. C derleyicisi de programc�lar i�in b�yle bir �zelli�i C �ni�lemcisi CPP sayesinde sa�lamaktad�r. Konfig�rasyon dosyalar�n�n ya da k���k bir sanaly�renin (web site) bak�m� yap�laca�� zaman, GNU/m4 makro i�lemcisi i� y�k�n� hayli azaltabilir. GNU/m4 makro i�lemcisi, t�m linux s�r�mlerinin bir par�as� olmakla birlikte, Unix kullan�c�lar� i�in de bir standart haline gelmi�tir.
A�a��da, k���k bir sanaly�redeki birtak�m HTML dosyalar�n�n bak�m� yap�l�rken GNU/m4 makro i�lemcisinin nas�l kullan�laca��n� g�rece�iz. Bu sistem, t�m y�reyi uyumlu bir tasar�mda tutmam�za yard�mc� olacak. Elbette Unix ara�lar�yla ayn� sonucu alman�n �e�itli yollar� vard�r; bu da Unix'in g�zelli�i.
Bu teknik, herkes�e bilinen sendmail.cf'nin olu�turulmas�nda kullan�l�r. Eric Allman taraf�ndan tasarlanan ve Berkeley �niversitesi'nden temin edilebilecek bir m4 makro kiti bulunmaktad�r
.GNU/m4 makro i�lemci, metin ve HTML d�zenlemeyle s�n�rl� de�ildir. CPP'nin �zelliklerini geli�tirmek isteyen programc�lar, ya da di�er dillerle CPP'ninkine e�it �zellikler elde etmek isteyenler i�in, GNU/m4 makro i�lemci �ok kullan��l�d�r.
Bir makro i�lemcisi, kullan�c� taraf�ndan tan�mlanan komutlar� (makrolar) yorumlayan bir programd�r. Makrolar i�lenmek i�in genellikle metnin i�ine g�m�l�rler. �rnek olarak bu tan�mlama:
define(YAZAR,`Agatha Christie<[email protected]>')
"YAZAR" kelimesinin metnin herhangi bir yerinde kullan�labilmesini sa�lar. m4 ile i�lendi�inde bu kelime, "Agatha Christie<[email protected]>" ile de�i�tirilir. A�a��da da g�sterilece�i gibi daha bir�ok kullan��l� �zellik bulunmaktad�r.
Diyelim ki farkl� dillerdeki ayn� sayfalara sahip bir sanaly�reyi g�ncelleyece�iz. Dahs�, y�reye uyumlu bir g�r�n�m sa�lamak i�in t�m sayfalar ayn� ba�l�k ve biti�e sahip olmal�d�r. Basitlik olmas� bak�m�ndan ve taray�c� (browser) kullan�m�na gerek olmamas� i�in, �rne�imiz salt metin i�erecek. Bu ayr�ca, lynx kullan�c�lar�n�n da y�remizi kolayl�kla ziyaret edebilmelerini sa�layacak. A�a��da bir sayfa i�in HTML kodu verilmi�tir:
<!-- Ba�l���n ba�� --> <HTML> <HEAD> <TITLE>Lynx anasayfa</TITLE> <META name="description" content="Site lynx et m4"> </HEAD> <BODY BGCOLOR="#FFFFFF" LINK="#008000" VLINK="#808080" ALINK="#8080FF"> <TABLE> <TBODY> <TR><TD align=middle colspan="2"> <H1>Lynx, karakter-h�cresel ekranlar i�in tam nitelikli bir World Wide Web istemcisi.</H1> <TR><TD align="left" valign="top" width="15%"> <a href="./index-en.html">�ngilizce</A><BR> <a href="./index-fr.html">Frans�zca</A><BR> <a href="./index-es.html">�talyanca</A><BR> <a href="./index-it.html">�spanyolca</A><BR> <a href="./index-de.html">Almanca</A><BR> <TD align=left> <!-- Ba�l���n sonu --> <P>Lynx i�in haz�r kaynaklar ve destek malzemesi i�in ba�lant�lar, <A HREF="http://www.crl.com/~subir/lynx.html">Lynx ba�lant�lar�</A></P> <P> ve Lynx anasayfas�nda <A HREF="http://lynx.browser.org/">Lynx Hakk�nda Bilgi.</A></P> <P>Lynx hakk�nda bilgi ve yeni haberler i�in bu sayfalara bak�n�z.</P> <P>Lynx, kullan�m s�n�rlamas� ya da tekrar-s�r�m olmaks�z�n GNU Genel A��k Lisans (GAL) alt�nda da��t�lmaktad�r. Lynx copyright ifadeleri "COPYHEADER", ve GNU GAL, "COPYING", da��t�m�n birinci seviye dizininde bulunmaktad�r. Lynx, Lynx kullan�c� grubu - b�t�n�yle g�n�ll� (ve resmi olmayan) organizasyon - taraf�ndan desteklenmektedir.</P> <!-- Biti�in ba�� --> </TBODY> </TABLE> <HR size="0" noshadow> <FONT SIZE=-2> <EM>John Perr taraf�ndan haz�rlanm��t�r.<BR> 25/07/99 tarihinde g�ncellenmi�tir. - © <A HREF="mailto:[email protected]">lynx.browser.org</A>1999 </EM></FONT> </BODY> </HTML> <!-- Biti�in sonu -->
Sonu�:
lynx ile | netscape ile |
T�m sayfalar ayn� ba�lang�� ve biti�e sahip olacaklar, sadece dil ve g�vde k�s�mlar� farkl� olacak. �imdi, t�m tekrarlayan i�eri�i de�i�tirmek i�in gereken ve sayfalar�n HTML kodlar�na g�m�lecek olan m4 makrolar�n� tasarlayaca��z.
Makrolar�n ayr�nt�lar�na girmeden �nce, onlarla yaz�lm�� yukar�daki �rne�e bir g�z atal�m:
LYNX_TITRE(Lynx, karakter-h�cresel ekranlar i�in tam nitelikli bir World Wide Web istemcisi.) LYNX_ENTETE(Lynx anasayfa) <P>Lynx i�in haz�r kaynaklar ve destek malzemesi i�in ba�lant�lar, <A HREF="http://www.crl.com/~subir/lynx.html">Lynx ba�lant�lar�</A></P> <P> ve Lynx anasayfas�nda <A HREF="http://lynx.browser.org/">Lynx Hakk�nda Bilgi.</A></P> <P>Lynx hakk�nda bilgi ve yeni haberler i�in bu sayfalara bak�n�z.</P> <P>Lynx, kullan�m s�n�rlamas� ya da tekrar-s�r�m olmaks�z�n GNU Genel A��k Lisans (GAL) alt�nda da��t�lmaktad�r. Lynx copyright ifadeleri "COPYHEADER", ve GNU GAL, "COPYING", da��t�m�n birinci seviye dizininde bulunmaktad�r. Lynx, Lynx kullan�c� grubu - b�t�n�yle g�n�ll� (ve resmi olmayan) organizasyon - taraf�ndan desteklenmektedir.</P> LYNX_PIED
G�r�ld��� gibi, HTML sayfalar� yazmak daha basittir ve metin, HTML etiketlerinin i�inde kaybolmaz. Di�er dillerde ba�ka sayfalar yazmak i�in bu dosyan�n �evirilerinin olu�turulmas� gereklidir. Frans�zca hali �u �ekilde olacakt�r:
LYNX_TITRE(Lynx un navigateur en mode console) LYNX_ENTETE(Un site pour les utilisateurs de lynx) <P>Visitez le <A HREF="http://lynx.browser.org/"> site officiel de lynx</A> pour plus d'informations sur Lynx, y compris les nouvelles mises � jour.</P> <P>Les liens vers les sources de la version courante et divers supports pour Lynx sont tenus � jour sur le site <A HREF="http://www.crl.com/~subir/lynx.html"> liens Lynx</A>.</P> <P>Lynx est distribue dans le cadre de la lisence GNU (General Public License - GPL) sans restriction sur son utilisation ni sa distribution. Les mentions des droits de reproduction de Lynx, "COPYHEADER", et GNU GPL, "COPYING", sont inclus dans la racine de l'arborescence de la distribution. Lynx est supporte par la communaute des utilisateurs de Lynx, une communaute enti�rement benevole (et non-officielle).</P> LYNX_PIED
Her dil i�in ayn� makrolar LYNX_TITRE, LYNX_ENTETE ve LYNX_PIED, farkl� arg�manlarla kullan�lm��t�r. Bu �� makro, ba�l�k ve biti�in HTML kodlar� i�in yeterli bir de�i�tirme sa�lar. Bu sistemin as�l avantaj� budur: ba�l���n ve biti�in tan�mlamalar� t�m y�re i�in tutarl�d�r. E�er ba�l�k ve biti�in tasar�m�n�n de�i�mesi gerekirse, t�m sayfalar�n elle de�i�tirilmesi yerine sadece makro tan�mlamas�n�n de�i�tirilmesi yeterli olacakt�r.
Yukar�da, bi�imin hemen hemen t�m�n� elde etmek i�in �� makro kullan�lm��t�r. Bu makrolar�n tan�mlamalar�n� i�eren dosya a�a��daki gibidir. Komutlar:
divert(-1) # Dosya mac.css # S�r�m 1.0 Lynx i�in M4 makrolar� # # Frans�zca dili taban al�narak her dil # i�in bir trans-LANG.m4 dosyas� haz�rlanm��t�r. # E�er bir �eviri dosyas� bulunmuyorsa, Frans�zca # varsay�lan dildir. # divert(0) changequote({,})dnl # t�rnak i�aretlerini k�me parantezine d�n��t�r ifdef({LANG},,{define({LANG},{fr})})dnl # Varsay�lan = frans�zca include({trans-}LANG{.m4})dnl # �eviri dosyas�n� �a��r undefine({format})dnl # Bi�im tan�mlamas�n� gizli tut define({_ANNEE_},esyscmd(date +%Y))dnl #�imdiki y�l define({LYNX_TITRE},{define(_TITLE_,$1)})dnl # Birinci makro dnl # �kinci makro define({LYNX_ENTETE},{<!-- Ba�l���n ba�� --> <HTML> <HEAD> <TITLE>$1</TITLE> <META name="description" content="m4 ve Lynx Y�resi"> <META name="keywords" content="m4, lynx, GPL"> </HEAD> <BODY BGCOLOR="#FFFFFF" LINK="#008000" VLINK="#808080" ALINK="#8080FF"> <TABLE> <TBODY> <TR><TD align=middle colspan="2"> <H1>_TITLE_</H1> <TR><TD align="left" valign="top" width="15%"> <a href="./index-en.html">_ANGLAIS_</A><BR> <a href="./index-fr.html">_FRANCAIS_</A><BR> <a href="./index-es.html">_ESPAGNOL_</A><BR> <a href="./index-it.html">_ITALIEN_</A><BR> <a href="./index-de.html">_ALLEMAND_</A><BR> <TD align=left> <!-- ba�l���n sonu -->})dnl dnl # ���nc� makro define({LYNX_PIED},{<!-- Biti�in ba�� --> </TBODY> </TABLE> <HR size="0" noshadow> <FONT SIZE=-2> <EM>_MAINTENEUR_.<BR> _MAJ_ esyscmd(date +%d/%m/%y) - © <A HREF="mailto:[email protected]"> lynx.browser.org</A> _ANNEE_</EM></FONT> </BODY> </HTML> <!-- Biti�in sonu -->})dnl
"divert(-1)" ve "divert(0)"in aras�ndaki sat�rlar, komutlard�r. "Divert", m4 makro i�lemcisinin bile�ik makrolar�ndan biridir ve i�lemcinin ��kt�s�n� y�nlendirmek i�in haz�rlanm��t�r. -1 kullan�m�, i�lemciye son HTML dosyas�n�n i�inde yer alan bir sonraki sat�rlar� yazmamas�n� s�yler. Bu da bizim istedi�imiz �eydir.
"changequote" makrosu, normalde makro arg�manlar�ndan al�nt� yapmak i�in kullan�lan t�rnak i�aretlerini yeniden tan�mlar. Bunlar, metin dosyas�n�n i�inde, �zellikle de frans�zca olanlarda, s�k�a kullan�ld�klar� i�in ve makrolar�n yanl�� yorumlanmalar�na neden olabildikleri i�in k�me parantezleriyle de�i�tirilirler. K�me parantezlerinin se�ilme nedeni; metin veya HTML i�in daha az kullan�lmalar�d�r.
"ifdef" makrosu, LANG makrosunun tan�mlan�p tan�mlanmad���n� ve varsay�lan olarak "fr"nin atan�p atanmad���n� kontrol eder. LANG makrosu ise dili ayarlamaya yarar. A�a��daki sat�rlarda, m4'� �a��r�rken HTML sayfas�n�n dilini belirtmek i�in bunu nas�l tan�mlayaca��m�z� g�rece�iz.
"include" sat�r�, C'dekiyle ayn� anlam� ta��r ve harici bir dosyay� �a��rmay� sa�lar. Bunu, ba�l�k ve biti�teki dile �zg� makro tan�mlamalar�n� y�klemek i�in kullan�r�z. A�a��da bunun dile g�re i�eri�i verilmi�tir:
divert(-1) # Dosya trans-fr.m4 # Frans�zca i�in tan�mlamalar divert(0) define({_ANGLAIS_},{Anglais})dnl define({_FRANCAIS_},{Fran�ais})dnl define({_ITALIEN_},{Espagnol})dnl define({_ESPAGNOL_},{Italien})dnl define({_ALLEMAND_},{Allemand})dnl define({_WEBMASTER_},{John Perr})dnl define({_MAINTENEUR_},{Page maintenue par _WEBMASTER_})dnl define({_MAJ_},{Date de mise à jour:})dnl
divert(-1) # Dosya trans-en.m4 # �ngilizce i�in tan�mlamalar divert(0) define({_ANGLAIS_},{English})dnl define({_FRANCAIS_},{French})dnl define({_ITALIEN_},{Spanish})dnl define({_ESPAGNOL_},{Italian})dnl define({_ALLEMAND_},{German})dnl define({_WEBMASTER_},{John Perr})dnl define({_MAINTENEUR_},{Page maintained by _WEBMASTER_})dnl define({_MAJ_},{Page updated on })dnl
E�er �spanyolca, �talyanca ya da Almanca konu�uyorsan�z, bu diller i�in benzer dosyalar yazabilirsiniz.
"undefine" sat�r�, "format" adl� bile�i�in varsay�lan tan�mlamas�n� gizler, ��nk� bu bile�ik burada kullan�lmamaktad�r. E�er bu sat�r ��kar�l�rsa, "format" kelimesi metnin i�inde her ge�i�inde t�rnak i�aretleri i�ine al�nmad�k�a kaybolacakt�r. �rnek olarak; k�me parantezine al�nd���nda. Basit bir sanaldoku sayfas�n� de�i�tirirken b�yle bir uygulama tavsiye edilmez.
Bir sonraki a�amada o anki y�la geliyoruz. Bu, bir unix komutu olan "date"i �a��ran "easyscmd" makrosu sayesinde elde edilir. Bu komut ayr�ca, sayfan�n son g�ncellenme tarihini yazd�rmak i�in biti�in tan�mlanmas�nda da kullan�l�r.
�zleyen sat�r, �� ana makromuzun ilkini - LYNX_TITRE - tan�mlar. Bu makro ayr�ca _TITRE_ isimli ba�ka bir makroyu da tan�mlar. Bu �ift tan�mlama, sayfan�n ba�lang�c�nda ve biti�inde ba�l��� (title) bir�ok kez kullanabilmek i�in gereklidir. Makronun ilk arg�man�na g�nderme yapmak i�in $1'in nas�l kullan�ld���na dikkat edin.
Kalan sat�rlar di�er iki ana makroyu - LYNX_ENTETE ve LYNX PIED - tan�mlar. Bu iki makro, HTML sayfas�ndaki ba�lang�c�n ve biti�in i�eri�ine kar��l�k gelir. Sayfan�n de�i�ken elemanlar� buna dahil de�ildir. Bunlar:
Her sat�r�n sonunda yer alan "dnl", m4'�n bile�ik makrolar�ndan biridir ve "Delete to New Line - Yeni Sat�ra Sil" anlam�n� ta��r. "dnl" ile, m4 bir makroyu yorumlarken bo� bir sat�r yaratmaz.
�imdi sistemimiz haz�r oldu�una g�re, dosyalardan bir sanaldoku sayfas�n�n olu�turulmas� a�a��daki komutla yap�l�r:
ki "XX", her dil i�in kullan�lan koddur. -D parametresinin de kullan�ld���na dikkat edin. Bu, gcc'de oldu�u gibi komut sat�r�ndan bir makro tan�mlamak i�indir.
A�a��daki tablo, dosyalar� ve bu uygulamadaki kullan�mlar�n� g�stermektedir.
�zleyen dosyalar HTML sayfalar� olu�turmak i�in kullan�lm��lard�r:
index-XX.html | Sayfan�n g�vdesi, yazar ya da �evirmen taraf�ndan metin halinde yaz�l�r. Her sayfa ve her dil i�in ayr�d�r. (kod, �ngilizce i�in XX=en, �spanyolca i�in es, vb. �eklindedir.) |
mac.css | Standart tan�mlamalar. Bu dosya t�m sayfalar ve t�m diller i�in ortakt�r. Bir �e�it bi�im sayfas� (style sheet) olarak d���n�lebilir. |
trans-XX.m4 | Bir dil i�in standart tan�mlamalar. Bu dosya, bir dil i�in olan t�m sayfalarda ortakt�r. (kod, �ngilizce i�in XX=en, �spanyolca i�in es, vb. �eklindedir.) |
T�m g�c�ne ra�men m4 makro i�lemcisi, Perl ya da Tcl gibi bir skript diliyle k�yaslanamaz. Kendine �zg� nitelikleri bir kere kavrand���nda, metin dosyalar�n� i�lemek i�in �abuk ve kolay kullan�lan bir y�ntemdir. Daha fazla bilgi i�in, kendi s�r�m�n�zle birlikte gelen d�k�mantasyona ba�vurunuz. Yakla��k 30 sayfal�k ve GNU/m4 makro i�lemcisinin t�m �zelliklerini i�eren bir ders bulacaks�n�z. Ayr�ca Bordeaux Linux Kullan�c�lar� Grubu'nun (ABUL) sayfas�na bir g�z atabilirsiniz. Bu sayfada, buradakine benzer m4 makrolar�ndan olu�an bir kit bulunmaktad�r.
GNU/m4,
ftp://prep.ai.mit.edu/pub/gnu/m4-1.4.tar.gz'de bulunabilir.
Burada anlat�lan dosyalar�, The Lynx m4 macro kit'ten indirebilirsiniz.
Ele�tirileriyle bu makaleye katk�da bulundu�u i�in Paul Kienzle'ye te�ekk�rler.
Sanaldoku sayfalar�, LinuxFocus edit�r tak�m� taraf�ndan desteklenmektedir.
© John Perr LinuxFocus 1999 |
�eviri bilgisi:
|
1999-09-08, lfparser s�r�m 0.7 taraf�ndan olu�turulmu�tur.