UseModWiki소스수정/Anchor링크 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: UseModWiki소스수정/Anchor링크 는 읽기 전용 페이지입니다.
== # [#테스트1]Anchor 링크 개선 == === # 한글 앵커 지원 === * "페이지이름#앵커" 에서, 페이지 이름이 한글일 때나 앵커가 한글일 경우 동작하지 않는 문제를 해결 * [[Bab2]]님의 패치를 적용 * 필수 요구 사항: 없음 * 선택 요구 사항: 없음 * 부작용 : 모름 ** 각종 링크 패턴들을 치환하는 루틴이 오리지널 버전에서 K3 로 넘어오면서 많이 바뀌었는데, 그 와중에 링크들이 뭔가 일관성이 없게 걸리는 것 같은 느낌을 받는다.. 뭐 쓰는 데에 지장없으니 통과. * 소스 수정 : wiki.pl 에서 {{{#!vim perl ############### ### added by gypark ### 패치를 위해 추가된 내부 전역 변수 use vars qw(%RevisionTs $FS_lt $FS_gt $StartTime $Sec_Revision $Sec_Ts $ViewCount $AnchoredFreeLinkPattern); # AnchoredFreeLinkPattern 추가 ### ############### }}} : {{{#!vim perl sub InitLinkPatterns { ... $QDelim = '(?:"")?'; # Optional quote delimiter (not in output) ############### ### replaced by gypark ### anchor 에 한글 사용 # $AnchoredLinkPattern = $LinkPattern . '#(\\w+)' . $QDelim if $NamedAnchors; $AnchoredLinkPattern = $LinkPattern . '#([0-9A-Za-z\xa0-\xff]+)' . $QDelim if $NamedAnchors; ### ############### $LinkPattern .= $QDelim; ... $FreeLinkPattern .= $QDelim; ############### ### added by gypark ### 한글패이지에 anchor 사용 ### from Bab2's patch $AnchoredFreeLinkPattern = $FreeLinkPattern . '#([0-9A-Za-z\xa0-\xff]+)' . $QDelim if $NamedAnchors; ### ############### # Url-style links are delimited by one of: ... } }}} : {{{#!vim perl sub CommonMarkup { ... if ($FreeLinks) { # Consider: should local free-link descriptions be conditional? # Also, consider that one could write [[Bad Page|Good Page]]? s/\[\[$FreeLinkPattern\|([^\]]+)\]\]/&StorePageOrEditLink($1, $2)/geo; s/\[\[$FreeLinkPattern\]\]/&StorePageOrEditLink($1, "")/geo; ############### ### added by gypark ### 한글패이지에 anchor 사용 ### from Bab2's patch s/\[\[$AnchoredFreeLinkPattern\|([^\]]+)\]\]/&StoreBracketAnchoredLink($1, $2, $3)/geos if $NamedAnchors; s/\[\[$AnchoredFreeLinkPattern\]\]/&StoreRaw(&GetPageOrEditAnchoredLink($1, $2, ""))/geos if $NamedAnchors; ### ############### } ... } }}} 그리고 이거는 별개로... <anchor(앵커이름)> 했을때 <a name="#앵커이름"> 로 치환되는데 끝에 </a> 가 더 있어야 되지 않나 싶어서... : {{{#!vim perl sub MacroAnchor() { return "
"; } # 뒤에 를 붙여줌 }}} ext1.46c 에서 다시 개선됨.
[#앵커]
와 같은 형태에 한글을 사용할 수 있게 함 (이것은 <a name="앵커"></a> 로 치환된다. anchor 매크로를 따로 쓸 필요가 없었군) : {{{#!vim perl sub CommonMarkup { ... s/\&__LT__;code\&__GT__;((.|\n)*?)\&__LT__;\/code\&__GT__;/&StorePre($1, "code")/ige; ############### ### replaced by gypark ### anchor 에 한글 사용 # s/\[\#(\w+)\]/&StoreHref(" name=\"$1\"")/ge if $NamedAnchors; s/\[\#([0-9A-Za-z\xa0-\xff]+)\]/&StoreHref(" name=\"$1\"")/ge if $NamedAnchors; ### ############### if ($HtmlTags) { ... }}} === # Anchor 링크 패턴 정리 === * 앵커를 만드는 패턴과, 페이지 이름을 명시하지 않고 동일 페이지 내의 앵커로 이동하는 링크를 만드는 패턴 정리 * Jof:UseModWiki소스수정/Anchor정리""의 내용을 그대로 적용 * 앵커를 만드는 방법: **
[#앵커이름]
- "앵커이름"으로 된 앵커를 만든다. 빈 텍스트
""
에 앵커가 만들어지므로 눈에는 안 보임 **
[#앵커이름|텍스트]
- "앵커이름"으로 된 앵커가, "텍스트"에 걸린다. ** '''[#테스트2|테스트2]''' - 좌측 "테스트2"에는 테스트용 앵커가 걸려 있음. 이 앵커로 이동하는 링크 테스트는 이 페이지 하단에. **
매크로는 기능이 겹쳐서 필요없음. 삭제함. (이미 페이지에 anchor 매크로를 쓰신 분들은... macros/anchor.pl 을 삭제하지 않고 놔두면 됩니다. mymacros/ 디렉토리로 옮겨 두는 걸 추천) * 앵커로 이동하는 링크를 만드는 방법: **
[[#앵커이름]]
- "앵커이름"으로 이동하는 링크가, "앵커이름" 텍스트에 걸린다. **
[[#앵커이름|텍스트]]
- "앵커이름"으로 이동하는 링크가, "텍스트" 텍스트에 걸린다. 관련 소스 수정: wiki.pl 에서 두 곳을 고쳐줌 {{{#!vim perl sub StoreHref { my ($anchor, $text) = @_; # return "
$text
"; return StoreRaw("
$text
"); } }}} {{{#!vim perl sub CommonMarkup { ... ### anchor 에 한글 사용 # s/\[\#(\w+)\]/&StoreHref(" name=\"$1\"")/ge if $NamedAnchors; # anchor 정리 - 2012.01.06 s/\[\[$AnchorPattern\|([^\]]+)\]\]/StoreHref("href=\"#$1\"", $2)/ge if $NamedAnchors; s/\[\[$AnchorPattern\]\]/StoreHref("href=\"#$1\"", $1)/ge if $NamedAnchors; s/\[$AnchorPattern\|([^\]]+)\]/StoreHref("name=\"$1\"", $2)/geo; s/\[$AnchorPattern\]/StoreHref("name=\"$1\"")/ge if $NamedAnchors; ... }}} === # 역링크 처리, 링크 변경 처리 === 예를 들어 갑 페이지에
[[을#앵커]]
란 링크가 있으면 이것을 링크로 처리해주지 못하는 문제가 있었다. * Local:action=links""에서 갑 페이지에 있는 링크 중 을이 없음 * 을 페이지의 역링크 목록에 갑이 없음 * 을 페이지의 이름을 병으로 바꾸었을 때 이 링크가 자동으로 수정되지 않음 wiki.pl 수정: (diff 형식은 [https://github.com/gypark/UseModKr/compare/38ce42e3f2...106491f Comparing 38ce42e3f2...106491f for gypark's UseModKr - GitHub]) {{{#!vim perl sub GetPageLinks { ... my $fl = $FreeLinkPattern; $text =~ s/\[\[$fl\|[^\]]+\]\]/push(@links, &FreeToNormal($1)), ' '/ge; $text =~ s/\[\[$fl\]\]/push(@links, &FreeToNormal($1)), ' '/ge; # 두 줄 추가 $text =~ s/\[\[$AnchoredFreeLinkPattern\|([^\]]+)\]\]/push(@links, &FreeToNormal($1)), ' '/ge; $text =~ s/\[\[$AnchoredFreeLinkPattern\]\]/push(@links, &FreeToNormal($1)), ' '/ge; } if ($WikiLinks) { $text =~ s/$LinkPattern/push(@links, &StripUrlPunct($1)), ' '/ge; ... } sub SubstituteTextLinks { ... $text =~ s/\[\[$FreeLinkPattern\|([^\]]+)\]\]/&SubFreeLink($1,$2,$old,$new)/geo; $text =~ s/\[\[$FreeLinkPattern\]\]/&SubFreeLink($1,"",$old,$new)/geo; # 세 줄 추가 $text =~ s/\[\[$AnchoredFreeLinkPattern\|([^\]]+)\]\]/&SubFreeLink($1,$3,$old,$new,$2)/geo; $text =~ s/\[\[$AnchoredFreeLinkPattern\]\]/&SubFreeLink($1,"",$old,$new,$2)/geo; } if ($BracketText) { # Links like [URL text of link] $text =~ s/(\[$UrlPattern\s+([^\]]+?)\])/&StoreRaw($1)/geo; ... } sub SubFreeLink { # 다음 줄 수정 # my ($link, $name, $old, $new) = @_; + my ($link, $name, $old, $new, $anchor) = @_; my ($oldlink); $oldlink = $link; ... $link = $oldlink; # Preserve spaces if no match } $link = "[[$link"; # 세 줄 추가 if ( defined $anchor and $anchor ne '' ) { $link .= "#$anchor"; } if ($name ne "") { $link .= "|$name"; } ... } }}} == # 추가 업데이트 내역 == ext2.15 - Anchor 링크 패턴 정리. anchor 매크로 삭제 ext2.23b - 링크로 처리되지 않는 문제 해결
== # 사용자 의견 == 이건 개선인지 개악인지 조금 모호한 것이...원래 앵커가 절대좌표(?)로 인식되었었는데 이제 상대좌표로 걸리게 됩니다. 누군가가 중간에 앵커를 삽입하거나 삭제하면 그 뒤의 놈들은 모두 영향을 받게 되지요. :)\\ 오래간만에 글을 남기긴 했지만 종종 들어와서 횡설수설을 읽고 간답니다. 요즘 십자군이야기를 재미있게 읽고있네요.
: 안녕하세요~ 무슨 말씀인지 전혀 이해가 되지 않습니다. :-O 앵커의 상대좌표란게 뭔가요?
예전에는 toc에서 영어로 된 놈이 타이틀로 있다면 [[PinkFloyd#Wish_You_Were_Here]]이런 식으로 절대값을 써서 앵커를 정의할 수 있었지요. 그런데 지금은 [[PinkFloyd#H_4]]이런 식으로만 가능하다는 거지요. 이러면 중간에 타이틀이 삽입될 경우 다른 경로를 가리키게 되니까요 :)
: 아... 그건 이 [[/Anchor링크]]와는 관계가 없고, [[/toc매크로버그]] 때문입니다. [[/toc매크로버그]]를 다른 방법으로 고치는 것을 생각해 봐야겠군요.
ext1.46c 에서 소스 수정 사항이 추가되었습니다.
== # 테스트용 링크 == *
[[#테스트1]]
: [[#테스트1]] - 이 앵커는 목차 바로 아래 "Anchor 링크 개선" 제목 앞에 숨어 있음 *
[[#테스트2|테스트2로 가는 링크]]
: [[#테스트2|테스트2로 가는 링크]] ---- [[위키위키분류]]
UseModWiki소스수정/Anchor링크
페이지로 돌아가기 |
다른 수정본 보기