[첫화면으로]UseModWiki소스수정/반영된사용자의견archive02

마지막으로 [b]

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버전" 은 너무 긴가요? ^^;
-- Raymundo 2002-11-23 10:40 am
"UseModWiki 0.92M60으로 하져..기관총..^^; 농담입니다..:)"
-- Bab2 2002-11-23 11:20 am

궁한 대로, "0.92K3-ext2.41a" 의 형식으로 이름을 붙였음.
-- Raymundo 2002-12-3 1:31 am

2. <nowiki></nowiki>

StoreRaw()를 쓰라고 되어 있던데, StoreCodeRaw()를 쓰는게 더 낫지 않을까 싶습니다. 굳이 이유를 들자면
 < &gt; 이거나 &lt; > 이거나 &amp; &이거, \\이거 또는 %%% 이거 때문입니다.
 도움말에 특수문자를 넣으려니 불편해서..^^;
그리고 nowiki선언되면 <html>을 부르지 않는 다른 태그는 전부 위키태그로 간주되어서 무시되어져야 할 것이고, html코드는 nowiki 안에서 다시 <html>선언으로 불러들이면 될 것이기 때문입니다.

흠... nowiki 태그도 {{{ }}} 처럼 모든 특수문자를 무시하도록 만들어버리자는 말씀이시군요. 제 홈페이지에 기존에 nowiki 를 사용한 곳들을 죄다 뜯어고쳐야 될 지 모르니... 제 홈페이지에 적용하는 것은 생각 좀 해 봐야겠습니다. 그리고 StoreCodeRaw 가 원래 있던 함수가 아니라 제가 {{{ }}} 때문에 추가한 거라서, 기존의 마크들이 그 함수를 쓰게 하는 것이 잘 하는 건가 싶기도 하고요.. 차라리 nowiki 말고 nohtml 내지 다른 이름의 태그를 추가로 만드는 게 나을지도 모르겠습니다.
-- Raymundo 2002-11-25 7:37 pm

일단 <raw></raw> 라는 태그를 만들어봤습니다. nowiki 처리라인을 복사해서 StoreRaw 를 StoreCodeRaw 로만 고치면 되긴 하는데... raw 라는 이름이 적절한지 의문이군요. nowiki 를 고치는 것은 기존 데이타를 죄다 손봐야 하기 때문에 망설여지고.. 어찌해야 할까요..
-- Raymundo 2002-11-27 4:05 pm
굳이 <raw>라는 태그를 만들 필요가 있을지 모르겠네여.. 웅.. 저는 당분간 nowiki를 storecoderaw로 바꾼 걸로 살면서 좀더 지켜봐야겠네용.. ^^
-- Bab2 2002-11-27 6:18 pm

굳이 만들 필요는 없는 게 맞습니다. ^^ 그런데 워낙 만들기가 간단했고, (한줄 복사해서 수정해주면 끝이니) nowiki 를 변형할 수 없는 이유가, UseModWiki소스수정에서도 적었지만, 기존 문법이나 인터페이스는 웬만하면 바꾸지 않고 남겨두고 싶어서거든요. (사실, 이런 저런 수정하면서 이미 바뀌어버린 것도 있겠습니다만) "&lt;" 를 출력하기 위해서 Bab2 님 홈페이지에서는 "<nowiki>&lt;</nowiki>" 라고 적으면 되지만 이 곳의 패치가 적용되지 않은 사이트에서 는 "<nowiki>&amp;lt;</nowiki>" 라고 적어야겠지요. 뭐 제가 위키사이트들 간의 페이지 소스 호환성에 너무 매달리는 것 같기도 합니다. 그리고 raw 태그 사이의 nowiki 태그, nowiki 사이의 raw 태그들의 충돌이나, raw 태그를 시작만 하고 끝내지 않은 경우 (바로 위에 Bab2 님 글에서 <raw> 를 쓴 것처럼) 등의 처리가 은근히 골치 아픈 문제네요. 정규표현식, c 등의 특수문자, 암튼 이놈의 특수한 기호를 escape 시키는 문제는 어딜 가도 속을 썩이는군요.
-- Raymundo 2002-11-27 9:42 pm

그리고, toc 걸면 마지막에 <dt> </dt><dd></dd></dl> 빈줄이 걸리네요.
-- Bab2 2002-11-25 6:55 pm

