-
- 1. 소스 코드에 새로운 버전명 부여
-
- 2. <nowiki></nowiki>
-
- 3. 테이블의 rowspan 처리 방법 투표
-
- 4. 역링크
-
- 5. include 매크로에 html화일 직접추가하는 기능
-
- 6. '3.28. 페이지 제목을 클릭했을때 진정한 의미의 역링크 출력'
-
- 7. Emumerate시의 번호 붙이는 거에 대해
-
- 8. InterWiki로 이미지 파일 처리하기
-
- 9. goto 매크로
-
- 10. MacroInclude
-
1. 소스 코드에 새로운 버전명 부여
Luke 님의 K3 와는 마크업 순서까지도 바뀌고... 그간에 늘어난 태그나 매크로도 여럿 있고... 매번 "Luke 님 소스에 몇 가지 패치를 적용한 소스" 라고 칭하자니 불편하군요. "UseModWiki 0.92K3" 뒤에 따로 붙였으면 좋을 듯 한데.. 뭐라고 해야 그럴 듯 하게 들릴까요? :-) "K3-Raymundo조프지양Bab2버전" 은 너무 긴가요? ^^;
- "UseModWiki 0.92M60으로 하져..기관총..^^; 농담입니다..:)"
--
Bab2 2002-11-23 11:20 am
궁한 대로, "0.92K3-ext2.41a" 의 형식으로 이름을 붙였음.
2. <nowiki></nowiki>
StoreRaw()를 쓰라고 되어 있던데, StoreCodeRaw()를 쓰는게 더 낫지 않을까 싶습니다.
굳이 이유를 들자면
< > 이거나 < > 이거나 & &이거, \\이거 또는 %%% 이거 때문입니다.
도움말에 특수문자를 넣으려니 불편해서..^^;
그리고 nowiki선언되면 <html>을 부르지 않는 다른 태그는 전부 위키태그로 간주되어서 무시되어져야 할 것이고, html코드는 nowiki 안에서 다시 <html>선언으로 불러들이면 될 것이기 때문입니다.
- 흠... nowiki 태그도 {{{ }}} 처럼 모든 특수문자를 무시하도록 만들어버리자는 말씀이시군요. 제 홈페이지에 기존에 nowiki 를 사용한 곳들을 죄다 뜯어고쳐야 될 지 모르니... 제 홈페이지에 적용하는 것은 생각 좀 해 봐야겠습니다. 그리고 StoreCodeRaw 가 원래 있던 함수가 아니라 제가 {{{ }}} 때문에 추가한 거라서, 기존의 마크들이 그 함수를 쓰게 하는 것이 잘 하는 건가 싶기도 하고요.. 차라리 nowiki 말고 nohtml 내지 다른 이름의 태그를 추가로 만드는 게 나을지도 모르겠습니다.
- 일단 <raw></raw> 라는 태그를 만들어봤습니다. nowiki 처리라인을 복사해서 StoreRaw 를 StoreCodeRaw 로만 고치면 되긴 하는데... raw 라는 이름이 적절한지 의문이군요. nowiki 를 고치는 것은 기존 데이타를 죄다 손봐야 하기 때문에 망설여지고.. 어찌해야 할까요..
- 굳이 <raw>라는 태그를 만들 필요가 있을지 모르겠네여.. 웅.. 저는 당분간 nowiki를 storecoderaw로 바꾼 걸로 살면서 좀더 지켜봐야겠네용.. ^^
--
Bab2 2002-11-27 6:18 pm
- 굳이 만들 필요는 없는 게 맞습니다. ^^ 그런데 워낙 만들기가 간단했고, (한줄 복사해서 수정해주면 끝이니) nowiki 를 변형할 수 없는 이유가, UseModWiki소스수정에서도 적었지만, 기존 문법이나 인터페이스는 웬만하면 바꾸지 않고 남겨두고 싶어서거든요. (사실, 이런 저런 수정하면서 이미 바뀌어버린 것도 있겠습니다만) "<" 를 출력하기 위해서 Bab2 님 홈페이지에서는 "<nowiki><</nowiki>" 라고 적으면 되지만 이 곳의 패치가 적용되지 않은 사이트에서 는 "<nowiki>&lt;</nowiki>" 라고 적어야겠지요. 뭐 제가 위키사이트들 간의 페이지 소스 호환성에 너무 매달리는 것 같기도 합니다. 그리고 raw 태그 사이의 nowiki 태그, nowiki 사이의 raw 태그들의 충돌이나, raw 태그를 시작만 하고 끝내지 않은 경우 (바로 위에 Bab2 님 글에서 <raw> 를 쓴 것처럼) 등의 처리가 은근히 골치 아픈 문제네요. 정규표현식, c 등의 특수문자, 암튼 이놈의 특수한 기호를 escape 시키는 문제는 어딜 가도 속을 썩이는군요.
그리고, toc 걸면 마지막에 <dt> </dt><dd></dd></dl> 빈줄이 걸리네요.
--
Bab2 2002-11-25 6:55 pm
- 그러네요. 사는데 지장이 없을 것 같고 귀찮으니 천천히 생각하죠. ^^
- 네 ^^;
--
Bab2 2002-11-25 7:40 pm
기존 매크로의 동작을 웬만하면 바꾸고 싶지 않다는 주인장의 고집으로... 반영하지 않고 /반영된사용자의견으로 이동. (음.. 말이 모순되는군..)
3. 테이블의 rowspan 처리 방법 투표
WikiX 에서는 | 기호 옆에 v 를 (rowspan값-1) 만큼 적어서 쓰더군요.
|vvv : rowspan="4" 인 쉘
현재 여기 있는 패치에서는 v 옆에 rowspan값을 숫자로 적게 했는데... 양쪽을 다 지원하게 하자니 너무 지저분해져서 어느 한 쪽만 택하려 합니다. 어느쪽이 더 나을까요?
||v4 : rowspan="4" 인 쉘. 현재 방법
||vvv : 새로운 방법
투표나 해볼까요. ^^; 참가하시는 분이 몇 분이나 계실 지 모르겠지만...
현재의 방법 (v4)
새로운 방법 (vvv)
- 음... 다른 위키클론들은 표를 어떻게 하는지 모르겠군요. 더 많이 쓰이는 방식을 택하는 게 나을 것인지... 사실 지금의 방식이 제일 직관적입니다. rowspan 값을 정확히 넣게 되니까... v 를 연속해서 쓰는 경우 v 의 갯수가 rowspan 값보다 하나 작아야 하니까 혼란스러워 보이기도 하네요. 좀 더 두고보죠. 총투표수 10이 될 때까지 두고보기로 한다면... 올해 안에 결정을 못 내리겠죠? ^^
투표율 저조로.. 그냥 살던 대로 살자..는 결론을 맺고 /반영된사용자의견으로 이동.
링크 뿐만 아니라 링크안 된 단어까지도 검색을 해버리는거 같네요. 찾는 부분에 "\]" 이걸 추가하면 된다치는데 subpage는 어떻게 해야될지 모르겠네요.
--
Bab2 2002-11-28 8:13 pm
- 예, 현재 제목을 클릭해서 나오는 역링크는 실제로는 검색창에 제목을 넣었을때하고 동일한 text search 일 뿐입니다. UseModWiki소스수정의 "To Do or Bug Report" 섹션에도 언급이 되어 있습니다만, 대괄호를 추가한다고 해결되는 게 아닌 것이, 이렇게 하면 이번에는 대괄호를 사용하지 않고 그냥 위키네임으로만 적어서 링크한 경우가 검색이 되지 않습니다. 여기에다가 (대충 본 거라 추측일 뿐이지만) 환경설정 옵션인 FreeLink 의 값도 고려해야 할 듯 하더군요. 그리고 말씀하신 서브페이지 문제도 있어서, 그 부분을 개선하려면 상당히 뜯어고쳐야 할 것 같습니다.
이 내용은 잘못되어서 피해가 없도록 임의로 지웠습니다. --bab2
으미.. 감기걸렸는데 뒷골만 땡기는증상은 태어나서 첨 겪어보네요.. 아이구 머리야, 감기조심하세요~
--
Bab2 2002-11-28 11:08 pm
- 짝짝짝~ 다시 감기와 독감이 돈다는군요. 다들 조심해야겠죠.
- 역링크함수 새로 만들어야겠습니다. 문제가 너무 많아서 scriptlink 함수 만으로는 한계가 너무 많습니다.
--
Bab2 2002-11-29 12:49 am
- 예, 저도 좀 전에 비슷한 생각을 했습니다. 근본적인 한계가 있는 것 같네요. 그런데 어차피 새로 만들어도 search= action 을 쓸 테니 (검색 루틴까지 따로 만들려면...) 조금 더 구색을 갖추는 데까지는 해 볼 수 있을 것 같습니다. 좀 더 테스트해보고 내일 다시 올리죠. 좋은 밤 되세요.
- 아마 검색루틴을 새로 만들어야 될듯.. 현재로선 상위/하위링크, /하위링크를 같이 검색할 방법이 없을 거 같습니다. 설사 있다고 해도 이름이 다른 상위페이지에서 같은 이름의 하위링크가 검색되면 그것마저도 모두 보여주거든요. 그럼 나중에, 수고하세요
--
Bab2 2002-11-29 1:41 am
일단. 만들긴 만들었는데, 무슨 문제가 튀어나올지는 모르겠습니다. 특별한 문제가 없다면 서브페이지까지 그럭저럭 될겁니다. 사족 : 이정도는 유즈모드 개발자가 게으름이가 아니라면 충분히 패치할 수 있을건데 왜 안하는지 이유를 모르겠습니다. :) -- 깨끗하게 정리 부탁드리겠습니다.
sub GetSearchLink {
my ($id) = @_;
my $name = $id;
my $result;
if ($FreeLinks) {
$name =~ s/_/ /g;
$id =~ s/_/+/g;
}
$result = &ScriptLink("backsearch=$id", $name);
return $result;
}
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;
$id =~ s/_/+/g;
}
@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 '<br>';
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[^\/]/)) {
push(@found, $name);
}
}
}
}
if ($file ne "") {
$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;
....
$search = &GetParam("backsearch", "");
if (($search ne "") || (&GetParam("dosearch", "") ne "")) {
&DoGetSearchLink($search);
return;
}
....
}
문제해결 -ㅅ-
GNU source-highlight 바이너리좀 구할 수 있을까요 ㅡ.ㅡ??;;
--
Bab2 2002-11-29 8:26 pm
- 수고하셨네요. 테스트 좀 해보고, 그대로 올리든지 하겠습니다. 어제오늘 바빠서 작업을 못 했더니 제가 한 발 늦었네요 ^^; 다른 것은 수정 들어가기 전에 미리 명시를 해서 중복 작업을 피하도록 해야겠습니다. source-highlight 바이너리는 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를 쓰더군요.) 별 문제는 없을 거 같습니다. 일단 소스를 다시 살펴봐야겠네요.. 안녕히주무세요 ^^
--
Bab2 2002-11-30 1:25 am
- 고쳐봤습니다. 처음부터 정규표현식을 어느정도 알고 있었더라면 이런 삽질은 없었을것을.. 수정하면서 배열을 한번만 리턴할 수 있게 했습니다만, 결과적으로 if문 남용으로 분량만 더 늘었네요.. :(
널문자 처리는 어떻게 하는 방법이 없나요? 앞으로 또 어떤 오류가 튀어나올지.. Source-highlight 고맙습니다. 수고하세요 ^^
--
Bab2 2002-11-30 3:19 am
- 이제서야 새 코드를 테스트해보았습니다.
- 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 2002-12-1 4:27 pm
- ^^ 그 심정 알죠.. 그런데 제가 어제밤에 생각나서 끄적거려 본 게 있는데, 잘하면 전혀 새로운 접근으로 무난하게 구현할 수 있을 것 같습니다. 지금까지 작업하던 거 (저도 Bab2 님과 거의 비슷한 방향으로 작업하고 있었습니다만) 다 지워버리고 새로 시작했는데, 제 생각대로만 되면 훨씬 정확한 결과를 낳을 수 있을 것 같습니다.
- 멋지게 구현됐군요..:)~ 소스가 훨씬 깔끔하네요. 다행히 역링크소스 이전에 백업해둔게 있어서 그거 열어서 다시 바꿨습니다. 잘되네요.. 그냥 기다리고 있는건데 ^^;;
--
Bab2 2002-12-1 7:50 pm
- 읍.. 전체링크보기 겉모양을 바꿨었는데 ㅡ.ㅡ;
UseModWiki소스수정/기능추가및개선에서 제대로 된 역링크를 출력할 수 있게 수정 완료.
5. include 매크로에 html화일 직접추가하는 기능
흠... 이거 가능할까요? 쓸모없는 기능이려나 -_-; 방명록을 iframe 안에 넣어서 쓰고있는데, 으흠.. 어떻게 방법이 없을까 싶어서요.. --
Bab2 2002-12-3 12:58 am
- WikiX 에는 다른 웹페이지를 그대로 include 할 수 있는 것 같더군요. 저는 필요성도 느끼지 못하고 의욕도 생기지 않아서 별로 하고픈 마음이... cgi 의 경우는 더더욱 만만치 않을 것 같군요. wget 같은 외부 유틸리티를 호출해서 해당 페이지를 긁어온 후 그 내용의 양 끝에 html, /html 태그를 각각 붙여서 삽입하는 정도라면 간단히 할 수 있을지도 모르겠습니다만, 그 상태에서 포함된 페이지 내의 링크를 클릭하는 순간 어차피 도루묵이 되겠죠... 조프방명록 의 경우 iframe 을 쓰지 않고 말씀하신 해당 기능을 구현한 것 같은데요.. 조프님께 비법을 여쭤봐야겠군요.
UseModWiki소스수정/기능추가및개선에서 #EXTERN 명령어를 추가함. 완료.
6. '3.28. 페이지 제목을 클릭했을때 진정한 의미의 역링크 출력'
See http://www.usemod.org/cgi-bin/wiki.pl?WikiPatches/BackLinks
어떻게 다른 것인지요..? ^^; -지양
- 허억... 저번에 WikiPatches 를 흩어 볼 때는 왜 못 봤을까요.. ㅠ,.ㅠ 거기 있는 것도 접근 방법은 유사하네요. 최종적으로 GetPageLinks 의 결과로 나오는 각 페이지 안에 있는 링크들 목록을 뽑아서 비교한다.. (easy patch 라고 되어 있는 것은 처음에 저나 Bab2님이 시도했던 방향인데 그것은 한글이 들어 있고, 대괄호쌍을 쓰는 경우와 잘 매치가 안 될 것 같습니다.) 다만, 저기 있는 패치는 "/하위페이지" 형식으로 링크가 되어 있는 것은 잡아내지 못할 것으로 생각됩니다. 뭐, 오리지널 코드에 패치를 적용해서 테스트해보기 전에는 모르는 일입니다만...
- 음... 같은 일을 하는 서로 다른 코드가 있다는 것은 좀 뭣한 일이긴 한데, 할 수 없죠 뭐. ^^ 그리고 꿈보다 해몽이 좋은 것일 수도 있지만, 이 쪽의 패치 쪽이 확장하기에는 (allpagesto 매크로 처럼) 더 편할 것 같네요. 오래간만에 뵙네요, 좋은 하루 되세요.
열심히 만들고 났더니만 이미 남이 만들어 두었더라..는 가슴아픈 사연을 남기며 완료.. ㅜ.ㅡ
7. 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 }}} 등 신택스 하이라이트 태그 안에서 저런 구문이 들어갔을 때 빈 줄이 하나 더 들어가버리는 것을 해결할 방법이 없더군요. "{{{ }}} 안에서는 사용자입력을 그대로 출력"하는 것이 제게는 더 중요한 기능이기 때문에, 그냥 수정하지 않은 상태로 사는 게 낫다..라는 결론입니다. :-)
아무 것도 한 것 없이 완료. :-)
InterPageLink 함수를 다음과 같이 고치면 됩니다. 원래 이미지 처리하는 부분을 그냥 복사한 겁니다. 다만 이 함수를 호출하는 부분이 StoreInterPage와 PrintLinkList 두 곳입니다만, 첫번째에서는 확실히 넣어주는게 맞고, 두번째에서는 잘 모르겠군요. 사실 두번째 함수에서 어떤 경우에 InterPageLink를 호출하는지 잘 모르겠습니다. -_-; $UseImage 변수를 넣어서 각각을 구별해주는게 좋을 것 같네요.
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;
$url .= $remotePage;
if ($UseImage && ($url =~ /^(http:|https:|ftp:).+\.$ImageExtensions$/)) {
$url = $1 if ($url =~ /^https?:(.*)/ && $1 !~ /^\/\//);
return ("<img $ImageTag src=\"$url\ alt=\"$id\">", $punct);
}
return ("<a href=\"$url\" title=\"$id\"><img src=\"inter.gif\" border=\"0\" alt=\"$id\">$remotePage</a>", $punct);
}
- 오호, 굿입니다요~ 두번째 경우는 다음과 같이 확인할 수 있습니다. 상단 메뉴의 "링크"를 눌러서 전체 리스트 목록을 띄운후, 주소창의 "action=links" 뒤에다 "&inter=1" 을 추가해 주면 인터위키가 목록에 포함됩니다. 마찬가지로 &url=1 을 추가하면 외부 URL 목록도 뜨지요. 따라서 전체 링크 리스트 화면에서 그림이 떠버리는 불상사(?)가 발생하네요. URL 의 경우는 개발자가 그런 사태를 염두에 두어서 useImage 파라메터를 두었는데, 설마 이미지를 InterWiki 로 적을 것을 예상하지는 못한 모양이네요. ^^
- 그냥 위에 추가한 if 문에 action 파라메터가 links 인지를 검사하는 루틴만 두어도 해결은 되겠습니다만, 모양새가 좋지 않으니, 말씀하신 것처럼 useImage 를 써서 UrlLink 함수와 동일하게 만드는 게 낫겠습니다. 잠시 후에 반영하도록 하지요.
- StoreInterPage에서는 1, PrintLinkList 에서는 0을 넣어서 호출해주면 됩니다.
- 원래 소스를 보니까 본문에서는 이미지를 표시하고, diff 화면에서는 표시하지 않도록 해 두었더군요. 인터위키도 그것을 따르는 게 낫겠다 싶어서 CommonMarkup 까지 거슬러가서 수정한 것을 UseModWiki소스수정/기능추가및개선에 적었습니다. 다시 한 번 감사~
소스를 수정. 완료.
9. goto 매크로
우음... 빈칸에 엔터를 쳐도 ?wkl= 이렇게 나오면서 오류가 생기는데,
캐릭터셋 문제가 아니라 누가 만들다가 만거같은 느낌이 ㅡ,.ㅡ;;
페이지 이동방법에는 두가지가 있습니다. "?페이지이름" 이랑 "action=browse&id=페이지이름" 인데요.
- 일단...
sub MacroGoto {
my ($string) = @_;
return
"<form name=goto><input type=\"hidden\" name=\"action\" value=\"browse\" id=\"hidden-box\">" .
"<input name='id' type=text size=10 value=$string>" . " " .
"<input type=submit value=\"" . T('Go') . "\">" .
"</form>";
--
Bab2 2002-11-24 4:49 am
위에 이어서... id값이 없을경우 "검색"이라는 페이지를 지정해줘서 강제로 이동할 수 있게 합니다.
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;
}
}
....
}
--
Bab2 2002-11-24 5:04 am
- 이제서야 살펴봤습니다. 그런데 id 가 null 일 경우를 대비하여 $NotFoundPg 환경변수가 이미 존재하고 있더군요. 일단 그 변수에 담긴 값을 사용하고, 그마저도 없다면 첫화면으로 이동하게 수정해서 반영했습니다. $NotFoundPg="검색"으로 지정하는 식으로 사용할 수 있겠지요.
10. MacroInclude
MacroInclude 함수에서 부르는 함수들이 전역 변수를 마구 사용하기 때문에 원래 페이지의 정보가 사라지는 문제가 있습니다. 마지막 변경 시간등이 나오기 때문에 되나보다하고 넘어가기 쉽지만, 잘 보면 사실 마지막으로 MacroInclude한 페이지의 마지막 변경 시간이 나온다는걸 알 수 있습니다.
그래서 아예 원래 부르는 함수의 내용을 전부 풀어서 넣어봤습니다. 좀 흉하긴 해도 동작은 하는 것 같네요.
sub MacroInclude {
my ($name) = @_;
if ($OpenPageName eq $name) {
return "";
}
my $fname = &GetPageFile($name);
if (!(-f $fname)) {
return "";
}
my $data = &ReadFileOrDie($fname);
my %SubPage = split(/$FS1/, $data, -1);
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 를 위해서 파라메터를 하나 늘리고 라인 하나를 더 추가하여 /기능추가및개선에 반영했습니다. 감사합니다.
위키위키분류