X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lilypond-texi2html.init;h=df50fe24c724fd45a4b12c3b389f72c6226e8193;hb=ced772967326227d13e3294ae44a42b631beca63;hp=89adb0e61244253ab3b34585b39f337b7540517c;hpb=2d38202e85796a9b2d182bfef40b607970070c3d;p=lilypond.git diff --git a/lilypond-texi2html.init b/lilypond-texi2html.init index 89adb0e612..df50fe24c7 100644 --- a/lilypond-texi2html.init +++ b/lilypond-texi2html.init @@ -2,7 +2,8 @@ ### texi2html customization script for Lilypond ### Author: Reinhold Kainhofer , 2008. -### Some code parts copied from texi2html and adapted. +### Some code parts copied from texi2html and adapted. These functions +### were written mainly by Patrice Dumas ### License: GPLv2+ ### ### @@ -40,14 +41,19 @@ ### correct file name for the link. Implemented in: ### lilypond_unknown (handling of @translationof, in case ### extract_texi_filenames.py messes up...) -### split_at_numbered_sections (correct file name: use the map) +### lilypond_element_file_name (correct file name: use the map) +### lilypond_element_target_name (correct anchor: use the map) ### lilypond_init_map (read in the externally created map from disk) ### lilypond_external_href (load the map for xrefs, use the correct ### link target) ### -) The HTML anchors for all sections are derived from the node name / ### section title (pre-generated in the .xref-map file). Implemented by: -### lilypond_node_file_name (adjust node anchors) -### split_at_numbered_sections (adjust section anchors) +### lilypond_element_target_name (adjust section anchors) +### -) Use the standard footnote format "nr text" instead of the +### ugly format of texi2html (

(nr)

