]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/lilypond-texi2html.init
Fix 1323 - links "Back to documentation index" in HTML docs
[lilypond.git] / Documentation / lilypond-texi2html.init
index 6fcaafc5f43e8f95f9e06fd6528ee4a8c57efa53..57340912510302b52f96a6ee8a2c9953bb262cd2 100644 (file)
@@ -583,9 +583,14 @@ $Texi2HTML::Config::USE_REL_REV   = 1;
 $Texi2HTML::Config::SPLIT_INDEX   = 0;
 $Texi2HTML::Config::SEPARATED_FOOTNOTES = 0; # Print footnotes on same page, not separated
 
+my $bigpage = 0;
+my $have_index_entries = 0;
 if ($Texi2HTML::Config::SPLIT eq 'section' or
     $Texi2HTML::Config::SPLIT eq 'node') {
   $Texi2HTML::Config::element_file_name    = \&lilypond_element_file_name;
+  $bigpage = 0;
+} else {
+  $bigpage = 1;
 }
 
 $Texi2HTML::Config::anchor  = \&lilypond_anchor;
@@ -789,10 +794,25 @@ sub lilypond_css_lines ($$)
     $Texi2HTML::THISDOC{'CSS_LINES'} .=
        "<link rel=\"alternate stylesheet\" type=\"text/css\" href=\"$ref->{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'} .=
-      "<!--[if lte IE 7]>\n<link href=\"lilypond-ie-fixes.css\" rel=\"stylesheet\" type=\"text/css\">\n<![endif]-->\n";
+
+  # The ie-fixes stylesheet is needed for the docs, but not the website.
+  if (not ($web_manual)) {
+    $Texi2HTML::THISDOC{'CSS_LINES'} .=
+       "<!--[if lte IE 7]>\n<link href=\"lilypond-ie-fixes.css\" rel=\"stylesheet\" type=\"text/css\">\n<![endif]-->\n";
+  }
+
+  if ($ENV{'AJAX_SEARCH'} == 1) {
+    # Add the JavaScript file only if we have an index.
+    # Unfortunately, init_out is called after css_lines, so as a workaround
+    # here we have to check again for the existence of an index...
+    my $ix = main::get_index ("cp");
+    $have_index_entries = (scalar $ix > 0);
+    my $reldir = "";
+    $reldir = "../" unless $bigpage;
+    if ($have_index_entries) {
+      $Texi2HTML::THISDOC{'CSS_LINES'} .= "<script language=\"JavaScript\" src=\"${reldir}lily_search.js\"></script>\n";
+    }
+  }
 }
 
 
@@ -1308,16 +1328,19 @@ sub lilypond_generate_page_toc_body($)
       push (@toc_entries, generate_ly_toc_entries($_, \%parentelements, $page_toc_depth, 0, $element));
     }
     # search box
-    local $/=undef;
-    my $name = "search-box";
-    $lang = $Texi2HTML::THISDOC{current_lang};
-    open FILE, "$ENV{TOP_SRC_DIR}/Documentation/$lang/$name.ihtml" or
+    #  I'm assuming that we wouldn't keep the google search box? -gp
+    if (!($ENV{AJAX_SEARCH} == 1)) {
+      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 = decode ('UTF-8', <FILE>);
-    $search_string = "<li>\n" . $search_string . "</li>\n";
-    push (@toc_entries, $search_string);
-    close FILE;
+      my $search_string = decode ('UTF-8', <FILE>);
+      $search_string = "<li>\n" . $search_string . "</li>\n";
+      push (@toc_entries, $search_string);
+      close FILE;
+    }
 
     push (@toc_entries, "</ul>\n");
     if ($web_manual) {
@@ -1351,7 +1374,15 @@ sub lilypond_print_toc_div ($$)
       $lang = "";
     }
     my $reldir = $ENV{DEPTH};
