-
- 1. comments 매크로, thread 매크로 개선
-
-
- 1.1. 사용법:
-
- 1.2. 부작용
-
- 1.3. wiki.pl 수정
-
- 1.4. action/comments.pl 수정
-
- 1.5. macros/thread.pl 수정
-
- 1.6. 추가 업데이트 내역
-
- 1.7. 사용자 의견
-
1. comments 매크로, thread 매크로 개선
/Comments매크로나 /Thread매크로의 경우 괄호 안에 그 매크로가 들어간 페이지이름을 적어주어야 했다. 이 경우 그 페이지의 내용을 다른 곳에 옮길 때 (횡설수설의 내용 중 오래된 것을 횡설수설/2005로 옮기는 등) 그 매크로가 같이 옮겨질 겨우 일일이 찾아서 페이지이름 파라메터를 고쳐주어야 한다.
이 패치를 적용하면 comments, longcomments, thread 매크로에서 더 이상 페이지 이름을 적어주지 않아도 된다.
/Comments매크로와 /Thread매크로 페이지의 사용법 참조할 것.
- 괄호 안 파라메터에 페이지 이름을 적어주지 않아도 되고, 나머지 파라메터만 적어주면 된다.
- 페이지 이름을 쓴 것도 인식하므로 기존에 작성한 매크로를 찾아서 고칠 필요는 없다.
comments와 longcomments는 상관이 없는데 thread 매크로의 경우 다음 사항을 확인할 것
예를 들어 <thread(1234,5)> 이라는 매크로가 있다면, 이것의 의미가 애매해진다:
- 개선된 방식의 경우 : 현재 페이지에 있는, id가 "1234"고, 들여쓰기가 "5"칸인 "답글 달기" 매크로
- 기존의 방식의 경우 : "1234"라는 페이지에 있는, id가 "5"고, 들여쓰기가 지정되지 않은 "새 글 쓰기" 매크로
이 패치에서는 이런 경우 전자로 해석을 한다. 따라서 후자의 의미로 쓴 경우라면 <thread(5)>로 직접 고쳐 주어야 한다. 즉 페이지이름이 숫자로만 되어 있는 페이지 안에, 파라메터가 두 개의 숫자로 이뤄진 thread매크로가 들어 있는 경우를 찾아서 고쳐 줄 것.
- 상단 검색창에 "thread\(\d+,\d+\)"라고 검색을 하면 파라메터가 두 개의 숫자로 되어 있는 thread 매크로를 찾을 수 있으니, 이 패치 적용 직후에 확인해 보기를 권장함
1.3. wiki.pl 수정
기존의 구현을 그대로 두고, 페이지 이름이 적혀 있지 않은 매크로의 경우 일단 현재 보고 있는 페이지의 이름을 괄호 안에 추가해 준 후, 다시 기존의 루틴을 사용해서 입력폼으로 바꿔주게 하였다.
sub MacroSubst {
my ($txt) = @_;
$txt =~ s/(\&__LT__;uploadedfiles\&__GT__;)/&MacroUploadedFiles($1)/gei;
$txt =~ s/(&__LT__;(long)?comments\()([-+]?\d+)(\)&__GT__;)/$1$pageid,$3$4/gi;
$txt =~ s/(\&__LT__;comments\(([^,]+),([-+]?\d+)\)&__GT__;)/&MacroComments($1,$2,$3)/gei;
...
}
include 되는 페이지 안에 매크로가 있을 경우는, 그 페이지를 읽어온 직후에 읽은 페이지의 이름을 괄호 안에 추가해 준다.
sub MacroInclude {
...
my %SubSection = split(/$FS2/, $SubPage{"text_default"}, -1);
my %TextInclude = split(/$FS3/, $SubSection{'data'}, -1);
my $txt = $TextInclude{'text'};
$txt =~ s/<toc>/$FS_lt."toc".$FS_gt/gei if ($opt eq "notoc");
$txt =~ s/<noinclude>(.)*?<\/noinclude>//igs;
$txt =~ s/(<(long)?comments\()([-+]?\d+)(\)>)/$1$name,$3$4/gi;
$txt =~ s/(<thread\()([-+]?\d+(,\d+)?)(\)>)/$1$name,$2$4/gi;
return $txt;
}
페이지를 저장할 때 comments 나 longcomments 매크로가 있으면 페이지 이름을 자동으로 추가하여 저장을 했는데 이제는 그럴 필요 없다.
sub ProcessPostMacro {
my ($string, $id) = @_;
$string = &PostMacroMySign($string);
return $string;
}
1.4. action/comments.pl 수정
sub action_comments {
...
if (($abs_up >= 100) && ($abs_up <= $threshold2)) {
$newup = $Now - $threshold2;
} else {
$newup = $Now;
}
$comment_tail = "<thread($newup," . ($threadindent+1) . ")>";
if ($threadindent >= 1) {
for (1 .. $threadindent) {
$comment_head .= ":";
}
$comment_head .= " ";
} else {
}
my $thread_pattern = "\\<thread\\($id,$up(,\\d+)?\\)\\>|\\<thread\\($up(,\\d+)?\\)\\>";
if (($up > 0) && ($up < $threshold1)) {
$string =~ s/($thread_pattern)/$comment_head$newcomments <mysign($name,$timestamp)>\n$comment_tail\n\n$1/;
} else {
$string =~ s/($thread_pattern)/$1\n\n$comment_head$newcomments <mysign($name,$timestamp)>\n$comment_tail/;
}
} elsif ($long) {
$newcomments =~ s/^\s*//g;
$newcomments =~ s/\s*$//g;
$newcomments =~ s/(\n)\s*(\r?\n)/$1$2/g;
$newcomments =~ s/(\r?\n)/ \\\\$1/g;
my $longcomments_pattern = "\\<longcomments\\($id,$up\\)\\>|\\<longcomments\\($up\\)\\>";
if ($up > 0) {
$string =~ s/($longcomments_pattern)/\n$newcomments <mysign($name,$timestamp)>\n$1/;
} else {
$string =~ s/($longcomments_pattern)/$1\n$newcomments <mysign($name,$timestamp)>\n/;
}
} else {
$newcomments =~ s/(----+)/<nowiki>$1<\/nowiki>/g;
my $comments_pattern = "\\<comments\\($id,$up\\)\\>|\\<comments\\($up\\)\\>";
if ($up > 0) {
$string =~ s/($comments_pattern)/* ''' $name ''' : $newcomments - <small>$timestamp<\/small>\n$1/;
} else {
$string =~ s/($comments_pattern)/$1\n* ''' $name ''' : $newcomments - <small>$timestamp<\/small>/;
}
}
if (((!&UserCanEdit($id,1)) && (($abs_up < 100) || ($abs_up > $threshold2))) || (&UserIsBanned())) {
$pageid = "";
}
...
}
1.5. macros/thread.pl 수정
thread 도 comments 와 마찬가지로, 페이지 이름이 없다면 먼저 페이지 이름을 삽입한 후 다시 기존의 루틴을 사용하여 입력폼으로 변환.
sub thread {
my ($txt) = @_;
$txt =~ s/(&__LT__;thread\()([-+]?\d+(,\d+)?)(\)&__GT__;)/$1$pageid,$2$4/gi;
$txt =~ s/(&__LT__;thread\(([^,]+),([-+]?\d+),(\d+)\)&__GT__;)/&MacroThread($1,$2,$3,1,$4)/gei;
$txt =~ s/(&__LT__;thread\(([^,]+),([-+]?\d+)\)&__GT__;)/&MacroThread($1,$2,$3,1,0)/gei;
$txt =~ s/(&__LT__;thread&__GT__;((.)*?)&__LT__;\/thread&__GT__;)/&MacroThreadBlock($2)/geis;
return $txt;
}
1.6. 추가 업데이트 내역
위키위키분류