texinfo-commits
[Top][All Lists]
Advanced

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

texinfo/tp/Texinfo/Convert HTML.pm


From: Patrice Dumas
Subject: texinfo/tp/Texinfo/Convert HTML.pm
Date: Wed, 19 Oct 2011 19:49:26 +0000

CVSROOT:        /sources/texinfo
Module name:    texinfo
Changes by:     Patrice Dumas <pertusus>        11/10/19 19:49:26

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

Log message:
        Handle frames.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Convert/HTML.pm?cvsroot=texinfo&r1=1.187&r2=1.188

Patches:
Index: HTML.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Convert/HTML.pm,v
retrieving revision 1.187
retrieving revision 1.188
diff -u -b -r1.187 -r1.188
--- HTML.pm     16 Oct 2011 22:37:09 -0000      1.187
+++ HTML.pm     19 Oct 2011 19:49:26 -0000      1.188
@@ -910,10 +910,15 @@
                               'Contents' => '_toc',
                               'Overview' => '_ovr',
                               'Footnotes' => '_fot',
-                              'About' => '_abt'
+                              'About' => '_abt',
+                            },
+  'frame_pages_file_string' => {
+                              'Frame' => '_frame',
+                              'Toc_Frame' => '_toc_frame',
                               },
   'misc_elements_order'  => ['Footnotes', 'Contents', 'Overview', 'About'],
   'DOCTYPE'              => '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd";>',
+  'FRAMESET_DOCTYPE'     => '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 
Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd";>',
   'DEFAULT_RULE'         => '<hr>',
   'BIG_RULE'             => '<hr>',
   'MENU_SYMBOL'          => '&bull;',
@@ -4196,6 +4201,7 @@
      'button_icon_img' => \&_default_button_icon_img, 
      'external_href' => \&_default_external_href, 
      'contents' => \&_default_contents,
+     'frame_files' => \&_default_frame_files,
 );
 
 sub _use_entity_is_entity($$)
@@ -5141,6 +5147,31 @@
                                      };
     $self->{'ids'}->{$id} = $element;
   }
+  if ($self->get_conf('FRAMES')) {
+    foreach my $type (keys(%{$self->{'frame_pages_file_string'}})) {
+      my $default_filename;
+      $default_filename = $self->{'document_name'}.
+        $self->{'frame_pages_file_string'}->{$type};
+      $default_filename .= '.'.$extension if (defined($extension));
+
+      my $element = {'type' => 'element',
+                   'extra' => {'special_element' => $type,
+                               }};
+
+      # only the filename is used
+      my ($target, $id, $filename);
+      if (defined($Texinfo::Config::special_element_target_file_name)) {
+      ($target, $id, $filename) 
+                 = &$Texinfo::Config::special_element_target_file_name(
+                                                            $self,
+                                                            $element,
+                                                            $target, $id,
+                                                            $default_filename);
+      }
+      $filename = $default_filename if (!defined($filename));
+      $self->{'frame_pages_filenames'}->{$type} = $filename;
+    }
+  }
   return $special_elements;
 }
 
@@ -5501,7 +5532,8 @@
   }
   if ($self->{'global_target_elements'}->{$direction}) {
     $element_target = $self->{'global_target_elements'}->{$direction};
-  } elsif ($element->{'extra'} and $element->{'extra'}->{'directions'}
+  } elsif ($element and $element->{'extra'} 
+      and $element->{'extra'}->{'directions'}
       and $element->{'extra'}->{'directions'}->{$direction}) {
     $element_target
       = $element->{'extra'}->{'directions'}->{$direction};
@@ -5800,23 +5832,12 @@
           $program);
 }
 
-sub _default_begin_file($$$)
+sub _get_links ($$$)
 {
   my $self = shift;
   my $filename = shift;
   my $element = shift;
 
-  
-  my $command;
-  if ($element and $self->get_conf('SPLIT')) {
-    $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');
@@ -5827,16 +5848,36 @@
       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 $link_title = '';
+        $link_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";
+        $links .= "<link href=\"$link_href\"${rel}${link_title}>\n";
+      }
       }
     }