그러네요. 사는데 지장이 없을 것 같고 귀찮으니 천천히 생각하죠. ^^
-- Raymundo 2002-11-25 7:37 pm
네 ^^;
-- Bab2 2002-11-25 7:40 pm

기존 매크로의 동작을 웬만하면 바꾸고 싶지 않다는 주인장의 고집으로... 반영하지 않고 /반영된사용자의견으로 이동. (음.. 말이 모순되는군..)
-- Raymundo 2002-12-3 1:31 am

3. 테이블의 rowspan 처리 방법 투표

WikiX 에서는 | 기호 옆에 v 를 (rowspan값-1) 만큼 적어서 쓰더군요.
|vvv      : rowspan="4" 인 쉘
현재 여기 있는 패치에서는 v 옆에 rowspan값을 숫자로 적게 했는데... 양쪽을 다 지원하게 하자니 너무 지저분해져서 어느 한 쪽만 택하려 합니다. 어느쪽이 더 나을까요?
||v4      : rowspan="4" 인 쉘. 현재 방법
||vvv     : 새로운 방법
투표나 해볼까요. ^^; 참가하시는 분이 몇 분이나 계실 지 모르겠지만...

현재의 방법 (v4)
1
새로운 방법 (vvv)
1

음... 다른 위키클론들은 표를 어떻게 하는지 모르겠군요. 더 많이 쓰이는 방식을 택하는 게 나을 것인지... 사실 지금의 방식이 제일 직관적입니다. rowspan 값을 정확히 넣게 되니까... v 를 연속해서 쓰는 경우 v 의 갯수가 rowspan 값보다 하나 작아야 하니까 혼란스러워 보이기도 하네요. 좀 더 두고보죠. 총투표수 10이 될 때까지 두고보기로 한다면... 올해 안에 결정을 못 내리겠죠? ^^
-- Raymundo 2002-11-27 9:42 pm

투표율 저조로.. 그냥 살던 대로 살자..는 결론을 맺고 /반영된사용자의견으로 이동.
-- Raymundo 2002-12-3 1:31 am

4. 역링크

링크 뿐만 아니라 링크안 된 단어까지도 검색을 해버리는거 같네요. 찾는 부분에 "latex equation\]" 이걸 추가하면 된다치는데 subpage는 어떻게 해야될지 모르겠네요.
-- Bab2 2002-11-28 8:13 pm

예, 현재 제목을 클릭해서 나오는 역링크는 실제로는 검색창에 제목을 넣었을때하고 동일한 text search 일 뿐입니다. UseModWiki소스수정의 "To Do or Bug Report" 섹션에도 언급이 되어 있습니다만, 대괄호를 추가한다고 해결되는 게 아닌 것이, 이렇게 하면 이번에는 대괄호를 사용하지 않고 그냥 위키네임으로만 적어서 링크한 경우가 검색이 되지 않습니다. 여기에다가 (대충 본 거라 추측일 뿐이지만) 환경설정 옵션인 FreeLink 의 값도 고려해야 할 듯 하더군요. 그리고 말씀하신 서브페이지 문제도 있어서, 그 부분을 개선하려면 상당히 뜯어고쳐야 할 것 같습니다.
-- Raymundo 2002-11-28 8:57 pm

이 내용은 잘못되어서 피해가 없도록 임의로 지웠습니다. --bab2

으미.. 감기걸렸는데 뒷골만 땡기는증상은 태어나서 첨 겪어보네요.. 아이구 머리야, 감기조심하세요~
-- Bab2 2002-11-28 11:08 pm

짝짝짝~ 다시 감기와 독감이 돈다는군요. 다들 조심해야겠죠.
-- Raymundo 2002-11-28 11:43 pm

역링크함수 새로 만들어야겠습니다. 문제가 너무 많아서 scriptlink 함수 만으로는 한계가 너무 많습니다.
-- Bab2 2002-11-29 12:49 am

예, 저도 좀 전에 비슷한 생각을 했습니다. 근본적인 한계가 있는 것 같네요. 그런데 어차피 새로 만들어도 search= action 을 쓸 테니 (검색 루틴까지 따로 만들려면...) 조금 더 구색을 갖추는 데까지는 해 볼 수 있을 것 같습니다. 좀 더 테스트해보고 내일 다시 올리죠. 좋은 밤 되세요.
-- Raymundo 2002-11-29 12:59 am
아마 검색루틴을 새로 만들어야 될듯.. 현재로선 상위/하위링크, /하위링크를 같이 검색할 방법이 없을 거 같습니다. 설사 있다고 해도 이름이 다른 상위페이지에서 같은 이름의 하위링크가 검색되면 그것마저도 모두 보여주거든요. 그럼 나중에, 수고하세요
-- Bab2 2002-11-29 1:41 am

