m4 macros 로 텍스트 파일 만 들 기

m4 macros 로 텍스트 파일 만 들 기
 
원본 링크:
http://ldp.linux.no/linuxfocus/ChineseGB/September1999/article111.html
보충 읽 기:
http://mbreen.com/m4.html
by John Perr저자:1994 년 부터 Linux 의 사용자 가 되 었 습 니 다.그 는 Linuxfocus 의 프랑스 구성원 중 한 명 입 니 다.목록:
소개
정의
4.567917.하나의 예.4.567918.
HTML 텍스트
매크로 텍스트:매크로 의 정의
해석
페이지 만 들 기
총화
결론
연결
이 글 에 대한 논평 
m4 macros 로 텍스트 파일 만 들 기
요약:
이 튜 토리 얼 은 m4 매크로 프로세서 로 html 파일 의 유 지 를 간소화 하 는 방법 을 설명 합 니 다.
 
소개 하 다.
매크로 명령 언어 는 텍스트 편집기 에 자주 사 용 됩 니 다.대부분의 텍스트 편집기 에 서 는 이러한 언어 기능 을 가지 고 있 습 니 다.C 언어의 컴 파일 러 도 프로 그래 밍 자 에 게 사전 처 리 를 컴 파일 할 때 이러한 기능 을 제공 합 니 다.일부 프로필 을 유지 하고 소형 사 이 트 를 관리 할 때 GNU/m4 매크로 처리 기 는 작업량 을 효과적으로 줄 일 수 있 습 니 다.GNU/m4 매크로 처리 기 는 모든 Linux 버 전에 따라 발 행 됩 니 다.모든 유 닉 스 사용자 의 표준 이 됩 니 다.
다음은 GNU/m4 매크로 프로 세 서 를 사용 하여 작은 사이트 의 HTML 페이지 를 유지 하 는 방법 을 보 여 드 리 겠 습 니 다.이 프로그램 은 전체 사이트 의 일관성 을 확보 하 는 데 도움 이 될 것 입 니 다.물론 이 프로그램 에 대해 우 리 는 다양한 시스템 도 구 를 사용 하여 실현 할 수 있 습 니 다.그것 이 바로 유 닉 스 의 매력 입 니 다.
이 기술 은 우리 가 잘 아 는 sendmail 에 사용 되 었 습 니 다.그것 은 Eric Allman 이 디자인 한 m4 매크로 구성 요 소 를 사 용 했 기 때 문 입 니 다.
GNU/m4 매크로 프로 세 서 는 텍스트 와 HTML 파일 의 편집 에 만 국한 되 지 않 습 니 다.CPP 기능 을 확장 하거나 다른 언어 로 CPP 기능 과 같은 효 과 를 구현 하려 는 프로그래머 에 게 유용 합 니 다. 
정의.
매크로 프로 세 서 는 사용자 정의 명령 을 설명 하 는 프로그램 입 니 다.매크로 는 텍스트 관리 에 자주 사 용 됩 니 다.다음 정의:
define(AUTHOR,`Agatha [email protected]')
텍스트 의 어느 곳 에서 든"AUTHOR"이라는 단 어 를 사용 할 수 있 습 니 다.또한 m4 처리 후,그 는"AgathaChristie"물론 그 는 다른 기능 도 많이 가지 고 있 습 니 다.아래 에서 보 여 드 리 겠 습 니 다." 
하나의 예
우 리 는 같은 페이지 를 가지 고 있 지만 서로 다른 언어 를 가 진 사 이 트 를 유지 할 것 이 라 고 가정 합 니 다.또한 모든 페이지 는 같은 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 -->

다음은 탐색 결과 입 니 다.
lynx 로
넷 스 케 이 프 로
모든 페이지 는 같은 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 표시 사이 의 텍스트 를 잃 어 버 리 지 않 습 니 다.Asuch,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 ement benevole (et non-officielle).</P>
LYNX_PIED

모든 언어 에 대해 같은 매크로 LYNXTITRE, LYNX_ENTETE 와 LYNXPIED 는 각각 다른 매개 변 수 를 가지 고 사 용 됩 니 다.이 세 개의 매크로 는 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 파일 에 아래 내용 을 쓰 지 않 는 다 고 알려 주 는 것 도 우리 가 원 하 는 것 입 니 다.
매크로"change quote"는 자주 사용 되 는 매크로 인 자 를 다시 정의 합 니 다.이 인 자 는 괄호({})로 대 체 됩 니 다.이 는 텍스트,특히 프랑스어 텍스트 에서 이러한 인용 이 광범 위 하 게 사용 되 기 때문에 매크로 와 오해 가 있 습 니 다.괄호({})는 텍스트 나 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 is})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"이 나타 날 때마다 사라 집 니 다.작은 사 이 트 를 설계 할 때 이렇게 하 는 것 은 바람 직 하지 않 습 니 다.
다음은 현재 년도 에 대한 정의 입 니 다.이것 은 매크로"easyscmd"에서 얻 은 것 입 니 다."easyscmd"는 유 닉 스 를 호출 하 는 시스템 명령 date 입 니 다.이 명령 도 header 와 footer 에서 페이지 업데이트 날 짜 를 출력 해 야 할 때 사 용 됩 니 다.
다음 줄 은 우리 의 주요 세 개의 매크로 중 첫 번 째:LYNX 를 정의 합 니 다.TITRE.이 매크로 는 또 다른 이름 을 정 의 했 습 니 다.TITRE_ 의 매크로.페이지 의 header 와 footer 에서 여러 번 성명 을 사용 하기 위해 필요 합 니 다.$1 의 역할 은 매크로 를 가리 키 는 첫 번 째 매개 변수 입 니 다.
나머지 단락 은 다른 두 개의 주요 매크로 를 정의 합 니 다:LYNXENTETE 와 LYNXPIED.그들 은 각각 페이지 의 헤더 와 footer 의 내용 에 대응 합 니 다.그것들 은:
4.567917.번역 문서 에서 번역 해 야 할 문자.4.567918.
  • 페이지 를 편집 할 때 수정 할 수 있 는 내용,예 를 들 어 날짜 와 관리자
  • 이 줄 끝 에 나타 나 는"dnl"은 m4 내 장 된 매크로 입 니 다."새로운 줄 로 삭제"라 는 뜻 입 니 다."dnl"m4 가 있 으 면 매크로 를 설명 할 때 빈 줄 이 생기 지 않 습 니 다. 
    페이지 만 들 기
    현재 시스템 설정 이 완료 되 었 습 니 다.아래 명령 은 이 파일 에서 홈 페이지 를 생 성 합 니 다.
    m4 -DLANG=XX mac.css index-XX.m4 > index-XX.html
    "XX"는 다양한 언어 에 대한 코드 입 니 다.옵션-D,C 언어 에 적합 한 gcc 를 사용 하여 명령 행 에서 매크로 를 정의 하 였 습 니 다. 
    총결산
    아래 표 는 이 예 에서 의 파일 과 그들의 역할 을 제공 합 니 다.
    다음 파일 은 HTML 페이지 를 만 드 는 데 사 용 됩 니 다:
    index-XX.html
    페이지 의 주 체 는 작가 나 번역자 가 쓴 것 입 니 다.각 페이지 와 각 언어 에 대해 그 내용 이 다 릅 니 다(영어 코드 에 대해 서 는 XX=en,스페인어 코드 에 대해 서 는 XX=es 등).
    mac.css
    표준 정 의 를 포함 합 니 다.모든 페이지 에 대해 모든 언어 이 파일 은 공통 적 입 니 다.특정한 페이지 스타일 을 정의 하 는 파일 로 볼 수 있 습 니 다.
    trans-XX.m4
    모든 언어 에 대한 표준 정의 입 니 다.이 파일 은 한 언어의 모든 페이지 에 공통 적 입 니 다.(영어 코드 에 대해 서 는 XX=en,스페인어 코드 에 대해 서 는 XX=es 등)
     
    결론.
    비록 그 역할 이 매우 뚜렷 하지만,m4 처리 프로그램 은 PerlTcl 과 같은 다른 스 크 립 트 언어 와 비교 할 수 없습니다.그러나 그 특성 을 알 게 되면 텍스트 파일 을 처리 하 는 빠 르 고 손 쉽게 얻 을 수 있 는 도구 입 니 다.운영 체제 의 문서 에서 더 많은 참 고 를 얻 을 수 있 습 니 다.약 30 페이지 의 m4 교재,교 재 를 찾 을 수 있 습 니 다.그 중 에는 GNU/m4 매크로 처리 프로그램의 모든 면 이 포함 되 어 있 습 니 다.보 르 도 리 눅 스 클럽(ABUL)을 방문 하 셔 도 됩 니 다.이 사 이 트 는 m4 매크로 로 유지 되 고 있 습 니 다.오늘 의 예 와 매우 잘 알 고 있 습 니 다. 
    잇닿다
    되다ftp://prep.ai.mit.edu/pub/gnu/m4-1.4.tar.gzGNU/m4 이상 다운로드 받 은 파일:The Lynxm 4 macro kit
    Paul Kienzle 가 이 글 을 검토 해 주 셔 서 감사합니다.

    좋은 웹페이지 즐겨찾기