texinfo-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

texinfo/tp TODO Texinfo/Convert/HTML.pm


From: Patrice Dumas
Subject: texinfo/tp TODO Texinfo/Convert/HTML.pm
Date: Sun, 05 Jun 2011 10:01:35 +0000

CVSROOT:        /sources/texinfo
Module name:    texinfo
Changes by:     Patrice Dumas <pertusus>        11/06/05 10:01:35

Modified files:
        tp             : TODO 
        tp/Texinfo/Convert: HTML.pm 

Log message:
        Simplify a bit file beginning code.
        
        Do node redirection pages.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/TODO?cvsroot=texinfo&r1=1.133&r2=1.134
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Convert/HTML.pm?cvsroot=texinfo&r1=1.82&r2=1.83

Patches:
Index: TODO
===================================================================
RCS file: /sources/texinfo/texinfo/tp/TODO,v
retrieving revision 1.133
retrieving revision 1.134
diff -u -b -r1.133 -r1.134
--- TODO        4 Jun 2011 20:35:10 -0000       1.133
+++ TODO        5 Jun 2011 10:01:35 -0000       1.134
@@ -1,4 +1,6 @@
-Thre should be an error message (report by Tom Tromey) in 
+remove _*directions('This' and replace with new API.
+
+There should be an error message (report by Tom Tromey) in 
 t/results/xtable/text_between_item_itemx.pl
 
 Verify that there is a test with a node both internal and external 

Index: Texinfo/Convert/HTML.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Convert/HTML.pm,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -b -r1.82 -r1.83
--- Texinfo/Convert/HTML.pm     5 Jun 2011 00:15:52 -0000       1.82
+++ Texinfo/Convert/HTML.pm     5 Jun 2011 10:01:35 -0000       1.83
@@ -292,7 +292,11 @@
   my $element = shift;
 
   if ($element and $element->{'extra'}) {
+    if ($element->{'extra'}->{'element_command'}) {
     return $element->{'extra'}->{'element_command'};
+    } elsif ($element->{'extra'}->{'special_element'}) {
+      return $element;
+    }
   }
   return undef;
 }
@@ -3608,6 +3612,8 @@
      ['comment', \&_default_comment, $Texinfo::Config::comment],
      ['css_lines', \&_default_css_lines, $Texinfo::Config::css_lines],
      ['begin_file', \&_default_begin_file, $Texinfo::Config::begin_file],
+     ['node_redirection_page', \&_default_node_redirection_page, 
+                               $Texinfo::Config::node_redirection_page],
      ['end_file', \&_default_end_file, $Texinfo::Config::end_file],
      ['special_element_body', \&_default_special_element_body, 
                               $Texinfo::Config::special_element_body],
