X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fweb-texi2html.init;h=8669b47d88ef3d37fc12222dde6ddb9a2018c1ef;hb=66a442073ffd297a93cfb398587f7b66d66094a7;hp=f266657c8d3cdc42409d763b7997a06125309986;hpb=ba32454fd3765fe77f58e13c2b3db4a4196282a7;p=lilypond.git diff --git a/Documentation/web-texi2html.init b/Documentation/web-texi2html.init index f266657c8d..8669b47d88 100644 --- a/Documentation/web-texi2html.init +++ b/Documentation/web-texi2html.init @@ -1,6 +1,15 @@ #!/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 ); + ### texi2html customization script for LilyPond ### Author: Reinhold Kainhofer , 2008. ### Some code parts copied from texi2html and adapted. These functions @@ -101,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 = ''; @@ -118,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; @@ -222,6 +232,8 @@ sub texinfo_file_name($) $result = 't_g' . $result; } # DONE + # we also want lower-case + $result = lc($result); return $result } @@ -235,6 +247,7 @@ sub load_map_file ($) my $node_map = (); if (open(XREFFILE, $mapfile)) { + print STDERR "Reading map file: $mapfile\n"; my $line; while ( $line = ) { # parse the tab-separated entries and insert them into the map: @@ -248,7 +261,7 @@ sub load_map_file ($) } close (XREFFILE); } else { - print STDERR "WARNING: Unable to load the map file $mapfile\n"; + print STDERR "warning: cannot load map file: no such file: $mapfile\n"; } return $node_map; } @@ -316,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; ############################################################################# @@ -351,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 })); } @@ -455,7 +594,6 @@ sub lilypond_external_href($$$) my $page_toc_depth = 2; my @default_toc = []; - # Initialize the toc_depth to 1 if the command-line option -D=short_toc is given sub lilypond_init_toc_depth () { @@ -505,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" @@ -513,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"; @@ -596,6 +734,9 @@ sub lilypond_generate_page_toc_body($) $parentelements{$current_element->{'sectionup'}->{'id'}} = 1 if ($current_element->{'sectionup'}->{'id'} ne ''); $current_element = $current_element->{'sectionup'}; + if (exists($main::value{'shallow_toc'})) { + last; + } } return () if not defined($current_element); # Create the toc entries recursively @@ -610,15 +751,31 @@ sub lilypond_generate_page_toc_body($) } else { push (@toc_entries, "
  • Main
  • \n"); } - my $children = $current_element->{'section_childs'}; # FIXME: generate toc foreach ( @$children ) { push (@toc_entries, generate_ly_toc_entries($_, \%parentelements, $page_toc_depth)); } -# FIXME: add search entry box - push (@toc_entries, "
  • \n"); - + 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, "$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. + +# push (@toc_entries, '
  • \n' + + '
  • \n'); +# push (@toc_entries, '
  • \n' . . '
  • \n'); +# my $string = '
  • \n' + + '
  • \n'; +# my $string = '
  • \n' + + '
  • \n'; +# my $string = '
  • \n' . . '
  • \n'; + my $string = ; +# $string = '
  • \n' + $string + '
  • \n'; + $string = "
  • \n" . $string . "
  • \n"; + push (@toc_entries, $string); + close FILE; + } push (@toc_entries, "\n"); #FIXME # push (@toc_entries, "\n"); @@ -729,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"; @@ -737,12 +896,6 @@ sub print_lilypond_page_foot($) print $fh "\"Valid

    \n"; - print $fh "

    Web pages created with"; - print $fh " "; - print $fh " GNU Texinfo\n"; - print $fh " and "; - print $fh " texi2html.

    \n"; - print $fh "
    "; print $fh ""; # Print the TOC frame and reset the TOC: