-
- 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 (색인, 찾아보기) 기능의 흉내.
- 필수 요구 사항: 없음
- 선택 요구 사항:
- 이 패치는 /매크로모듈화가 되어 있는 상태에서 작성된 것이다. 모듈화가 되어 있지 않으면 아래 소스를 wiki.pl에 직접 추가해 줄 것
- 사용법: <index(단어)> 또는 <index(색인단어:::단어)>
- index(단어) 는 "단어"에 대한 색인 항목을 만들고, 그 항목에 현재 단어의 위치를 추가한다.
- index(색인단어:::단어) 는 "색인단어"에 대한 색인 항목을 만들고, 힌재 "단어"의 위치를 그 항목에 추가한다.
- 즉, index(perl)과 index(perl:::펄)이 있으면, perl 에 대한 색인에 "perl"과 "펄"이 같이 들어간다.
- "perl"과 "Perl", "펄"처럼 동일한 단어의 다른 표현이나, "특수문자"와 "new line"처럼 상위항목과 하위항목의 경우에 사용할 수 있다.
- 구분자는 콜론 세 개(":::")이다. (색인에 들어가지 않을 법한 기호를 찾다보니 이리 되었음 -_-;)
- 매크로가 있던 자리에는 원래의 "단어"가 출력되며, 이 단어에는 색인 항목으로 가는 링크가 걸린다.
- 단어 바로 뒤에 아래첫자로 "(12)"와 같이 색인번호를 출력하는데, 스타일쉬트에 의해서 모니터에는 나오지 않는다. UseModWiki스타일쉬트/프린트용 파일에 적어주어서 종이에 인쇄할 때만 나타나게 할 수 있다.
- 페이지 제일 아래에 색인 항목과 각 항목으로 가는 링크들을 출력한다. /Footnote매크로와 비슷하다.
- 하단의 색인항목은 대소문자 구분을 하지 않고 정렬한다.
- 색인 항목 아래 여러 개의 하위 항목이 있을 경우, 하위 항목들은 다시 대소문자 구분없이 정렬되어 출력된다.
- <index 대신에 <ix 도 사용 가능하다. 단 페이지 안에 <index가 한 번 이상 있어야 처리된다.
이 예제는 <index(Perl)>로 만들어진 <index(UseModWiki)>에다가 색인 기능을 넣는 것입니다.
줄여서 <index(UseModWiki:::유즈모드)>라고도 부르는 <index(UseModWiki:::유즈모드위키)>는 참 좋군요.
<index(펄)>과 <index(Perl:::펄)>의 차이를 아시겠나요?
이 예제는 Perl(1)로 만들어진 UseModWiki(2)에다가 색인 기능을 넣는 것입니다.
줄여서 유즈모드(3)라고도 부르는 유즈모드위키(4)는 참 좋군요.
펄(5)과 펄(6)의 차이를 아시겠나요?
글쎄 별로...
애초에 색인을 달아야 할 정도로 한 페이지를 길게 쓸 일이 얼마나 있을까 싶다. :-) 거의 Perl/정규표현식 때문에 만든 것이라...
1.4. wiki.pl 수정
수정할 것 없음
1.5. macros/index.pl 추가
use strict;
my $MyIndexCounter;
my %MyIndexHash;
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;
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'>";
$index .= "$key ";
$index .= join(', ', @{$MyIndexHash{"$key"}{"$key"}}) if defined @{$MyIndexHash{"$key"}{"$key"}};
foreach my $aliaskey (sort {(lc($a) cmp lc($b)) || ($a cmp $b)} keys %{$MyIndexHash{"$key"}}) {
next if ($aliaskey eq $key);
$index .= "<BR> $aliaskey ";
$index .= join(', ', @{$MyIndexHash{"$key"}{"$aliaskey"}});
}
$index .= "</TD>";
$index .= "</TR>" if ($column == $tablecolumn);
}
while ($column != $tablecolumn) {
$column++;
$index .= "<TD style='border:none;'> </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 이전에도 있던 것이고, 없어도 사실 큰 문제는 없다.
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
- index() 뿐 아니라 ix()도 사용할 수 있게 함
- 동작은 동일하지만, 내부 구현을 완전히 바꿈.
ext2.10a
- 동일 알파벳을 다시 대문자-소문자 순으로 정렬하게 함 (예: "a"와 "A" 순으로 있는 경우에 A, a 순으로 정렬)
위키위키분류
찾아보기:
Perl 1 펄 6 | UseModWiki 2 유즈모드 3 유즈모드위키 4 | 펄 5 | |