X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Flilypond-texi2html.init;h=4be30f6f3394509e82fe290ba9e94f6b105fd0ab;hb=d08401e31181a1ea84269009f47179aac5336cc4;hp=21a36869861e935aaf6f4ee765ae9fa4d7802372;hpb=20bb3e6530cae3db0f0cdc35c1a9ed1ae10ced56;p=lilypond.git diff --git a/Documentation/lilypond-texi2html.init b/Documentation/lilypond-texi2html.init index 21a3686986..4be30f6f33 100644 --- a/Documentation/lilypond-texi2html.init +++ b/Documentation/lilypond-texi2html.init @@ -5,7 +5,7 @@ ### Author: Reinhold Kainhofer , 2008. ### Some code parts copied from texi2html and adapted. These functions ### were written mainly by Patrice Dumas -### License: GPLv2+ +### License: GPLv3+ ### ### ### Features implemented here: @@ -66,25 +66,315 @@ package Texi2HTML::Config; +use utf8; +use Encode qw(decode); + ############################################################################# ### TRANSLATIONS ############################################################################# -use utf8; my $LY_LANGUAGES = {}; $LY_LANGUAGES->{'fr'} = { 'Back to Documentation Index' => 'Retour à l\'accueil de la documentation', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '

Remerciements à ${webdev_link} pour l\'hébergement de ${lily_site}.', }; + $LY_LANGUAGES->{'es'} = { 'Back to Documentation Index' => 'Volver al índice de la documentación', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '

Agradecemos a ${webdev_link} el alojamiento de ${lily_site}.', }; + $LY_LANGUAGES->{'de'} = { 'Back to Documentation Index' => 'Zur Dokumentationsübersicht', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '', }; + $LY_LANGUAGES->{'ja'} = { 'Back to Documentation Index' => 'ドキュメント インデックスに戻る', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '', +}; + +$LY_LANGUAGES->{'hu'} = { + 'Back to Documentation Index' => 'Vissza a dokumentációk jegyzékéhez', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '', +}; + +$LY_LANGUAGES->{'it'} = { + 'Back to Documentation Index' => 'Torna all\'indice della documentazione', + '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '', }; +# FIXME: request the translations below then send them to texi2html/texinfo devs +$LANGUAGES->{'it'} = { + ' The buttons in the navigation panels have the following meaning:' => ' I bottoni nei pannelli di navigazione hanno il seguente significato:', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' dove @strong{ Esempio } assume che l\'attuale posizione è alla @strong{ Sottosottosezione Uno-Due-Tre } di un documento che ha la seguente struttura:', + ' Up ' => ' Su ', + '(outside of any element)' => '(fuori da qualsiasi elemento)', + '(outside of any node)' => '(fuori da qualsiasi nodo)', + '@b{{quotation_arg}:} ' => '@b{{quotation_arg}:} ', + '@cite{{book}}' => '@cite{{book}}', + '@{No value for `{value}\'@}' => '@{Nessun valore per `{value}\'@}', + 'About' => 'Informazioni', + 'About (help)' => 'Informazioni (aiuto)', + 'About This Document' => 'Informazioni su questo documento', + 'April' => 'Aprile', + 'August' => 'Agosto', + 'Back' => 'Indietro', + 'Back section in previous file' => '', + 'Beginning of this chapter or previous chapter' => 'Inizio di questo capitolo o capitolo precedente', + 'Button' => 'Bottone', + 'Contents' => 'Contenuti', + 'Cover (top) of document' => 'Copertina (inizio) del documento', + 'Current' => 'Attuale', + 'Current Position' => 'Posizione Attuale', + 'Current section' => 'Sezione attuale', + 'December' => 'Dicembre', + 'FastBack' => 'Indietro veloce', + 'FastForward' => 'Avanti veloce', + 'February' => 'Febbraio', + 'First' => 'Primo', + 'First section in reading order' => 'Prima sezione in ordine di lettura', + 'Following' => 'Seguente', + 'Following node' => 'Nodo seguente', + 'Footnotes' => 'Note a piè di pagina', + 'Forward' => 'Avanti', + 'Forward section in next file' => 'Sezione successiva nel prossimo file', + 'From 1.2.3 go to' => 'Da 1.2.3 vai a', + 'Go to' => 'Vai a', + 'Index' => 'Indice', + 'Index Entry' => 'Voce dell\'indice', + 'January' => 'Gennaio', + 'July' => 'Luglio', + 'Jump to' => 'Salta a', + 'June' => 'Giugno', + 'Last' => 'Ultimo', + 'Last section in reading order' => 'Ultima sezione in ordine di lettura', + 'March' => 'Marzo', + 'May' => 'Maggio', + 'Menu:' => 'Menu', + 'Name' => 'Nome', + 'Next' => 'Successivo', + 'Next chapter' => 'Capitolo successivo', + 'Next file' => 'File successivo', + 'Next node' => 'Nodo successivo', + 'Next section in reading order' => 'Sezione successiva in ordine di lettura', + 'Next section on same level' => 'Sezione successiva sullo stesso livello', + 'NextFile' => 'File successivo', + 'Node following in node reading order' => 'Nodo seguente in ordine di lettura', + 'Node up' => 'Nodo superiore', + 'NodeNext' => 'Nodo successivo', + 'NodePrev' => 'Nodo precedente', + 'NodeUp' => 'Nodo superiore', + 'November' => 'Novembre', + 'October' => 'Ottobre', + 'Overview' => 'Panoramica', + 'Prev' => 'Prec.', + 'PrevFile' => 'File precedente', + 'Previous' => 'Precedente', + 'Previous file' => 'File precedente', + 'Previous node' => 'Nodo precedente', + 'Previous section in reading order' => 'Sezione precedente in ordine di lettura', + 'Previous section on same level' => 'Sezione precedente sullo stesso livello', + 'Section' => 'Sezione', + 'Section One' => 'Sezione uno', + 'See ' => 'Vedi', + 'See @cite{{book}}' => 'Vedi @cite{{book}}', + 'See section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => 'Vedi la sezione `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}', + 'See section `{section}\' in @cite{{book}}' => 'Vedi la sezione `{section}\' in @cite{{book}}', + 'See section {reference_name}' => 'Vedi la sezione {reference_name}', + 'See {node_file_href}' => 'Vedi {node_file_href}', + 'See {node_file_href} @cite{{book}}' => 'Vedi {node_file_href} @cite{{book}}', + 'See {node_file_href} section `{section}\' in @cite{{book}}' => 'Vedi {node_file_href} nella sezione `{section}\' in @cite{{book}}', + 'See {reference_name}' => 'Vedi {reference_name}', + 'See {ref}' => 'Vedi {ref}', + 'See {title_ref}' => 'Vedi {title_ref}', + 'September' => 'Settembre', + 'Short Table of Contents' => 'Indice breve', + 'Short table of contents' => 'Indice breve', + 'Subsection One-Four' => 'Sottosezione Uno-Quattro', + 'Subsection One-One' => 'Sottosezione Uno-Uno', + 'Subsection One-Three' => 'Sottosezione Uno-Tre', + 'Subsection One-Two' => 'Sottosezione Uno-Due', + 'Subsubsection One-Two-Four' => 'Sottosottosezione Uno-Due-Quattro', + 'Subsubsection One-Two-One' => 'Sottosottosezione Uno-Due-Uno', + 'Subsubsection One-Two-Three' => 'Sottosottosezione Uno-Due-Tre', + 'Subsubsection One-Two-Two' => 'Sottosottosezione Uno-Due-Due', + 'T2H_today' => '%s, %d %d', + 'Table of Contents' => 'Indice', + 'Table of contents' => 'Indice', + 'The node you are looking for is at {href}.' => 'Il nodo che stai cercando è {href}', + 'This' => 'Questo', + 'This document was generated on @i{{date}} using @uref{{program_homepage}, @i{{program}}}.' => 'Questo documento è stato generato il @i{{date}} con @uref{{program_homepage}, @i{{program}}}.', + 'This document was generated using @uref{{program_homepage}, @emph{{program}}}.' => 'Questo documento è stato generato con @uref{{program_homepage}, @emph{{program}}}.', + 'Top' => 'Inizio', + 'Untitled Document' => 'Documento senza titolo', + 'Up' => 'Su', + 'Up node' => 'Nodo superiore', + 'Up section' => 'Sezione superiore', + 'current' => 'attuale', + 'on @emph{{date}}' => 'il @emph{{date}}', + 'section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => 'sezione `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}', + 'section `{section}\' in @cite{{book}}' => 'sezione `{section}\' in @cite{{book}}', + 'see ' => 'vedi ', + 'see @cite{{book}}' => 'vedi @cite{{book}}', + 'see section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => 'vedi la sezione `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}', + 'see section `{section}\' in @cite{{book}}' => 'vedi la sezione `{section}\' in @cite{{book}}', + 'see section {reference_name}' => 'vedi la sezione {reference_name}', + 'see {node_file_href}' => 'vedi {node_file_href}', + 'see {node_file_href} @cite{{book}}' => 'vedi {node_file_href} @cite{{book}}', + 'see {node_file_href} section `{section}\' in @cite{{book}}' => 'vedi {node_file_href} nella sezione `{section}\' in @cite{{book}}', + 'see {reference_name}' => 'vedi {reference_name}', + 'see {ref}' => 'vedi {ref}', + 'see {title_ref}' => 'vedi {title_ref}', + '{acronym_like} ({explanation})' => '{acronym_like} ({explanation})', + '{name} of {class}' => '{name} di {class}', + '{name} on {class}' => '{name} in {class}', + '{node_file_href}' => '{node_file_href}', + '{node_file_href} @cite{{book}}' => '{node_file_href} @cite{{book}}', + '{node_file_href} section `{section}\' in @cite{{book}}' => '{node_file_href} nella sezione `{section}\' in @cite{{book}}', + '{reference_name}' => '{reference_name}', + '{ref}' => '{ref}', + '{style} {number}' => '{style} {number}', + '{style}: {caption_first_line}' => '{style}: {caption_first_line}', + '{style}: {shortcaption_first_line}' => '{style}: {shortcaption_first_line}', + '{title_ref}' => '{title_ref}' + }; + +$LANGUAGES->{'hu'} = { + ' The buttons in the navigation panels have the following meaning:' => ' A navigációs panelen levő gombok jelentése a következő:', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' @strong{ Példánkban } az aktuális pozíció az @strong{ 1.2.3 alalszakasz } egy olyan dokumentumban, melynek szerkezete a következő:', + ' Up ' => 'Fel', + '(outside of any element)' => '(bármelyik elemen kívül)', + '(outside of any node)' => '(bármelyik csomóponton kívül)', + '@b{{quotation_arg}:} ' => '@b{{quotation_arg}:} ', + '@cite{{book}}' => '@cite{{book}}', + '@{No value for `{value}\'@}' => '@{Nincs értéke ennek: `{value}\'@}', + 'About' => 'Súgó', + 'About (help)' => 'Segítség a navigációhoz', + 'About This Document' => 'A navigációs panel használata', + 'April' => 'április', + 'August' => 'augusztus', + 'Back' => 'Vissza', + 'Back section in previous file' => 'Előző fájl hátsó szakasza', + 'Beginning of this chapter or previous chapter' => 'Fejezet eleje vagy előző fejezet', + 'Button' => 'Gomb', + 'Contents' => 'Tartalom', + 'Cover (top) of document' => 'Dokumentum címoldala', + 'Current' => 'Aktuális', + 'Current Position' => 'Aktuális pozíció', + 'Current section' => 'Aktuális szakasz', + 'December' => 'december', + 'FastBack' => 'Visszaugrás', + 'FastForward' => 'Előreugrás', + 'February' => 'február', + 'First' => 'Első', + 'First section in reading order' => 'Első szakasz az olvasási sorrendben', + 'Following' => 'Következő', + 'Following node' => 'Következő csomópont', + 'Footnotes' => 'Lábjegyzet', + 'Forward' => 'Előre', + 'Forward section in next file' => 'Következő fájl elülső szakasza', + 'From 1.2.3 go to' => '1.2.3-ból ide jutunk', + 'Go to' => 'Cél', + 'Index' => 'Tárgymutató', + 'Index Entry' => 'Tárgymutató-bejegyzés', + 'January' => 'január', + 'July' => 'július', + 'Jump to' => 'Ugorj ide', + 'June' => 'június', + 'Last' => 'Utolsó', + 'Last section in reading order' => 'Utolsó szakasz az olvasási sorrendben', + 'March' => 'március', + 'May' => 'május', + 'Menu:' => 'Menü:', + 'Name' => 'Név', + 'Next' => 'Következő', + 'Next chapter' => 'Következő fejezet', + 'Next file' => 'Következő fájl', + 'Next node' => 'Következő csomópont', + 'Next section in reading order' => 'Következő szakasz az olvasási sorrendben', + 'Next section on same level' => 'Következő szakasz ugyanazon a szinten', + 'NextFile' => 'KövetkezőFájl', + 'Node following in node reading order' => 'Következő csomópont az olvasási sorrendben', + 'Node up' => 'Szülő csomópont', + 'NodeNext' => 'KövetkezőCsomópont', + 'NodePrev' => 'ElőzőCsomópont', + 'NodeUp' => 'SzülőCsomópont', + 'November' => 'november', + 'October' => 'október', + 'Overview' => 'Áttekintés', + 'Prev' => 'Előző', + 'PrevFile' => 'ElőzőFájl', + 'Previous' => 'Előző', + 'Previous file' => 'Előző fájl', + 'Previous node' => 'Előző csomópont', + 'Previous section in reading order' => 'Előző szakasz az olvasási sorrendben', + 'Previous section on same level' => 'Előző szakasz ugyanazon a szinten', + 'Section' => 'Szakasz', + 'Section One' => 'szakasz', + 'See ' => 'Ld. ', + 'See @cite{{book}}' => 'Ld. @cite{{book}}', + 'See section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => 'Ld. ezt a szakaszt: `@asis{}`{section_name}\'@asis{}\' itt: @cite{{book}}', + 'See section `{section}\' in @cite{{book}}' => 'Ld. ezt a szakaszt: `{section}\' itt: @cite{{book}}', + 'See section {reference_name}' => 'Ld. ezt a szakaszt: {reference_name}', + 'See {node_file_href}' => 'Ld. {node_file_href}', + 'See {node_file_href} @cite{{book}}' => 'See {node_file_href} @cite{{book}}', + 'See {node_file_href} section `{section}\' in @cite{{book}}' => 'Ld. {node_file_href} ezt a szakaszt: `{section}\' itt: @cite{{book}}', + 'See {reference_name}' => 'Ld. {reference_name}', + 'See {ref}' => 'Ld. {ref}', + 'See {title_ref}' => 'Ld. {title_ref}', + 'September' => 'szeptember', + 'Short Table of Contents' => 'Rövid tartalomjegyzék', + 'Short table of contents' => 'Rövid tartalomjegyzék', + 'Subsection One-Four' => 'alszakasz', + 'Subsection One-One' => 'alszakasz', + 'Subsection One-Three' => 'alszakasz', + 'Subsection One-Two' => 'alszakasz', + 'Subsubsection One-Two-Four' => 'alalszakasz', + 'Subsubsection One-Two-One' => 'alalszakasz', + 'Subsubsection One-Two-Three' => 'alalszakasz', + 'Subsubsection One-Two-Two' => 'alalszakasz', + 'T2H_today' => '%s, %d %d', + 'Table of Contents' => 'Tartalomjegyzék', + 'Table of contents' => 'Tartalomjegyzék', + 'The node you are looking for is at {href}.' => 'A keresett csomópont itt található: {href}.', + 'This' => 'Ez a(z)', + 'This document was generated on @i{{date}} using @uref{{program_homepage}, @i{{program}}}.' => 'Ezt a dokumentumot @i{{date}} napon generálta a(z) @uref{{program_homepage}, @i{{program}}}.', + 'This document was generated using @uref{{program_homepage}, @emph{{program}}}.' => 'Ezt a dokumentumot a(z) @uref{{program_homepage}, @emph{{program}}} generálta.', + 'Top' => 'Címoldal', + 'Untitled Document' => 'Névtelen dokumentum', + 'Up' => 'Fel', + 'Up node' => 'Szülő csomópont', + 'Up section' => 'Szülő szakasz', + 'current' => 'aktuális', + 'on @emph{{date}}' => 'ekkor: @emph{{date}}', + 'section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => 'szakasz: `@asis{}`{section_name}\'@asis{}\' itt: @cite{{book}}', + 'section `{section}\' in @cite{{book}}' => 'szakasz: `{section}\' itt: @cite{{book}}', + 'see ' => 'ld. ', + 'see @cite{{book}}' => 'ld. @cite{{book}}', + 'see section `@asis{}`{section_name}\'@asis{}\' in @cite{{book}}' => 'ld. ezt a szakaszt: `@asis{}`{section_name}\'@asis{}\' itt: @cite{{book}}', + 'see section `{section}\' in @cite{{book}}' => 'ld. ezt a szakaszt: `{section}\' itt: @cite{{book}}', + 'see section {reference_name}' => 'ld. ezt a szakaszt: {reference_name}', + 'see {node_file_href}' => 'ld. {node_file_href}', + 'see {node_file_href} @cite{{book}}' => 'ld. {node_file_href} @cite{{book}}', + 'see {node_file_href} section `{section}\' in @cite{{book}}' => 'ld. {node_file_href} ezt a szakaszt: `{section}\' itt: @cite{{book}}', + 'see {reference_name}' => 'ld. {reference_name}', + 'see {ref}' => 'ld. {ref}', + 'see {title_ref}' => 'ld. {title_ref}', + '{acronym_like} ({explanation})' => '{acronym_like} ({explanation})', + '{name} of {class}' => '{name} típusa: {class}', + '{name} on {class}' => '{name} ezen: {class}', + '{node_file_href}' => '{node_file_href}', + '{node_file_href} @cite{{book}}' => '{node_file_href} @cite{{book}}', + '{node_file_href} section `{section}\' in @cite{{book}}' => '{node_file_href} szakasz: `{section}\' itt: @cite{{book}}', + '{reference_name}' => '{reference_name}', + '{ref}' => '{ref}', + '{style} {number}' => '{style} {number}', + '{style}: {caption_first_line}' => '{style}: {caption_first_line}', + '{style}: {shortcaption_first_line}' => '{style}: {shortcaption_first_line}', + '{title_ref}' => '{title_ref}' + }; + sub ly_get_string () { my $lang = $Texi2HTML::THISDOC{current_lang}; @@ -97,25 +387,52 @@ sub ly_get_string () { } +############################################################################# +### FUNCTIONALITY FOR MAIN WEB PAGES +############################################################################# + +our $web_manual; + ############################################################################# ### SETTINGS FOR TEXI2HTML ############################################################################# -@Texi2HTML::Config::CSS_REFS = ( - {FILENAME => "lilypond-mccarty.css", TITLE => "Patrick McCarty's design"} -); +# Validation fix for texi2html<=1.82 +$Texi2HTML::Config::DOCTYPE = ''; + +@Texi2HTML::Config::CSS_REFS = ( + {FILENAME => "lilypond-mccarty.css", TITLE => "Default style"} + ); @Texi2HTML::Config::ALT_CSS_REFS = ( {FILENAME => "lilypond.css", TITLE => "Andrew Hawryluk's design" }, {FILENAME => "lilypond-blue.css", TITLE => "Kurt Kroon's blue design" }, ); + +sub web_settings() { + print STDERR "Initializing settings for web site\n"; + $Texi2HTML::Config::BODYTEXT = ""; + @Texi2HTML::Config::CSS_REFS = ( + {FILENAME => "lilypond-web.css", TITLE => "Patrick McCarty's design"} + ); + @Texi2HTML::Config::ALT_CSS_REFS = ( + {FILENAME => "lilypond-web-alt1.css", TITLE => "Alternate style 1"}, + {FILENAME => "lilypond-web-alt2.css", TITLE => "Alternate style 2"}, + ); +} + +# web_settings() if (exists($main::value{'web_manual'})); + $Texi2HTML::Config::USE_ACCESSKEY = 1; $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 -if ($Texi2HTML::Config::SPLIT eq 'section') { + +if ($Texi2HTML::Config::SPLIT eq 'section' or + $Texi2HTML::Config::SPLIT eq 'node') { $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; @@ -212,10 +529,9 @@ sub texinfo_file_name($) $result = 't_g' . $result; } # DONE - return $result + return lc($result) } - # Load a file containing a nodename<=>filename map (tab-sepatared, i.e. # NODENAME\tFILENAME\tANCHOR # Returns a ref to a hash "Node title" => ["FilenameWithoutExt", "Anchor"] @@ -224,14 +540,21 @@ sub load_map_file ($) my $mapfile = shift; my $node_map = (); - if (open(XREFFILE,'<:encoding(utf8)', $mapfile)) { + # For some unknown reason, Perl on my system (5.10.0 on Fedora 12) + # refuses to open map files of translated documents with + # '<:encoding(utf8)', but decoding from UTF-8 line by line works. -jm + if (open(XREFFILE,'<', $mapfile)) { my $line; - while ( $line = ) { + # print STDERR "*** PRINTING MAP FILE LINES ***\n"; + while ( $line = decode ('UTF-8', ) ) { # parse the tab-separated entries and insert them into the map: chomp($line); my @entries = split(/\t/, $line); if (scalar (@entries) == 3) { $node_map->{$entries[0]} = [$entries[1], $entries[2]]; + $, = " "; + # print STDERR @entries; + # print STDERR "\n"; } else { print STDERR "Invalid entry in the node file $mapfile: $line\n"; } @@ -292,6 +615,8 @@ sub lilypond_css_lines ($$) { $Texi2HTML::THISDOC{'CSS_LINES'} .= "{FILENAME}\" title=\"$ref->{TITLE}\">\n"; } + # FIXME: the website doesn't use ie7-specific fixes; do the + # docs still need this? -gp $Texi2HTML::THISDOC{'CSS_LINES'} .= "\n"; } @@ -341,10 +666,12 @@ sub lilypond_element_file_name($$$) if (exists ($node_to_filename_map->{$node_name})) { (my $filename, my $anchor) = @{$node_to_filename_map->{$node_name}}; $filename .= ".$docu_ext" if (defined($docu_ext)); + $filename = lc($filename); # 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)) { + if (not $docu_name == "web" and not ($element->{number}) + and not ($lastfilename eq '') and ($element->{level} > 1)) { $filename = $lastfilename; } if (($filename eq $lastfilename)) { @@ -354,6 +681,7 @@ sub lilypond_element_file_name($$$) $$element{doc_nr} = $docnr; $lastfilename = $filename; } + print STDERR "Output file name: $filename\n"; 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") { @@ -372,13 +700,17 @@ sub lilypond_element_file_name($$$) } my $filename = texinfo_file_name($node_name); $filename .= ".$docu_ext" if (defined($docu_ext)); + $filename = lc($filename); $docnr += 1; $$element{doc_nr} = $docnr; $lastfilename = $filename; + print STDERR "File name: $filename\n"; return $filename; } else { $$element{doc_nr} = $docnr; - return $lastfilename; + $filename = lc ($filename); + print STDERR "File name: $filename\n"; + return $filename; } } @@ -410,6 +742,7 @@ sub lilypond_element_target_name($$$) } # TODO: Once texi2html correctly prints out the target and not the id for # the sections, change this back to ($id, $target) + $target = lc($target); return ($target, $target); } @@ -423,6 +756,11 @@ 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"); + print STDERR "Map filename is: $map_filename\nDocu name is $docu_name\n"; + if ($docu_name eq 'web') { + $web_manual = 1; + web_settings(); + } $node_to_filename_map = load_map_file ($map_filename); } push @Texi2HTML::Config::command_handler_init, \&lilypond_init_map; @@ -443,7 +781,7 @@ sub lilypond_external_ref($$$$$$) my $section = shift; my $book = shift; my $file_node = shift; - my $href = shift; + my $href = lc(shift); my $cross_ref = shift; my $displaytext = ''; @@ -548,7 +886,7 @@ sub lilypond_external_href($$$) } if (defined $file) { - return &$default_external_href($node, $node_id, $node_hxmlt_id, $file); + return &$default_external_href($node, $node_id, $node_hxmlt_id, lc($file)); } else { return &$default_external_href($node, $node_id, $node_hxmlt_id); } @@ -565,41 +903,67 @@ 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 () { - if (exists($main::value{'short_toc'}) and not exists($main::value{'bigpage'})) { + if (exists($main::value{'short_toc'}) and not exists($main::value{'bigpage'}) + and not $web_manual) { $page_toc_depth = 1; } } -# Set the TOC-depth (depending on a texinfo variable short_toc) in a +# Set the TOC-depth (depending on a texinfo variable short_toc) in a # command-handler, so we have them available when creating the pages push @Texi2HTML::Config::command_handler_process, \&lilypond_init_toc_depth; + # recursively generate the TOC entries for the element and its children (which # are only shown up to maxlevel. All ancestors of the current element are also # shown with their immediate children, irrespective of their level. -# Unnumbered entries are only printed out if they are at top-level or 2nd level +# Unnumbered entries are only printed out if they are at top-level or 2nd level # or their parent element is an ancestor of the currently viewed node. # The conditions to call this method to print the entry for a child node is: # -) the parent is an ancestor of the current page node -# -) the parent is a numbered element at top-level toplevel (i.e. show numbered +# -) the parent is a numbered element at top-level toplevel (i.e. show numbered # and unnumbered 2nd-level children of numbered nodes) # -) the child element is a numbered node below level maxlevel -sub generate_ly_toc_entries($$$) +sub generate_ly_toc_entries($$$$) { my $element = shift; my $element_path = shift; my $maxlevel = shift; + if ($web_manual) { + $maxlevel = 1; + } + my $child_count = shift; # Skip undefined sections, plus all sections generated by index splitting return() if (not defined($element) or exists($element->{'index_page'})); my @result = (); my $level = $element->{'toc_level'}; my $is_parent_of_current = $element->{'id'} && $element_path->{$element->{'id'}}; my $ind = ' ' x $level; - my $this_css_class = $is_parent_of_current ? " class=\"toc_current\"" : ""; + my $this_css_class; + if ($web_manual) { + $this_css_class = " class=\""; + } else { + $this_css_class = ""; + } + $this_css_class .= $is_parent_of_current ? " toc_current" : ""; + + # color indices for the second navigation bar on the website + my %color_maps = ( + 'introduction' => [2, 2, 2, 2, 3, 3, 4, 4], + 'download' => [2, 2, 2, 3, 3, 4], + 'manuals' => [1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4], + 'community' => [1, 1, 1, 2, 2, 2, 3, 3], + ); + my $addColor = " colorDefault"; + while (($top_section, $color_indices) = each %color_maps) { + if (index ($element->{'sectionup'}->{'file'}, $top_section) >= 0) { + $addColor = " color" . $color_indices->[$child_count]; + } + } + $this_css_class .= $addColor . "\""; my $entry = "$ind" . &$anchor ($element->{'tocid'}, "$element->{'file'}#$element->{'target'}",$element->{'text'}); @@ -608,18 +972,23 @@ sub generate_ly_toc_entries($$$) if (defined($children) and (ref($children) eq "ARRAY")) { my $force_children = $is_parent_of_current or ($level == 1 and $element->{'number'}); my @child_result = (); + my $sub_child_count = 0; foreach my $c (@$children) { my $is_numbered_child = defined ($c->{'number'}); my $below_maxlevel = $c->{'toc_level'} le $maxlevel; if ($force_children or ($is_numbered_child and $below_maxlevel)) { - my @child_res = generate_ly_toc_entries($c, $element_path, $maxlevel); + my @child_res = generate_ly_toc_entries($c, $element_path, $maxlevel, $sub_child_count); push (@child_result, @child_res); + $sub_child_count += 1; } } # if no child nodes were generated, e.g. for the index, where expanded pages # are ignored, don't generate a list at all... if (@child_result) { push (@result, "\n$ind\n"); + if ($web_manual) { + push (@result, "$ind" . &$anchor ($element->{'tocid'}, "$element->{'file'}#$element->{'target'}", $element->{'text'})); + } push (@result, @child_result); push (@result, "$ind\n"); } @@ -644,16 +1013,50 @@ sub lilypond_generate_page_toc_body($) $parentelements{$current_element->{'sectionup'}->{'id'}} = 1 if ($current_element->{'sectionup'}->{'id'} ne ''); $current_element = $current_element->{'sectionup'}; + if ($web_manual) { + if (exists($main::value{'shallow_toc'})) { + last; + } + } } return () if not defined($current_element); # Create the toc entries recursively - my @toc_entries = ("

\n", "\n"); + my @toc_entries = ""; + if ($web_manual) { + @toc_entries = "\n"; + # FIXME: add link to main page, really hackily. + if ($element->{'sectionup'}) { + # it's not the top element + push (@toc_entries, "
  • Main
  • \n"); + } else { + push (@toc_entries, "
  • Main
  • \n"); + } + } else { + push (@toc_entries, "
    \n"); + push (@toc_entries, "\n"); + } my $children = $current_element->{'section_childs'}; foreach ( @$children ) { - push (@toc_entries, generate_ly_toc_entries($_, \%parentelements, $page_toc_depth)); + push (@toc_entries, generate_ly_toc_entries($_, \%parentelements, $page_toc_depth, 0)); } + # search box + local $/=undef; + my $name = "search-box"; + $lang = $Texi2HTML::THISDOC{current_lang}; + open FILE, "$ENV{TOP_SRC_DIR}/Documentation/$lang/$name.ihtml" or + open FILE, "$ENV{TOP_SRC_DIR}/Documentation/$name.ihtml" or + die "no such file: $name.ihtml: $!"; + my $search_string = ; + $search_string = "
  • \n" . $search_string . "
  • \n"; + push (@toc_entries, $search_string); + close FILE; + push (@toc_entries, "\n"); - push (@toc_entries, "
    \n"); + if ($web_manual) { + push (@toc_entries, "\n"); + } else { + push (@toc_entries, "
    \n"); + } return @toc_entries; } @@ -665,13 +1068,13 @@ sub lilypond_print_toc_div ($$) # use default TOC if no custom lines have been generated @lines = @default_toc if (not @lines); if (@lines) { - + print $fh "\n\n
    \n"; - + # Remove the leading "GNU LilyPond --- " from the manual title my $topname = $Texi2HTML::NAME{'Top'}; $topname =~ s/^GNU LilyPond(:| &[mn]dash;) //; - + # construct the top-level Docs index (relative path and including language!) my $lang = $Texi2HTML::THISDOC{current_lang}; if ($lang and $lang ne "en") { @@ -681,18 +1084,21 @@ sub lilypond_print_toc_div ($$) } my $reldir = ""; $reldir = "../" if ($Texi2HTML::Config::SPLIT eq 'section'); - my $uplink = $reldir."Manuals.${lang}html"; + my $uplink = $reldir."web/manuals.${lang}html"; - print $fh "

    << " . &ly_get_string ('Back to Documentation Index') . "

    \n"; - print $fh '

    ' . &$anchor('', + print $fh '

    ' . &$anchor('', $Texi2HTML::HREF{'Top'}, $topname, 'title="Start of the manual"' ) . "

    \n"; + } + foreach my $line (@lines) { print $fh $line; } @@ -744,6 +1150,24 @@ sub print_lilypond_page_foot($) # print $fh "

    $program_string
    $PRE_BODY_CLOSE

    \n"; print $fh "\n\n"; print $fh "\n
    \n\n"; + if ($web_manual) { + # 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"; + # FIXME: inlined text substitution, move to ly_get_string as soon as another case is needed + my $webdev_link = "webdev.nl"; + my $lily_site = "lilypond.org"; + my $hosting_thanks = &ly_get_string ('

    Thanks to ${webdev_link} for hosting ${lily_site}.'); + # this does the variable substitution ("quoting" in Perlish) after the localization + $hosting_thanks =~ s/(\$\{\w+\})/$1/eeg; + print $fh $hosting_thanks . "\n"; + print $fh "\n"; + print $fh "\"Valid

    \n"; + print $fh "
    "; + } # Print the TOC frame and reset the TOC: lilypond_print_toc_div ($fh, \@this_page_toc); @@ -822,7 +1246,7 @@ sub lilypond_print_navigation my $text = $button->[1]; my $button_href = $button->[0]; # verify that $button_href is simple text and text is a reference - if (defined($button_href) and !ref($button_href) + if (defined($button_href) and !ref($button_href) and defined($text) and (ref($text) eq 'SCALAR') and defined($$text)) { # use given text if ($Texi2HTML::HREF{$button_href}) @@ -851,7 +1275,7 @@ sub lilypond_print_navigation } elsif ($button eq ' ') { # handle space button - $result .= + $result .= ($ICONS && $ACTIVE_ICONS{' '}) ? &$button_icon_img($BUTTONS_NAME{$button}, $ACTIVE_ICONS{' '}) : $NAVIGATION_TEXT{' '}; @@ -882,7 +1306,7 @@ sub lilypond_print_navigation } else { # use text - $result .= + $result .= '[' . &$anchor('', $Texi2HTML::HREF{$button}, @@ -894,7 +1318,7 @@ sub lilypond_print_navigation } else { # button is passive - $result .= + $result .= $ICONS && $PASSIVE_ICONS{$button} ? &$button_icon_img($BUTTONS_NAME{$button}, $PASSIVE_ICONS{$button}, @@ -908,7 +1332,11 @@ sub lilypond_print_navigation $result .= "" unless $beginofline; $result .= "" unless $vertical; $result .= "\n"; - return $result; + if ($web_manual) { + return "\n"; + } else { + return $result; + } } @@ -1083,7 +1511,8 @@ sub makeinfo_like_paragraph ($$$$$$$$$$$$$) ############################################################################# # For split pages, use index.html as start page! -if ($Texi2HTML::Config::SPLIT eq 'section') { +if ($Texi2HTML::Config::SPLIT eq 'section' or + $Texi2HTML::Config::SPLIT eq 'node') { $Texi2HTML::Config::TOP_FILE = 'index.html'; }