일단. 만들긴 만들었는데, 무슨 문제가 튀어나올지는 모르겠습니다. 특별한 문제가 없다면 서브페이지까지 그럭저럭 될겁니다. 사족 : 이정도는 유즈모드 개발자가 게으름이가 아니라면 충분히 패치할 수 있을건데 왜 안하는지 이유를 모르겠습니다. :) -- 깨끗하게 정리 부탁드리겠습니다.

#### 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 '<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/ && $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 바이너리좀 구할 수 있을까요 ㅡ.ㅡ??;;
-- Bab2 2002-11-29 8:26 pm

수고하셨네요. 테스트 좀 해보고, 그대로 올리든지 하겠습니다. 어제오늘 바빠서 작업을 못 했더니 제가 한 발 늦었네요 ^^; 다른 것은 수정 들어가기 전에 미리 명시를 해서 중복 작업을 피하도록 해야겠습니다. source-highlight 바이너리는 GyparkPDS:source-highlight-binary.zip 입니다. i386+Linux 에서 컴파일한 겁니다.
-- Raymundo 2002-11-29 11:48 pm

음..
			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]] 란 링크가 같이 있으면 검색이 두 번 되어서 역링크에 그 페이지가 연달아 두 번 출력됩니다.

사용자가 어떻게 페이지를 작성했느냐에 따라서 워낙 다양한 경우의 수가 생기는터라 테스트하는 게 매우 힘드네요. 직접 고쳐보려고 해도 남이 만든 코드가 더 어려운 법이라.. ^^; 게다가 못 먹는 술을 몇 잔 했더니...
-- Raymundo 2002-11-30 12:36 am

웅.. 한잔 하셨었군요 ^^, 소스전체를 찾아봤는데 SearchBody()함수는 쓰는 곳이 한군데도 없어서 자체를 수정해버린것이었습니다.(모두 SearchTitleAndBody를 쓰더군요.) 별 문제는 없을 거 같습니다. 일단 소스를 다시 살펴봐야겠네요.. 안녕히주무세요 ^^
-- Bab2 2002-11-30 1:25 am

고쳐봤습니다. 처음부터 정규표현식을 어느정도 알고 있었더라면 이런 삽질은 없었을것을.. 수정하면서 배열을 한번만 리턴할 수 있게 했습니다만, 결과적으로 if문 남용으로 분량만 더 늘었네요.. :(
널문자 처리는 어떻게 하는 방법이 없나요? 앞으로 또 어떤 오류가 튀어나올지.. Source-highlight 고맙습니다. 수고하세요 ^^
-- Bab2 2002-11-30 3:19 am

이제서야 새 코드를 테스트해보았습니다.

위키네임이 아닌 경우는 어차피 대괄호쌍을 좌우에 써 주니 상관이 없는 듯 한데... 위키네임은 정말 사람 피곤하게 만드는군요. ^^; 이제 보니... 오리지날 개발자들이 "쉬운데 안하고 있는" 게 아니었군요. ^^; 그래도 이제는 끝이 보이는 듯 합니다.
-- Raymundo 2002-12-1 12:26 am
훔냘..눈물나네요..ㅠㅠ, 집에가서 좀더 찾아보도록 하겠습니다... 내일 일이 있어서 시간이 좀 걸릴듯.. 지금도 집이 아니라서..큭..ㅡ.ㅡ; 그럼 잠시후에..
-- Bab2 2002-12-1 4:27 pm

^^ 그 심정 알죠.. 그런데 제가 어제밤에 생각나서 끄적거려 본 게 있는데, 잘하면 전혀 새로운 접근으로 무난하게 구현할 수 있을 것 같습니다. 지금까지 작업하던 거 (저도 Bab2 님과 거의 비슷한 방향으로 작업하고 있었습니다만) 다 지워버리고 새로 시작했는데, 제 생각대로만 되면 훨씬 정확한 결과를 낳을 수 있을 것 같습니다.
-- Raymundo 2002-12-1 4:49 pm
멋지게 구현됐군요..:)~ 소스가 훨씬 깔끔하네요. 다행히 역링크소스 이전에 백업해둔게 있어서 그거 열어서 다시 바꿨습니다. 잘되네요.. 그냥 기다리고 있는건데 ^^;;
-- Bab2 2002-12-1 7:50 pm
읍.. 전체링크보기 겉모양을 바꿨었는데 ㅡ.ㅡ;

