[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
branch master updated: * p/Texinfo/Structuring.pm (_check_referenced_nod
From: |
Patrice Dumas |
Subject: |
branch master updated: * p/Texinfo/Structuring.pm (_check_referenced_nodes): consider a node to be referenced if it is a target of a @*ref command. Report by Gavin. |
Date: |
Sat, 20 Feb 2021 19:13:26 -0500 |
This is an automated email from the git hooks/post-receive script.
pertusus pushed a commit to branch master
in repository texinfo.
The following commit(s) were added to refs/heads/master by this push:
new d517c10 * p/Texinfo/Structuring.pm (_check_referenced_nodes):
consider a node to be referenced if it is a target of a @*ref command. Report
by Gavin.
d517c10 is described below
commit d517c10e71cfeb10963a5cc167056eab6cd39800
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Sun Feb 21 01:13:12 2021 +0100
* p/Texinfo/Structuring.pm (_check_referenced_nodes):
consider a node to be referenced if it is a target of a
@*ref command. Report by Gavin.
---
ChangeLog | 6 +
tp/Texinfo/Structuring.pm | 19 +
tp/t/30sectioning.t | 13 +
tp/t/results/sectioning/node_referenced_in_ref.pl | 450 ++++++++++++++++++++++
4 files changed, 488 insertions(+)
diff --git a/ChangeLog b/ChangeLog
index c749967..c95b97f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2021-02-21 Patrice Dumas <pertusus@free.fr>
+
+ * p/Texinfo/Structuring.pm (_check_referenced_nodes):
+ consider a node to be referenced if it is a target of a
+ @*ref command. Report by Gavin.
+
2021-02-20 Patrice Dumas <pertusus@free.fr>
* tp/Texinfo/Structuring.pm (elements_file_directions):
diff --git a/tp/Texinfo/Structuring.pm b/tp/Texinfo/Structuring.pm
index 9e4166c..c847c8b 100644
--- a/tp/Texinfo/Structuring.pm
+++ b/tp/Texinfo/Structuring.pm
@@ -417,6 +417,25 @@ sub _check_referenced_nodes
$referenced_nodes{$node} = 1;
}
}
+
+ # consider nodes in @*ref commands to be referenced
+ my $labels = $self->labels_information();
+ my $refs = $self->internal_references_information();
+ if (defined($refs)) {
+ foreach my $ref (@$refs) {
+ my $node_arg = $ref->{'extra'}{'node_argument'};
+ if ($node_arg->{'node_content'}) {
+ my $normalized =
+ Texinfo::Convert::NodeNameNormalization::normalize_node(
+ {'contents' => $node_arg->{'node_content'} });
+ my $node_target = $labels->{$normalized};
+ if ($node_target) {
+ $referenced_nodes{$node_target} = 1;
+ }
+ }
+ }
+ }
+
foreach my $node (@{$self->{'nodes'}}) {
if (not exists($referenced_nodes{$node})) {
$self->line_warn(sprintf(__("node `%s' unreferenced"),
diff --git a/tp/t/30sectioning.t b/tp/t/30sectioning.t
index f4373d3..763bae1 100644
--- a/tp/t/30sectioning.t
+++ b/tp/t/30sectioning.t
@@ -1356,6 +1356,19 @@ my @test_cases = (
@node @:
@node @asis{ }
'],
+['node_referenced_in_ref',
+'@node Top
+
+@menu
+* first level node::
+@end menu
+
+@ref{second level node}.
+
+@node first level node
+
+@node second level node
+'],
['empty_refs',
'@xref{@:}.
@xref{@asis{ }}.
diff --git a/tp/t/results/sectioning/node_referenced_in_ref.pl
b/tp/t/results/sectioning/node_referenced_in_ref.pl
new file mode 100644
index 0000000..f9cec3a
--- /dev/null
+++ b/tp/t/results/sectioning/node_referenced_in_ref.pl
@@ -0,0 +1,450 @@
+use vars qw(%result_texis %result_texts %result_trees %result_errors
+ %result_indices %result_sectioning %result_nodes %result_menus
+ %result_floats %result_converted %result_converted_errors
+ %result_elements %result_directions_text);
+
+use utf8;
+
+$result_trees{'node_referenced_in_ref'} = {
+ 'contents' => [
+ {
+ 'contents' => [],
+ 'parent' => {},
+ 'type' => 'text_root'
+ },
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'Top'
+ }
+ ],
+ 'extra' => {
+ 'spaces_after_argument' => '
+'
+ },
+ 'parent' => {},
+ 'type' => 'line_arg'
+ }
+ ],
+ 'cmdname' => 'node',
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'empty_line'
+ },
+ {
+ 'cmdname' => 'menu',
+ 'contents' => [
+ {
+ 'extra' => {
+ 'command' => {}
+ },
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'empty_line_after_command'
+ },
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => '* ',
+ 'type' => 'menu_entry_leading_text'
+ },
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'first level node'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry_node'
+ },
+ {
+ 'parent' => {},
+ 'text' => '::',
+ 'type' => 'menu_entry_separator'
+ },
+ {
+ 'contents' => [
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => '
+'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'preformatted'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry_description'
+ }
+ ],
+ 'extra' => {
+ 'menu_entry_description' => {},
+ 'menu_entry_node' => {
+ 'node_content' => [
+ {}
+ ],
+ 'normalized' => 'first-level-node'
+ }
+ },
+ 'line_nr' => {
+ 'file_name' => '',
+ 'line_nr' => 4,
+ 'macro' => ''
+ },
+ 'parent' => {},
+ 'type' => 'menu_entry'
+ },
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'menu'
+ }
+ ],
+ 'extra' => {
+ 'spaces_after_argument' => '
+'
+ },
+ 'parent' => {},
+ 'type' => 'line_arg'
+ }
+ ],
+ 'cmdname' => 'end',
+ 'extra' => {
+ 'command_argument' => 'menu',
+ 'spaces_before_argument' => ' ',
+ 'text_arg' => 'menu'
+ },
+ 'line_nr' => {
+ 'file_name' => '',
+ 'line_nr' => 5,
+ 'macro' => ''
+ },
+ 'parent' => {}
+ }
+ ],
+ 'extra' => {
+ 'end_command' => {}
+ },
+ 'line_nr' => {
+ 'file_name' => '',
+ 'line_nr' => 3,
+ 'macro' => ''
+ },
+ 'parent' => {}
+ },
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'empty_line'
+ },
+ {
+ 'contents' => [
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'second level node'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'brace_command_arg'
+ }
+ ],
+ 'cmdname' => 'ref',
+ 'contents' => [],
+ 'extra' => {
+ 'label' => {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'second level node'
+ }
+ ],
+ 'extra' => {
+ 'spaces_after_argument' => '
+'
+ },
+ 'parent' => {},
+ 'type' => 'line_arg'
+ }
+ ],
+ 'cmdname' => 'node',
+ 'contents' => [],
+ 'extra' => {
+ 'node_content' => [
+ {}
+ ],
+ 'nodes_manuals' => [
+ {
+ 'node_content' => [
+ {}
+ ],
+ 'normalized' => 'second-level-node'
+ }
+ ],
+ 'normalized' => 'second-level-node',
+ 'spaces_before_argument' => ' '
+ },
+ 'line_nr' => {
+ 'file_name' => '',
+ 'line_nr' => 11,
+ 'macro' => ''
+ },
+ 'parent' => {}
+ },
+ 'node_argument' => {
+ 'node_content' => [
+ {}
+ ],
+ 'normalized' => 'second-level-node'
+ }
+ },
+ 'line_nr' => {
+ 'file_name' => '',
+ 'line_nr' => 7,
+ 'macro' => ''
+ },
+ 'parent' => {}
+ },
+ {
+ 'parent' => {},
+ 'text' => '.
+'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'paragraph'
+ },
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'empty_line'
+ }
+ ],
+ 'extra' => {
+ 'node_content' => [
+ {}
+ ],
+ 'nodes_manuals' => [
+ {
+ 'node_content' => [
+ {}
+ ],
+ 'normalized' => 'Top'
+ }
+ ],
+ 'normalized' => 'Top',
+ 'spaces_before_argument' => ' '
+ },
+ 'line_nr' => {
+ 'file_name' => '',
+ 'line_nr' => 1,
+ 'macro' => ''
+ },
+ 'parent' => {}
+ },
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'first level node'
+ }
+ ],
+ 'extra' => {
+ 'spaces_after_argument' => '
+'
+ },
+ 'parent' => {},
+ 'type' => 'line_arg'
+ }
+ ],
+ 'cmdname' => 'node',
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'empty_line'
+ }
+ ],
+ 'extra' => {
+ 'node_content' => [
+ {}
+ ],
+ 'nodes_manuals' => [
+ {
+ 'node_content' => [
+ {}
+ ],
+ 'normalized' => 'first-level-node'
+ }
+ ],
+ 'normalized' => 'first-level-node',
+ 'spaces_before_argument' => ' '
+ },
+ 'line_nr' => {
+ 'file_name' => '',
+ 'line_nr' => 9,
+ 'macro' => ''
+ },
+ 'parent' => {}
+ },
+ {}
+ ],
+ 'type' => 'document_root'
+};
+$result_trees{'node_referenced_in_ref'}{'contents'}[0]{'parent'} =
$result_trees{'node_referenced_in_ref'};
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'args'}[0]{'contents'}[0]{'parent'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[1]{'args'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'args'}[0]{'parent'} =
$result_trees{'node_referenced_in_ref'}{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[0]{'parent'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[0]{'extra'}{'command'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[0]{'parent'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'args'}[0]{'parent'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'args'}[1]{'contents'}[0]{'parent'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'args'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'args'}[1]{'parent'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'args'}[2]{'parent'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'args'}[3]{'contents'}[0]{'contents'}[0]{'parent'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'args'}[3]{'contents'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'args'}[3]{'contents'}[0]{'parent'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'args'}[3];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'args'}[3]{'parent'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'extra'}{'menu_entry_description'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'args'}[3];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'extra'}{'menu_entry_node'}{'node_content'}[0]
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'args'}[1]{'contents'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'parent'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[2]{'args'}[0]{'contents'}[0]{'parent'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[2]{'args'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[2]{'args'}[0]{'parent'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[2];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[2]{'parent'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'extra'}{'end_command'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'contents'}[2];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[1]{'parent'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[2]{'parent'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'args'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'args'}[0]{'parent'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'extra'}{'label'}{'args'}[0]{'contents'}[0]{'parent'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'extra'}{'label'}{'args'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'extra'}{'label'}{'args'}[0]{'parent'}
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'extra'}{'label'};
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'extra'}{'label'}{'extra'}{'node_content'}[0]
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'extra'}{'label'}{'args'}[0]{'contents'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'extra'}{'label'}{'extra'}{'nodes_manuals'}[0]{'node_content'}[0]
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'extra'}{'label'}{'args'}[0]{'contents'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'extra'}{'label'}{'parent'}
= $result_trees{'node_referenced_in_ref'};
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'extra'}{'node_argument'}{'node_content'}[0]
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'parent'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[1]{'parent'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'parent'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[4]{'parent'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[1];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'extra'}{'node_content'}[0]
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'args'}[0]{'contents'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'extra'}{'nodes_manuals'}[0]{'node_content'}[0]
=
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'args'}[0]{'contents'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'parent'} =
$result_trees{'node_referenced_in_ref'};
+$result_trees{'node_referenced_in_ref'}{'contents'}[2]{'args'}[0]{'contents'}[0]{'parent'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[2]{'args'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[2]{'args'}[0]{'parent'} =
$result_trees{'node_referenced_in_ref'}{'contents'}[2];
+$result_trees{'node_referenced_in_ref'}{'contents'}[2]{'contents'}[0]{'parent'}
= $result_trees{'node_referenced_in_ref'}{'contents'}[2];
+$result_trees{'node_referenced_in_ref'}{'contents'}[2]{'extra'}{'node_content'}[0]
=
$result_trees{'node_referenced_in_ref'}{'contents'}[2]{'args'}[0]{'contents'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[2]{'extra'}{'nodes_manuals'}[0]{'node_content'}[0]
=
$result_trees{'node_referenced_in_ref'}{'contents'}[2]{'args'}[0]{'contents'}[0];
+$result_trees{'node_referenced_in_ref'}{'contents'}[2]{'parent'} =
$result_trees{'node_referenced_in_ref'};
+$result_trees{'node_referenced_in_ref'}{'contents'}[3] =
$result_trees{'node_referenced_in_ref'}{'contents'}[1]{'contents'}[3]{'contents'}[0]{'extra'}{'label'};
+
+$result_texis{'node_referenced_in_ref'} = '@node Top
+
+@menu
+* first level node::
+@end menu
+
+@ref{second level node}.
+
+@node first level node
+
+@node second level node
+';
+
+
+$result_texts{'node_referenced_in_ref'} = '
+* first level node::
+
+second level node.
+
+
+';
+
+$result_sectioning{'node_referenced_in_ref'} = {};
+
+$result_nodes{'node_referenced_in_ref'} = {
+ 'cmdname' => 'node',
+ 'extra' => {
+ 'normalized' => 'Top',
+ 'spaces_before_argument' => ' '
+ },
+ 'menu_child' => {
+ 'cmdname' => 'node',
+ 'extra' => {
+ 'normalized' => 'first-level-node',
+ 'spaces_before_argument' => ' '
+ },
+ 'node_prev' => {},
+ 'node_up' => {}
+ },
+ 'menus' => [
+ {
+ 'cmdname' => 'menu',
+ 'extra' => {
+ 'end_command' => {
+ 'cmdname' => 'end',
+ 'extra' => {
+ 'command_argument' => 'menu',
+ 'spaces_before_argument' => ' ',
+ 'text_arg' => 'menu'
+ }
+ }
+ }
+ }
+ ],
+ 'node_next' => {}
+};
+$result_nodes{'node_referenced_in_ref'}{'menu_child'}{'node_prev'} =
$result_nodes{'node_referenced_in_ref'};
+$result_nodes{'node_referenced_in_ref'}{'menu_child'}{'node_up'} =
$result_nodes{'node_referenced_in_ref'};
+$result_nodes{'node_referenced_in_ref'}{'node_next'} =
$result_nodes{'node_referenced_in_ref'}{'menu_child'};
+
+$result_menus{'node_referenced_in_ref'} = {
+ 'cmdname' => 'node',
+ 'extra' => {
+ 'normalized' => 'Top',
+ 'spaces_before_argument' => ' '
+ },
+ 'menu_child' => {
+ 'cmdname' => 'node',
+ 'extra' => {
+ 'normalized' => 'first-level-node',
+ 'spaces_before_argument' => ' '
+ },
+ 'menu_up' => {},
+ 'menu_up_hash' => {
+ 'Top' => 1
+ }
+ }
+};
+$result_menus{'node_referenced_in_ref'}{'menu_child'}{'menu_up'} =
$result_menus{'node_referenced_in_ref'};
+
+$result_errors{'node_referenced_in_ref'} = [];
+
+
+$result_floats{'node_referenced_in_ref'} = {};
+
+
+1;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- branch master updated: * p/Texinfo/Structuring.pm (_check_referenced_nodes): consider a node to be referenced if it is a target of a @*ref command. Report by Gavin.,
Patrice Dumas <=