m4 macros 로 텍스트 파일 만 들 기
원본 링크:
http://ldp.linux.no/linuxfocus/ChineseGB/September1999/article111.html
보충 읽 기:
http://mbreen.com/m4.html
by John Perr
소개
정의
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)
- © <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.
페이지 만 들 기
현재 시스템 설정 이 완료 되 었 습 니 다.아래 명령 은 이 파일 에서 홈 페이지 를 생 성 합 니 다.
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 가 이 글 을 검토 해 주 셔 서 감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.