@@ -4139,9 +4145,9 @@
   
     # first determine the top node file name.
     if ($self->get_conf('NODE_FILENAMES') and $node_top) {
-      if (defined($self->get_conf('TOP_NODE_FILE'))) {
         my ($node_top_page) = $self->_get_page($node_top);
         die "BUG: No page for top node" if (!defined($node_top));
+      if (defined($self->get_conf('TOP_NODE_FILE'))) {
         my $filename = $self->get_conf('TOP_NODE_FILE');
         $filename .= '.'.$self->get_conf('NODE_FILE_EXTENSION') 
           if (defined($self->get_conf('NODE_FILE_EXTENSION')) 
@@ -4849,26 +4855,23 @@
 ";
 }
 
-sub _default_begin_file($$$)
+# This is in order to avoid code duplication with other file headers
+sub _file_header_informations($$)
 {
   my $self = shift;
-  my $filename = shift;
-  my $page = shift;
-
+  my $command = shift;
   
   my $title;
-  if ($page and $page->{'extra'} and $page->{'extra'}->{'element'}) {
-    my $element_string = 
$self->_element_direction($page->{'extra'}->{'element'},
-                              'This', 'string');
-    if (defined($element_string) 
-        and $element_string ne $self->{'title_string'}) {
+  if ($command) {
+    my $command_string = 
+      $self->command_text($command, 'string');
+    if (defined($command_string) 
+        and $command_string ne $self->{'title_string'}) {
       print STDERR "DO <title>\n"
         if ($self->get_conf('DEBUG'));
       my $title_tree = $self->gdt('{title}: {element_text}', 
                                  { 'title' => $self->{'title_tree'}, 
-                   'element_text' => 
-                     $self->_element_direction($page->{'extra'}->{'element'},
-                                              'This', 'tree')});
+                   'element_text' => $self->command_text($command, 'tree')});
       $title = $self->_convert({'type' => '_string',
                                 'contents' => [$title_tree]});
     }
@@ -4899,25 +4902,6 @@
     $date = "\n<meta name=\"date\" content=\"$today\">";
   }
 
-  my $links = '';
-  if ($self->get_conf('USE_LINKS')) {
-    my $link_buttons = $self->get_conf('LINKS_BUTTONS');
-    foreach my $link (@$link_buttons) {
-      my $link_href = $self->_element_direction($page->{'extra'}->{'element'},
-                                          $link, 'href', $page->{'filename'});
-      #print STDERR "$title: $link -> $link_href \n";
-      if ($link_href and $link_href ne '') {
-        my $link_string = 
$self->_element_direction($page->{'extra'}->{'element'},
-                                          $link, 'string');
-        my $title = '';
-        $title = " title=\"$link_string\"" if (defined($link_string));
-        my $rel = '';
-        $rel = " rel=\"".$self->get_conf('BUTTONS_REL')->{$link}.'"' 
-           if (defined($self->get_conf('BUTTONS_REL')->{$link}));
-        $links .= "<link href=\"$link_href\"${rel}${title}>\n";
-      }
-    }
-  }
   my $css_lines;
   if (defined($self->get_conf('CSS_LINES'))) {
     $css_lines = $self->get_conf('CSS_LINES');
@@ -4939,6 +4923,49 @@
   my $program_homepage = $self->get_conf('PROGRAM_HOMEPAGE');
   my $program = $self->get_conf('PROGRAM');
 
+  return ($title, $description, $encoding, $date, $css_lines, 
+          $doctype, $bodytext, $copying_comment, $after_body_open,
+          $extra_head, $program_and_version, $program_homepage,
+          $program);
+}
+
+sub _default_begin_file($$$)
+{
+  my $self = shift;
+  my $filename = shift;
+  my $element = shift;
+
+  
+  my $command;
+  if ($element) { 
+    $command = $self->element_command($element);
+  }
+
+  my ($title, $description, $encoding, $date, $css_lines, 
+          $doctype, $bodytext, $copying_comment, $after_body_open,
+          $extra_head, $program_and_version, $program_homepage,
+          $program) = $self->_file_header_informations($command);
+
+  my $links = '';
+  if ($self->get_conf('USE_LINKS')) {
+    my $link_buttons = $self->get_conf('LINKS_BUTTONS');
+    foreach my $link (@$link_buttons) {
+      my $link_href = $self->_element_direction($element,
+                                          $link, 'href', $filename);
+      #print STDERR "$title: $link -> $link_href \n";
+      if ($link_href and $link_href ne '') {
+        my $link_string = $self->_element_direction($element,
+                                          $link, 'string');
+        my $title = '';
+        $title = " title=\"$link_string\"" if (defined($link_string));
+        my $rel = '';
+        $rel = " rel=\"".$self->get_conf('BUTTONS_REL')->{$link}.'"' 
+           if (defined($self->get_conf('BUTTONS_REL')->{$link}));
+        $links .= "<link href=\"$link_href\"${rel}${title}>\n";
+      }
+    }
+  }
+
   # FIXME there is one empty line less than in texi2html.  Seems that in 
   # texi2html the following empty lines are stripped.  Not exactly sure
   # how, but it seems that some blank lines are removed before first element.
@@ -4974,6 +5001,49 @@
   return $self->convert_tree($self->gdt($text));
 }
 
+sub _default_node_redirection_page($$)
+{
+  my $self = shift;
+  my $command = shift;
+
+  my ($title, $description, $encoding, $date, $css_lines,
+          $doctype, $bodytext, $copying_comment, $after_body_open,
+          $extra_head, $program_and_version, $program_homepage,
+          $program) = $self->_file_header_informations($command);
+
+  my $name = $self->command_text($command);
+  my $href = $self->command_href($command);
+  my $direction = "<a href=\"$href\">$name</a>";
+  my $string = $self->convert_tree (
+    $self->gdt('The node you are looking for is at {href}.',
+      { 'href' => {'type' => '_converted', 'text' => $direction }}));
+  my $result = "$doctype
+<html>
+$copying_comment<!-- Created by $program_and_version, $program_homepage -->
+<!-- This file redirects to the location of a node or anchor -->
+<head>
+<title>$title</title>
+
+$description
+<meta name=\"keywords\" content=\"$title\">
+<meta name=\"resource-type\" content=\"document\">
+<meta name=\"distribution\" content=\"global\">
+<meta name=\"Generator\" content=\"$program\">$date
+$encoding
+$css_lines
+<meta http-equiv=\"Refresh\" content=\"2; url=$href\">
+$extra_head
+</head>
+
+<body $bodytext>
+$after_body_open
+<p>$string</p>
+</body>
+";
+
+  
+}
+
 sub _default_footnotes_text($)
 {
   my $self = shift;
@@ -5347,7 +5417,9 @@
           return undef;
         }
         $self->{'current_filename'} = $page->{'filename'};
-        print $file_fh "".&{$self->{'begin_file'}}($self, $page->{'filename'}, 
$page);
+        print $file_fh "".&{$self->{'begin_file'}}($self, 
+                                           $page->{'filename'}, 
+                                           $page->{'extra'}->{'element'});
         $files{$page->{'filename'}}->{'fh'} = $file_fh;
       } else {
         $file_fh = $files{$page->{'filename'}}->{'fh'};
@@ -5363,6 +5435,48 @@
       }
     }
   }
+
+  $self->{'current_filename'} = undef;
+  if ($self->get_conf('NODE_FILES') 
+      and $self->{'labels'} and $self->get_conf('OUTFILE') ne '') {
+    foreach my $label (keys (%{$self->{'labels'}})) {
+      my $node = $self->{'labels'}->{$label};
+      my $target = $self->_get_target($node);
+      my $filename = $self->command_filename($node);
+      my $node_filename;
+      if ($node->{'extra'}->{'normalized'} eq 'Top' 
+          and defined($self->get_conf('TOP_NODE_FILE_TARGET'))) {
+        my $extension = '';
+        $extension = "." . $self->get_conf('NODE_FILE_EXTENSION')
+            if (defined($self->get_conf('NODE_FILE_EXTENSION')) 
+              and $self->get_conf('NODE_FILE_EXTENSION') ne '');
+        $node_filename = $self->get_conf('TOP_NODE_FILE_TARGET')
+                     .$extension;
+      } else {
+        $node_filename = $target->{'node_filename'};
+      }
+      if ($node_filename ne $filename) {
+        my $redirection_page 
+          = &{$self->{'node_redirection_page'}}($self, $node);
+        my $out_filename;
+        if (defined($self->{'destination_directory'})) {
+          $out_filename = $self->{'destination_directory'} 
+               .$target->{'node_filename'};
+        } else {
+          $out_filename = $target->{'node_filename'};
+        }
+        my $file_fh = $self->Texinfo::Common::open_out ($out_filename,
+                                                 $self->{'perl_encoding'});
+        if (!$file_fh) {
+         $self->document_error(sprintf($self->__("Could not open %s for 
writing: %s"),
+                                    $out_filename, $!));
+        } else {
+          print $file_fh $redirection_page;
+          close ($file_fh);
+        }
+      }
+    }
+  }
 }
 
 sub attribute_class($$$)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]