[첫화면으로]UseModWiki소스수정백업

마지막으로 [b]

43 번째 수정본
이 페이지는 읽기 전용입니다. 일관성 유지를 위해서 잠궈두었기 때문에 방문객이 직접 수정할 수는 없습니다. 이 페이지에 있는 소스 수정 내역에 대한 의견이나, 새로운 패치에 대한 정보는 /사용자의견 페이지에 남겨 주시면 감사하겠습니다.

1. 개요
2. 현재 이 홈페이지에서 사용되고 있는 UseModWiki 소스
3. 데이타 디렉토리와 설정 화일 위치 변경 (optional)
4. fullsearch 와 titlesearch 매크로의 출력 형식 변경
5. pre 태그 안에서 부등호 표기 문제 해결
6. Index 의 페이지 목록을 제목의 첫글자별로 구분
7. 상단 메뉴바에 사용자 정의 링크 추가 (optional)
8. 외부 URL 옆에 "새 창으로 열기" 아이콘 표시 (optional)
9. 사이트 로고 표시 문제 해결
10. toc 매크로 문제 해결
11. 상단 메뉴에 상위페이지 아이콘 표시 (optional)
12. {{{ }}} 태그 추가
13. 이모티콘 도움말 추가
14. 한글이 포함된 인터위키 문제 해결
15. history 매크로 문제 해결
16. user 디렉토리를 생성하지 못하는 문제 해결
17. 번역 화일 사용
18. 페이지 목록에서 잠겨 있는 페이지 표시
19. 잠겨 있는 페이지를 삭제 또는 이름을 변경할 때 lock 도 같이 처리
20. 페이지 하단에 수정금지 여부와 설정/해제 표시 (optional)
21. To Do or Bug Report

1. 개요

