texinfo-commits
[Top][All Lists]
Advanced

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

texinfo/tp TODO Texinfo/Common.pm Texinfo/Parse...


From: Patrice Dumas
Subject: texinfo/tp TODO Texinfo/Common.pm Texinfo/Parse...
Date: Tue, 21 Jun 2011 23:01:04 +0000

CVSROOT:        /sources/texinfo
Module name:    texinfo
Changes by:     Patrice Dumas <pertusus>        11/06/21 23:01:04

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

Log message:
        Handle right renamed nodes.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/TODO?cvsroot=texinfo&r1=1.134&r2=1.135
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Common.pm?cvsroot=texinfo&r1=1.48&r2=1.49
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Parser.pm?cvsroot=texinfo&r1=1.259&r2=1.260
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Convert/HTML.pm?cvsroot=texinfo&r1=1.91&r2=1.92

Patches:
Index: TODO
===================================================================
RCS file: /sources/texinfo/texinfo/tp/TODO,v
retrieving revision 1.134
retrieving revision 1.135
diff -u -b -r1.134 -r1.135
--- TODO        5 Jun 2011 10:01:35 -0000       1.134
+++ TODO        21 Jun 2011 23:01:01 -0000      1.135
@@ -362,3 +362,47 @@
 
 coverage/pass0_macro.texi     (not everything, but tests are redundant)
 
+
+
+state for sectioning
+D: diffs/equivalent_nodes_no_node.diff
+D: diffs/equivalent_nodes_test_renamed_nodes.diff
+D: diffs/menu-whitespace_plain.diff
+F: out_parser/menu-whitespace_xml/menu-whitespace.2
+F: out_parser_info/menu-whitespace_xml/menu-whitespace.2
+D: diffs/nodename_parentheses.diff
+F: out_parser/nodes_id_docbook/nodes_id.2
+F: out_parser_info/nodes_id_docbook/nodes_id.2
+D: diffs/two_footnotes_in_nodes_plain.diff
+D: diffs/section_in_unnumbered.diff
+D: diffs/no_element.diff
+D: diffs/one_element.diff
+D: diffs/placed_things_before_element.diff
+D: diffs/anchor_in_footnote.diff
+D: diffs/double_node_anchor_float.diff
+F: out_parser/empty_nodes/empty_nodes.2
+D: diffs/section_before_part.diff
+D: diffs/part_before_section.diff
+D: diffs/chapter_before_part.diff
+D: diffs/part_before_chapter.diff
+D: diffs/hole_in_sectioning.diff
+D: diffs/section_before_top.diff
+D: diffs/section_before_top_no_node.diff
+D: diffs/part_chapter_after_top.diff
+D: diffs/part_node_chapter_after_top.diff
+D: diffs/node_part_chapter_after_top.diff
+D: diffs/node_part_chapter_after_chapter.diff
+D: diffs/part_node_before_top.diff
+D: diffs/part_node_after_top.diff
+D: diffs/section_chapter_before_top.diff
+D: diffs/section_chapter_before_top_nodes.diff
+D: diffs/part_node_appendix.diff
+D: diffs/part_appendix.diff
+D: diffs/part_node_part_appendix.diff
+D: diffs/part_node_part_node_appendix.diff
+D: diffs/part_node_node_part_appendix.diff
+D: diffs/empty_top_node_up.diff
+D: diffs/text_before_line_command.diff
+D: diffs/loop_nodes.diff
+F: out_parser/test_refs_docbook/test_refs.2
+F: out_parser_info/test_refs_docbook/test_refs.2

Index: Texinfo/Common.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Common.pm,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -b -r1.48 -r1.49
--- Texinfo/Common.pm   6 Jun 2011 22:35:21 -0000       1.48
+++ Texinfo/Common.pm   21 Jun 2011 23:01:03 -0000      1.49
@@ -986,11 +986,13 @@
   return $htmlxref;
 }
 
