예:
오른쪽의 각주 번호를 클릭하세요<footnote(여기에 각주가 들어감)>오른쪽의 각주 번호를 클릭하세요1
홍길동<footnote(아들)>이 어쩌고 저쩌고... 홍판서<footnote(길동 애비)>가 어쩌고 저쩌고... 다시 홍길동<footnote(아들)>이 이러쿵 저러쿵... 임금<footnote(당시 왕이 누구더라만)>이 홍길동<footnote(아들)>에게...홍길동2이 어쩌고 저쩌고...
use strict; my $MyFootnoteCounter; my @MyFootnotes; my %SaveNumFootnote; sub footnote { my ($txt) = @_; $MyFootnoteCounter = 0; $txt =~ s/(&__LT__;footnote\(([^\n]+?)\)&__GT__;)/&MacroFootnote($2)/gei; # 본문 하단에 각주 출력 if ($MyFootnoteCounter > 0) { map { s/_MARK_// } @MyFootnotes; $txt .= "<DIV class='footnote'>". "\n" . T('Footnote') . ": <br>\n". join('', @MyFootnotes). "</DIV>"; } return $txt; } sub MacroFootnote { my ($note) = @_; $MyFootnoteCounter++; my $number = "<A name='FN_$MyFootnoteCounter' href='#FNR_$MyFootnoteCounter'>$MyFootnoteCounter</A>."; # URL이 있을 경우 동일한 내용이란 걸 파악하기 위해서, Restore를 해 줘야 함 my $note_restored = &RestoreSavedText($note); # 내용 비교는 이 변수를 사용 if (defined $SaveNumFootnote{$note_restored}) { # 동일한 내용의 각주가 이미 있다면 그 각주에다가 새 번호 삽입 $MyFootnotes[$SaveNumFootnote{$note_restored}] =~ s/_MARK_/$number _MARK_/; } else { # 새로운 내용의 각주 추가 push @MyFootnotes, $number. " _MARK_$note". "<br>\n"; $SaveNumFootnote{$note_restored} = $#MyFootnotes; } return "<A class='footnote' name='FNR_$MyFootnoteCounter' href='#FN_$MyFootnoteCounter'>$MyFootnoteCounter</A>"; } 1;
Footnote 각주
DIV.footnote { border-top:1px solid silver; padding:5px; } A.footnote { font-size: 80%; vertical-align: super; }
ext2.1j - 동일한 내용의 각주는 각주 번호를 모아서 한번만 출력함
ext2.8a - 동일한 내용의 각주이지만 각주 내용에 링크가 포함되어 있어서 서로 다른 내용으로 간주되는 문제 해결
a name= 뒤에 있는 #을 둘 다 제거하고 테스트해주시기 바랍니다. 제가 원래 소스에 하나는 #을 붙이고 하나는 안 붙였던 것 같네요. #이 있으면 불여우등에서 안되더군요.
Diary/URL링크를번호로출력하기에 언급한 것처럼, 각주의 내용이 동일하면, 하단에는 그 내용을 한번만 출력하게 해볼까 합니다.
그런데 문제는, 예를 들어 본문에서 각주로 갈 때는 여러 곳에서 하나의 각주로 이동하는 거니까 상관이 없는데, 반대로 각주에서 본문으로 이동할 때는 하나의 각주에서 본문의 여러 곳으로 이동해야 하니까 어디로 이동할 지 모른다는 건데요...
일단 각주에는, 색인매크로처럼 번호를 각각 적어주면 될 것 같습니다.
각주:
1, 3 홍길동
2 홍판서
"홍길동"의 경우 1을 누르면 본문의 첫번째로, 3을 누르면 두번째 등장하는 곳으로 가게 하면 되죠.
그럼 본문에 어떻게 표시할까가 문제인데,
1) 첫번째 안: (괄호 안 번호가 각주 번호)
본문: 홍길동(1)이 어쩌고, 홍판서(2)가 어쩌고, 그래서 홍길동(3)이 다시 어쩌고
2) 두번째 안:
본문: 홍길동(1)이 어쩌고, 홍판서(2)가 어쩌고, 그래서 홍길동(1)이 다시 어쩌고
즉, 두번째 홍길동은, 눈에는 "1"로 보이지만 클릭하면 하단의 "3"으로 갑니다. 반대로 하단의 "3"을 클릭하면 저 두번째 홍길동으로 갑니다.
이건, 본문을 보고 있을 때는 "아 이건 아까 나왔던 홍길동과 같은 각주로구나"라는 걸 더 확실히 알 수 있다는 게 장점이고, 반대로 본문의 번호와 하단의 번호가 일치하지 않는다는 게 단점.
어느게 나을지 모르겠네요.
그냥 1번 안으로 일단 할께요, 번호가 서로 일치하지 않는 것도 좀 그렇고, 보여지는 번호와 실제 번호를 별개로 유지하려니 그것도 일이라서...
아 그러고보니 Nyxity님이 얘기하신 논문 식으로 한다면, 하단 각주 쪽을
각주:
1. 홍길동
2. 홍판서
3. 각주1과 동
이런 식으로 표시해도 되긴 하겠군요.
으음, 각주에 URL 이나 [URL 설명] 등의 외부 링크가 들어가 있으면 이게 동일한 링크라 하더라도 서로 다른 각주로 취급되는군요. 외부 링크를 따로 저장하면서 본문에 링크가 있던 자리에는 고유번호를 넣어두고 제일 마지막에 그 링크들을 다시 채워넣는 순서라서... 각주가 처리되는 시점에는 이게 동일한 내용이 아닌 걸로 나옵니다. 다른 웹페이지의 내용을 인용할 때 각주에 쓰면 결국 매번 별도의 각주 번호가 붙는... [URL] 형식과 같이 쓰든가 해야겠습니다.
예전부터 느꼈던 거지만, 매크로 치환을 더 뒤로 빼던가 아니면 더 앞으로 당기던가 해야 좋을 것 같긴 한데.... 기존에 작성한 페이지들이 어떻게 될 지 몰라서 못 하겠네요.
Hi from Europe,
Really I still don't understand RestoreSavedText. In this same direction, is there any scenario where the old version of footnote's patch, gives errors? (because before, it used $note, now "restored_note).
Humorous:
Infinite is just the number 5186 (the current lines of code from ascendant Usemod).
Thanks anyway and good weekend.
it perfectly understood the matter in english, now it's my turn to understand about usemod's behavior. Sincerely, big thanks.
Oh!, I understand a little more. I had included:
if ($MyFootnoteCounter > 0) {...}
into core script directly (at WikiToHTML, without MacroSubst); thus, that casually, I didn't see the side effect, I guess; but not least, knowing, this implication.
해외에서 안녕. (kk)
Hi, Raymundo,
this seems to give error, url needs spaces or whatever at the end, inside footnote:
9
How am i?
Hmmm, I feel oldest than when I made the first question here! (Obviously).
On the question before us now, I have the bad habit of putting all the features in the core code and ‘et voilà’. Let's say
sub WikiToHTML {
...
+ if ($MyFootNoteCounter > 0) {
+ map {s/_MARK_//} @MyFootnotes;
+ $pageText .= '<div class=clear></div><hr class=footnote>';
+ $pageText .= '<span class=foot>' . CommonMarkup(join(' ', @MyFootnotes)) . '</span>';
+ }
...
while (@HeadingNumbers) {
...
}
sub CommonMarkup {
...
+ s/(\[\[\[([^\n]+?)\]\]\])/FootNote($2)/ige; # I have the syntaxis [[[blah blah]]]
s/^{{{\r?\n(.*?)\n}}}\r?$/StoreRaw(qq|<pre class="code">\n|) . StoreCodeRaw($1) . StoreRaw("\n<\/pre>")/igesm;