이 홈페이지에 사용되는 UseModWiki 는, [Luke's wiki]에서 Luke님이 한글 관련 패치를 하고, PalmWiki:PalmWiki_관련 에서 jmjeong 님이 다시 몇 가지를 수정한 것을 주인장이 다운받아서 사용하고 있다.

여기에 별도로, 위키위키를사용한홈페이지들마다 해당 홈페이지 운영자분들이 직접 고친 것들과, 주인장이 개인적인 필요에 의해서 고친 것들을 추가로 적용하였다.

즉, 아래에서 제공하는 소스화일을 그대로 사용하던가, 필요한 것만 패치하고 싶다면 PalmWiki:PalmWiki_관련 에 있는 소스에서 시작해서 원하는 것만 적용하면 된다.

2. 현재 이 홈페이지에서 사용되고 있는 UseModWiki 소스

여기서 제공하는 화일을 사용하여 발생하는 사태에 대해 주인장은 책임지지 않습니다

3. 데이타 디렉토리와 설정 화일 위치 변경 (optional)

{{{
  1. == Configuration =====================================================
  2. $DataDir = "data"; # Main wiki directory
$DataDir = "newdata"; # Main wiki directory }}}

{{{
sub DoWikiRequest {
  1. if ($UseConfig && (-f "config.pl")) {
  2. do "config.pl"; # Later consider error checking?
  3. }
        if ($UseConfig && (-f "newconfig.pl")) {
                do "newconfig.pl";  # Later consider error checking?
        }
}}}

4. fullsearch 와 titlesearch 매크로의 출력 형식 변경

{{{
sub MacroTitleSearch {
    ...
      $txt .= &GetPageLink($name) . "
\n"; # 원래는 " " 인데, "
\n" 으로 수정했음. ... $txt .= &GetPageLink($name) . "
\n";
} }}}
{{{
sub MacroFullSearch() {
    ...
    $txt .= &GetPageLink($pagename) . "
\n"; ...
} }}}

5. pre 태그 안에서 부등호 표기 문제 해결

{{{
sub GetTextArea {
        my ($name, $text, $rows, $cols) = @_;
        $text =~ s/(\&)/\&/g;          # 이 줄을 추가해 준다.
        ...
} }}}

6. Index 의 페이지 목록을 제목의 첫글자별로 구분

{{{
  1. 다음의 함수를 통채로 바꿈
sub PrintPageList {
        my ($pagename);
        my $count = 0;
        my $titleIsPrinted = 0;
        my @han = qw(가 나 다 라 마 바 사 아 자 차 카 타 파 하);
        my @indexTitle = (0, "A".."Z");
        push (@indexTitle, @han, "기타");
        my @indexSearch=("A".."Z");
        push (@indexSearch, @han, "豈");

        print "

", Ts('페이지 수: %s', ($#_ + 1)), "

\n";

        my $count2 = 0;
        print("\n|");
        while ( $count2 <= $#indexTitle ) {
                if ($count2 == 27) {
                        print("
\n|"); } print(""); print(" $indexTitle[$count2] "); print("|"); $count2++; } print "

"; $count2 = 0;

        foreach $pagename(@_) {
                until (
                        $pagename lt @indexSearch[$count]
                        && ($count == 0 || $pagename gt @indexSearch[$count-1])
                ) {
                        $count++;
                        $titleIsPrinted = 0;
                        last if $count > 40;
                }
                if (!$titleIsPrinted) {
                        while ( $count2 <= ($count - 1) ) {
                                print "\n";
                                print "";
                                $count2++;
                        }
                        print "\n";
                        print $q->h3($indexTitle[$count]);
                        print "";
                        $count2 = $count + 1;
                        $titleIsPrinted=1;
                }

                print ".... " if ($pagename =~ m|/|);
                print &GetPageLink($pagename);

                if (&UserIsAdmin()) {
                        print " | " . &ScriptLink("action=pagelock&set=1&id=" .$pagename, T('lock'));
                        print " | " . &ScriptLink("action=pagelock&set=0&id=" .$pagename, T('unlock'));
                }
                print $q->br;
                print "\n";
        }
} }}}

7. 상단 메뉴바에 사용자 정의 링크 추가 (optional)

{{{
      1. 제일 끝에 UserGotoBar2~4 추가
use vars qw(@RcDays @HtmlPairs @HtmlSingle
        $TempDir $LockDir $DataDir $HtmlDir $UserDir $KeepDir $PageDir
        ...
        $UserGotoBar $UserGotoBar2 $UserGotoBar3 $UserGotoBar4);
... }}}
{{{
sub GetGotoBar {
        ...
        $bartext .= ' </td> ' . &GetSearchForm();
        if ($UserGotoBar ne '') {
                $bartext .= "  " . $UserGotoBar;
        }
      1. 다음 단락을 추가. UserGotoBar3 와 4 도 원하는 위치에 삽입하면 됨
        if ($UserGotoBar2 ne '') {
                $bartext .= "  " . $UserGotoBar2;
        }
      1. 여기까지
        $bartext .= "</tr>";
        $bartext .= $q->endform;
        $bartext .= "</table>
\n"; return $bartext;
} ... }}}

8. 외부 URL 옆에 "새 창으로 열기" 아이콘 표시 (optional)

{{{
sub InterPageLink {
        ...
  1. return ("$name", $punct);
        return ("$name<img src=\"아이콘경로\" border=\"0\" alt=\"새 창으로 열기\" align=\" absbottom\">", $punct);
} }}}
{{{
sub StoreBracketInterPage {
        ...
  1. return &StoreRaw("[$text]");
        return &StoreRaw("[$text]<img src=\"아이콘경로\" border=\"0\" alt=\"새 창으로 열기\" align=\"absbottom\">");
} }}}
{{{
sub UrlLink {
        ...
  1. return ("$name", $punct);
        return ("$name<img src=\"아이콘경로\" border=\"0\" alt=\"새 창으로 열기\" align=\"absbottom\">", $punct);
} }}}
{{{
sub StoreBracketUrl {
        ...
  1. return &StoreRaw("[$text]");
        return &StoreRaw("[$text]<img src=\"아이콘경로\" border=\"0\" alt=\"새 창으로 열기\" align=\"absbottom\">");
} }}}

9. 사이트 로고 표시 문제 해결

{{{
... sub GetHeader {
        ...
        if ($id ne '') {
  1. $result .= $q->h1(&GetSearchLink($id)); 이 부분을
                $result .= $q->h1($header . &GetSearchLink($id));  # 이렇게 고쳐줄 것
        } else {
                $result .= $q->h1($header . $title);
        }
        ...
} ... }}}

10. toc 매크로 문제 해결

{{{
... sub WikiHeadingNumber {
        ...
        # Cook anchor by canonicalizing $text.
  1. 아래 여섯 줄은 불필요. 주석처리
  2. $anchor = $text;
  3. $anchor =~ s/\<.*?\>//g;
  4. $anchor =~ s/\W/_/g;
  5. $anchor =~ s/__+/_/g;
  6. $anchor =~ s/^_//;
  7. $anchor =~ s/_$//;

  1. $anchor = '_' . (join '_', @HeadingNumbers) unless $anchor; # Last ditch effort 이 줄을
        $anchor = 'H_' . (join '_', @HeadingNumbers);                                      # unless 뒤를 잘라서 이렇게 고친다
        ...
} ... }}}

11. 상단 메뉴에 상위페이지 아이콘 표시 (optional)

{{{
... sub GetGotoBar {
        ...
        if ($id =~ m|/|) {
                $main = $id;
                $main =~ s|/.*||;  # Only the main page name (remove subpage)
  1. $bartext .= " </td> " . &GetPageLink($main); 이 줄을 아래와 같이 바꾼다
                $bartext .= "  <img src=\"./emoticon/parentpage.gif\" border=\"0\" alt=\"상위페이지: $main\" align=\"absmiddle\">" . &GetPageLink($main);
        }
        ...
} ... }}}

12. {{{ }}} 태그 추가

{{{
sub WikiToHTML {
        ...
        # 다음 두 함수의 순서를 바꾸어 CommonMarkup() 이 먼저 실행되게 한다.
        $pageText = &CommonMarkup($pageText, 1, 0);   # Multi-line markup # line wraped. luke 
        $pageText = &WikiLinesToHtml($pageText);      # Line-oriented markup
  1. $pageText = &CommonMarkup($pageText, 1, 0); # Multi-line markup # line wraped. luke
        ...
} }}}
{{{
sub CommonMarkup {
        ...
                s/\<code\>((.|\n)*?)\<\/code\>/&StorePre($1, "code")/ige;

                # 바로 아래 라인을 삽입
                s/\{\{\{((.|\n)*?)\}\}\}/&StoreRaw("<pre class=\"code\">" . $1 . "<\/pre>")/ige;

                s/latex equation/&StoreHref(" name=\"$1\"")/ge if $NamedAnchors;
        ...

  1. 헤드라인 문제를 해결하기 위해 굵은 가로줄 기능 없앰
  2. 아래 if 구문을 삭제하고 한 줄만 남겨둔다
  3. if ($ThinLine) {
  4. s/
    +/
    /g;
  5. s/====+/
    /g;
  6. } else {
  7. s/
    +/
    /g;
  8. }

                        s/
+/
/g; ...
  1. 표 처리 문제를 해결하기 위해 아래 두 줄 주석처리
  2. s/^\|([^|]+)[^|]/$1<\/TD>\n/g; # start of line: new table-r
ow -- luke
  1. s/\|([^|]+)[^|]/$1<\/td>\n/g; # new field -- luke

        return $_;
} }}}

13. 이모티콘 도움말 추가

{{{
  1. 이 안에서 nowiki 문자열과 양 옆의 부등호 사이에 공백이 없게 할 것
  2. 여기서는 위키 홈페이지에 올리기 위해서 부득이하게 공백을 삽입했음
sub DoHelp {
        ...
        |;
        }
      1. 여기서부터 추가
        elsif ($idx eq 5) {
                if ($UseEmoticon eq 0) {
                        $text = q|
현재 이 홈페이지에서는 이모티콘을 사용하지 않도록 설정되어 있습니다. 따라서 아래의 도움말은 적용되지 않습니다.
                        |;
                }
                $text .= q|

이모티콘

이모티콘은 감정표현에 사용되는 작은 그림입니다.
다음과 같은 문자열 중 하나를 입력하시면 왼쪽의 그림이 자동으로 삽입됩니다.

        |;
        }
      1. 여기까지

        $ClickEdit = 0;
        print &GetHttpHeader();
        ...
} }}}
{{{
sub DoEdit {
        ...
        print &HelpLink(3, "링크와 이미지") . " | ";

  1. print &HelpLink(4, "매크로") . "
    "; 이 줄을 아래 두 줄로 바꿈
        print &HelpLink(4, "매크로") . " | ";
        print &HelpLink(5, "이모티콘") . "
";

        print &GetFormStart();
        ...
} }}}

14. 한글이 포함된 인터위키 문제 해결

{{{
sub SplitUrlPunct {
    ....
    $punct = "";

  1. 아래 두 줄의 xc0 을 x80 으로 바꿈
  2. ($punct) = ($url =~ /([^a-zA-Z0-9\/\xc0-\xff]+)$/);
  3. $url =~ s/([^a-zA-Z0-9\/\xc0-\xff]+)$//;

    ($punct) = ($url =~ /([^a-zA-Z0-9\/\x80-\xff]+)$/);
    $url =~ s/([^a-zA-Z0-9\/\x80-\xff]+)$//;

    return ($url, $punct);
} }}}

15. history 매크로 문제 해결

{{{
sub MacroHistory {
    ...
    $html .= "";

  1. $html .= &GetHistoryLine($DocID, $Page{'text_default'}, 0, 1); 이 줄을 다음 줄로 변경
    $html .= &GetHistoryLine($DocID, $Page{'text_default'}, 0, 0);

    &OpenKeptRevisions('text_default');
    ...
        next  if ($_ eq "");  # (needed?)

  1. $html .= &GetHistoryLine($DocID, $KeptRevisions{$_}, 0, 0); 이 줄을 다음 줄로 변경
        $html .= &GetHistoryLine($DocID, $KeptRevisions{$_}, 0, $i);

    }
    $html .= "
<input type='submit' value='변경 비교'/>  
</form>\n"; return $html;
} }}}

16. user 디렉토리를 생성하지 못하는 문제 해결

{{{
sub SaveUserData {
    my ($userFile, $data);
    # 다음 줄 추가
    &CreateDir($UserDir);

    $userFile = &UserDataFilename($UserID);
    $data = join($FS1, %UserData);
    &WriteStringToFile($userFile, $data);
} }}}

17. 번역 화일 사용

{{{
do "./translations/korean.pl"; # 번역 화일의 경로 }}}

18. 페이지 목록에서 잠겨 있는 페이지 표시

{{{
sub PrintPageList {
    ...
        if (&UserIsAdmin()) {
      1. 아래의 if { } 문 삽입
            if (-f &GetLockedPageFile($pagename)) {
                print " " . T('(locked)');
            }
      1. 여기까지
            print " | " . &ScriptLink("action=pagelock&set=1&id=" . $pagename, T('lock'));
            print " | " . &ScriptLink("action=pagelock&set=0&id=" . $pagename, T('unlock'));
        }
   ...
} }}}

19. 잠겨 있는 페이지를 삭제 또는 이름을 변경할 때 lock 도 같이 처리

{{{
sub DeletePage {
    ...
    $fname = $KeepDir . "/" . &GetPageDirectory($page) .  "/$page.kp";
    unlink($fname)  if (-f $fname);
      1. 아래 두 줄 추가
    $fname = &GetLockedPageFile($page);
    unlink($fname) if (-f $fname);
      1. 여기까지
    unlink($IndexFile)  if ($UseIndex);
    ...
} }}}

{{{
sub RenamePage {
    ...
    rename($oldkeep,  $newkeep);
    unlink($IndexFile)  if ($UseIndex);
      1. 다음 코드를 삽입
    my ($oldlock, $newlock);
    $oldlock = &GetLockedPageFile($old);
    if (-f $oldlock) {
        $newlock = &GetLockedPageFile($new);
        rename($oldlock, $newlock) || die "error while renaming lock";
    }
      1. 여기까지

    &EditRecentChanges(2, $old, $new)  if ($doRC);
    if ($doText) {
    ...
} }}}

20. 페이지 하단에 수정금지 여부와 설정/해제 표시 (optional)

{{{
sub GetEditGuide {
    my ($id, $rev) = @_;
    my $result = "<div align=right>";

      1. 다음 코드를 삽입.
    if (&UserIsAdmin()) {
        if (-f &GetLockedPageFile($id)) {
            $result .= T('(locked)') . " | ";
        }
        $result .= &ScriptLink("action=pagelock&set=1&id=" . $id, T('lock'));
        $result .= " | " . &ScriptLink("action=pagelock&set=0&id=" . $id, T('unlock'));
        $result .= "
"; }
      1. 여기까지

    if (&UserCanEdit($id, 0)) {
        if ($rev ne '') {
    ...
} }}}

21. To Do or Bug Report


관련 링크:


주인장분류 위키위키분류

이 수정본 편집일: 2002-11-6 12:14 am (변경사항 [d])
Permalink | 변경내역 보기 [h] | 현재 수정본 보기 | 43 번째 수정본 소스 보기