UseModWiki소스수정/기능추가및개선에서 제대로 된 역링크를 출력할 수 있게 수정 완료.
-- Raymundo 2002-12-3 1:31 am

5. include 매크로에 html화일 직접추가하는 기능

흠... 이거 가능할까요? 쓸모없는 기능이려나 -_-; 방명록을 iframe 안에 넣어서 쓰고있는데, 으흠.. 어떻게 방법이 없을까 싶어서요..
-- Bab2 2002-12-3 12:58 am

WikiX 에는 다른 웹페이지를 그대로 include 할 수 있는 것 같더군요. 저는 필요성도 느끼지 못하고 의욕도 생기지 않아서 별로 하고픈 마음이... cgi 의 경우는 더더욱 만만치 않을 것 같군요. wget 같은 외부 유틸리티를 호출해서 해당 페이지를 긁어온 후 그 내용의 양 끝에 html, /html 태그를 각각 붙여서 삽입하는 정도라면 간단히 할 수 있을지도 모르겠습니다만, 그 상태에서 포함된 페이지 내의 링크를 클릭하는 순간 어차피 도루묵이 되겠죠... Jof:조프방명록 의 경우 iframe 을 쓰지 않고 말씀하신 해당 기능을 구현한 것 같은데요.. 조프님께 비법을 여쭤봐야겠군요.
-- Raymundo 2002-12-3 1:42 am

UseModWiki소스수정/기능추가및개선에서 #EXTERN 명령어를 추가함. 완료.
-- Raymundo 2002-12-4 2:15 am

6. '3.28. 페이지 제목을 클릭했을때 진정한 의미의 역링크 출력'

See http://www.usemod.org/cgi-bin/wiki.pl?WikiPatches/BackLinks 어떻게 다른 것인지요..? ^^; -지양

허억... 저번에 UseMod:WikiPatches 를 흩어 볼 때는 왜 못 봤을까요.. ㅠ,.ㅠ 거기 있는 것도 접근 방법은 유사하네요. 최종적으로 GetPageLinks 의 결과로 나오는 각 페이지 안에 있는 링크들 목록을 뽑아서 비교한다.. (easy patch 라고 되어 있는 것은 처음에 저나 Bab2님이 시도했던 방향인데 그것은 한글이 들어 있고, 대괄호쌍을 쓰는 경우와 잘 매치가 안 될 것 같습니다.) 다만, 저기 있는 패치는 "/하위페이지" 형식으로 링크가 되어 있는 것은 잡아내지 못할 것으로 생각됩니다. 뭐, 오리지널 코드에 패치를 적용해서 테스트해보기 전에는 모르는 일입니다만...

음... 같은 일을 하는 서로 다른 코드가 있다는 것은 좀 뭣한 일이긴 한데, 할 수 없죠 뭐. ^^ 그리고 꿈보다 해몽이 좋은 것일 수도 있지만, 이 쪽의 패치 쪽이 확장하기에는 (allpagesto 매크로 처럼) 더 편할 것 같네요. 오래간만에 뵙네요, 좋은 하루 되세요.
-- Raymundo 2002-12-3 6:04 pm

열심히 만들고 났더니만 이미 남이 만들어 두었더라..는 가슴아픈 사연을 남기며 완료.. ㅜ.ㅡ
-- Raymundo 2002-12-4 2:27 am

7. Emumerate시의 번호 붙이는 거에 대해

요새 wikiX쪽에 가서는 UseModWiki에 수정된 거 반영해 달라고 하고, 이쪽에 와서는 거꾸로 하고 있네요. :-)

  1. 한글 1
한글 1에 대한 설명
  1. 한글 2
한글 2에 대한 설명

이런 형식의 format을 쓸 때 UseModWiki에서는 번호가 1, 2로 되는게 아니고 1, 1로 따로 따로 붙어서 나옵니다. 번호가 연결이 되는지 아닌지 판단하기 위해서 wikiX에서는 . 이나 \n등으로 paragraph가 나뉘지 않았다는걸 명시적으로 선언해주는데 여기도 그런 식으로 수정하는게 어떨까요?
-- Jmjeong 2002-12-4 5:14 pm

