[첫화면으로]UseModWiki소스수정/매크로모듈화

마지막으로 [b]

출력시 치환되는 매크로들을 모듈 파일로 분리

매크로들이 전부 wiki.pl 안에 들어 있기 때문에, 자신이 따로 수정한 매크로를 사용하는 경우 ext 버전이 업데이트될 때마다 위키 소스를 받아서 다시 해당 매크로를 수정하던가, 반대로 위키 소스를 받아오지 못하고 매번 관련 패치를 직접 적용하던가 해야 되는 불편함1이 있어서 나온 패치이다.

이 패치의 목적은

사용법

위키 홈페이지를 운영하는 입장에서의 매크로 추가, 삭제, 재정의 방법은 UseModWiki매크로를 보라.

매크로 사용법이 달라진 것은 없고, 위키는 다음과 같이 동작한다.

아래의 매크로는 따로 분리하지 않았다.

부작용

짐작조차 할 수 없음. -_-; 현재까지는 이전 방식과 완전히 동일한 출력을 보여주고는 있는데...

wiki.pl 수정

다음 환경변수 추가
### 패치를 위해 추가된 환경설정 변수
use vars qw(
    ...
    $MacrosDir $MyMacrosDir
    );
###

다음 전역변수 추가

### 패치를 위해 추가된 내부 전역 변수
use vars qw(%RevisionTs $FS_lt $FS_gt $StartTime $Sec_Revision $Sec_Ts
    ...        # <-- 이 자리에 있던 $MyFootnoteCounter $MyFootnotes 는 매크로가 분리되면서 그쪽으로 넘어갔다. 삭제
    %MacroFile);
###

MacroSubst() 함수를 왕창 뜯어고친다.

sub MacroSubst {
    my ($txt) = @_;

### 분리할 수 없는 매크로 목록
### <UploadedFiles>
    $txt =~ s/(\&__LT__;uploadedfiles\&__GT__;)/&MacroUploadedFiles($1)/gei;
### <comments(숫자)>
    $txt =~ s/(\&__LT__;comments\(([^,]+),([-+]?\d+)\)&__GT__;)/&MacroComments($1,$2,$3)/gei;
### <noinclude> </noinclude> from Jof
    $txt =~ s/\&__LT__;(\/)?noinclude\&__GT__;//gei;
### <longcomments(숫자)>
    $txt =~ s/(\&__LT__;longcomments\(([^,]+),([-+]?\d+)\)&__GT__;)/&MacroComments($1,$2,$3,1)/gei;
### <memo(제목)></memo> from Jof
    $MemoID = 0;
    $txt =~ s/(&__LT__;memo\(([^\n]+?)\)&__GT__;((.)*?)&__LT__;\/memo&__GT__;)/&MacroMemo($1, $2, $3)/geis;
### <trackbacksent> 
    $txt =~ s/(((^|\n)\* .*)*\n?)(&__LT__;trackbacksent&__GT__;)/&MacroTrackbackSent($4,$1)/gei;
    $txt =~ s/(((^|\n)\* .*\n\*\* .*\n\*\* .*)*\n?)(&__LT__;trackbackreceived&__GT__;)/&MacroTrackbackReceived($4,$1)/gei;
###

### 매크로 모듈화
    my $macroname;
    my ($MacrosDir, $MyMacrosDir) = ("./macros/", "./mymacros/");
    foreach my $dir ($MacrosDir, $MyMacrosDir) {
        foreach my $macrofile (glob("$dir/*.pl")) {
            if ($macrofile =~ m|$dir/([^/]*).pl|) {
                $macroname = $1;
                $MacroFile{"$macroname"} = $macrofile;
            }
        }
    }

    foreach my $macro (sort keys %MacroFile) {
        if ($txt =~ /(&__LT__;|<)$macro/i) {
            require "$MacroFile{$macro}";
            $txt = &{\&$macro}($txt);
        }
    }

    return $txt;
}

