��m4 macros�����ı��ļ�

ArticleCategory:

Webdesign

AuthorImage:

[Photo de l'auteur]

TranslationInfo:

Original in fr John Perr

fr to en:John Perr

AboutTheAuthor:

��1994����Ϊ��Linux ��ʹ����.���� LinuxFocus �ķ�����Ա֮һ.


Abstract:

��һ�̳������������m4�괦������html�ļ���ά��.


ArticleIllustration:

[Illustration]

ArticleBody:

����

���������Ծ����������ı��༭��.���������ı��༭���Ѿ�ӵ�����������Թ���.C���Եı�����ҲΪ������ڱ���Ԥ����ʱ�ṩ����һ����.����ά��һЩ�����ļ��͹���С����վʱ,GNU/m4 �괦����������Ч�ļ��Ṥ����.GNU/m4 �괦�����������е�Linux�汾����,��Ϊ����Unixʹ���ߵ�һ����׼.

������,���ǽ�����չʾ�������GNU/m4 �괦����ȥά��һ��С����վ��HTMLҳ��.������򽫰�������ȷ��������վ��������.��Ȼ,���ڴ����ǿ��Բ��ö���ϵͳ����ʵ��---��Ҳ����Unix������֮����.

���ּ����Ѿ�Ӧ������������Ϥ��sendmail.������Ϊʹ������Eric Allman����Ƶ�m4 ���������.

GNU/m4 �괦��������ֻ�������ı���HTML�ļ��ı༭,������Ҫ��չCPP���Ի�����Ҫ����������ʵ����CPP����ͬ��Ч���ij��������ʱ�dz����õ�.

����

�괦������һ�������û����������ij���,�꾭��ʹ�����ı�����.���¶���:

define(AUTHOR,`Agatha Christie[email protected]')

���������ı����κεط�ʹ�� "AUTHOR"�����.������m4������,�������滻Ϊ"Agatha Christie<[email protected]>".��Ȼ�������кܶ������Ĺ���,���ǽ�������չʾ.

һ������

���Ǽ������ǽ�Ҫά��һ��ӵ����ͬҳ�浫ȴ�Dz�ͬ�����Ե���վ.����ÿһ��ҳ�涼ӵ����ͬ��header��footer��ʵ��ҳ����۵�ͳһ.Ϊ�˼򻯲��ұ���ʹ����������������ǵĽ��,���ǵ����ӽ��ִ����ı�����.����Ҳͬʱʹ������ֻʹ��lynx�����Ĺ��߾Ϳ��Է������ǵ���վ.����������һҳ��HTML����:

HTML�ı�

  
<!-- Start of header -->
<HTML>
<HEAD>
<TITLE>Lynx homepage</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 a fully-featured World Wide Web client for character-cell
displays</H1>
  <TR><TD align="left" valign="top" width="15%">
      <a href="./index-en.html">English</A><BR>
      <a href="./index-fr.html">French</A><BR>
      <a href="./index-es.html">Italian</A><BR>
      <a href="./index-it.html">Spanish</A><BR>
      <a href="./index-de.html">German</A><BR>
      <TD align=left>
<!-- End of header -->

      <P>Links to the current sources and support materials for Lynx are
   maintained at <A HREF="http://www.crl.com/~subir/lynx.html">Lynx
   links</A></P>
      <P> and at the Lynx homepage
      <A HREF="http://lynx.browser.org/">Lynx
      Information.</A></P>
      <P>View these pages for information about Lynx, including new
      updates.</P>

      <P>Lynx is distributed under the GNU General Public License (GPL) without
   restrictions on usage or redistribution.  The Lynx copyright statement,
   "COPYHEADER", and GNU GPL, "COPYING", are included in the top-level
   directory of the distribution.  Lynx is supported by the Lynx user
   community, an entirely volunteer (and unofficial) organization.</P>

<!-- Start of footer -->
</TBODY>
</TABLE>
<HR size="0" noshadow>
<FONT SIZE=-2>
<EM>Page maintained by John Perr.<BR>
Page updated on 25/07/99
- © <A HREF="mailto:[email protected]">lynx.browser.org</A>1999
</EM></FONT>
</BODY>
</HTML>
<!-- End of footer -->

����������Ľ��:

[Click here to enlarge image] [Click here to enlarge image]
�� lynx �� netscape

���е�ҳ�涼ӵ����ͬ��header��footerʽ��,ֻ�����Ժ�ҳ���body���ֲ�ͬ.�������ڽ�Ҫ��ʼ�༭m4��,���ǽ����������ǵ�HTML�ı����滻�����ظ��Ե�����.
�����ǽӴ����ϸ��֮ǰ,�������ϱ�����õ��������:

���ı�:

  
LYNX_TITRE(Lynx a fully-featured World Wide Web
            client for character-cell displays)
LYNX_ENTETE(Lynx homepage)

      <P>Links to the current sources and support materials
      for Lynx are maintained at
      <A HREF="http://www.crl.com/~subir/lynx.html">
      Lynx links</A></P>
      <P> and at the Lynx homepage
      <A HREF="http://lynx.browser.org/">
      Lynx Information.</A></P>
      <P>View these pages for information about Lynx,
      including new updates.</P>

      <P>Lynx is distributed under the
      GNU General Public License (GPL) without
   restrictions on usage or redistribution.
   The Lynx copyright statement, "COPYHEADER",
   and GNU GPL, "COPYING", are included in the top-level
   directory of the distribution.
   Lynx is supported by the Lynx user community,
   an entirely volunteer (and unofficial) organization.</P>
LYNX_PIED

������,�༭HTMLҳ��Ƚ����ײ��Ҳ������HTML��ʾ֮����ı���ʧ.As such, writing HTML pages is simpler and the text is not lost among HTML tags. ������������,�������з���.����潫���:

  
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

����ÿһ������,��ͬ�ĺ�LYNX_TITRE, LYNX_ENTETE �� LYNX_PIED �ֱ�Я����ͬ�IJ�����ʹ��.�����������ʵ�ֶ�HTML�ı��е�header��footer��Ч�滻.������һϵͳ����Ҫ�ŵ�:header��footer�Ķ����������վ����˵��һ�µ�.����header��footer��������Ҫ�ı�Ļ�,ֻ��Ҫ�޸ĺ�Ķ����ļ���������Ҫ�޸����е�ҳ����.

��Ķ���

����Ϊ�˴ﵽ��ͬ�ĸ�ʽ���Ƕ�����������.�����Ǻ�Ķ����ļ�,��������:

  
divert(-1)
# File mac.css
# Version 1.0 M4 macros for Lynx
#
# A file trans-LANG.m4 is defined for each
# language, based on the french one.
# If no translation file exist,
# french is the default.
#
divert(0)
changequote({,})dnl # change quotes to curly braces
ifdef({LANG},,{define({LANG},{fr})})dnl # Default= french
include({trans-}LANG{.m4})dnl	  # call translation file
undefine({format})dnl		  # Suppress the format definition
define({_ANNEE_},esyscmd(date +%Y))dnl 	  #Current year
define({LYNX_TITRE},{define(_TITLE_,$1)})dnl # First macro
dnl # Second macro
define({LYNX_ENTETE},{<!-- Header start -->
<HTML>
<HEAD>
<TITLE>$1</TITLE>
<META name="description" content="Site lynx and m4"> 
<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>
<!-- end of header -->})dnl
dnl # Third macro
define({LYNX_PIED},{<!-- Start of footer -->
</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>
<!-- End of footer -->})dnl

����

��"divert(-1)"��"divert(0)"֮���������ע��,"Divert"��m4�����������ú�.��ָ������������.ʹ�ò���-1,���ߴ������������յ�HTML�ļ�д�����������,��Ҳ��������ϣ����.

��"changequote"���¶��徭�������õĺ����.���ǽ��ڴ˱��滻Ϊ������({}),������Ϊ���ı���,�ر��Ƿ����ı����������ûᱻ�㷺��ʹ�ö����֮��������.������({})���ı�����HTML�ļ��к���ʹ��,��Ҳ��Ϊʲô����ѡ���˻�����({}).

��"ifdef"���ڲ��Ժ�LANG�Ƿ��Ѿ��������˲��ҽ�����Ϊ"fr".��LANG�������趨����.�����µļ�����,���ǽ�����Ϊ��ѡ��HTMLҳ�������,����ں���m4��ʱ����.

����C�����е�������ͬinclude��ͷ�ļ�����������һ���ⲿ�ļ�.����ʹ��������������������header��footer����ʹ�õ�����.������������������Ӧ������:

  
divert(-1)
# File trans-fr.m4
# Definitions for french
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)
# File trans-en.m4
# Definitions for english
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

�����ʹ�õ�����������,�������͵���,�����д����ʶ�Ķ�Ӧ����Щ���Ե��ļ�.

"undefine"��ֹ�������ﲻ�õ����õ�"format".�����Ѿ�������(��{}��Χ����)�����һ�б�ʡ��,������ı��ļ���"format"ÿ�γ���ʱ������ʧ.�����һ��С����վʱ,�������Dz���ȡ��.

�������Ƕ��������ڵ���ݵĶ���,�����ɺ�"easyscmd"���õ���,"easyscmd"����Unix��ϵͳ����date.�������Ҳ����Ҫ��header��footer�д�ӡ��ҳ��������ڵ�ʱ��ʹ��.

��������һ�ж��������ǵ���Ҫ���������еĵ�һ��: LYNX_TITRE.����궨��������һ���� _TITRE_ �ĺ�.Ϊ����ҳ���header��footer�ж��ʹ��һ���������DZ�Ҫ��.��ע�� $1 ��������ָ���ĵ�һ������.

ʣ�µĶ����Ƕ�������������Ҫ�ĺ�:LYNX_ENTETE �� LYNX_PIED.���Ƿֱ��Ӧ��ҳ����(������)header��footer�е�����.������:

����һ��ĩβ�����ֵ�"dnl"��һ��m4�����õĺ�,��˼��"ɾ�����µ�һ��".���� "dnl" m4�Ͳ����ڽ��ͺ��ʱ�����һ������.

����ҳ��

�������ǵ�ϵͳ�Ѿ��������,������������Щ�ļ�������ҳҳ��.

"XX" �Ƕ��ڸ������ԵĴ���.��ע������Ӧ����ѡ�� -D ,������C���Ե�gcc,�������ж�����һ����.

�ܽ�

�±��ṩ������������е��ļ������ǵ�����.

������ļ���������HTMLҳ��:

index-XX.html ҳ�������,���������߻����ɷ�������д��.����ÿ��ҳ���ÿ�������������Dz�ͬ��(����Ӣ������� XX=en ,����������������� XX=es �ȵ�).
mac.css �����˱�׼�Ķ���.�������е�ҳ��,���е���������ļ��ǹ�ͬ��.���Ա������Ƕ�����ij��ҳ������ļ�.
trans-XX.m4 ��ÿһ�����Եı�׼����.����ļ�����һ�����Ե�����ҳ���ǹ�ͬ��.(����Ӣ������� XX=en ,����������������� XX=es �ȵ�).

����

�����������ú�����,m4�������򲻿����������Ľű��������,��Perl Tcl.��һ�����˽⵽��������,����һ�������ı��ļ����ٶ������ֿɵõĹ���.����ԴӲ���ϵͳ���ĵ��еõ�����IJο�.������ҵ�һ����Լ30ҳ��m4�̲�,���а�����GNU/m4�괦����������з���.��ͬʱҲ���Է���һ�²�����Linux���ֲ�(ABUL),���վ�������m4�����ά����,�����ǽ�������ӷdz���ʶ.

����

���Դ� ftp://prep.ai.mit.edu/pub/gnu/m4-1.4.tar.gz �õ�GNU/m4
�������ϵ��ļ�: The Lynx m4 macro kit

��л Paul Kienzle ������ƪ����.