[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
전환(Diversion)은 임시로 출력을 저장할 수 있는 방법을 제공해 준다.
m4
의 출력은 언제던지 임시 파일로 전환될 수 있다. 그리고 출력
스트림으로 다시 끼워 넣을 수 있다. 나중에 전환을 되돌릴 수도 있다.
번호붙여진 전환은 0에서 위로 헤아려진다. 전환 번호 0은 보통의 출력
스트림 이다. 동시에 존재하는 전환 번호는 그것을 기술하는 데 사용되는
메모리에 의해 제한된다. 그렇기 때문에 GNU m4
는 전환을 메모리에
유지하려고 한다. 그러나 전체적으로 모든 전환들을 다루기에 적당한 메모리
양으로 제한이 되어 있다 (현 재는 512K). 최대치가 넘어갈 때에는
임시파일이 열려서 가장 큰 전환을 메모리 에서 받는다. 다른 전환을 위애
그 메모리는 자유롭게 된다. 그래서 이것은 이론 상으로 전환의 개수는 사용
가능한 파일 기술자의 숫자에 의해 제한이 된다.
9.1 출력을 전환하기 | ||
9.2 출력을 원래대로 되돌려 놓기 (Undivering output) | ||
9.3 전환 숫자 (Diversion numbers) | ||
9.4 전환된 텍스트 취소하기 |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
divert
를 사용하여 전환할 수 있다.
divert(opt number) |
number은 전환하는 데 사용되는 번호이다. 만일 number가 없다면 0으로 가정된다.
divert
는 확장되지 않는다.
m4
의 모든 입력이 처리될 때, 모든 존재하는 전환들은 자동적으로
번호순서대로 원래데로 돌아온다.
divert(1) This text is diverted. divert ⇒ This text is not diverted. ⇒This text is not diverted. ^D ⇒ ⇒This text is diverted. |
여러개의 같은 인자를 가지는 divert
의 호출은 이전에 전환된
텍스트에 덮어 쓰지 않는다. 단지 덧붙일 뿐이다.
만일 출력이 존재하지 않는 전환으로 전환된 다면 그것은 간단히 취소된다. 이것은 원치 않는 출력을 나타나지 않게 하는 데 사용될 수 있다. 원치 않는 출력의 공통적인 경우는 매크로 정의때마다 지겹게 따라붙는 뉴라인 문자일 것이다. 여기에 그것을 피하는 방법이 있다.
divert(-1) define(`foo', `Macro `foo'.') define(`bar', `Macro `bar'.') divert ⇒ |
이것은 m4
에서의 공통적인 프로그래밍 관습이다.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
전환된 텍스트는 내장 매크로 undivert
를 사용하여 원래데로 돌려놓을
수 있다.
undivert(opt number, ...) |
되돌려지는 전환은 주어진 순서대로 인자로 주어져야 한다. 인자가 없을 경우 는 전환된 모든 것들이 번호 순서래로 되돌려진다.
undivert
의 확장은 없다.
divert(1) This text is diverted. divert ⇒ This text is not diverted. ⇒This text is not diverted. undivert(1) ⇒ ⇒This text is diverted. ⇒ |
마지막 두개의 빈 라인에 주의하라. 하나는 undivert
로 인해서
나타나는 것이 고 하나의 빈라인은 divert
로 인해서 나타나는 것이다.
전환은 종종 이와같이 빈 공백 라인으로 시작된다.
전환된 텍스트가 되돌려 질때에는, 그것은 m4
가 다시 읽지는 않는다.
단지 바로 현재의 출력으로 복사할 뿐이다. 그러므로 되돌려진것을 다시
전환하는 것은 에러가 아니다.
전환이 되돌려 진다면, 전환된 텍스트는 취소되고 이것은 더이상 거꾸 로 전환시키는 것은 불가능하다.
divert(1) This text is diverted first. divert(0)undivert(1)dnl ⇒ ⇒This text is diverted first. undivert(1) ⇒ divert(1) This text is also diverted but not appended. divert(0)undivert(1)dnl ⇒ ⇒This text is also diverted but not appended. |
현재의 전환을 다시 되돌리려는 시도는 조용히 묵살된다.
GNU m4
는 파일을 되돌릴 수 있다. 인자로 숫자가 아닌 파일 이름을
주면, 현재의 출력으로 복사되며, 해석되지 않는다. 이것을 보완하는 것이
앞서도 이야기한 내장 매크로 include
이다 (see section 파일을 삽입하기). 이
차이점을 설명하기 위해서, 파일 ‘foo’가 단어 ‘bar’를 포함하고
있다고 가정하자.
define(`bar', `BAR') ⇒ undivert(`foo') ⇒bar ⇒ include(`foo') ⇒BAR ⇒ |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
내장 매크로 divnum
이 있다.
divnum |
이것은 현재의 전환숫자로 확장된다.
Initial divnum ⇒Initial 0 divert(1) Diversion one: divnum divert(2) Diversion two: divnum divert ⇒ ^D ⇒ ⇒Diversion one: 1 ⇒ ⇒Diversion two: 2 |
인자가 없는 마지막 divert
호출은 필요없다. 되돌려진 텍스트는
다른 경우에 그 자신에게로 전환될 것이다.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
출력이 전환될 때, 전환된 텍스트가 활성화될 필요가 있을 것이다. 입력의
끝이 보일 때 비어 있지 않은 모든 전환된 것을 메인의 출력 스트림으로
가져온다. 이 때 하나의 전환을 취소하는 방법이 필요해진다. 모든
전환된것들을 취 소하고 싶다면, 가장 쉬운 길은 m4
에게
‘divert(-1)’로 입력의 끝을 알리고 바로 다음에 명확하게
‘undivert’를 해주는 것이다.
divert(1) Diversion one: divnum divert(2) Diversion two: divnum divert(-1) undivert ^D |
아무런 출력도 생성되지 않을 것이다.
해당하는 전환만을 선택하여 클리어하는 것은 야래의 매크로를 사용하면 가능하다.
define(`cleardivert', `pushdef(`_num', divnum)divert(-1)undivert($@)divert(_num)popdef(`_num')') ⇒ |
이예는 undivert
를 호출하는 데, 그 영향은 인자로 주어진 전환을
클리어하게 된다. ( 이 매크로에는 더러운 버그가 하나 있다! 그것은
여러분들이 고쳐보라.)
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Autobuild on February 7, 2019 using texi2html 1.82.