2017-03-06 13 views
1

나는 markdown과 m4의 조합을 사용하여 처음에 주어진 플래그에 따라 문서의 세 가지 버전을 생성합니다. 골드, 실버, 브론즈라고 부르 자.m4의 쉼표 이스케이프 ifdef 문

내가 겪은 문제점은 쉼표가있는 ifdef 문 안에 나타나는 섹션이 있으면 나머지 섹션이 false로 간주된다는 것입니다. 흥미롭게도 서브 서브 섹션에서는 실패하지 않지만 본문 텍스트에서는 실패합니다.

현재 나의 추악한 해결책은 sed에 파이프되어 대체 될 수있는 '더미 쉼표'를 사용하는 것입니다. 내가 청소기를 찾고 있어요

ifdef(`GOLDANDSILVER',dnl 
## Here's a subsection header 

### Subsubsection about thisREPLACE_ME_COMMA thatREPLACE_ME_COMMA and the other thing 

Aren't examples fun? Here's some punctuationREPLACE_ME_COMMA failureREPLACE_ME_COMMA and misfortune. 
)dnl 

, 바람직하게는 M4 전용 솔루션 내 IFDEF 문 본문에 ","나를 가질 수있다.


내가 시행 착오에 의해 배운 내용 :

  • M4는 #
  • 로 시작 라인에 어떤 내용이나 정의를 무시하는 것 [,] 쉼표를 탈출하지 않습니다
  • [[,]]는 쉼표를 이스케이프하지 않습니다.
+0

내 대답을 보았습니까? 작동합니까? – uzsolt

+0

작은 규모로 작동하지만 어떤 이유로 든 문서에 HTML로 더 이상 컴파일되지 않는 다른 것이 있습니다. 지금은 REPLACE_ME_COMMA만을 사용하겠습니다. – aepksbuck

+0

복잡한 예제를 제공한다면 확인할 수 있습니다. – uzsolt

답변

1

최상의 아이디어는 문자열 구분 기호를 사용하는 것입니다. 기본 문자열 구분 기호가 가장 좋은 해결책은 아닙니다 (제 생각에는) changequote으로 변경할 수 있습니다.

주석 구분 기호 (기본값은 # 및 줄 바꿈)를 변경할 수 있습니다. 주석 구분 기호를 사용하지 않도록 설정할 수도 있습니다.

나는 다음이 당신을 위해 좋은 것이라고 생각 :

ifdef(`GOLDANDSILVER',changequote(XXX,YYY)dnl 
XXX## Here's a subsection header 

### Subsubsection about this, that, and the other thing 

Aren't examples fun? Here's some punctuation, failure, and misfortune.YYY changequote() 
)dnl 

changequote(XXX,YYY) 참고 : 견적 XXX로 시작하고 YYY로 끝납니다. 이 경우 #으로 시작하는 줄은 문자열이 아니므로 주석이 아닙니다. changequote()에 주목하십시오 : 기본 문자열 구분 기호를 복원합니다.

$ cat x.m4 | m4 -DGOLDANDSILVER # GOLDANDSILVER is defined 
## Here's a subsection header 

### Subsubsection about this, that, and the other thing 

Aren't examples fun? Here's some punctuation, failure, and misfortune. 
$ cat x.m4 | m4 # GOLDANDSILVER isn't defined 
$