[첫화면으로]UseModWiki소스수정/Index매크로

마지막으로 [b]

1. <index(단어)> <index(색인단어:::단어)> 매크로
1.1. 사용법
1.2. 사용 예
1.3. 부작용
1.4. wiki.pl 수정
1.5. macros/index.pl 추가
1.6. wiki.css 수정
1.7. wiki_print.css 수정
1.8. translations/korean.pl 수정
1.9. 추가 업데이트 내역
1.10. 사용자 의견

1. <index(단어)> <index(색인단어:::단어)> 매크로

서적이나 논문 등에 있는 Index (색인, 찾아보기) 기능의 흉내.

1.1. 사용법

1.2. 사용 예

이 예제는 <index(Perl)>로 만들어진 <index(UseModWiki)>에다가 색인 기능을 넣는 것입니다.

줄여서 <index(UseModWiki:::유즈모드)>라고도 부르는 <index(UseModWiki:::유즈모드위키)>는 참 좋군요. 

<index(펄)>과 <index(Perl:::펄)>의 차이를 아시겠나요?

이 예제는 Perl(1)로 만들어진 UseModWiki(2)에다가 색인 기능을 넣는 것입니다.

줄여서 유즈모드(3)라고도 부르는 유즈모드위키(4)는 참 좋군요.

(5)(6)의 차이를 아시겠나요?

1.3. 부작용

글쎄 별로...

애초에 색인을 달아야 할 정도로 한 페이지를 길게 쓸 일이 얼마나 있을까 싶다. :-) 거의 Perl/정규표현식 때문에 만든 것이라...

1.4. wiki.pl 수정

수정할 것 없음

1.5. macros/index.pl 추가

use strict;

my $MyIndexCounter;
my %MyIndexHash;

# %MyIndexHash is "hash of hash of array"
# %MyIndexHash = (
#       "word1" => {
#               "word1"  => [ num1 link, num2 link ],             <-- <index(word1)> or <index(word1:::word1)>
#               "alias1" => [ num1 link, num2 link, num3 link ],  <-- <index(word1:::alias1)>
#               "alias2" => [ num1 link ],
#       },
#       "word2" => {
#               ...
#       },
#       ...
# )

sub index {
    my ($txt) = @_;
    my $index;

    $MyIndexCounter = 0;

    $txt =~ s/&__LT__;(?:index|ix)\((.+?)\)&__GT__;/&MacroIndex($1)/gei;

    return if ($MyIndexCounter == 0);

    $index = "<DIV class='wordindex'>";
    $index .= &T('Index:')."<BR>";

    my $tablecolumn = 4;        # 한 행에 4열
    my $column = 0;

    $index .= "<TABLE style='border:none; width=100%;' width='100%'>";

    foreach my $key (sort {(lc($a) cmp lc($b)) || ($a cmp $b)} keys %MyIndexHash) {
        $column++;
        $column = 1 if ($column > $tablecolumn);

        $index .= "<TR>" if ($column == 1);
        $index .= "<TD style='vertical-align:top; border:none; border-top:1px solid gray; padding: 10px'>";

        # main keyword
        $index .= "$key&nbsp;&nbsp;&nbsp;";
        $index .= join(', ', @{$MyIndexHash{"$key"}{"$key"}}) if defined @{$MyIndexHash{"$key"}{"$key"}};

        # aliases
        foreach my $aliaskey (sort {(lc($a) cmp lc($b)) || ($a cmp $b)} keys %{$MyIndexHash{"$key"}}) {
            next if ($aliaskey eq $key);

            $index .= "<BR>&nbsp;&nbsp;$aliaskey&nbsp;&nbsp;&nbsp;";
            $index .= join(', ', @{$MyIndexHash{"$key"}{"$aliaskey"}});
        }

        $index .= "</TD>";
        $index .= "</TR>" if ($column == $tablecolumn);
    }

    while ($column != $tablecolumn) {
        $column++;
        $index .= "<TD style='border:none;'>&nbsp;</TD>";
    }

    $index .= "</TABLE>";
    $index .= "</DIV>";

    $txt .= $index;

    return $txt;
}

sub MacroIndex {
    my ($word) = @_;
    my $txt;
    my ($key, $pword);


    $word = &RemoveLink($word);

    if ($word =~ /^(.+):::(.+)$/) {
        ($key, $pword) = ($1, $2);
    } else {
        $key = $word;
        $pword = $word;
    }

# 본문 하단에 출력될 인덱스 화면을 위해 저장
    $MyIndexCounter++;
    push @{$MyIndexHash{"$key"}{"$pword"}},
        "<A class='wordindex' name='INDEX_$MyIndexCounter' href='#INDEXR_$MyIndexCounter'>$MyIndexCounter</A>";

# 매크로 있던 곳에 치환된 링크
    $txt = "<A class='wordindex' name='INDEXR_$MyIndexCounter' href='#INDEX_$MyIndexCounter'>".
        $pword.
        "</A>".
        "<SPAN class='wordindex'>($MyIndexCounter)</SPAN>";

    return $txt;
}

1;

1.6. wiki.css 수정

다음 세 가지는 ext1.111c 이전에도 있던 것이고, 없어도 사실 큰 문제는 없다.
/* index */
DIV.wordindex {
    background-color: transparent;
    border-top:1px solid silver;
    padding:5px;
}

A.wordindex:link, A.wordindex:active, A.wordindex:visited, A.wordindex:hover {
    background: transparent;
    color: maroon;
    text-decoration: none;
}
A.wordindex:hover
{
    text-decoration: underline;
}

ext1.111c 에서 추가된 부분. 이게 있어야 화면에 "(색인번호)"가 출력되지 않는다.

SPAN.wordindex {
    font-size: 80%;
    vertical-align: sub;
    display: none;
}

1.7. wiki_print.css 수정

인쇄할 때는 본문의 단어들은 검은색으로 출력되게 하고, "(색인번호)"를 출력하게 한다.
A.wordindex:link, A.wordindex:active, A.wordindex:visited, A.wordindex:hover {
    color: black;
}

SPAN.wordindex {
    display: inline;
}

1.8. translations/korean.pl 수정

다음 항목 추가
Index:
찾아보기:

1.9. 추가 업데이트 내역

ext1.74c

ext1.111c

ext2rc6

ext2.10a

1.10. 사용자 의견

이름:  
Homepage:
내용:
 

위키위키분류
찾아보기:
Perl   1
  펄   6
UseModWiki   2
  유즈모드   3
  유즈모드위키   4
펄   5 

마지막 편집일: 2008-11-9 11:46 pm (변경사항 [d])
1021 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기