<include> 매크로 출력을 html 변환
다른페이지의내용을포함하여출력하기 관련
- <include(A)> 로 A 페이지의 내용을 불러올 때, A 페이지의 내용은 위키에서 처리하지 않고 소스 그대로 출력되는 것을 개선.
- "문제 해결"이 아니라 "개선" 항목으로 취급하는 이유는, 원래의 방식과 장단점이 있어서 반드시 수정해야 할 필요는 없다고 보기 때문이다.
- 프로그래밍팁/Wiki 에 있는 지양님의 패치를 적용.
- 포함되는 페이지 안에 있는 include 태그는 처리되지 않는다. (처리되면 곤란하다. 무한루프에 빠질 수 있기 때문이다)
- include 매크로의 앞뒤에는 공백을 비롯한 다른 문자가 오면 안 된다.
- 부작용:
- 원래의 페이지와 포함되는 페이지들 안에 각각 # 으로 시작하는 헤드라인이 있을 경우 <toc> 태그의 변환이 정상적이지 않다. 모든 헤드라인을 전부 아울러 목차를 만든다.
- include 매크로의 처리 순서를 다른 매크로들과는 달리 하였기 때문에, 소스의 일관성이 떨어진다.
-
sub WikiToHTML {
...
$SaveNumUrlIndex = 0;
$pageText =~ s/$FS//g;
$pageText = &MacroIncludeSubst($pageText);
if ($RawHtml) {
...
}
-
sub MacroSubst {
...
$txt =~ s/\&__LT__;RandomPage\((.*)\)\&__GT__;/&MacroRandom($1)/gei;
...
-
sub MacroIncludeSubst {
my ($txt) = @_;
$txt =~ s/(^|\n)<include\((.*)\)>([\r\f]*\n)/$1 . &MacroInclude($2) . $3/geim;
return $txt;
}
Notes
ext1.48c 에서 소스 수정되었습니다.
표안에 인크루드를 하고 싶은데 안되네요. 아마 매크로앞뒤에 공백을 비롯한 문자열이 오면 안되기 때문에 그런 것 같은데 해결책은 없을까요?
- 여기서 표는 html이 아니라 ||이런 ||식의 || 위키태그를 이용한 표를 말합니다.
어차피 안 될 겁니다. 인클루드를 먼저 하고 나서 표를 처리를 하기 때문에, "||"를 사용한 표는 한 행이 한 줄에 적혀야 되는데, 인클루드되는 페이지가 두 줄 이상이면 표를 인식 못하겠죠.
- 저런... 그 문제를 피하기 위해서 인크루드를 할려고 했던 건데..
여러 줄을 지원하는 테이블을 만들면 되겠네요. 지금 테이블처럼 복잡한 기능 넣지 말고, 기본적인 태그만 제대로 지원하면 할 수 있지 않을까요?
[참고]. 결국 시작 태그, 중간 태그, 끝 태그를 따로 빼고,
- 시작태그 - 멀티라인테이블 처리중이 아니면 table tr td, 처리중이면 /tr tr td
- 중간태그 - /td td
- 끝태그 - /tr
- 테이블이 끝나면 /table
정도의 태그를 뿌려주면 되지 않을까 싶네요.
- 허억, 참고라고 적어주신 곳을 보니 참고가 아니라 이미 만들어져있군요. 냥날님이 소스공개해주시면 그만이겠는데요.
위키위키분류