-    my $uplink = $reldir."/Documentation/web/manuals.${lang}html";
+    # strip one depth level for translations
+    if ($lang and $lang ne "en" and substr ($reldir, 0, 3) eq '../') {
+       $reldir = substr ($reldir, 3);
+    }
+    # add a / at the end if there isn't one.
+    if (substr ($reldir, -1) ne '/') {
+        $reldir .= '/';
+    }
+    my $uplink = $reldir."Documentation/web/manuals.${lang}html";
 
     if (not $web_manual) {
       print $fh "<p class=\"toc_uplink\"><a href=\"$uplink\"
@@ -1359,6 +1390,16 @@ sub lilypond_print_toc_div ($$)
         &ly_get_string ('Back to Documentation Index') .
         "</a></p>\n";
 
+      # AJAX search box, written in JavaScript
+      if ($ENV{'AJAX_SEARCH'} == 1) {
+        if ($have_index_entries) {
+          my ($docu_dir, $docu_name) = split_texi_filename ($Texi2HTML::THISDOC{'input_file_name'});
+          print $fh '<script language="JavaScript">print_search_field ("' .
+             $Texi2HTML::THISDOC{current_lang} . '", "' . 
+             $docu_name . "\", " . $bigpage . ")</script>\n";
+        }
+      }
+
       print $fh '<h4 class="toc_header"> ' . &$anchor('',
                                     $Texi2HTML::HREF{'Top'},
                                     $topname,
@@ -1781,6 +1822,65 @@ sub makeinfo_like_paragraph ($$$$$$$$$$$$$)
 }
 
 
+#############################################################################
+###  WRITING OUT THE INDEX FOR THE AJAX SEARCH FIELD
+#############################################################################
+
+$Texi2HTML::Config::IDX_SUMMARY   = 1;
+$Texi2HTML::Config::init_out                  = \&lilypond_init_out;
+$Texi2HTML::Config::finish_out                = \&lilypond_finish_out;
+$Texi2HTML::Config::index_summary_file_entry  = \&lilypond_index_summary_file_entry;
+
+my @index_entries;
+
+sub lilypond_init_out ()
+{
+  t2h_default_init_out ();
+  # Check whether we have an index at all! If not -> don't print out a search box!
+  my $ix = main::get_index ("cp");
+  $have_index_entries = (scalar $ix > 0);
+}
+
+sub lilypond_index_summary_file_entry ($$$$$$$$$)
+{
+  my $index_name = shift;
+  my $entry_text = shift;
+  my $entry_reference = shift;
+  my $formatted_entry = shift;
+  my $texi_entry = shift;
+  my $entry_element_reference = shift;
+  my $entry_element_header = shift;
+  my $is_printed = shift;
+  my $manual_name = shift;
+
+  if ($ENV{'AJAX_SEARCH'}==1) {
+    if ($index_name eq "cp")
+    {
+      # The entries in the index file have the form:
+      # SearchText \t FormattedText \t EntryURL \t SectionText \t SectionURL
+      push @index_entries, "$entry_text\t$formatted_entry\t$entry_reference\t$entry_element_header\t$entry_element_reference\n";
+    }
+  }
+}
+
+sub lilypond_finish_out ()
+{
+  if ($ENV{'AJAX_SEARCH'}==1) {
+    if (((scalar @index_entries) > 0) and $have_index_entries) {
+      my $lang = $Texi2HTML::THISDOC{current_lang};
+      my $big = "";
+      $big = "-big-page" if $bigpage;
+      my ($docu_dir, $docu_name) = split_texi_filename ($Texi2HTML::THISDOC{'input_file_name'});
+      my $idx_file = "$docu_dir/$docu_name$big.$lang.idx";
+      open IDXOUTFILE, ">:utf8", $idx_file;
+      print IDXOUTFILE @index_entries;
+      close IDXOUTFILE;
+    }
+  }
+}
+
+
+
 #############################################################################
 ###  OTHER SETTINGS
 #############################################################################