-sub parse_renamed_nodes_file($$;$)
+sub parse_renamed_nodes_file($$;$$)
 {
   my $self = shift;
   my $renamed_nodes_file = shift;
+  # if not given they are automatically created
   my $renamed_nodes = shift;
+  my $renamed_nodes_lines = shift;
 
   if (open(RENAMEDFILE, "<$renamed_nodes_file")) {
     if ($self->{'info'} and $self->{'info'}->{'perl_encoding'}) {
@@ -1007,6 +1009,7 @@
         if (scalar(@old_names)) {
           foreach my $old_node_name (@old_names) {
             $renamed_nodes->{$old_node_name} = $_;
+            $renamed_nodes_lines->{$_} = $renamed_nodes_line_nr;
           }
           @old_names = ();
         } else {
@@ -1016,6 +1019,7 @@
       } else {
         chomp;
         s/^\s*//;
+        $renamed_nodes_lines->{$_} = $renamed_nodes_line_nr;
         push @old_names, $_;
       }
     }
@@ -1027,6 +1031,29 @@
   } else {
     warn (sprintf($self->__("Cannot read %s: %s"), $renamed_nodes_file, $!));
   }
+  return ($renamed_nodes, $renamed_nodes_lines);
+}
+
+sub collect_renamed_nodes($$;$$)
+{
+  my $self = shift;
+  my $basename = shift;
+  my $renamed_nodes = shift;
+  my $renamed_nodes_lines = shift;
+
+  my $renamed_nodes_file;
+  if (defined($self->get_conf('RENAMED_NODES_FILE'))) {
+    $renamed_nodes_file = $self->get_conf('RENAMED_NODES_FILE');
+  } elsif (-f $basename . '-noderename.cnf') {
+    $renamed_nodes_file = $basename . '-noderename.cnf';
+  }
+  if (defined($renamed_nodes_file)) {
+    my ($renamed_nodes, $renamed_nodes_lines)
+     = parse_renamed_nodes_file($self, $renamed_nodes_file, $renamed_nodes,
+                                $renamed_nodes_lines);
+    return ($renamed_nodes, $renamed_nodes_lines, $renamed_nodes_file);
+  }
+  return (undef, undef, undef);
 }
 
 1;

Index: Texinfo/Parser.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Parser.pm,v
retrieving revision 1.259
retrieving revision 1.260
diff -u -b -r1.259 -r1.260
--- Texinfo/Parser.pm   7 Jun 2011 23:23:16 -0000       1.259
+++ Texinfo/Parser.pm   21 Jun 2011 23:01:03 -0000      1.260
@@ -191,6 +191,7 @@
   }
   my $parser = parser($parser_conf);
 
+  # FIXME it doesn't seems to be used anywhere.
   if ($conf->{'paragraph'}) {
     $result = $parser->parse_texi_text($result);
   } else {
@@ -742,11 +743,17 @@
 }
 
 # entry point for text fragments
-sub parse_texi_text($$;$)
+# it does not seems to be used anywhere, so not sure it is usefull.
+# Note that it has not asociated root type a oppoed to pare_texi_line
+# and parse_texi_file.
+sub parse_texi_text($$;$$$$)
 {
   my $self = shift;
   my $text = shift;
   my $lines_nr = shift;
+  my $file = shift;
+  my $macro = shift;
+  my $fixed_line_number = shift;
 
   return undef if (!defined($text));
 
@@ -756,7 +763,8 @@
   }
   $lines_nr = [] if (!defined($lines_nr));
   if (!ref($lines_nr)) {
-    $lines_array = _complete_line_nr($text, $lines_nr);
+    $lines_array = _complete_line_nr($text, $lines_nr, $file, 
+                                     $macro, $fixed_line_number);
   } else {
     while (@$text) {
       my $line_nr = shift @$lines_nr;
@@ -841,18 +849,22 @@
   return $tree;
 }
 
-sub parse_texi_line($$;$)
+sub parse_texi_line($$;$$$$)
 {
   my $self = shift;
   my $text = shift;
   my $lines_nr = shift;
+  my $file = shift;
+  my $macro = shift;
+  my $fixed_line_number = shift;
 
   return undef if (!defined($text));
 
   if (!ref($text)) {
     $text = _text_to_lines($text);
   }
-  my $lines_array = _complete_line_nr($text, $lines_nr);
+  my $lines_array = _complete_line_nr($text, $lines_nr, $file, 
+                                     $macro, $fixed_line_number);
 
   $self = parser() if (!defined($self));
   $self->{'input'} = [{'pending' => $lines_array}];

Index: Texinfo/Convert/HTML.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Convert/HTML.pm,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -b -r1.91 -r1.92
--- Texinfo/Convert/HTML.pm     7 Jun 2011 23:23:17 -0000       1.91
+++ Texinfo/Convert/HTML.pm     21 Jun 2011 23:01:04 -0000      1.92
@@ -5435,6 +5435,11 @@
   $self->_set_outfile();
   return undef unless $self->_create_destination_directory();
 
+  # collect renamed nodes
+  ($self->{'renamed_nodes'}, $self->{'renamed_nodes_lines'}, 
+       $self->{'renamed_nodes_file'})
+    = Texinfo::Common::collect_renamed_nodes($self, $self->{'document_name'});
+
   # This should return undef if called on a tree without node or sections.
   my ($elements, $special_elements, $special_pages) 
     = $self->_prepare_elements($root);
@@ -5666,6 +5671,91 @@
       }
     }
   }
