이 패치의 목적은
매크로 사용법이 달라진 것은 없고, 위키는 다음과 같이 동작한다.
아래의 매크로는 따로 분리하지 않았다.
### 패치를 위해 추가된 환경설정 변수 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() { ... }
ext1.66a - 어떤 매크로를 불러올지 판단할 때, "&__LT__;매크로이름"만 검사하던 것을 "<매크로이름"도 같이 검사하게 하였음. (따라서 위키 매크로가 아닌 html태그도 매크로로 덮어 쓸 수 있음)
ext1.75 - 굳이 사용자가 바꿀 일이 없다고 판단되어서, 매크로 파일이 들어가는 디렉토리 (macros, mymacros) 를 config 파일에서 제거함.
ext1.78 - 매크로를 읽고 실행하는 부분을 단순화. UseModWiki매크로의 매크로 제작법이 좀 더 간단해짐.
wiki.pl 의 용량을 꽤 줄일 수 있다고 생각했는데 막상 지워봐도 20KB 정도밖에 안 주는군요. -.-;;;
흐음, 위에 do 명령으로 매크로를 부르는 것을 require 로 부르도록 고칠까 하는데 두 명령의 정확한 차이점을 아시는 분?