[Top][All Lists]
[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($$$)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- texinfo/tp TODO Texinfo/Common.pm Texinfo/Parse...,
Patrice Dumas <=