diff --git a/lib/Pod/To/HTML.pm b/lib/Pod/To/HTML.pm index dd2b9f8..797ea2d 100644 --- a/lib/Pod/To/HTML.pm +++ b/lib/Pod/To/HTML.pm @@ -41,6 +41,9 @@ sub unescape_html(Str $str) returns Str { [ q{&}, q{<}, q{>}, q{"}, q{'} ] ); } +sub escape_id ($id) { + $id.subst(/\s+/, '_', :g); +} sub visit($root, :&pre, :&post, :&assemble = -> *%{ Nil }) { my ($pre, $post); @@ -338,12 +341,13 @@ multi sub node2html(Pod::Heading $node) returns Str { Debug { note colored("Heading node2html called for ", "bold") ~ $node.gist }; my $lvl = min($node.level, 6); #= HTML only has 6 levels of numbered headings my %escaped = ( - uri => uri_escape(node2rawtext($node.content)), + id => escape_id(node2rawtext($node.content)), html => node2inline($node.content), ); + @indexes.push: Pair.new(key => $lvl, value => %escaped); - return sprintf('', $lvl, %escaped) + return sprintf('', $lvl, %escaped) ~ qq[] ~ %escaped ~ qq[] @@ -432,7 +436,7 @@ multi sub node2inline(Pod::FormattingCode $node) returns Str { } $url = url(unescape_html($url)); if $url ~~ /^'#'/ { - $url = '#' ~ uri_escape($/.postmatch) + $url = '#' ~ uri_escape( escape_id($/.postmatch) ) } return qq[{$text}] }