texinfo-commits
[Top][All Lists]
Advanced

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

[5436] * tp/Texinfo/Convert/Converter.pm (_id_to_filename,


From: Patrice Dumas
Subject: [5436] * tp/Texinfo/Convert/Converter.pm (_id_to_filename,
Date: Mon, 07 Apr 2014 22:40:10 +0000

Revision: 5436
          http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=5436
Author:   pertusus
Date:     2014-04-07 22:40:07 +0000 (Mon, 07 Apr 2014)
Log Message:
-----------
        * tp/Texinfo/Convert/Converter.pm (_id_to_filename, 
        _sectioning_command_normalized_filename, _node_filename,
        _set_element_file, _top_node_filename, _get_element, 
        _set_pages_files, output),
        * tp/Texinfo/Convert/HTML.pm: move generic functions to Converter.pm 
        and modify default output() to follow the same rules as HTML.pm 
        for splitting.
        * tp/Texinfo/Convert/Plaintext.pm (_convert_node):
        rename function as _convert_element.
        (convert_tree): add to be able to work with Converter.pm output().
        * tp/Texinfo/Convert/Plaintext.pm, 
        tp/Texinfo/Convert/Info.pm, tp/texi2any.pl: use default
        output() from Converter.pm for plaintext.  Share less defaults
        with Info.pm.  Allow splitting plaintext.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/tp/Texinfo/Convert/Converter.pm
    trunk/tp/Texinfo/Convert/HTML.pm
    trunk/tp/Texinfo/Convert/Info.pm
    trunk/tp/Texinfo/Convert/Plaintext.pm
    trunk/tp/texi2any.pl

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog     2014-04-07 20:28:47 UTC (rev 5435)
+++ trunk/ChangeLog     2014-04-07 22:40:07 UTC (rev 5436)
@@ -1,3 +1,20 @@
+2014-04-08  Patrice Dumas  <address@hidden>
+
+       * tp/Texinfo/Convert/Converter.pm (_id_to_filename, 
+       _sectioning_command_normalized_filename, _node_filename,
+       _set_element_file, _top_node_filename, _get_element, 
+       _set_pages_files, output),
+       * tp/Texinfo/Convert/HTML.pm: move generic functions to Converter.pm 
+       and modify default output() to follow the same rules as HTML.pm 
+       for splitting.
+       * tp/Texinfo/Convert/Plaintext.pm (_convert_node):
+       rename function as _convert_element.
+       (convert_tree): add to be able to work with Converter.pm output().
+       * tp/Texinfo/Convert/Plaintext.pm, 
+       tp/Texinfo/Convert/Info.pm, tp/texi2any.pl: use default
+       output() from Converter.pm for plaintext.  Share less defaults
+       with Info.pm.  Allow splitting plaintext.
+
 2014-04-07  Gavin Smith  <address@hidden>
 
        * info/infodoc.c (dump_map_to_message_buffer): Check if

Modified: trunk/tp/Texinfo/Convert/Converter.pm
===================================================================
--- trunk/tp/Texinfo/Convert/Converter.pm       2014-04-07 20:28:47 UTC (rev 
5435)
+++ trunk/tp/Texinfo/Convert/Converter.pm       2014-04-07 22:40:07 UTC (rev 
5436)
@@ -533,6 +533,384 @@
   $self->{'output_file'} = $outfile;
 }
 
+sub _id_to_filename($$)
+{
+  my $self = shift;
+  my $id = shift;
+  return substr($id, 0, $self->get_conf('BASEFILENAME_LENGTH'));
+}
+
+sub _sectioning_command_normalized_filename($$)
+{
+  my $self = shift;
+  my $command = shift;
+  my $no_unidecode;
+
+  $no_unidecode = 1 if (defined($self->get_conf('USE_UNIDECODE')) 
+                        and !$self->get_conf('USE_UNIDECODE'));
+
+  my $normalized_name = 
Texinfo::Convert::NodeNameNormalization::transliterate_texinfo(
+       {'contents' => $command->{'extra'}->{'misc_content'}},
+                $no_unidecode);
+
+  my $filename = $self->_id_to_filename($normalized_name);
+  $filename .= '.'.$self->get_conf('EXTENSION') 
+    if (defined($self->get_conf('EXTENSION')) 
+      and $self->get_conf('EXTENSION') ne '');
+  return ($normalized_name, $filename);
+}
+
+sub _node_filename($$)
+{
+  my $self = shift;
+  my $node_info = shift;
+
+  my $no_unidecode;
+  $no_unidecode = 1 if (defined($self->get_conf('USE_UNIDECODE'))
+                        and !$self->get_conf('USE_UNIDECODE'));
+
+  my $filename;
+  if (defined($node_info->{'normalized'})) { 
+    if ($self->get_conf('TRANSLITERATE_FILE_NAMES')) {
+      $filename = 
Texinfo::Convert::NodeNameNormalization::transliterate_texinfo(
+       {'contents' => $node_info->{'node_content'}},
+            $no_unidecode);
+    } else {
+      $filename = $node_info->{'normalized'};
+    }
+  } else {
+    $filename = '';
+  }
+  $filename = $self->_id_to_filename($filename);
+  return $filename;
+}
+
+sub _set_element_file($$$)
+{
+  my $self = shift;
+  my $element = shift;
+  my $filename = shift;
+
+  if (!defined($filename)) {
+    cluck("_set_element_file: filename not defined\n");
+  }
+  if ($self->get_conf('CASE_INSENSITIVE_FILENAMES')) {
+    if (exists($self->{'filenames'}->{lc($filename)})) {
+      if ($self->get_conf('DEBUG')) {
+        print STDERR "Reusing ".$self->{'filenames'}->{lc($filename)}
+                     ." for $filename\n";
+      }
+      $filename = $self->{'filenames'}->{lc($filename)};
+    } else {
+      $self->{'filenames'}->{lc($filename)} = $filename;
+    }
+  }
+  $element->{'filename'} = $filename;
+  if (defined($self->{'destination_directory'}) 
+      and $self->{'destination_directory'} ne '') {
+    $element->{'out_filename'} = 
+      File::Spec->catfile($self->{'destination_directory'}, $filename);
+  } else {
+    $element->{'out_filename'} = $filename;
+  }
+}
+
+sub _top_node_filename($)
+{
+  my $self = shift;
+
+  my $top_node_filename;
+  if (defined($self->get_conf('TOP_FILE')) 
+      and $self->get_conf('TOP_FILE') ne '') {
+    $top_node_filename = $self->get_conf('TOP_FILE');
+  } else {
+    if (defined($self->get_conf('TOP_NODE_FILE'))) {
+      $top_node_filename = $self->get_conf('TOP_NODE_FILE');
+    } else {
+      # TOP_NODE_FILE is set in the default case.
+      # If not the manual name is used.
+      $top_node_filename = $self->{'document_name'};
+    }
+    if (defined($top_node_filename)) {
+      my $top_node_extension;
+      if ($self->get_conf('NODE_FILENAMES')) {
+        $top_node_extension = $self->get_conf('NODE_FILE_EXTENSION');
+      } else {
+        $top_node_extension = $self->get_conf('EXTENSION');
+      }
+      $top_node_filename .= '.'.$top_node_extension 
+        if (defined($top_node_extension) and $top_node_extension ne '');
+    }
+  }
+  return $top_node_filename;
+}
+
+sub _get_element($$)
+{
+  my $self = shift;
+  my $command = shift;
+  my $find_container = shift;
+
+  my $current = $command;
+
+  while (1) {
+    if ($current->{'type'}) {
+      if ($current->{'type'} eq 'element') {
+        return $current;
+      }
+    }
+    if ($current->{'parent'}) {
+      $current = $current->{'parent'};
+    } else {
+      return undef;
+    }
+  }
+}
+
+sub _set_pages_files($$)
+{
+  my $self = shift;
+  my $elements = shift;
+
+  # Ensure that the document has pages
+  return undef if (!defined($elements) or address@hidden);
+
+  my $extension = '';
+  $extension = '.'.$self->get_conf('EXTENSION') 
+            if (defined($self->get_conf('EXTENSION')) 
+                and $self->get_conf('EXTENSION') ne '');
+
+  if (!$self->get_conf('SPLIT')) {
+    foreach my $element (@$elements) {
+      if (!defined($element->{'filename'})) {
+        $element->{'filename'} = $self->{'output_filename'};
+        $element->{'out_filename'} = $self->{'output_file'};
+      }
+    }
+  } else {
+    my $node_top;
+    #my $section_top;
+    $node_top = $self->{'labels'}->{'Top'} if ($self->{'labels'});
+    #$section_top = $self->{'extra'}->{'top'} if ($self->{'extra'});
+  
+    my $top_node_filename = $self->_top_node_filename();
+    # first determine the top node file name.
+    if ($self->get_conf('NODE_FILENAMES') and $node_top 
+        and defined($top_node_filename)) {
+      my ($node_top_element) = $self->_get_element($node_top);
+      die "BUG: No element for top node" if (!defined($node_top));
+      $self->_set_element_file($node_top_element, $top_node_filename);
+    }
+    my $file_nr = 0;
+    my $previous_page;
+    foreach my $element(@$elements) {
+      # For Top node.
+      next if (defined($element->{'filename'}));
+      if (!$element->{'extra'}->{'first_in_page'}) {
+        cluck ("No first_in_page for $element\n");
+      }
+      if (!defined($element->{'extra'}->{'first_in_page'}->{'filename'})) {
+        my $file_element = $element->{'extra'}->{'first_in_page'};
+        if ($self->get_conf('NODE_FILENAMES')) {
+          foreach my $root_command (@{$file_element->{'contents'}}) {
+            if ($root_command->{'cmdname'} 
+                and $root_command->{'cmdname'} eq 'node') {
+              my $node_filename;
+              # double node are not normalized, they are handled here
+              if (!defined($root_command->{'extra'}->{'normalized'})
+                  or 
!defined($self->{'labels'}->{$root_command->{'extra'}->{'normalized'}})) {
+                $node_filename = 'unknown_node';
+              } else {
+                $node_filename = 
$self->_node_filename($root_command->{'extra'});
+              }
+              $node_filename .= '.'.$self->get_conf('NODE_FILE_EXTENSION') 
+                if (defined($self->get_conf('NODE_FILE_EXTENSION')) 
+                 and $self->get_conf('NODE_FILE_EXTENSION') ne '');
+              $self->_set_element_file($file_element, $node_filename);
+              last;
+            }
+          }
+          if (!defined($file_element->{'filename'})) {
+            # use section to do the file name if there is no node
+            my $command = $self->element_command($file_element);
+            if ($command) {
+              if ($command->{'cmdname'} eq 'top' and !$node_top
+                  and defined($top_node_filename)) {
+                $self->_set_element_file($file_element, $top_node_filename);
+              } else {
+                my ($normalized_name, $filename) 
+                   = $self->_sectioning_command_normalized_filename($command);
+                $self->_set_element_file($file_element, $filename)
+              }
+            } else {
+              # when everything else has failed
+              if ($file_nr == 0 and !$node_top 
+                  and defined($top_node_filename)) {
+                $self->_set_element_file($file_element, $top_node_filename);
+              } else {
+                my $filename = $self->{'document_name'} . "_$file_nr";
+                $filename .= $extension;
+                $self->_set_element_file($element, $filename);
+              }
+              $file_nr++;
+            }
+          }
+        } else {
+          my $filename = $self->{'document_name'} . "_$file_nr";
+          $filename .= '.'.$self->get_conf('EXTENSION') 
+            if (defined($self->get_conf('EXTENSION')) 
+                and $self->get_conf('EXTENSION') ne '');
+          $self->_set_element_file($file_element, $filename);
+          $file_nr++;
+        }
+      }
+      $element->{'filename'} 
+         = $element->{'extra'}->{'first_in_page'}->{'filename'};
+      $element->{'out_filename'}
+         = $element->{'extra'}->{'first_in_page'}->{'out_filename'};
+    }
+  }
+
+  foreach my $element (@$elements) {
+    $self->{'file_counters'}->{$element->{'filename'}}++;
+    print STDERR "Page $element 
".Texinfo::Structuring::_print_element_command_texi($element).": 
$element->{'filename'}($self->{'file_counters'}->{$element->{'filename'}})\n"
+      if ($self->get_conf('DEBUG'));
+  }
+}
+
+sub output($$)
+{
+  my $self = shift;
+  my $root = shift;
+
+  $self->_set_outfile();
+  return undef unless $self->_create_destination_directory();
+
+  my $elements;
+
+  if (defined($self->get_conf('OUTFILE'))
+      and ($Texinfo::Common::null_device_file{$self->get_conf('OUTFILE')}
+           or $self->get_conf('OUTFILE') eq '-'
+           or $self->get_conf('OUTFILE') eq '')) {
+    $self->force_conf('SPLIT', 0);
+  }
+  if ($self->get_conf('SPLIT')) {
+    $self->set_conf('NODE_FILES', 1);
+  }
+  if ($self->get_conf('NODE_FILES') 
+      or ($self->get_conf('SPLIT') and $self->get_conf('SPLIT') eq 'node')) {
+    $self->set_conf('NODE_FILENAMES', 1);
+  }
+  if ($self->get_conf('NODE_FILENAMES') and 
defined($self->get_conf('EXTENSION'))) {
+     $self->set_conf('NODE_FILE_EXTENSION', $self->get_conf('EXTENSION'));
+  }
+
+  # do that now to have it available for formatting
+  # NOTE this calls Convert::Converter::_informative_command on all the 
+  # @informative_global commands.
+  # Thus sets among others language and encodings.
+  $self->_set_global_multiple_commands(-1);
+
+  if ($self->get_conf('USE_NODES')) {
+    $elements = Texinfo::Structuring::split_by_node($root);
+  } else {
+    $elements = Texinfo::Structuring::split_by_section($root);
+  }
+
+  Texinfo::Structuring::split_pages($elements, $self->get_conf('SPLIT'));
+
+  # determine file names associated with the different pages
+  if ($self->{'output_file'} ne '') {
+    $self->_set_pages_files($elements);
+  }
+
+  #print STDERR "$elements $elements->[0]->{'filename'}\n";
+
+  # Now do the output
+  my $fh;
+  my $output = '';
+  if (!$elements or !defined($elements->[0]->{'filename'})) {
+    # no page
+    my $outfile;
+    if ($self->{'output_file'} ne '') {
+      if ($self->get_conf('SPLIT')) {
+        $outfile = $self->_top_node_filename();
+        if (defined($self->{'destination_directory'}) 
+            and $self->{'destination_directory'} ne '') {
+          $outfile = File::Spec->catfile($self->{'destination_directory'}, 
+                                         $outfile);
+        }
+      } else {
+        $outfile = $self->{'output_file'};
+      }
+      print STDERR "DO No pages, output in $outfile\n"
+        if ($self->get_conf('DEBUG'));
+      $fh = $self->Texinfo::Common::open_out($outfile);
+      if (!$fh) {
+        $self->document_error(sprintf($self->__("could not open %s for 
writing: %s"),
+                                      $outfile, $!));
+        return undef;
+      }
+    } else {
+      print STDERR "DO No pages, string output\n"
+        if ($self->get_conf('DEBUG'));
+    }
+
+    if ($elements and @$elements) {
+      foreach my $element (@$elements) {
+        my $element_text = $self->convert_tree($element);
+        $output .= $self->_output_text($element_text, $fh);
+      }
+    } else {
+      $output .= $self->_output_text($self->convert($root), $fh);
+    }
+    # NOTE do not close STDOUT now to avoid a perl warning.
+    if ($fh and $outfile ne '-') {
+      $self->register_close_file($outfile);
+      if (!close($fh)) {
+        $self->document_error(sprintf($self->__("error on closing %s: %s"),
+                                      $outfile, $!));
+      }
+    }
+    return $output if ($self->{'output_file'} eq '');
+  } else {
+    # output with pages
+    print STDERR "DO Elements with filenames\n"
+      if ($self->get_conf('DEBUG'));
+    my %files;
+    
+    foreach my $element (@$elements) {
+      my $file_fh;
+      # open the file and output the elements
+      if (!$files{$element->{'filename'}}->{'fh'}) {
+        $file_fh = 
$self->Texinfo::Common::open_out($element->{'out_filename'});
+        if (!$file_fh) {
+          $self->document_error(sprintf($self->__("could not open %s for 
writing: %s"),
+                                    $element->{'out_filename'}, $!));
+          return undef;
+        }
+        $files{$element->{'filename'}}->{'fh'} = $file_fh;
+      } else {
+        $file_fh = $files{$element->{'filename'}}->{'fh'};
+      }
+      my $element_text = $self->convert_tree($element);
+      print $file_fh $element_text;
+      $self->{'file_counters'}->{$element->{'filename'}}--;
+      if ($self->{'file_counters'}->{$element->{'filename'}} == 0) {
+        # NOTE do not close STDOUT here to avoid a perl warning
+        if ($element->{'out_filename'} ne '-') {
+          $self->register_close_file($element->{'out_filename'});
+          if (!close($file_fh)) {
+            $self->document_error(sprintf($self->__("error on closing %s: %s"),
+                                  $element->{'out_filename'}, $!));
+            return undef;
+          }
+        }
+      }
+    }
+  }
+}
+
 sub _bug_message($$;$)
 {
   my $self = shift;
@@ -806,7 +1184,7 @@
 }
 
 # generic output method
-sub output($$)
+sub output_no_split($$)
 {
   my $self = shift;
   my $root = shift;
@@ -1259,7 +1637,7 @@
   sub convert_tree($$) {
     ...
   }
-  sub output ($$) {
+  sub output($$) {
     ...
   }
 

Modified: trunk/tp/Texinfo/Convert/HTML.pm
===================================================================
--- trunk/tp/Texinfo/Convert/HTML.pm    2014-04-07 20:28:47 UTC (rev 5435)
+++ trunk/tp/Texinfo/Convert/HTML.pm    2014-04-07 22:40:07 UTC (rev 5436)
@@ -4901,22 +4901,11 @@
   $self->{'css_rule_lines'} = address@hidden;
 }
 
-sub _id_to_filename($$)
-{
-  my $self = shift;
-  my $id = shift;
-  return substr($id, 0, $self->get_conf('BASEFILENAME_LENGTH'));
-}
-
 sub _node_id_file($$)
 {
   my $self = shift;
   my $node_info = shift;
 
-  my $no_unidecode;
-  $no_unidecode = 1 if (defined($self->get_conf('USE_UNIDECODE'))
-                        and !$self->get_conf('USE_UNIDECODE'));
-
   my ($target, $id);
   my $normalized = $node_info->{'normalized'};
   if (defined($normalized)) {
@@ -4932,39 +4921,21 @@
     ($target, $id) = &$Texinfo::Config::node_target_name($node_info,
                                                          $target, $id);
   }
-  my $filename;
-  if (defined($node_info->{'normalized'})) { 
-    if ($self->get_conf('TRANSLITERATE_FILE_NAMES')) {
-      $filename = 
Texinfo::Convert::NodeNameNormalization::transliterate_texinfo(
-       {'contents' => $node_info->{'node_content'}},
-            $no_unidecode);
-    } else {
-      $filename = $node_info->{'normalized'};
-    }
-  } else {
-    $filename = '';
-  }
-  return ($self->_id_to_filename($filename), $target, $id);
+
+  my $filename = $self->_node_filename($node_info);
+
+  return ($filename, $target, $id);
 }
 
 sub _new_sectioning_command_target($$)
 {
   my $self = shift;
   my $command = shift;
-  my $no_unidecode;
 
-  $no_unidecode = 1 if (defined($self->get_conf('USE_UNIDECODE')) 
-                        and !$self->get_conf('USE_UNIDECODE'));
+  my ($normalized_name, $filename) 
+    = $self->_sectioning_command_normalized_filename($command);
 
-  my $filename = 
Texinfo::Convert::NodeNameNormalization::transliterate_texinfo(
-       {'contents' => $command->{'extra'}->{'misc_content'}},
-                $no_unidecode);
-
-  my $target_base = _normalized_to_id($filename);
-  $filename = $self->_id_to_filename($filename);
-  $filename .= '.'.$self->get_conf('EXTENSION') 
-    if (defined($self->get_conf('EXTENSION')) 
-      and $self->get_conf('EXTENSION') ne '');
+  my $target_base = _normalized_to_id($normalized_name);
   if ($target_base !~ /\S/ and $command->{'cmdname'} eq 'top' 
       and defined($self->{'misc_elements_targets'}->{'Top'})) {
     $target_base = $self->{'misc_elements_targets'}->{'Top'};
@@ -5129,36 +5100,6 @@
   }
 }
 
-sub _set_element_file($$$)
-{
-  my $self = shift;
-  my $element = shift;
-  my $filename = shift;
-
-  if (!defined($filename)) {
-    cluck("_set_element_file: filename not defined\n");
-  }
-  if ($self->get_conf('CASE_INSENSITIVE_FILENAMES')) {
-    if (exists($self->{'filenames'}->{lc($filename)})) {
-      if ($self->get_conf('DEBUG')) {
-        print STDERR "Reusing ".$self->{'filenames'}->{lc($filename)}
-                     ." for $filename\n";
-      }
-      $filename = $self->{'filenames'}->{lc($filename)};
-    } else {
-      $self->{'filenames'}->{lc($filename)} = $filename;
-    }
-  }
-  $element->{'filename'} = $filename;
-  if (defined($self->{'destination_directory'}) 
-      and $self->{'destination_directory'} ne '') {
-    $element->{'out_filename'} = 
-      File::Spec->catfile($self->{'destination_directory'}, $filename);
-  } else {
-    $element->{'out_filename'} = $filename;
-  }
-}
-
 sub _get_element($$;$);
 
 # If $find_container is set, the element that holds the command is found,
@@ -5218,36 +5159,6 @@
   }
 }
 
-sub _top_node_filename($)
-{
-  my $self = shift;
-
-  my $top_node_filename;
-  if (defined($self->get_conf('TOP_FILE')) 
-      and $self->get_conf('TOP_FILE') ne '') {
-    $top_node_filename = $self->get_conf('TOP_FILE');
-  } else {
-    if (defined($self->get_conf('TOP_NODE_FILE'))) {
-      $top_node_filename = $self->get_conf('TOP_NODE_FILE');
-    } else {
-      # TOP_NODE_FILE is set in the default case.
-      # If not the manual name is used.
-      $top_node_filename = $self->{'document_name'};
-    }
-    if (defined($top_node_filename)) {
-      my $top_node_extension;
-      if ($self->get_conf('NODE_FILENAMES')) {
-        $top_node_extension = $self->get_conf('NODE_FILE_EXTENSION');
-      } else {
-        $top_node_extension = $self->get_conf('EXTENSION');
-      }
-      $top_node_filename .= '.'.$top_node_extension 
-        if (defined($top_node_extension) and $top_node_extension ne '');
-    }
-  }
-  return $top_node_filename;
-}
-
 sub _set_pages_files($$)
 {
   my $self = shift;

Modified: trunk/tp/Texinfo/Convert/Info.pm
===================================================================
--- trunk/tp/Texinfo/Convert/Info.pm    2014-04-07 20:28:47 UTC (rev 5435)
+++ trunk/tp/Texinfo/Convert/Info.pm    2014-04-07 22:40:07 UTC (rev 5436)
@@ -51,6 +51,9 @@
 
 my %defaults = Texinfo::Convert::Plaintext::converter_defaults(undef, undef);
 $defaults{'SHOW_MENU'} = 1;
+$defaults{'EXTENSION'} = 'info';
+$defaults{'USE_SETFILENAME_EXTENSION'} = 1;
+$defaults{'OUTFILE'} = undef;
 
 sub converter_defaults($$)
 {
@@ -128,7 +131,7 @@
     my @nodes = @$elements;
     while (@nodes) {
       my $node = shift @nodes;
-      my $node_text = $self->_convert_node($node);
+      my $node_text = $self->_convert_element($node);
       if (!$first_node) {
         $first_node = 1;
         if (defined($self->{'text_before_first_node'})) {

Modified: trunk/tp/Texinfo/Convert/Plaintext.pm
===================================================================
--- trunk/tp/Texinfo/Convert/Plaintext.pm       2014-04-07 20:28:47 UTC (rev 
5435)
+++ trunk/tp/Texinfo/Convert/Plaintext.pm       2014-04-07 22:40:07 UTC (rev 
5436)
@@ -300,16 +300,18 @@
 my %defaults = (
   'ENABLE_ENCODING'      => 1,
   'SHOW_MENU'            => 0,
-# not used for plaintext, since default is '-', and always set, for plaintext.
-  'EXTENSION'            => 'info',
-  'USE_SETFILENAME_EXTENSION' => 1,
+  #'EXTENSION'            => 'info',
+  'EXTENSION'            => 'txt',
+  #'USE_SETFILENAME_EXTENSION' => 1,
   'INFO_SPECIAL_CHARS_WARNING' => 1,
 
-  'OUTFILE'              => undef,
+  #'OUTFILE'              => undef,
+  'OUTFILE'              => '-',
   'SUBDIR'               => undef,
   'documentlanguage'     => undef,
 
   'output_format'        => '',
+  'USE_NODES'            => 1,
 );
 
 sub push_top_formatter($$)
@@ -432,7 +434,7 @@
   }
 }
 
-sub _convert_node($$)
+sub _convert_element($$)
 {
   my $self = shift;
   my $element = shift;
@@ -473,7 +475,7 @@
     $result .= $footnotes;
   } else {
     foreach my $node (@$elements) {
-      my $node_text = $self->_convert_node($node);
+      my $node_text = $self->_convert_element($node);
       $result .= $node_text;
     }
   }
@@ -481,11 +483,27 @@
   return $result;
 }
 
-sub output($$)
+sub convert_tree($$)
 {
   my $self = shift;
   my $root = shift;
 
+  $self->{'empty_lines_count'} = 1;
+  my $result;
+  if ($root->{'type'} and $root->{'type'} eq 'element') {
+    $result = $self->_convert_element($root);
+  } else {
+    $result = $self->_convert($root);
+  }
+  return $result;
+}
+
+# old implementation of output that does not allow for splitting.
+sub _output_old($$)
+{
+  my $self = shift;
+  my $root = shift;
+
   my $outfile = '-';
   $self->set_conf('OUTFILE', '-');
   $self->_set_outfile();

Modified: trunk/tp/texi2any.pl
===================================================================
--- trunk/tp/texi2any.pl        2014-04-07 20:28:47 UTC (rev 5435)
+++ trunk/tp/texi2any.pl        2014-04-07 22:40:07 UTC (rev 5436)
@@ -550,6 +550,7 @@
   'plaintext' => {
              'nodes_tree' => 1,
              'floats' => 1,
+             'split' => 1,
              'converter' => sub{Texinfo::Convert::Plaintext->converter(@_)},
            },
   'html' => {




reply via email to

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