Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
[Photo de l'auteur]
John Perr taraf�ndan.

Yazar Hakk�nda:

1994'ten beri Linux kullan�c�s�; LinuxFocus'un Frans�z edit�rlerinden biridir.


��indekiler:

m4 makrolar�yla metin dosyalar� olu�turma.

�eviri : Serdar Yan�ko�lu

[Illustration]

�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.



 

Giri�

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.

 

Tan�m

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.

 

Bir �rnek

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:

 

HTML Hali

  
<!-- 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�:

[Resmi büyütmek için buraya týklayýnýz.] [Resmi büyütmek için buraya týklayýnýz.]
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:

 

Makro Hali

  
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.

 

Makro Tan�mlamalar�

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)
- &copy <A HREF="mailto:[email protected]">
lynx.browser.org</A>
_ANNEE_</EM></FONT>
</BODY>
</HTML>
<!-- Biti�in sonu -->})dnl
 

A��klama

"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.

 

Sayfa Olu�turma

�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.

 

�zet

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.)
 

Sonu�

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.  

Ba�lant�lar

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:
fr -> -- John Perr
fr -> en John Perr
en -> tr Serdar Yan�ko�lu

1999-09-08, lfparser s�r�m 0.7 taraf�ndan olu�turulmu�tur.