이제, 위 MacroSubst 에 들어 있지 않은 매크로들의 실제 구현 부분은 지워 버린다. :-)

# 이 시점에서 삭제된 함수들
sub MacroColor { ... }
sub MacroColorBk { ... }
sub MacroFootnote { ... }
sub MacroMyInterest { ... }
sub MacroMostPopular { ... }
sub MacroEDic { ... }
sub MacroKDic { ... }
sub MacroJDic { ... }
sub MacroUserList { ... }
sub MacroWantedPages { ... }
sub MacroOrphanedPages { ... }
sub MacroAllPagesFrom { ... }
sub MacroAllPagesTo { ... }
sub MacroVote { ... }
sub MacroMySign { ... }
sub MacroCalendar { ... }
sub MacroWikiVersion { ... }
sub MacroHistory { ... }
sub MacroGoto { ... }
sub MacroTitleSearch { ... }
sub MacroFullSearch() }
sub MacroDate() { ... }
sub MacroTime() { ... }
sub MacroDateTime() { ... }
sub MacroAnchor() { ... }
sub MacroPageCount() { ... }
sub MacroRandom() { ... }

macros/매크로.pl 파일들 추가

wiki.pl 에서 지운 매크로들을 별도의 파일로 $MacrosDir로 지정된 디렉토리에 추가해 준다. /Download에서 최신 버전의 ext 버전을 받아 압축을 풀면 들어 있다.

추가 업데이트 내역

ext1.63a - 매크로 파일을 읽을 때 do 대신 require 사용하도록 수정. do 는 호출시마다 파일을 읽고 require 는 처음 호출될 때 한번만 읽는다고 하여서 바꿨음. 사실 여기서는 어차피 각 매크로 파일을 읽는 것은 단 한번만 이뤄지기 때문에 차이가 없고, 나중에 오히려 do 를 써야만 되도록 수정될 가능성도 있음.. (한 마디로, 주인장도 잘 모르면서 바꿨단 얘기 -_-;) 각 매크로 파일 마지막에 "1;"이 들어가야만 한다.

ext1.66a - 어떤 매크로를 불러올지 판단할 때, "&__LT__;매크로이름"만 검사하던 것을 "<매크로이름"도 같이 검사하게 하였음. (따라서 위키 매크로가 아닌 html태그도 매크로로 덮어 쓸 수 있음)

ext1.75 - 굳이 사용자가 바꿀 일이 없다고 판단되어서, 매크로 파일이 들어가는 디렉토리 (macros, mymacros) 를 config 파일에서 제거함.

ext1.78 - 매크로를 읽고 실행하는 부분을 단순화. UseModWiki매크로의 매크로 제작법이 좀 더 간단해짐.

사용자 의견

wiki.pl 의 용량을 꽤 줄일 수 있다고 생각했는데 막상 지워봐도 20KB 정도밖에 안 주는군요. -.-;;;

-- Raymundo 2004-10-6 11:32 am

흐음, 위에 do 명령으로 매크로를 부르는 것을 require 로 부르도록 고칠까 하는데 두 명령의 정확한 차이점을 아시는 분?

-- Raymundo 2004-10-7 10:29 pm
이름:  
Homepage:
내용:
 

위키위키분류
각주:
1. 물론 매크로 뿐 아니라 파싱이나 그 외 다른 부분도 마찬가지이지만, 매크로의 경우 거의 대부분이 다른 부분에 무관하게 독립적으로 작동하기 때문에 불필요하게 불편하다
2. 부등호를 같이 검사하는 이유는 매크로가 아닌데도 문자열이 있어서 불필요하게 매크로 파일을 읽는 것을 막기 위함이고, 앞쪽 부등호만 검사하는 이유는 당연히 매크로이름 뒤쪽에는 임의의 갯수의 인자가 있기 때문에 복잡해서이다.

마지막 편집일: 2012-2-11 12:25 am (변경사항 [d])
1252 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기