-1,17 +1,174 |
<toc> |
|
== # 링크 변경 시 <nowiki>"/페이지이름"</nowiki> 형태의 하위페이지 링크도 변경 == |
패치 소개 |
|
* 필수 요구 사항: |
* 선택 요구 사항: |
관리자 메뉴에서 페이지 이름을 변경하거나 링크를 변경할 때, "/하위페이지" 형태로만 되어 있는 링크가 제대로 변환되지 않는 문제 해결. |
|
=== # 사용법 === |
예를 들어 A페이지의 [[하위페이지]]로 A/a가 있을 때, A페이지나 A페이지의 하위페이지에서는 "[[/a]]"라고 링크를 할 수 있다. 이 때, A/a 페이지 이름을 A/b 페이지로 변경할 경우, "A/a"형태의 링크는 "A/b"로 잘 변경되지만, "/a"라고만 되어 있는 형태의 링크는 변경되지 않은채 남아 있었다. 이 문제를 해결하는 패치. |
|
* 필수 요구 사항: 없음 |
* 선택 요구 사항: 없음 |
|
=== # 부작용 === |
없을 것 같음... |
|
=== # wiki.pl 수정 === |
수정 내용 |
페이지 이름 변경을 수행하기 전에 역링크 목록을 만드는 루틴에서, "/하위페이지" 형태의 링크를 "메인페이지/하위페이지" 형태로 복원하여 같이 처리. |
{{{#!vim perl |
sub BuildLinkIndexPage { |
... |
%seen = (); |
foreach $link (@links) { |
### 링크변경 개선 - "/하위페이지" 형태의 링크도 변경 - 아래 세 줄 추가 |
if ( $link =~ m!^/! ) { |
$link = (split('/',$page))[0] . $link; |
} |
### |
if (defined($LinkIndex{$link})) { |
if (!$seen{$link}) { |
... |
} |
}}} |
|
.kp 파일의 내용에 있는 링크를 수정하는 루틴 수정 |
{{{#!vim perl |
sub RenameKeepText { |
... |
if (!defined($tempSection{'keepts'})) { |
return; |
} |
|
### 링크변경 개선 - "/하위페이지" 형태의 링크도 변경 - 이 단락 추가 |
my ( $old_main, $old_sub ) = split("/", $old); |
my ( $new_main, $new_sub ) = split("/", $new); |
my $old_new_same_main = ( $old_main eq $new_main ); |
my ( $page_main, $page_sub) = split("/", $page); |
my $old_page_same_main = ( $old_main eq $page_main ); |
### |
|
# First pass: optimize for nothing changed |
$changed = 0; |
foreach (@kplist) { |
%tempSection = split(/$FS2/, $_, -1); |
$sectName = $tempSection{'name'}; |
if ($sectName =~ /^(text_)/) { |
%Text = split(/$FS3/, $tempSection{'data'}, -1); |
$newText = &SubstituteTextLinks($old, $new, $Text{'text'}); |
### 링크변경 개선 - "/하위페이지" 형태의 링크도 변경 - 이 단락 추가 |
if ( $old_page_same_main && $old_sub ) { |
if ( $old_new_same_main && $new_sub ) { |
$newText = &SubstituteTextLinks("/$old_sub", "/$new_sub", $newText); |
} |
else { |
$newText = &SubstituteTextLinks("/$old_sub", $new, $newText); |
} |
} |
### |
$changed = 1 if ($Text{'text'} ne $newText); |
} |
# Later add other section types? (maybe) |
} |
|
return if (!$changed); # No sections changed |
open (OUT, ">$fname") or return; |
foreach (@kplist) { |
%tempSection = split(/$FS2/, $_, -1); |
$sectName = $tempSection{'name'}; |
if ($sectName =~ /^(text_)/) { |
%Text = split(/$FS3/, $tempSection{'data'}, -1); |
$newText = &SubstituteTextLinks($old, $new, $Text{'text'}); |
### 링크변경 개선 - "/하위페이지" 형태의 링크도 변경 - 이 단락 추가 |
if ( $old_page_same_main && $old_sub ) { |
if ( $old_new_same_main && $new_sub ) { |
$newText = &SubstituteTextLinks("/$old_sub", "/$new_sub", $newText); |
} |
else { |
$newText = &SubstituteTextLinks("/$old_sub", $new, $newText); |
} |
} |
### |
|
$Text{'text'} = $newText; |
$tempSection{'data'} = join($FS3, %Text); |
print OUT $FS1, join($FS2, %tempSection); |
} else { |
print OUT $FS1, $_; |
} |
} |
close(OUT); |
} |
}}} |
|
.db 파일의 텍스트를 수정하는 루틴 개선 |
{{{#!vim perl |
sub RenameTextLinks { |
... |
$old =~ s/_/ /g; |
$new =~ s/_/ /g; |
|
### 링크변경 개선 - "/하위페이지" 형태의 링크도 변경 - 이 단락 추가 |
my ( $old_main, $old_sub ) = split("/", $old); |
my ( $new_main, $new_sub ) = split("/", $new); |
my $old_new_same_main = ( $old_main eq $new_main ); |
### |
|
# Note: the LinkIndex must be built prior to this routine |
return if (!defined($LinkIndex{$oldCanonical})); |
|
@pageList = split(' ', $LinkIndex{$oldCanonical}); |
foreach $page (@pageList) { |
### 링크변경 개선 - "/하위페이지" 형태의 링크도 변경 - 이 단락 추가 |
my ( $page_main, $page_sub) = split("/", $page); |
my $old_page_same_main = ( $old_main eq $page_main ); |
### |
|
$changed = 0; |
&OpenPage($page); |
foreach $section (keys %Page) { |
if ($section =~ /^text_/) { |
&OpenSection($section); |
%Text = split(/$FS3/, $Section{'data'}, -1); |
$oldText = $Text{'text'}; |
$newText = &SubstituteTextLinks($old, $new, $oldText); |
### 링크변경 개선 - "/하위페이지" 형태의 링크도 변경 - 이 단락 추가 |
if ( $old_page_same_main && $old_sub ) { |
if ( $old_new_same_main && $new_sub ) { |
$newText = &SubstituteTextLinks("/$old_sub", "/$new_sub", $newText); |
} |
else { |
$newText = &SubstituteTextLinks("/$old_sub", $new, $newText); |
} |
} |
### |
if ($oldText ne $newText) { |
$Text{'text'} = $newText; |
$Section{'data'} = join($FS3, %Text); |
$Page{$section} = join($FS2, %Section); |
$changed = 1; |
} |
} elsif ($section =~ /^cache_diff/) { |
$oldText = $Page{$section}; |
$newText = &SubstituteTextLinks($old, $new, $oldText); |
### 링크변경 개선 - "/하위페이지" 형태의 링크도 변경 - 이 단락 추가 |
if ( $old_page_same_main && $old_sub ) { |
if ( $old_new_same_main && $new_sub ) { |
$newText = &SubstituteTextLinks("/$old_sub", "/$new_sub", $newText); |
} |
else { |
$newText = &SubstituteTextLinks("/$old_sub", $new, $newText); |
} |
} |
### |
if ($oldText ne $newText) { |
$Page{$section} = $newText; |
$changed = 1; |
} |
} |
# Later: add other text-sections (categories) here |
} |
... |
} |
}}} |
|
=== # 추가 업데이트 내역 === |
|