+  return $links;
+}
+
+sub _default_begin_file($$$)
+{
+  my $self = shift;
+  my $filename = shift;
+  my $element = shift;
+  
+  my $command;
+  if ($element and $self->get_conf('SPLIT')) {
+    $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 = $self->_get_links ($filename, $element);
+
   # 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.
@@ -5902,8 +5943,7 @@
 <p>$string</p>
 </body>
 ";
-
-  
+  return $result;
 }
 
 sub _default_footnotes_text($)
@@ -6041,6 +6081,65 @@
   }
 }
 
+sub _default_frame_files($)
+{
+  my $self = shift;
+
+  my $frame_file = $self->{'frame_pages_filenames'}->{'Frame'};
+  my $frame_outfile;
+  if (defined($self->{'destination_directory'})) {
+    $frame_outfile = $self->{'destination_directory'} . $frame_file;
+  } else {
+    $frame_outfile = $frame_file;
+  }
+  
+  my $toc_frame_file = $self->{'frame_pages_filenames'}->{'Toc_Frame'};
+  my $toc_frame_outfile;
+  if (defined($self->{'destination_directory'})) {
+    $toc_frame_outfile = $self->{'destination_directory'} . $toc_frame_file;
+  } else {
+    $toc_frame_outfile = $toc_frame_file;
+  }
+  
+  my $frame_fh = $self->Texinfo::Common::open_out ($frame_outfile,
+                                             $self->{'perl_encoding'});
+  if (defined($frame_fh)) {
+    my $doctype = $self->get_conf('FRAMESET_DOCTYPE');
+    my $top_file = '';
+    if ($self->global_element('Top')) {
+      my $top_element = $self->global_element('Top');
+      $top_file = $top_element->{'filename'};
+    }
+    my $title = $self->{'title_string'};
+    print $frame_fh <<EOT;
+$doctype
+<html>
+<head><title>$title</title></head>
+<frameset cols="140,*">
+  <frame name="toc" src="$toc_frame_file">
+  <frame name="main" src="$top_file">
+</frameset>
+</html>
+EOT
+
+  }
+
+  my $toc_frame_fh = $self->Texinfo::Common::open_out ($toc_frame_outfile,
+                                            $self->{'perl_encoding'});
+  if (defined($toc_frame_fh)) {
+
+    my $header = &{$self->{'format_begin_file'}}($self, $toc_frame_file, 
undef);
+    print $toc_frame_fh $header;
+    print $toc_frame_fh '<h2>Content</h2>'."\n";
+    my $shortcontents = 
+      &{$self->{'format_contents'}}($self, 'shortcontents', undef);
+    $shortcontents =~ s/\bhref=/target="main" href=/g;
+    print $toc_frame_fh $shortcontents;
+    print $toc_frame_fh "</body></html>\n";
+
+  }
+}
+
 sub convert($$)
 {
   my $self = shift;
@@ -6155,6 +6254,7 @@
            or $self->get_conf('OUTFILE') eq '')) {
     $self->force_conf('SPLIT', 0);
     $self->force_conf('MONOLITHIC', 1);
+    $self->force_conf('FRAMES', 0);
   }
   if ($self->get_conf('SPLIT')) {
     $self->set_conf('NODE_FILES', 1);
@@ -6162,6 +6262,9 @@
   if ($self->get_conf('NODE_FILES') or $self->get_conf('SPLIT') eq 'node') {
     $self->set_conf('NODE_FILENAMES', 1);
   }
+  if ($self->get_conf('FRAMES')) {
+    $self->set_conf('shortcontents', 1);
+  }
   $self->set_conf('EXTERNAL_CROSSREF_SPLIT', $self->get_conf('SPLIT'));
 
   $self->run_stage_handlers('setup');
@@ -6308,6 +6411,10 @@
 
   $self->run_stage_handlers('init');
 
+  if ($self->get_conf('FRAMES')) {
+    &{$self->{'format_frame_files'}}($self);
+  }
+
   # Now do the output
   my $fh;
   my $output = '';



reply via email to

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