123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 |
- use strict;
- use v5.10;
- AddModuleDescription('footnotes.pl', 'Footnotes Extension');
- our ($q, $bol, @MyRules, @MyInitVariables);
- our ($FootnotePattern,
- $FootnotesPattern,
- $FootnotesHeaderText,
- @FootnoteList);
- $FootnotePattern = undef;
- $FootnotesPattern = '\<footnotes\>[ \t]*(\n|$)';
- $FootnotesHeaderText = 'Footnotes:';
- push(@MyInitVariables, \&FootnotesInit);
- sub FootnotesInit {
- @FootnoteList = ();
- if (not defined $FootnotePattern) {
- $FootnotePattern = defined &CreoleRule ? '\(\((.+?)\)\)' : '\{\{(.+?)\}\}';
- }
- }
- push(@MyRules, \&FootnotesRule);
- sub FootnotesRule {
-
-
-
-
-
- if (m/\G($FootnotePattern)(?=([ \t]*$FootnotePattern)?)/cgs) {
- Dirty($1);
- my $footnote_text = $2;
- my $is_adjacent_footnote = defined $3;
-
- if ($footnote_text =~ m/^(\d+)-(\d+)$/) {
- my ($footnote_number_first, $footnote_number_last) = ($1, $2);
-
- print $q->a({-href=> '#footnotes' .$footnote_number_first,
- -title=> 'Footnote #'.$footnote_number_first,
- -class=> 'footnote'
- }, $footnote_number_first.'–')
- .$q->a({-href=> '#footnotes' .$footnote_number_last,
- -title=> 'Footnote #'.$footnote_number_last,
- -class=> 'footnote'
- }, $footnote_number_last.($is_adjacent_footnote ? ', ' : ''));
- }
-
- elsif ($footnote_text =~ m/^(\d+)$/) {
- my $footnote_number = $1;
- print $q->a({-href=> '#footnotes' .$footnote_number,
- -title=> 'Footnote #'.$footnote_number,
- -class=> 'footnote'
- }, $footnote_number.($is_adjacent_footnote ? ', ' : ''));
- }
-
- else {
- push(@FootnoteList, $footnote_text);
- my $footnote_number = @FootnoteList;
- print $q->a({-href=> '#footnotes'.$footnote_number,
- -name=> 'footnote' .$footnote_number,
- -title=> 'Footnote: '.
- ( length($footnote_text) > 48
- ? substr($footnote_text, 0, 44).'...'
- : $footnote_text),
- -class=> 'footnote'
- }, $footnote_number.($is_adjacent_footnote ? ', ' : ''));
- }
- return '';
- }
-
- elsif ($bol && m/\G($FootnotesPattern)/cgis) {
- Clean(CloseHtmlEnvironments());
- Dirty($1);
- if (@FootnoteList) {
- my ($oldpos, $old_) = (pos, $_);
- PrintFootnotes();
- Clean(AddHtmlEnvironment('p'));
- ($_, pos) = ($old_, $oldpos);
- }
- return '';
- }
- return;
- }
- *PrintFooterFootnotesOld = \&PrintFooter;
- *PrintFooter = \&PrintFooterFootnotes;
- sub PrintFooterFootnotes {
- my @params = @_;
- if (@FootnoteList) { PrintFootnotes(); }
- PrintFooterFootnotesOld(@params);
- }
- sub PrintFootnotes {
- print
- $q->start_div({-class=> 'footnotes'})
- .$q->h2(T($FootnotesHeaderText));
-
-
- my $footnote_number = 1;
- foreach my $footnote (@FootnoteList) {
- print
- $q->start_div({-class=> 'footnote'})
- .$q->a({-class=> 'footnote_backlink',
- -name=> 'footnotes'.$footnote_number,
- -href=> '#footnote' .$footnote_number}, $footnote_number.'.')
- .' ';
- ApplyRules($footnote, 1);
- print $q->end_div();
- $footnote_number++;
- }
- print $q->end_div();
-
- @FootnoteList = ();
- }
|