2 번째 수정본 소스 보기 : UseModWiki소스수정/반영된사용자의견archive02
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: UseModWiki소스수정/반영된사용자의견archive02 는 읽기 전용 페이지입니다.
== # 소스 코드에 새로운 버전명 부여 == Luke 님의 K3 와는 마크업 순서까지도 바뀌고... 그간에 늘어난 태그나 매크로도 여럿 있고... 매번 "Luke 님 소스에 몇 가지 패치를 적용한 소스" 라고 칭하자니 불편하군요. "UseModWiki 0.92K3" 뒤에 따로 붙였으면 좋을 듯 한데.. 뭐라고 해야 그럴 듯 하게 들릴까요? :-) "K3-Raymundo조프지양Bab2버전" 은 너무 긴가요? ^^;
: "UseModWiki 0.92M60으로 하져..기관총..^^; 농담입니다..:)"
궁한 대로, "
" 의 형식으로 이름을 붙였음.
== #
== StoreRaw()를 쓰라고 되어 있던데, StoreCodeRaw()를 쓰는게 더 낫지 않을까 싶습니다. 굳이 이유를 들자면 {{{ < > 이거나 < > 이거나 & &이거, \\이거 또는 %%% 이거 때문입니다. 도움말에 특수문자를 넣으려니 불편해서..^^; }}} 그리고 nowiki선언되면 을 부르지 않는 다른 태그는 전부 위키태그로 간주되어서 무시되어져야 할 것이고, html코드는 nowiki 안에서 다시 선언으로 불러들이면 될 것이기 때문입니다. : 흠... nowiki 태그도 {{{ }}} 처럼 모든 특수문자를 무시하도록 만들어버리자는 말씀이시군요. 제 홈페이지에 기존에 nowiki 를 사용한 곳들을 죄다 뜯어고쳐야 될 지 모르니... 제 홈페이지에 적용하는 것은 생각 좀 해 봐야겠습니다. 그리고 StoreCodeRaw 가 원래 있던 함수가 아니라 제가 {{{ }}} 때문에 추가한 거라서, 기존의 마크들이 그 함수를 쓰게 하는 것이 잘 하는 건가 싶기도 하고요.. 차라리 nowiki 말고 nohtml 내지 다른 이름의 태그를 추가로 만드는 게 나을지도 모르겠습니다.
: 일단 <raw></raw> 라는 태그를 만들어봤습니다. nowiki 처리라인을 복사해서 StoreRaw 를 StoreCodeRaw 로만 고치면 되긴 하는데... raw 라는 이름이 적절한지 의문이군요. nowiki 를 고치는 것은 기존 데이타를 죄다 손봐야 하기 때문에 망설여지고.. 어찌해야 할까요..
:: 굳이
라는 태그를 만들 필요가 있을지 모르겠네여.. 웅.. 저는 당분간 nowiki를 storecoderaw로 바꾼 걸로 살면서 좀더 지켜봐야겠네용.. ^^
::: 굳이 만들 필요는 없는 게 맞습니다. ^^ 그런데 워낙 만들기가 간단했고, (한줄 복사해서 수정해주면 끝이니) nowiki 를 변형할 수 없는 이유가, [[UseModWiki소스수정]]에서도 적었지만, 기존 문법이나 인터페이스는 웬만하면 바꾸지 않고 남겨두고 싶어서거든요. (사실, 이런 저런 수정하면서 이미 바뀌어버린 것도 있겠습니다만) "<" 를 출력하기 위해서 [[Bab2]] 님 홈페이지에서는 "<nowiki><</nowiki>" 라고 적으면 되지만 이 곳의 패치가 적용되지 않은 사이트에서 는 "<nowiki>&lt;</nowiki>" 라고 적어야겠지요. 뭐 제가 위키사이트들 간의 페이지 소스 호환성에 너무 매달리는 것 같기도 합니다. 그리고 raw 태그 사이의 nowiki 태그, nowiki 사이의 raw 태그들의 충돌이나, raw 태그를 시작만 하고 끝내지 않은 경우 (바로 위에 Bab2 님 글에서 <raw> 를 쓴 것처럼) 등의 처리가 은근히 골치 아픈 문제네요. 정규표현식, c 등의 특수문자, 암튼 이놈의 특수한 기호를 escape 시키는 문제는 어딜 가도 속을 썩이는군요.
그리고, toc 걸면 마지막에
빈줄이 걸리네요.
: 그러네요. 사는데 지장이 없을 것 같고 귀찮으니 천천히 생각하죠. ^^
: 네 ^^;
기존 매크로의 동작을 웬만하면 바꾸고 싶지 않다는 [[주인장]]의 고집으로... 반영하지 않고 [[/반영된사용자의견]]으로 이동. (음.. 말이 모순되는군..)
== # 테이블의 rowspan 처리 방법 투표 == WikiX 에서는 | 기호 옆에 v 를 (rowspan값-1) 만큼 적어서 쓰더군요. {{{ |vvv : rowspan="4" 인 쉘 }}} 현재 여기 있는 패치에서는 v 옆에 rowspan값을 숫자로 적게 했는데... 양쪽을 다 지원하게 하자니 너무 지저분해져서 어느 한 쪽만 택하려 합니다. 어느쪽이 더 나을까요? {{{ ||v4 : rowspan="4" 인 쉘. 현재 방법 ||vvv : 새로운 방법 }}} 투표나 해볼까요. ^^; 참가하시는 분이 몇 분이나 계실 지 모르겠지만... 현재의 방법 (v4)
새로운 방법 (vvv)
: 음... 다른 [[위키클론]]들은 표를 어떻게 하는지 모르겠군요. 더 많이 쓰이는 방식을 택하는 게 나을 것인지... 사실 지금의 방식이 제일 직관적입니다. rowspan 값을 정확히 넣게 되니까... v 를 연속해서 쓰는 경우 v 의 갯수가 rowspan 값보다 하나 작아야 하니까 혼란스러워 보이기도 하네요. 좀 더 두고보죠. 총투표수 10이 될 때까지 두고보기로 한다면... 올해 안에 결정을 못 내리겠죠? ^^
투표율 저조로.. 그냥 살던 대로 살자..는 결론을 맺고 [[/반영된사용자의견]]으로 이동.
== # 역링크 == 링크 뿐만 아니라 링크안 된 단어까지도 검색을 해버리는거 같네요. 찾는 부분에 "\[\[", "\]\]" 이걸 추가하면 된다치는데 subpage는 어떻게 해야될지 모르겠네요.
: 예, 현재 제목을 클릭해서 나오는 역링크는 실제로는 검색창에 제목을 넣었을때하고 동일한 text search 일 뿐입니다. [[UseModWiki소스수정]]의 "To Do or Bug Report" 섹션에도 언급이 되어 있습니다만, 대괄호를 추가한다고 해결되는 게 아닌 것이, 이렇게 하면 이번에는 대괄호를 사용하지 않고 그냥 [[위키네임]]으로만 적어서 링크한 경우가 검색이 되지 않습니다. 여기에다가 (대충 본 거라 추측일 뿐이지만) 환경설정 옵션인 FreeLink 의 값도 고려해야 할 듯 하더군요. 그리고 말씀하신 서브페이지 문제도 있어서, 그 부분을 개선하려면 상당히 뜯어고쳐야 할 것 같습니다.
{{{ 이 내용은 잘못되어서 피해가 없도록 임의로 지웠습니다. --bab2 }}} 으미.. 감기걸렸는데 뒷골만 땡기는증상은 태어나서 첨 겪어보네요.. 아이구 머리야, 감기조심하세요~
: 짝짝짝~ 다시 감기와 독감이 돈다는군요. 다들 조심해야겠죠.
::역링크함수 새로 만들어야겠습니다. 문제가 너무 많아서 scriptlink 함수 만으로는 한계가 너무 많습니다.
::: 예, 저도 좀 전에 비슷한 생각을 했습니다. 근본적인 한계가 있는 것 같네요. 그런데 어차피 새로 만들어도 search= action 을 쓸 테니 (검색 루틴까지 따로 만들려면...) 조금 더 구색을 갖추는 데까지는 해 볼 수 있을 것 같습니다. 좀 더 테스트해보고 내일 다시 올리죠. 좋은 밤 되세요.
::: 아마 검색루틴을 새로 만들어야 될듯.. 현재로선 상위/하위링크, /하위링크를 같이 검색할 방법이 없을 거 같습니다. 설사 있다고 해도 이름이 다른 상위페이지에서 같은 이름의 하위링크가 검색되면 그것마저도 모두 보여주거든요. 그럼 나중에, 수고하세요
일단. 만들긴 만들었는데, 무슨 문제가 튀어나올지는 모르겠습니다. 특별한 문제가 없다면 서브페이지까지 그럭저럭 될겁니다. 사족 : 이정도는 유즈모드 개발자가 게으름이가 아니라면 충분히 패치할 수 있을건데 왜 안하는지 이유를 모르겠습니다. :) -- 깨끗하게 정리 부탁드리겠습니다. {{{#!vim perl #### sub GetSearchLink 부분은 기존 소스내용과 비교해보고 알아서 바꿔준다. -_-;;; sub GetSearchLink { my ($id) = @_; my $name = $id; my $result; # $id =~ s|\/|\\\/|; # Subpage match: search for just /SubName if ($FreeLinks) { $name =~ s/_/ /g; # Display with spaces $id =~ s/_/+/g; # Search for url-escaped spaces } $result = &ScriptLink("backsearch=$id", $name); return $result; } #### 여기까지. ###### This Funtion is module for Backlink search ###### for backlink ############여기부터 새로 추가. sub DoGetSearchLink { my ($id) = @_; my @x; my @split_text; my ($name, $id_bracket, $subid, $single_subid, $subid_bracket, $single_id); my $result; $name = $id; if ($FreeLinks) { $name =~ s/_/ /g; # Display with spaces $id =~ s/_/+/g; # Search for url-escaped spaces } @split_text = split(/\//,$id); $single_id = $id; $single_id =~ s|(.*)\/||; # 영어링크패턴 체크용, 단일링크 $id =~ s/\//\\\//; $single_subid = "\\\/"."@split_text[1]"; # 상위페이지 명시 안 된 영어서브페이지 $id_bracket = "\\\[\\\["."$id"."\\\]\\\]"; # 전체경로 브라켓 $subid_bracket = "\\\[\\\[\\\/"."@split_text[1]"."\\\]\\\]"; # 전체주소 브라켓 if ($id eq '') { &DoIndex(); return; } print &GetHeader('', &QuoteHtml(Ts('Search for: %s', $name)), ''); print '
'; if (("$single_id" =~ /^$LinkPattern$/)) { # 영어링크패턴(서브페이지, [[상위+/서브]], 전체서브, [[전체서브]]) if (@split_text eq 2) { # 영어서브패턴 @x = &SearchBody($single_subid, $id, $subid_bracket, "","@split_text[0]"); } else { # 영어단일페이지 @x = &SearchBody($single_id, "", "", "", ""); } @x = sort @x; } else { # 브라켓패턴 if (@split_text eq 2) { @x = &SearchBody($subid_bracket, $id_bracket, "", "", "@split_text[0]"); } else { @x = &SearchBody($id_bracket, "", "", "", ""); } @x = sort @x; } &PrintPageList(@x); print &GetCommonFooter(); } ############여기까지 추가. ###### 도저히 정리 안됨 함수전체 왕창 바꿀것. sub SearchBody { my ($string1, $string2, $string3, $string4, $file) = @_; my ($name, @found); foreach $name (&AllPagesList()) { if ($name ne $file) { &OpenPage($name); &OpenDefaultText(); if ($string4 ne "" && $string3 ne "" && $string2 ne "") { if (($Text{'text'} =~ /$string1[^\/]/) || ($Text{'text'} =~ /$string2[^\/]/) || ($Text{'text'} =~ /$string3[^\/]/) || ($Text{'text'} =~ /$string4[^\/]/)) { push(@found, $name); } } elsif ($string3 ne "" && $string2 ne "") { if (($Text{'text'} =~ /$string1[^\/]/) || ($Text{'text'} =~ /$string2[^\/]/) || ($Text{'text'} =~ /$string3[^\/]/)) { push(@found, $name); } } elsif ($string2 ne "") { if (($Text{'text'} =~ /$string1[^\/]/) || ($Text{'text'} =~ /$string2[^\/]/)) { push(@found, $name); } } else { # if (($Text{'text'} =~ /$string1/ && $Text{'text'} !~ /$string1\//)) { # 혹시나 몰라서 if (($Text{'text'} =~ /$string1[^\/]/)) { push(@found, $name); } } } } if ($file ne "") { ###### for backlink $name = $file; &OpenPage($name); &OpenDefaultText(); if (($Text{'text'} =~ /$string1/) || ($Text{'text'} =~ /$string2/) || ($Text{'text'} =~ /$string3/) || ($Text{'text'} =~ /$string4/)) { push(@found, $name); ###### } } return @found; } #### 여기까지 #### 표시한 부분을 추가한다. sub DoOtherRequest { .... if (&GetParam("edit_prefs", 0)) { &DoUpdatePrefs(); return; .... ###### for backlink ## 추가한다. $search = &GetParam("backsearch", ""); if (($search ne "") || (&GetParam("dosearch", "") ne "")) { &DoGetSearchLink($search); return; } ###### .... } }}} 문제해결 -ㅅ- GNU source-highlight 바이너리좀 구할 수 있을까요 ㅡ.ㅡ??;;
: 수고하셨네요. 테스트 좀 해보고, 그대로 올리든지 하겠습니다. 어제오늘 바빠서 작업을 못 했더니 제가 한 발 늦었네요 ^^; 다른 것은 수정 들어가기 전에 미리 명시를 해서 중복 작업을 피하도록 해야겠습니다. source-highlight 바이너리는 GyparkPDS:source-highlight-binary.zip 입니다. i386+Linux 에서 컴파일한 겁니다.
: 음.. {{{ if ($Text{'text'} =~ /$string/i && $Text{'text'} !~ /$string\//i) { ### 수정한다. }}} : 어떤 페이지 내에 A 란 링크도 있고 A/sub 란 링크도 있다면, A 의 역링크에 이 페이지가 제외되어 버립니다. 그리고 DoSearchBody() 를 호출하는 곳이 여러곳 있는데, 이런 곳에서도 다 저 백슬래쉬 제외가 들어가버리면 곤란할 수도 있지 않을까요? 아예 DoSearchBody 가 아닌, 역링크를 찾을 때만 사용하는 body search 용 함수를 따로 만드는 게 좋겠습니다. 이 함수에서는 검색옵션에 /i 도 빼 버리죠. 대소문자 구분을 하도록. : {{{ @x = (@x, &SearchBody($id)); @x = (@x, &SearchBody($subid_bracket)); }}} : 한 페이지 내에
A/B
란 링크와
[[/B]]
란 링크가 같이 있으면 검색이 두 번 되어서 역링크에 그 페이지가 연달아 두 번 출력됩니다. : 사용자가 어떻게 페이지를 작성했느냐에 따라서 워낙 다양한 경우의 수가 생기는터라 테스트하는 게 매우 힘드네요. 직접 고쳐보려고 해도 남이 만든 코드가 더 어려운 법이라.. ^^; 게다가 못 먹는 술을 몇 잔 했더니...
:: 웅.. 한잔 하셨었군요 ^^, 소스전체를 찾아봤는데 SearchBody()함수는 쓰는 곳이 한군데도 없어서 자체를 수정해버린것이었습니다.(모두 SearchTitleAndBody를 쓰더군요.) 별 문제는 없을 거 같습니다. 일단 소스를 다시 살펴봐야겠네요.. 안녕히주무세요 ^^
:: 고쳐봤습니다. 처음부터 정규표현식을 어느정도 알고 있었더라면 이런 삽질은 없었을것을.. 수정하면서 배열을 한번만 리턴할 수 있게 했습니다만, 결과적으로 if문 남용으로 분량만 더 늘었네요.. :( 널문자 처리는 어떻게 하는 방법이 없나요? 앞으로 또 어떤 오류가 튀어나올지.. Source-highlight 고맙습니다. 수고하세요 ^^
: 이제서야 새 코드를 테스트해보았습니다. *
if (($search ne "") || (&GetParam("dosearch", "") ne "")) {
에서 뒤의 조건문 때문에 상단메뉴 검색창에서 검색하는 것도 역링크로 가버립니다. * 위키네임인 페이지가 있을때, 그 페이지이름뒤에 다른 문자가 붙는 페이지의 경우 같이 검색됩니다. (LinkTest 라는 페이지의 역링크 검색시, LinkTestTest 라는 문자열도 걸림) 위키네임인 경우는 뒤에 [^A-Za-z\/A] 를 붙이면 해결할 수 있을 겁니다. * 위와 마찬가지로, LinkTest/SubTest 라는 페이지의 역링크를 찾을 때, LinkTestTest/SubTest , LinkTest/SubTestTest, LinkTestTest/SubTestTest 세 가지 전부 검색됩니다. * LinkTest 의 역링크에
[[LinkTest2]]
도 검색됩니다. 으.. 대책이 없는 문제로군요. LinkTest2 일 때는 위키워드는 LinkTest 까지이니까, 검색이 되어야 합니다. 그렇지만
[[LinkTest2]]
는 검색이 되지 말아야 합니다... -_-; 이런 이건 둘 중 하나를 포기하는 게 나을지도.. -_-; * A/SubTest 의 역링크를 찾을때, B 라는 페이지에 /SubTest 라는 게 있으면 검색이 되어 버립니다. * 그리고.. 이것도 대책이 도저히 안 서는 문제 같은데... "LinkTest/" 라고만 적혀 있는 경우는 검색이 되어야 하는데 안 되죠. : 위키네임이 아닌 경우는 어차피 대괄호쌍을 좌우에 써 주니 상관이 없는 듯 한데... 위키네임은 정말 사람 피곤하게 만드는군요. ^^; 이제 보니... 오리지날 개발자들이 "쉬운데 안하고 있는" 게 아니었군요. ^^; 그래도 이제는 끝이 보이는 듯 합니다.
::훔냘..눈물나네요..ㅠㅠ, 집에가서 좀더 찾아보도록 하겠습니다... 내일 일이 있어서 시간이 좀 걸릴듯.. 지금도 집이 아니라서..큭..ㅡ.ㅡ; 그럼 잠시후에..
::: ^^ 그 심정 알죠.. 그런데 제가 어제밤에 생각나서 끄적거려 본 게 있는데, 잘하면 전혀 새로운 접근으로 무난하게 구현할 수 있을 것 같습니다. 지금까지 작업하던 거 (저도 Bab2 님과 거의 비슷한 방향으로 작업하고 있었습니다만) 다 지워버리고 새로 시작했는데, 제 생각대로만 되면 훨씬 정확한 결과를 낳을 수 있을 것 같습니다.
::: 멋지게 구현됐군요..:)~ 소스가 훨씬 깔끔하네요. 다행히 역링크소스 이전에 백업해둔게 있어서 그거 열어서 다시 바꿨습니다. 잘되네요.. 그냥 기다리고 있는건데 ^^;;
:읍.. 전체링크보기 겉모양을 바꿨었는데 ㅡ.ㅡ; [[UseModWiki소스수정/기능추가및개선]]에서 제대로 된 [[역링크]]를 출력할 수 있게 수정 완료.
== # include 매크로에 html화일 직접추가하는 기능 == 흠... 이거 가능할까요? 쓸모없는 기능이려나 -_-; 방명록을 iframe 안에 넣어서 쓰고있는데, 으흠.. 어떻게 방법이 없을까 싶어서요..
: WikiX 에는 다른 웹페이지를 그대로 include 할 수 있는 것 같더군요. 저는 필요성도 느끼지 못하고 의욕도 생기지 않아서 별로 하고픈 마음이... cgi 의 경우는 더더욱 만만치 않을 것 같군요. wget 같은 외부 유틸리티를 호출해서 해당 페이지를 긁어온 후 그 내용의 양 끝에 html, /html 태그를 각각 붙여서 삽입하는 정도라면 간단히 할 수 있을지도 모르겠습니다만, 그 상태에서 포함된 페이지 내의 링크를 클릭하는 순간 어차피 도루묵이 되겠죠... Jof:조프방명록 의 경우 iframe 을 쓰지 않고 말씀하신 해당 기능을 구현한 것 같은데요.. [[조프]]님께 비법을 여쭤봐야겠군요.
[[UseModWiki소스수정/기능추가및개선]]에서 #EXTERN 명령어를 추가함. 완료.
== # '3.28. 페이지 제목을 클릭했을때 진정한 의미의 역링크 출력' == See http://www.usemod.com/cgi-bin/wiki.pl?WikiPatches/BackLinks 어떻게 다른 것인지요..? ^^; -지양 : 허억... 저번에 UseMod:WikiPatches 를 흩어 볼 때는 왜 못 봤을까요.. ㅠ,.ㅠ 거기 있는 것도 접근 방법은 유사하네요. 최종적으로 GetPageLinks 의 결과로 나오는 각 페이지 안에 있는 링크들 목록을 뽑아서 비교한다.. (easy patch 라고 되어 있는 것은 처음에 저나 [[Bab2]]님이 시도했던 방향인데 그것은 한글이 들어 있고, 대괄호쌍을 쓰는 경우와 잘 매치가 안 될 것 같습니다.) 다만, 저기 있는 패치는 "/하위페이지" 형식으로 링크가 되어 있는 것은 잡아내지 못할 것으로 생각됩니다. 뭐, 오리지널 코드에 패치를 적용해서 테스트해보기 전에는 모르는 일입니다만... : 음... 같은 일을 하는 서로 다른 코드가 있다는 것은 좀 뭣한 일이긴 한데, 할 수 없죠 뭐. ^^ 그리고 꿈보다 해몽이 좋은 것일 수도 있지만, 이 쪽의 패치 쪽이 확장하기에는 (allpagesto 매크로 처럼) 더 편할 것 같네요. 오래간만에 뵙네요, 좋은 하루 되세요.
열심히 만들고 났더니만 이미 남이 만들어 두었더라..는 가슴아픈 사연을 남기며 완료.. ㅜ.ㅡ
== # Emumerate시의 번호 붙이는 거에 대해 == 요새 wikiX쪽에 가서는 UseModWiki에 수정된 거 반영해 달라고 하고, 이쪽에 와서는 거꾸로 하고 있네요. :-) # 한글 1 한글 1에 대한 설명 # 한글 2 한글 2에 대한 설명 이런 형식의 format을 쓸 때 UseModWiki에서는 번호가 1, 2로 되는게 아니고 1, 1로 따로 따로 붙어서 나옵니다. 번호가 연결이 되는지 아닌지 판단하기 위해서 wikiX에서는 . 이나 \n등으로 paragraph가 나뉘지 않았다는걸 명시적으로 선언해주는데 여기도 그런 식으로 수정하는게 어떨까요?
(중간에 오간 내용 생략) "\\\n" 을 "<br>" 로 치환하는 곳이 더 앞에 있기 때문에, 이런 좋은 현상 (아마 개발시에 염두에 두지는 않았을 것 같습니다만 ^^) 이 생기는군요. {{{ # 1번\\ \\ 1번설명\\ \\ \\ \\ <-- 원하는 줄 수 만큼 \\ 를 나열하고 <-- 마지막에만 빈 줄을 넣어준다 # 2번\\ 2번설명 }}} # 1번\\ \\ 1번설명\\ \\ \\ \\ # 2번\\ 2번설명 "\\" 를 나열하다가 마지막에 빈 줄을 넣어야 되는 게 눈에 거슬리긴 합니다. 저것을 수정하려고 해 봤는데, (그리고 좀 전까지 수정이 다 되긴 했는데) 그랬더니만 {{{#!vim perl }}} 등 신택스 하이라이트 태그 안에서 저런 구문이 들어갔을 때 빈 줄이 하나 더 들어가버리는 것을 해결할 방법이 없더군요. "{{{ }}} 안에서는 사용자입력을 그대로 출력"하는 것이 제게는 더 중요한 기능이기 때문에, 그냥 수정하지 않은 상태로 사는 게 낫다..라는 결론입니다. :-)
아무 것도 한 것 없이 완료. :-)
== # InterWiki로 이미지 파일 처리하기 == InterPageLink 함수를 다음과 같이 고치면 됩니다. 원래 이미지 처리하는 부분을 그냥 복사한 겁니다. 다만 이 함수를 호출하는 부분이 StoreInterPage와 PrintLinkList 두 곳입니다만, 첫번째에서는 확실히 넣어주는게 맞고, 두번째에서는 잘 모르겠군요. 사실 두번째 함수에서 어떤 경우에 InterPageLink를 호출하는지 잘 모르겠습니다. -_-; $UseImage 변수를 넣어서 각각을 구별해주는게 좋을 것 같네요.
{{{#!vim perl sub InterPageLink { my ($id, $UseImage) = @_; my ($name, $site, $remotePage, $url, $punct); ($id, $punct) = &SplitUrlPunct($id); $name = $id; ($site, $remotePage) = split(/:/, $id, 2); $url = &GetSiteUrl($site); return ("", $id . $punct) if ($url eq ""); $remotePage =~ s/&/&/g; # Unquote common URL HTML $url .= $remotePage; ### 여기부터 if ($UseImage && ($url =~ /^(http:|https:|ftp:).+\.$ImageExtensions$/)) { $url = $1 if ($url =~ /^https?:(.*)/ && $1 !~ /^\/\//); return ("
", $punct); } ### 여기까지 return ("
$remotePage
", $punct); } }}} : 오호, 굿입니다요~ 두번째 경우는 다음과 같이 확인할 수 있습니다. 상단 메뉴의 "링크"를 눌러서 전체 리스트 목록을 띄운후, 주소창의 "action=links" 뒤에다 "&inter=1" 을 추가해 주면 인터위키가 목록에 포함됩니다. 마찬가지로 &url=1 을 추가하면 외부 URL 목록도 뜨지요. 따라서 전체 링크 리스트 화면에서 그림이 떠버리는 불상사(?)가 발생하네요. URL 의 경우는 개발자가 그런 사태를 염두에 두어서 useImage 파라메터를 두었는데, 설마 이미지를 InterWiki 로 적을 것을 예상하지는 못한 모양이네요. ^^ : 그냥 위에 추가한 if 문에 action 파라메터가 links 인지를 검사하는 루틴만 두어도 해결은 되겠습니다만, 모양새가 좋지 않으니, 말씀하신 것처럼 useImage 를 써서 UrlLink 함수와 동일하게 만드는 게 낫겠습니다. 잠시 후에 반영하도록 하지요.
:: StoreInterPage에서는 1, PrintLinkList 에서는 0을 넣어서 호출해주면 됩니다.
::: 원래 소스를 보니까 본문에서는 이미지를 표시하고, diff 화면에서는 표시하지 않도록 해 두었더군요. 인터위키도 그것을 따르는 게 낫겠다 싶어서
CommonMarkup
까지 거슬러가서 수정한 것을 [[UseModWiki소스수정/기능추가및개선]]에 적었습니다. 다시 한 번 감사~
소스를 수정. 완료.
== # goto 매크로 == 우음... 빈칸에 엔터를 쳐도 ?wkl= 이렇게 나오면서 오류가 생기는데, 캐릭터셋 문제가 아니라 누가 만들다가 만거같은 느낌이 ㅡ,.ㅡ;; 페이지 이동방법에는 두가지가 있습니다. "?페이지이름" 이랑 "action=browse&id=페이지이름" 인데요. :일단... {{{#!vim perl sub MacroGoto { my ($string) = @_; return #나머지는 아래문장으로 통째로 갈아치운다. ---> "
" . "
" . " " . "
" . "
"; #여기까지 ---> }}}
---- 위에 이어서... id값이 없을경우 "검색"이라는 페이지를 지정해줘서 강제로 이동할 수 있게 합니다. {{{#!vim perl sub DoBrowseRequest { .... if ($action eq 'browse') { #추가한다. ---> if ($id eq "") { $id = "검색"; } else { #여기까지. ---> if ($FreeLinks && (!-f &GetPageFile($id))) { $id = &FreeToNormal($id); } if (($NotFoundPg ne '') && (!-f &GetPageFile($id))) { $id = $NotFoundPg; } } #추가한다. .... } }}}
: 이제서야 살펴봤습니다. 그런데 id 가 null 일 경우를 대비하여 $NotFoundPg 환경변수가 이미 존재하고 있더군요. 일단 그 변수에 담긴 값을 사용하고, 그마저도 없다면 첫화면으로 이동하게 수정해서 반영했습니다. $NotFoundPg="검색"으로 지정하는 식으로 사용할 수 있겠지요.
== # MacroInclude == MacroInclude 함수에서 부르는 함수들이 전역 변수를 마구 사용하기 때문에 원래 페이지의 정보가 사라지는 문제가 있습니다. 마지막 변경 시간등이 나오기 때문에 되나보다하고 넘어가기 쉽지만, 잘 보면 사실 마지막으로 MacroInclude한 페이지의 마지막 변경 시간이 나온다는걸 알 수 있습니다. 그래서 아예 원래 부르는 함수의 내용을 전부 풀어서 넣어봤습니다. 좀 흉하긴 해도 동작은 하는 것 같네요.
{{{#!vim perl sub MacroInclude { my ($name) = @_; if ($OpenPageName eq $name) { # Recursive Include 방지 return ""; } my $fname = &GetPageFile($name); # 존재하지 않는 파일이면 그냥 리턴 if (!(-f $fname)) { return ""; } my $data = &ReadFileOrDie($fname); my %SubPage = split(/$FS1/, $data, -1); # -1 keeps trailing null fields if (!defined($SubPage{"text_default"})) { return ""; } my %SubSection = split(/$FS2/, $SubPage{"text_default"}, -1); my %TextInclude = split(/$FS3/, $SubSection{'data'}, -1); return $TextInclude{'text'}; } }}} 그렇군요. 전혀 모르고 있었네요. :-) includenotoc 를 위해서 파라메터를 하나 늘리고 라인 하나를 더 추가하여 [[/기능추가및개선]]에 반영했습니다. 감사합니다.
---- [[위키위키분류]]
UseModWiki소스수정/반영된사용자의견archive02
페이지로 돌아가기 |
다른 수정본 보기