X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fweb-texi2html.init;h=8669b47d88ef3d37fc12222dde6ddb9a2018c1ef;hb=1c6064e60c07e2933634bb6aaf6f2c4b664c8bc3;hp=b1d924c9ad5ece5ea7ee6c1dcb3172e7514c7c6e;hpb=ed1f57993dc189eedd1aad38cefab57910d0625f;p=lilypond.git diff --git a/Documentation/web-texi2html.init b/Documentation/web-texi2html.init index b1d924c9ad..8669b47d88 100644 --- a/Documentation/web-texi2html.init +++ b/Documentation/web-texi2html.init @@ -1,6 +1,12 @@ #!/usr/bin/env perl # -*- coding: utf-8; -*- +# this file is a complete mess. Some things are commented out +# because that's the only way it works. About 70% of the code in +# this file is never called. All in all, it's in drastic need of +# a complete review/editing, but we don't have the time right now. + + ### WTF, perl cannot read a file? ###use File::Slurp qw( read_file ); @@ -104,6 +110,9 @@ sub ly_get_string () { ### SETTINGS FOR TEXI2HTML ############################################################################# +# no bgcolor and link colors in tag +# in texi2html >=1.83, override $Texi2HTML::Config::html_default_bodytext instead +$Texi2HTML::Config::BODYTEXT = ""; # Validation fix for texi2html<=1.82 $Texi2HTML::Config::DOCTYPE = ''; @@ -121,15 +130,13 @@ $Texi2HTML::Config::USE_LINKS = 1; $Texi2HTML::Config::USE_REL_REV = 1; $Texi2HTML::Config::SPLIT_INDEX = 0; $Texi2HTML::Config::SEPARATED_FOOTNOTES = 0; # Print footnotes on same page, not separated -# FIXME: remove for GOP -#if ($Texi2HTML::Config::SPLIT eq 'section') { -# $Texi2HTML::Config::element_file_name = \&lilypond_element_file_name; -#} - -## GOP tweak: # FIXME: creates duplicate anchors, which causes Opera to barf; # should be fixed in lilypond-texi2html.init too -# $Texi2HTML::Config::element_target_name = \&lilypond_element_target_name; +# Uhm, what about a bug report to Opera? We need sane names here. +#if ($Texi2HTML::Config::SPLIT eq 'section') { +$Texi2HTML::Config::element_file_name = \&lilypond_element_file_name; +#} +$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; $Texi2HTML::Config::print_page_foot = \&print_lilypond_page_foot; @@ -225,6 +232,8 @@ sub texinfo_file_name($) $result = 't_g' . $result; } # DONE + # we also want lower-case + $result = lc($result); return $result } @@ -320,7 +329,133 @@ sub lilypond_css_lines ($$) ### SPLITTING BASED ON NUMBERED SECTIONS ############################################################################# -# FIXME: removed for GOP. +my $lastfilename; +my $docnr = 0; +my $node_to_filename_map = (); + + +# This function makes sure that files are only generated for numbered sections, +# but not for unnumbered ones. It is called after texi2html has done its own +# splitting and simply returns the filename for the node given as first argument +# Nodes with the same filename will be printed out to the same filename, so +# this really all we need. Also, make sure that the file names for sections +# are derived from the section title. We also might want to name the anchors +# according to node titles, which works by simply overriding the id element of +# the $element hash. +# If an external nodename<=>filename/anchor map file is found (loaded in +# the command handler, use the externally created values, otherwise use the +# same logic here. +sub lilypond_element_file_name($$$) +{ + my $element = shift; + my $type = shift; + my $docu_name = shift; + my $docu_ext = $Texi2HTML::Config::EXTENSION; + + my $node_name = main::remove_texi($element->{'node_ref'}->{'texi'}); + # the snippets page does not use nodes for the snippets, so in this case + # we'll have to use the section name! + if ($node_name eq '') { + $node_name = main::remove_texi($element->{'texi'}); + } + + # If we have an entry in the section<=>filename map, use that one, otherwise + # generate the filename/anchor here. In the latter case, external manuals + # will not be able to retrieve the file name for xrefs!!! Still, I already + # had that code, so I'll leave it in in case something goes wrong with the + # extract_texi_filenames.py script in the lilypond build process! + + # FIXME: disable this section of code, I don't understand why but + # it gives us the filenames we want. -gp + if (0 and exists ($node_to_filename_map->{$node_name})) { + (my $filename, my $anchor) = @{$node_to_filename_map->{$node_name}}; + $filename .= ".$docu_ext" if (defined($docu_ext)); + + # unnumbered sections (except those at top-level!) always go to the same + # file as the previous numbered section + if (not ($element->{number}) and not ($lastfilename eq '') and ($element->{level} > 1)) { + $filename = $lastfilename; + } + if (($filename eq $lastfilename)) { + $$element{doc_nr} = $docnr; + } else { + $docnr += 1; + $$element{doc_nr} = $docnr; + $lastfilename = $filename; + } + return $filename; + + } elsif ($type eq "top" or $type eq "toc" or $type eq "doc" or $type eq "stoc" or $type eq "foot" or $type eq "about") { + return; + } else { + print STDERR "WARNING: Node '$node_name' was NOT found in the map\n" + unless ($node_name eq '') or ($element->{'tag'} eq 'unnumberedsec') + or ($node_name =~ /NOT REALLY USED/); + + # Numbered sections will get a filename Node_title, unnumbered sections will use + # the file name of the previous numbered section: + # FIXME: above comment is false; for web we want to give them all new filenames. + if (1 or ($element->{number}) or ($lastfilename eq '') or ($element->{level} > 1)) { + # normalize to the same file name as texinfo + if ($element->{translationof}) { + $node_name = main::remove_texi($element->{translationof}); + } + my $filename = texinfo_file_name($node_name); + $filename .= ".$docu_ext" if (defined($docu_ext)); + $docnr += 1; + $$element{doc_nr} = $docnr; + $lastfilename = $filename; + return lc($filename); + } else { + $$element{doc_nr} = $docnr; + return lc($lastfilename); + } + } + + return; +} + +sub lilypond_element_target_name($$$) +{ + my $element = shift; + my $target = shift; + my $id = shift; + # Target is based on node name (or sec name for secs without node attached) + my $node_name = main::remove_texi($element->{'node_ref'}->{'texi'}); + if ($node_name eq '') { + $node_name = main::remove_texi($element->{'texi'}); + } + + # If we have an entry in the section<=>filename map, use that one, otherwise + # generate the anchor here. + if (exists ($node_to_filename_map->{$node_name})) { + (my $filename, $target) = @{$node_to_filename_map->{$node_name}}; + } else { + my $anchor = $node_name; + if ($element->{translationof}) { + $anchor = main::remove_texi($element->{translationof}); + } + # normalize to the same file name as texinfo + $target = texinfo_file_name($anchor); + } + # TODO: Once texi2html correctly prints out the target and not the id for + # the sections, change this back to ($id, $target) + return ($target, $target); +} + + +## Load the map file for the corrently processed texi file. We do this +# using a command init handler, since texi2html does not have any +# other hooks that are called after THISDOC is filled but before phase 2 +# of the texi2html conversion. +sub lilypond_init_map () +{ + my ($docu_dir, $docu_name) = split_texi_filename ($Texi2HTML::THISDOC{'input_file_name'}); + my $map_filename = main::locate_include_file ("${docu_name}.$Texi2HTML::THISDOC{current_lang}.xref-map") + || main::locate_include_file ("${docu_name}.xref-map"); + $node_to_filename_map = load_map_file ($map_filename); +} +push @Texi2HTML::Config::command_handler_init, \&lilypond_init_map; ############################################################################# @@ -355,7 +490,7 @@ sub lilypond_external_ref($$$$$$) } $displaytext = &$anchor('', $href, $displaytext) if ($displaytext ne ''); - return &$I('%{node_file_href}', { 'node_file_href' => $displaytext }); + return lc(&$I('%{node_file_href}', { 'node_file_href' => $displaytext })); } @@ -508,7 +643,7 @@ sub generate_ly_toc_entries($$$) "Contact", "Tiny examples", "Bug reports" ); my @color_2 = ( - "Features", "Examples", "Freedom", + "Features", "Examples", "Freedom", "Background", "Unix", "MacOS X", "Windows", "Notation", "Usage", "Snippets", "Help us", "Development", "Authors" @@ -516,13 +651,13 @@ sub generate_ly_toc_entries($$$) my @color_3 = ( "Productions", "Testimonials", "Source", "Old downloads", - "FAQ", "Changes", "Internals", + "Web", "FAQ", "Changes", "Extend", "Internals", "Publications", "Old news" ); my @color_4 = ( - "Text input", + "Text input", "Alternate input", "GPL", - "Translated", "Old", "FDL" + "Translated", "All", "FDL" ); my $addColor = " colorDefault"; @@ -624,8 +759,8 @@ sub lilypond_generate_page_toc_body($) if (!exists($main::value{'shallow_toc'})) { # WTF, perl needs 6 lines of magic to do: ' ' + open ('file-name').read ()? local $/=undef; - my $name = 'search-box.html'; - open FILE, $name or open FILE, "../$name" or die die "no such file: $name: $!"; + my $name = "search-box.html"; + open FILE, "$ENV{SRC_DIR}/$name" or open FILE, "$ENV{SRC_DIR}/../$name" or die die "no such file: $name: $!"; # All these also seems to work, but fail silently. Great, it runs! # It's late already, let's this broken site. @@ -751,6 +886,8 @@ sub print_lilypond_page_foot($) print $fh "\n"; } + # FIXME: This div and p#languages need to be in div#footer. + # Should we move this div to postprocess_html.py ? print $fh "
\n"; print $fh "

Validation

\n"; print $fh "

Thanks to webdev.nl"; @@ -760,7 +897,6 @@ sub print_lilypond_page_foot($) print $fh " alt=\"Valid HTML 4.01 Transitional\"\n"; print $fh " height=\"31\" width=\"88\">

\n"; print $fh "
"; - print $fh ""; # Print the TOC frame and reset the TOC: lilypond_print_toc_div ($fh, \@this_page_toc);