+  if ($self->{'renamed_nodes'}
+      and $self->{'labels'} and $self->get_conf('OUTFILE') ne '') {
+    foreach my $old_node_name (keys(%{$self->{'renamed_nodes'}})) {
+      my $parsed_old_node = $self->_parse_node_and_warn_external(
+         $old_node_name, $self->{'renamed_nodes_lines'}->{$old_node_name},
+         $self->{'renamed_nodes_file'});
+      if ($parsed_old_node) {
+        if ($self->label_command($parsed_old_node->{'normalized'})) {
+          $self->document_error(sprintf($self->__(
+               "Node `%s' that is to be renamed exists"), $old_node_name));
+          $parsed_old_node = undef;
+        }
+      }
+      my $new_node_name = $self->{'renamed_nodes'}->{$old_node_name};
+      my $parsed_new_node = $self->_parse_node_and_warn_external(
+         $new_node_name, $self->{'renamed_nodes_lines'}->{$new_node_name},
+         $self->{'renamed_nodes_file'});
+      if ($parsed_new_node) {
+        if (!$self->label_command($parsed_new_node->{'normalized'})) {
+             $self->document_error(sprintf($self->__(
+              "Node to be renamed as, `%s' not found"), $new_node_name));
+          $parsed_new_node = undef;
+        }
+      }
+      if ($parsed_new_node and $parsed_old_node) {
+        my ($filename, $target, $id) = $self->_node_id_file($parsed_old_node);
+        $filename .= '.'.$self->get_conf('NODE_FILE_EXTENSION') 
+          if (defined($self->get_conf('NODE_FILE_EXTENSION')) 
+            and $self->get_conf('NODE_FILE_EXTENSION') ne '');
+        my $redirection_page 
+          = &{$self->{'node_redirection_page'}}($self, 
+                       $self->label_command($parsed_new_node->{'normalized'}));
+        my $out_filename;
+        if (defined($self->{'destination_directory'})) {
+          $out_filename = $self->{'destination_directory'} 
+               .$filename;
+        } else {
+          $out_filename = $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 _parse_node_and_warn_external($$$$)
+{
+  my $self = shift;
+  my $node_texi = shift;
+  my $line_number = shift;
+  my $file = shift;
+
+  # FIXME nothing to check that there is an invalid nesting.  Using a 
+  # @-command, like @anhor{} would incorrectly lead to the name being 
+  # entered as a node.  Maybe the best thing to do would be to consider
+  # that the 'root_line' type as a $simple_text_command, or to avoid
+  # spurious messages, $full_text_command.  This would imply really using
+  # the gdt 4th argument to pass 'paragraph' (rename that?) when in a 
+  # less constrained environment, for instance @center in @quotation for
+  # @author
+  my $node_tree = Texinfo::Parser::parse_texi_line($self->{'parser'},
+                                          $node_texi, $line_number, $file);
+  if ($node_tree) {
+    my $node_normalized_result = Texinfo::Parser::_parse_node_manual(
+          $node_tree);
+    my $line_nr = {'line_nr' => $line_number, 'file_name' => $file };
+    if (!$node_normalized_result) {
+      $self->line_warn($self->__('Empty node name'), $line_nr);
+    } elsif ($node_normalized_result->{'manual_content'}) {
+      $self->line_error (sprintf($self->__("Syntax for an external node used 
for `%s'"),
+         $node_texi), $line_nr);
+
+    } else {
+      return $node_normalized_result;
+    }
+  }
+  return undef;
 }
 
 sub attribute_class($$$)



reply via email to

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