(중간에 오간 내용 생략)

"\\\n" 을 "<br>" 로 치환하는 곳이 더 앞에 있기 때문에, 이런 좋은 현상 (아마 개발시에 염두에 두지는 않았을 것 같습니다만 ^^) 이 생기는군요.

# 1번\\
\\
1번설명\\
\\
\\
\\           <-- 원하는 줄 수 만큼 \\ 를 나열하고
             <-- 마지막에만 빈 줄을 넣어준다
# 2번\\
2번설명

  1. 1번

    1번설명



  2. 2번
    2번설명

"\\" 를 나열하다가 마지막에 빈 줄을 넣어야 되는 게 눈에 거슬리긴 합니다. 저것을 수정하려고 해 봤는데, (그리고 좀 전까지 수정이 다 되긴 했는데) 그랬더니만 {{{#!vim perl }}} 등 신택스 하이라이트 태그 안에서 저런 구문이 들어갔을 때 빈 줄이 하나 더 들어가버리는 것을 해결할 방법이 없더군요. "{{{ }}} 안에서는 사용자입력을 그대로 출력"하는 것이 제게는 더 중요한 기능이기 때문에, 그냥 수정하지 않은 상태로 사는 게 낫다..라는 결론입니다. :-)
-- Raymundo 2002-12-5 9:55 am

아무 것도 한 것 없이 완료. :-)
-- Raymundo 2002-12-5 9:01 pm

8. InterWiki로 이미지 파일 처리하기

InterPageLink 함수를 다음과 같이 고치면 됩니다. 원래 이미지 처리하는 부분을 그냥 복사한 겁니다. 다만 이 함수를 호출하는 부분이 StoreInterPage와 PrintLinkList 두 곳입니다만, 첫번째에서는 확실히 넣어주는게 맞고, 두번째에서는 잘 모르겠군요. 사실 두번째 함수에서 어떤 경우에 InterPageLink를 호출하는지 잘 모르겠습니다. -_-; $UseImage 변수를 넣어서 각각을 구별해주는게 좋을 것 같네요.
-- 조프 2002-12-4 1:26 pm

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/&amp;/&/g;  # Unquote common URL HTML
        $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 함수와 동일하게 만드는 게 낫겠습니다. 잠시 후에 반영하도록 하지요.
-- Raymundo 2002-12-4 1:57 pm

StoreInterPage에서는 1, PrintLinkList 에서는 0을 넣어서 호출해주면 됩니다.
-- 조프 2002-12-4 2:13 pm

원래 소스를 보니까 본문에서는 이미지를 표시하고, diff 화면에서는 표시하지 않도록 해 두었더군요. 인터위키도 그것을 따르는 게 낫겠다 싶어서 CommonMarkup 까지 거슬러가서 수정한 것을 UseModWiki소스수정/기능추가및개선에 적었습니다. 다시 한 번 감사~
-- Raymundo 2002-12-4 2:35 pm

소스를 수정. 완료.
-- Raymundo 2002-12-5 9:01 pm

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>" . "&nbsp;" .
                "<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="검색"으로 지정하는 식으로 사용할 수 있겠지요.
-- Raymundo 2002-12-5 10:06 pm

10. MacroInclude

MacroInclude 함수에서 부르는 함수들이 전역 변수를 마구 사용하기 때문에 원래 페이지의 정보가 사라지는 문제가 있습니다. 마지막 변경 시간등이 나오기 때문에 되나보다하고 넘어가기 쉽지만, 잘 보면 사실 마지막으로 MacroInclude한 페이지의 마지막 변경 시간이 나온다는걸 알 수 있습니다.

그래서 아예 원래 부르는 함수의 내용을 전부 풀어서 넣어봤습니다. 좀 흉하긴 해도 동작은 하는 것 같네요.
-- 조프 2002-12-17 3:34 am

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 를 위해서 파라메터를 하나 늘리고 라인 하나를 더 추가하여 /기능추가및개선에 반영했습니다. 감사합니다.
-- Raymundo 2002-12-17 1:50 pm


위키위키분류

마지막 편집일: 2024-4-29 10:14 am (변경사항 [d])
1039 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기