UseModWiki소스수정/전처리매크로 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: UseModWiki소스수정/전처리매크로 는 읽기 전용 페이지입니다.
== 페이지를 저장할 때 수행되는 매크로 도입 == * 현재 UseModWiki 에서 지원하는 모든 매크로나 태그들은, 사용자가 입력한 그대로 저장이 되었다가, 화면에 출력할 때 매번 wiki.pl 이 내용을 적절히 치환하여 출력한다. 따라서 매크로의 출력 결과는, 페이지를 열람하는 순간의 상태에 좌우된다. * [[/MySign매크로]]와 같이, 페이지를 "작성하는" 순간의 상태에 의존하는 출력을 얻을 수 있었으면..하여 뚝딱거려보았다. * 부작용: ** 아래에 언급되는 매크로들은 출력시 변환되는 게 아니라 입력시 변환되어 저장된다. ** 따라서, 한 번 저장하고 나면 원래의 매크로가 아닌 치환된 문자열만이 남아 있게 된다. 페이지 수정하기로 들어가 보면 알 수 있다. ** 기존에 동작하는 모든 태깅, 치환 등보다 앞서서 적용되어 버린다. 대표적으로, {{{ }}} 안에 적어도 치환되어 버리니 주의할 것. 게다가 {{{ }}} 안에서는 < 등의 escape 도 통하지 않으므로, "<mysign>" 을 문자 그대로 출력되게 할 방법이 없다. ** 변환하는 시점이 타당한지 확신이 서지를 않는다. 테스트하는 동안은 잘 동작했는데, 예기치 않은 곳에서 엉뚱하게 동작할 우려가 있다. : 다음과 같이 DoPost 함수 내에 ProcessPostMacro() 함수를 삽입한다. {{{#!vim perl sub DoPost { ... # Remove "\r"-s (0x0d) from the string $string =~ s/\r//g; ### 다음 라인 추가 $string = &ProcessPostMacro($string); ### # Lock before getting old page to prevent races &RequestLock() or die(T('Could not get editing lock')); ... }}} : 그 다음, 적당한 위치에 ProcessPostMacro() 함수를 통채로 작성한다. {{{#!vim perl sub ProcessPostMacro { my ($string) = @_; ### 여기에 사용할 매크로들을 나열한다 $string = &PostMacroMySign($string); return $string; } }}} : 이제 "작성시 변환되는 매크로"를 도입하고 싶다면, 적절한 변환 함수를 작성하고, 그 함수를 위의 ProcessPostMacro 안에서 다음과 같이 호출해준다. {{{ $string = &내가추가한함수($string); }}} : 또한, 미리보기 창에서도 이런 매크로가 정의되게 하기 위해서, DoPreview() 함수도 마찬가지로 수정한다. {{{#!vim perl sub DoPreview { $ClickEdit = 0; print &GetHttpHeader(); print &GetHtmlHeader("$SiteName: " . T('Preview'), "Preview"); ### 다음 라인을 아래 두 줄로 교체 # print &WikiToHTML(&GetParam("text", undef)); my ($textPreview) = &GetParam("text", undef); print &WikiToHTML(&ProcessPostMacro($textPreview)); ### } }}} ---- [[위키위키분류]]
UseModWiki소스수정/전처리매크로
페이지로 돌아가기 |
다른 수정본 보기