text

). Implemented in +### makeinfo_like_foot_line_and_ref +### makeinfo_like_foot_lines +### makeinfo_like_paragraph ### ### ### Useful helper functions: @@ -71,7 +77,9 @@ package Texi2HTML::Config; $Texi2HTML::Config::USE_ACCESSKEY = 1; $Texi2HTML::Config::USE_LINKS = 1; $Texi2HTML::Config::USE_REL_REV = 1; -$Texi2HTML::Config::element_file_name = \&split_at_numbered_sections; +$Texi2HTML::Config::SEPARATED_FOOTNOTES = 0; # Print footnotes on same page, not separated +$Texi2HTML::Config::element_file_name = \&lilypond_element_file_name; +$Texi2HTML::Config::element_target_name = \&lilypond_element_target_name; $Texi2HTML::Config::print_element_header = \&lilypond_print_element_header; $Texi2HTML::Config::print_page_foot = \&print_lilypond_page_foot; $Texi2HTML::Config::print_navigation = \&lilypond_print_navigation; @@ -81,6 +89,12 @@ $Texi2HTML::Config::toc_body = \&lilypond_toc_body; $Texi2HTML::Config::css_lines = \&lilypond_css_lines; $Texi2HTML::Config::unknown = \&lilypond_unknown; $Texi2HTML::Config::print_page_head = \&lilypond_print_page_head; +# $Texi2HTML::Config::foot_line_and_ref = \&lilypond_foot_line_and_ref; +$Texi2HTML::Config::foot_line_and_ref = \&makeinfo_like_foot_line_and_ref; +$Texi2HTML::Config::foot_lines = \&makeinfo_like_foot_lines; +$Texi2HTML::Config::paragraph = \&makeinfo_like_paragraph; + + # Examples should be formatted similar to quotes: $Texi2HTML::Config::complex_format_map->{'example'} = { @@ -88,6 +102,12 @@ $Texi2HTML::Config::complex_format_map->{'example'} = { 'end' => q{"\n"}, }; +%Texi2HTML::config::misc_pages_targets = ( + 'Overview' => 'Overview', + 'Contents' => 'Contents', + 'About' => 'About' +); + my @section_to_filename; @@ -213,19 +233,19 @@ sub lilypond_css_lines ($$) { my $import_lines = shift; my $rule_lines = shift; - return if (defined($CSS_LINES)); + return if (defined($Texi2HTML::THISDOC{'CSS_LINES'})); if (@$rule_lines or @$import_lines) { - $CSS_LINES = "\n"; + $Texi2HTML::THISDOC{'CSS_LINES'} = "\n"; } foreach my $ref (@CSS_REFS) { - $CSS_LINES .= "\n"; + $Texi2HTML::THISDOC{'CSS_LINES'} .= "\n"; } - $CSS_LINES .= "\n"; + $Texi2HTML::THISDOC{'CSS_LINES'} .= "\n"; } @@ -252,7 +272,7 @@ my $node_to_filename_map = (); # If an external nodename<=>filename/anchor map file is found (loaded in # lilypond_init_out, use the externally created values, otherwise use the # same logic here. -sub split_at_numbered_sections($$$) +sub lilypond_element_file_name($$$) { my $element = shift; my $type = shift; @@ -275,8 +295,6 @@ sub split_at_numbered_sections($$$) (my $filename, my $anchor) = @{$node_to_filename_map->{$node_name}}; $filename .= ".$docu_ext" if (defined($docu_ext)); - $element->{'id'} = $anchor; -# $element->{'node_ref'}->{'id'} = $anchor; # 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)) { @@ -292,32 +310,20 @@ sub split_at_numbered_sections($$$) 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") { - # TOC, footer, about etc. are called with undefined $element and $type == "toc"|"stoc"|"foot"|"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/); - # derive the name of the anchor (i.e. the part after # in the links!), - # don't use texi2html's SECx.x default! - my $sec_name = main::remove_texi($element->{'texi'}); - # if we have a node, use its name: - if ($element->{'node_ref'}->{'texi'} ne '') { - $sec_name = main::remove_texi($element->{'node_ref'}->{'texi'}); - } - my $anchor = $sec_name; - if ($element->{translationof}) { - $anchor = main::remove_texi($$element{translationof}); - } - # normalize to the same file name as texinfo - $anchor = texinfo_file_name($anchor); - $element->{'id'} = $anchor; - $element->{'node_ref'}->{'id'} = $anchor; # Numbered sections will get a filename Node_title, unnumbered sections will use # the file name of the previous numbered section: if (($element->{number}) or ($lastfilename eq '') or ($element->{level} == 1)) { - my $filename = $anchor; + # 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; @@ -332,6 +338,34 @@ sub split_at_numbered_sections($$$) 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 @@ -508,7 +542,7 @@ sub generate_ly_toc_entries($$$$) my $ind = ' ' x $level; my $this_css_class = $is_parent_of_current ? " class=\"toc_current\"" : ""; - my $entry = "$ind" . &$anchor ($element->{'tocid'}, "$element->{'file'}#$element->{'id'}",$element->{'text'}); + my $entry = "$ind" . &$anchor ($element->{'tocid'}, "$element->{'file'}#$element->{'target'}",$element->{'text'}); my $children = $element->{'section_childs'}; # Don't add unnumbered entries, unless they are at top-level or a parent of the current! @@ -841,6 +875,126 @@ sub lilypond_print_navigation +############################################################################# +### FOOTNOTE FORMATTING +############################################################################# + +# Format footnotes in a nicer way: Instead of printing the number in a separate +# (nr) heading line, use the standard way of prepending nr immediately +# before the fn text. + + +# The following code is copied from texi2html's examples/makeinfo.init and +# should be updated when texi2html makes some changes there! + +my $makekinfo_like_footnote_absolute_number = 0; + +sub makeinfo_like_foot_line_and_ref($$$$$$$$) +{ + my $foot_num = shift; + my $relative_num = shift; + my $footid = shift; + my $docid = shift; + my $from_file = shift; + my $footnote_file = shift; + my $lines = shift; + my $state = shift; + + $makekinfo_like_footnote_absolute_number++; + + # this is a bit obscure, this allows to add an anchor only if formatted + # as part of the document. + $docid = '' if ($state->{'outside_document'} or $state->{'multiple_pass'}); + + if ($from_file eq $footnote_file) + { + $from_file = $footnote_file = ''; + } + + my $foot_anchor = "" . &$anchor($docid, "$footnote_file#$footid", $relative_num) . ""; + $foot_anchor = &$anchor($docid, "$footnote_file#$footid", "($relative_num)") if ($state->{'preformatted'}); + +# unshift @$lines, "
  • "; +# push @$lines, "
  • \n"; + return ($lines, $foot_anchor); +} + +sub makeinfo_like_foot_lines($) +{ + my $lines = shift; + unshift @$lines, "
    \n

    $Texi2HTML::I18n::WORDS->{'Footnotes_Title'}

    \n"; +#
      \n"; +# push @$lines, "
    "; + return $lines; +} + +my %makekinfo_like_paragraph_in_footnote_nr; + +sub makeinfo_like_paragraph ($$$$$$$$$$$$$) +{ + my $text = shift; + my $align = shift; + my $indent = shift; + my $paragraph_command = shift; + my $paragraph_command_formatted = shift; + my $paragraph_number = shift; + my $format = shift; + my $item_nr = shift; + my $enumerate_style = shift; + my $number = shift; + my $command_stack_at_end = shift; + my $command_stack_at_begin = shift; + my $state = shift; +#print STDERR "format: $format\n" if (defined($format)); +#print STDERR "paragraph @$command_stack_at_end; @$command_stack_at_begin\n"; + $paragraph_command_formatted = '' if (!defined($paragraph_command_formatted) or + exists($special_list_commands{$format}->{$paragraph_command})); + return '' if ($text =~ /^\s*$/); + foreach my $style(t2h_collect_styles($command_stack_at_begin)) + { + $text = t2h_begin_style($style, $text); + } + foreach my $style(t2h_collect_styles($command_stack_at_end)) + { + $text = t2h_end_style($style, $text); + } + if (defined($paragraph_number) and defined($$paragraph_number)) + { + $$paragraph_number++; + return $text if (($format eq 'itemize' or $format eq 'enumerate') and + ($$paragraph_number == 1)); + } + my $open = '[0]) and $command_stack_at_begin->[0] eq 'footnote') + { + my $state = $Texi2HTML::THISDOC{'state'}; + $makekinfo_like_paragraph_in_footnote_nr{$makekinfo_like_footnote_absolute_number}++; + if ($makekinfo_like_paragraph_in_footnote_nr{$makekinfo_like_footnote_absolute_number} <= 1) + { + $open.=' class="footnote"'; + my $document_file = $state->{'footnote_document_file'}; + if ($document_file eq $state->{'footnote_footnote_file'}) + { + $document_file = ''; + } + my $docid = $state->{'footnote_place_id'}; + my $doc_state = $state->{'footnote_document_state'}; + $docid = '' if ($doc_state->{'outside_document'} or $doc_state->{'multiple_pass'}); + my $foot_label = &$anchor($state->{'footnote_footnote_id'}, + $document_file . "#$state->{'footnote_place_id'}", + "$state->{'footnote_number_in_page'}"); + $footnote_text = "[${foot_label}] "; + } + } + return $open.'>'.$footnote_text.$text.'

    '; +} + + ############################################################################# ### OTHER SETTINGS #############################################################################