--- /dev/null
+#!/usr/bin/perl
+# quick HTML heading id adder by Paul Wise
+package IkiWiki::Plugin::headinganchors;
+
+use warnings;
+use strict;
+use IkiWiki 2.00;
+
+sub import {
+ hook(type => "sanitize", id => "headinganchors", call => \&headinganchors);
+}
+
+sub text_to_anchor {
+ my $str = shift;
+ $str =~ s/^\s+//;
+ $str =~ s/\s+$//;
+ $str = lc($str);
+ $str =~ s/[&\?"\'\.,\(\)!]//mig;
+ $str =~ s/[^a-z]/_/mig;
+ return $str;
+}
+
+sub headinganchors (@) {
+ my %params=@_;
+ my $content=$params{content};
+ $content=~s{<h([0-9])>([^>]*)</h([0-9])>}{'<h'.$1.' id="'.text_to_anchor($2).'">'.$2.'</h'.$3.'>'}gie;
+ return $content;
+}
+
+1
(If you don't have javascript don't worry, I kept that working too.)
(Sponsored by The TOVA Company.)
* Add libtext-multimarkdown-perl to Suggests. Closes: #630705
+ * headinganchors: Plugin by Paul Wise that adds ids to <hn> headings.
-- Joey Hess <joeyh@debian.org> Thu, 09 Jun 2011 10:06:44 -0400
+++ /dev/null
-[[!template id=plugin name=headinganchors author="[[PaulWise]]"]]
-
-This is a simple plugin to add ids (which will serve as [[anchor]]s) to all headings, based on their text. It
-works as a postprocessing filter, allowing it to work on mdwn, wiki, html,
-rst and any other format that produces html. The code is available here:
-
- #!/usr/bin/perl
- # quick HTML heading id adder by Paul Wise
- package IkiWiki::Plugin::headinganchors;
-
- use warnings;
- use strict;
- use IkiWiki 2.00;
-
- sub import {
- hook(type => "sanitize", id => "headinganchors", call => \&headinganchors);
- }
-
- sub text_to_anchor {
- my $str = shift;
- $str =~ s/^\s+//;
- $str =~ s/\s+$//;
- $str = lc($str);
- $str =~ s/[&\?"\'\.,\(\)!]//mig;
- $str =~ s/[^a-z]/_/mig;
- return $str;
- }
-
- sub headinganchors (@) {
- my %params=@_;
- my $content=$params{content};
- $content=~s{<h([0-9])>([^>]*)</h([0-9])>}{'<h'.$1.' id="'.text_to_anchor($2).'">'.$2.'</h'.$3.'>'}gie;
- return $content;
- }
-
- 1
+++ /dev/null
-Isn't this functionality a part of what [[plugins/toc]] needs and does? Then probably the [[plugins/toc]] plugin's code could be split into the part that implements the [[plugins/contrib/headinganchors]]'s functionality and the TOC generation itself. That will bring more order into the code and the set of available plugins. --Ivan Z.
-
----
-
-A patch to make it more like MediaWiki:
-
-<pre>--- headinganchors.pm
-+++ headinganchors.pm
-@@ -5,6 +5,7 @@
- use warnings;
- use strict;
- use IkiWiki 2.00;
-+use URI::Escape;
-
- sub import {
- hook(type => "sanitize", id => "headinganchors", call => \&headinganchors);
-@@ -14,9 +15,11 @@
- my $str = shift;
- $str =~ s/^\s+//;
- $str =~ s/\s+$//;
-- $str = lc($str);
-- $str =~ s/[&\?"\'\.,\(\)!]//mig;
-- $str =~ s/[^a-z]/_/mig;
-+ $str =~ s/\s/_/g;
-+ $str =~ s/"//g;
-+ $str =~ s/^[^a-zA-Z]/z-/; # must start with an alphabetical character
-+ $str = uri_escape_utf8($str);
-+ $str =~ s/%/./g;
- return $str;
- }
- </pre>
-
---Changaco
--- /dev/null
+[[!template id=plugin name=headinganchors author="[[PaulWise]]"]]
+[[!tag type/html]]
+
+This is a simple plugin to add ids (which will serve as [[anchor]]s) to all
+headings (h1, h2, etc), based on their text. It works as a postprocessing
+filter, allowing it to work on mdwn, wiki, html, rst and any other format that
+produces html.
--- /dev/null
+Isn't this functionality a part of what [[plugins/toc]] needs and does? Then probably the [[plugins/toc]] plugin's code could be split into the part that implements the [[plugins/contrib/headinganchors]]'s functionality and the TOC generation itself. That will bring more order into the code and the set of available plugins. --Ivan Z.
+
+---
+
+A patch to make it more like MediaWiki:
+
+<pre>--- headinganchors.pm
++++ headinganchors.pm
+@@ -5,6 +5,7 @@
+ use warnings;
+ use strict;
+ use IkiWiki 2.00;
++use URI::Escape;
+
+ sub import {
+ hook(type => "sanitize", id => "headinganchors", call => \&headinganchors);
+@@ -14,9 +15,11 @@
+ my $str = shift;
+ $str =~ s/^\s+//;
+ $str =~ s/\s+$//;
+- $str = lc($str);
+- $str =~ s/[&\?"\'\.,\(\)!]//mig;
+- $str =~ s/[^a-z]/_/mig;
++ $str =~ s/\s/_/g;
++ $str =~ s/"//g;
++ $str =~ s/^[^a-zA-Z]/z-/; # must start with an alphabetical character
++ $str = uri_escape_utf8($str);
++ $str =~ s/%/./g;
+ return $str;
+ }
+ </pre>
+
+--Changaco