X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Flilypond-texi2html.init;h=6fcaafc5f43e8f95f9e06fd6528ee4a8c57efa53;hb=8a92a9f245b5a0b52d996bc7d7333b1e6719b78f;hp=55548ffb96dcee4b3c1042799f2093fe500f2eea;hpb=2009f52d2c1bbbe7b094f6b98fb621ccf4a30cab;p=lilypond.git diff --git a/Documentation/lilypond-texi2html.init b/Documentation/lilypond-texi2html.init index 55548ffb96..6fcaafc5f4 100644 --- a/Documentation/lilypond-texi2html.init +++ b/Documentation/lilypond-texi2html.init @@ -63,8 +63,25 @@ ### non-standard chars replaced by _xxxx (ascii char code) and forced to ### start with a letter by prepending t_g if necessary) +package main; +$original_normalise_node = \&normalise_node; + +sub t2h_default_normalise_node($) +{ + my $text = shift; + $original_normalise_node->($text); +} + +*normalise_node = sub($) +{ + my $text = shift; + return &$Texi2HTML::Config::normalise_node($text); +}; package Texi2HTML::Config; +##$normalise_node = \&t2h_default_normalise_node; +$normalise_node = \&lilypond_normalise_node; + use utf8; use Encode qw(decode); @@ -549,7 +566,7 @@ $Texi2HTML::Config::DOCTYPE = ' "lilypond-web.css", TITLE => "Patrick McCarty's design"} @@ -571,6 +588,7 @@ if ($Texi2HTML::Config::SPLIT eq 'section' or $Texi2HTML::Config::element_file_name = \&lilypond_element_file_name; } +$Texi2HTML::Config::anchor = \&lilypond_anchor; $Texi2HTML::Config::element_target_name = \&lilypond_element_target_name; $default_print_element_header = $Texi2HTML::Config::print_element_header; $Texi2HTML::Config::print_element_header = \&lilypond_print_element_header; @@ -640,10 +658,13 @@ sub lc_last($) { my $href = shift; my @hrefsplit = split('/', $href); - # change the last portion (the filename), if it exists + # change the last portion (the filename), if it exists; + # if it is a plain filename with no path, change the string as a whole if ($#hrefsplit > 0) { @hrefsplit[$#hrefsplit] = lc( @hrefsplit[$#hrefsplit] ); $href = join("/", @hrefsplit); + } else { + $href = lc($href); } return $href; } @@ -785,6 +806,7 @@ sub lilypond_css_lines ($$) my $lastfilename; my $docnr = 0; my $node_to_filename_map = (); +$source_to_translationof_map = (); # This function makes sure that files are only generated for numbered sections, @@ -874,6 +896,51 @@ sub lilypond_element_file_name($$$) return; } +sub lilypond_normalise_node($) +{ + my $text = shift; + my $norm = main::t2h_default_normalise_node($text); + if (exists ($source_to_translationof_map->{$text})) { + my $original = $source_to_translationof_map->{$text}; + $norm = main::t2h_default_normalise_node($original); + } + + return $norm; +} + +# This function produces an anchor. +# +# arguments: +# $name : anchor name +# $href : anchor href +# text : text displayed +# extra_attribs : added to anchor attributes list +sub lilypond_anchor($;$$$) +{ + my $name = shift; + my $href = shift; + my $text = shift; + my $attributes = shift; + $href = remove_unneeded_anchor($href); + if (!defined($attributes) or ($attributes !~ /\S/)) + { + $attributes = ''; + } + else + { + $attributes = ' ' . $attributes; + } + $name = '' if (!defined($name) or ($name !~ /\S/)); + $href = '' if (!defined($href) or ($href !~ /\S/)); + $text = '' if (!defined($text)); + return $text if (($name eq '') and ($href eq '')); + $name = "name=\"$name\"" if ($name ne ''); + $href = "href=\"$href\"" if ($href ne ''); + $href = ' ' . $href if (($name ne '') and ($href ne '')); + return "$text"; +} + + sub lilypond_element_target_name($$$) { my $element = shift; @@ -901,12 +968,9 @@ sub lilypond_element_target_name($$$) # the sections, change this back to ($id, $target) # I don't understand this comment, so I'm reluctant to delete it -gp $target = lc_last($target); - if ($target eq lc_last($id)) { - $id = ""; - } else { - $id = substr($id, 0, - 2); # remove the "-1" - } - return ($id, $target); + $id = lc($target); +# $id =~ s/-1$//i; # remove any trailing "-1" + return ($target, $id); } @@ -996,7 +1060,13 @@ sub lilypond_unknown($$$$$) # python script messed up ;-) if ($pass == 1 and $macro eq "translationof") { if (ref($state->{'element'}) eq 'HASH') { - $state->{'element'}->{'translationof'} = main::normalise_space($line); + $state->{'element'}->{'translationof'} = main::normalise_space($line); + my $source = main::normalise_space ($line); + if (ref($state->{'node_ref'}) eq 'HASH') { + my $translationof = $state->{'node_ref'}->{'texi'}; + our %source_to_translationof_map; + $source_to_translationof_map->{$source} = $translationof; + } } return ('', 1, undef, undef); } else { @@ -1017,7 +1087,7 @@ sub lilypond_external_href($$$) { my $node = shift; my $node_id = shift; - my $node_hxmlt_id = shift; + my $node_xhtml_id = shift; my $file = shift; # 1) Keep a hash of book->section_map @@ -1043,15 +1113,15 @@ sub lilypond_external_href($$$) my $section_name_map = $translated_books{$map_name}; my $node_text = main::remove_texi($node); if (defined($section_name_map->{$node_text})) { - ($node_id, $node_hxmlt_id) = @{$section_name_map->{$node_text}}; + ($node_id, $node_xhtml_id) = @{$section_name_map->{$node_text}}; } else { print STDERR "WARNING: Unable to find node '$node_text' in book $map_name.\n"; } } if (defined $file) { - $href = &$default_external_href($node, $node_id, $node_hxmlt_id, lc_last($file)); - remove_unneeded_anchor($href); + $href = &$default_external_href($node, $node_id, $node_xhtml_id, lc_last($file)); + $href = remove_unneeded_anchor($href); # TODO: very yucky, but will be fixed in issue 1004 if ($web_manual) { @@ -1063,22 +1133,22 @@ sub lilypond_external_href($$$) return $href; } else { - $href = &$default_external_href($node, $node_id, $node_hxmlt_id); - remove_unneeded_anchor($href); + $href = &$default_external_href($node, $node_id, $node_xhtml_id); + $href = remove_unneeded_anchor($href); return $href; } } sub remove_unneeded_anchor($) { - my $ref = shift; + my $href = shift; my @hrefsplit = split("/", $href); for ($i = 0; $i < @hrefsplit; $i++) { $item = @hrefsplit[$i]; if ($item =~ /#/) { - @splitted = split("#", $item); - if (@splitted[0] == @splitted[1]) { - @hrefsplit[$i] = @splitted[0] + @splitted = split(".html#", $item); + if (@splitted[0] eq @splitted[1]) { + @hrefsplit[$i] = @splitted[0] . ".html"; } } }