texinfo-commits
[Top][All Lists]
Advanced

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

branch master updated: * LaTeX.pm: associate every node to a section. Ha


From: Patrice Dumas
Subject: branch master updated: * LaTeX.pm: associate every node to a section. Handle correctly xrefautomaticsectiontitle.
Date: Thu, 19 Aug 2021 17:21:24 -0400

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 c910354  * LaTeX.pm: associate every node to a section. Handle 
correctly xrefautomaticsectiontitle.
c910354 is described below

commit c9103546025e847b5ab038ee98d1a66181dc8ec4
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Thu Aug 19 23:20:08 2021 +0200

    * LaTeX.pm: associate every node to a section.
    Handle correctly xrefautomaticsectiontitle.
---
 tp/Texinfo/Convert/LaTeX.pm                        |  77 +-
 tp/t/30sectioning.t                                |  36 +-
 .../sectioning/nodes_before_after_top_xref.pl      | 859 +++++++++++++++++++++
 .../res_latex/nodes_before_after_top_xref.tex      |  84 ++
 4 files changed, 1047 insertions(+), 9 deletions(-)

diff --git a/tp/Texinfo/Convert/LaTeX.pm b/tp/Texinfo/Convert/LaTeX.pm
index 12edaf9..61b35f5 100644
--- a/tp/Texinfo/Convert/LaTeX.pm
+++ b/tp/Texinfo/Convert/LaTeX.pm
@@ -90,6 +90,13 @@
 #  in PDF/DVI
 #   In normal text, treated as ending any open paragraph; essentially ignored
 #   between paragraphs.
+#
+# In the manual it is said that majorheading generates a larger 
+# vertical whitespace before the heading than @chapheading command.
+# It is not implemented.  However, it seems that the chapter level
+# commands in LaTeX generate bigger fonts and much more vertical whitespace
+# than in Texinfo TeX so maybe it is not needed to do something here.
+#
 
 package Texinfo::Convert::LaTeX;
 
@@ -133,7 +140,8 @@ my %formatting_misc_commands = 
%Texinfo::Convert::Text::formatting_misc_commands
 my @informative_global_commands = ('paragraphindent', 'firstparagraphindent',
 'frenchspacing', 'documentencoding', 'footnotestyle', 'documentlanguage',
 'contents', 'shortcontents', 'summarycontents', 'deftypefnnewline',
-'allowcodebreaks', 'kbdinputstyle', 'setchapternewpage', 'headings');
+'allowcodebreaks', 'kbdinputstyle', 'setchapternewpage', 'headings',
+'xrefautomaticsectiontitle');
 
 my %informative_commands;
 foreach my $informative_command (@informative_global_commands) {
@@ -169,7 +177,7 @@ my %letter_no_arg_commands = 
%Texinfo::Common::letter_no_arg_commands;
 
 foreach my $kept_command (keys(%informative_commands),
   keys(%default_index_commands),
-  'verbatiminclude', 'insertcopying', 'xrefautomaticsectiontitle',
+  'verbatiminclude', 'insertcopying',
   'listoffloats', 'printindex', 'indent', 'noindent', 'need', 'page',
   'shorttitlepage', 'title', 'subtitle', 'author', 'vskip') {
   $formatting_misc_commands{$kept_command} = 1;
@@ -904,12 +912,17 @@ sub _set_chapter_new_page($$)
   return $result;
 }
 
-sub _prepare_conversion($)
+sub _prepare_conversion($;$)
 {
   my $self = shift;
+  my $root = shift;
 
   $self->_set_global_multiple_commands(-1);
 
+  if (defined($root)) {
+    $self->associate_other_nodes_to_sections($root);
+  }
+
   if ($self->{'extra'}->{'settitle'}) {
     my $settitle_root = $self->{'extra'}->{'settitle'};
     if (not ($settitle_root->{'extra'}
@@ -921,6 +934,46 @@ sub _prepare_conversion($)
   $self->_prepare_floats();
 }
 
+sub associate_other_nodes_to_sections($$) {
+  my $self = shift;
+  my $root = shift;
+
+  # associate lone nodes with sectioning commands
+  my $additional_node_section_associations = {};
+
+  my $current_sectioning_command;
+  # nodes not already associated as no section has been seen,
+  # associate to the first section
+  my $pending_nodes = [];
+
+  foreach my $element_content (@{$root->{'contents'}}) {
+    if ($element_content->{'cmdname'}
+        and $element_content->{'cmdname'} eq 'node') {
+      if (not $element_content->{'extra'}->{'associated_section'}
+          and $element_content->{'extra'}->{'normalized'}) {
+        if (defined($current_sectioning_command)) {
+          
$additional_node_section_associations->{$element_content->{'extra'}->{'normalized'}}
+            = $current_sectioning_command;
+        } else {
+          push @$pending_nodes, $element_content->{'extra'}->{'normalized'};
+        }
+      }
+    } elsif ($element_content->{'cmdname'}
+          and $root_commands{$element_content->{'cmdname'}}) {
+      $current_sectioning_command = $element_content;
+      if (scalar(@$pending_nodes)) {
+        foreach my $normalized_node_name (@$pending_nodes) {
+          $additional_node_section_associations->{$normalized_node_name}
+            = $current_sectioning_command
+        }
+        $pending_nodes = [];
+      }
+    }
+  }
+  $self->{'normalized_nodes_associated_section'}
+    = $additional_node_section_associations;
+}
+
 sub output($$)
 {
   my ($self, $root) = @_;
@@ -970,7 +1023,7 @@ sub output($$)
 
   my $result = '';
 
-  $self->_prepare_conversion();
+  $self->_prepare_conversion($removed_top_node_root);
 
   $result .= $self->_output_text($self->_latex_header(), $fh);
   $result .= $self->_output_text($self->convert_tree($removed_top_node_root), 
$fh);
@@ -992,7 +1045,7 @@ sub convert($$)
   my $self = shift;
   my $root = shift;
 
-  $self->_prepare_conversion();
+  $self->_prepare_conversion($root);
   
   return $self->_convert($root);
 }
@@ -1585,10 +1638,20 @@ sub _convert($$)
             # FIXME this is probably impossible
             $node_content = $args[0];
           }
-
+          
           my $section_command;
           if ($node->{'extra'}->{'associated_section'}) {
             $section_command = $node->{'extra'}->{'associated_section'};
+          } elsif ($node->{'cmdname'} ne 'float') {
+            my $normalized_name
+              = $root->{'extra'}->{'node_argument'}->{'normalized'};
+            if ($self->{'normalized_nodes_associated_section'}
+                and 
$self->{'normalized_nodes_associated_section'}->{$normalized_name}) {
+              $section_command
+                = 
$self->{'normalized_nodes_associated_section'}->{$normalized_name}; 
+            } else {
+              print STDERR "BUG/TODO assoc ".$node->{'cmdname'}.": 
$normalized_name: ".join("|", sort(keys(%{$node->{'extra'}})))."\n";
+            }
           }
           # reference to a float with a label
           my $float_type;
@@ -1620,7 +1683,7 @@ sub _convert($$)
             if (defined($self->get_conf('xrefautomaticsectiontitle'))
                 and $self->get_conf('xrefautomaticsectiontitle') eq 'on'
                 and $section_command) {
-              $name = {'contents' => 
$section_command->{'args'}->[0]->{'contents'}};
+              $name = $section_command->{'args'}->[0]->{'contents'};
             } else {
               $name = $node_content;
             }
diff --git a/tp/t/30sectioning.t b/tp/t/30sectioning.t
index 76424d8..6d3e579 100644
--- a/tp/t/30sectioning.t
+++ b/tp/t/30sectioning.t
@@ -1850,6 +1850,36 @@ in node after
 
 in chap
 '],
+['nodes_before_after_top_xref',
+'@setfilename nodes_before_after_top_xref.info
+
+@node node before
+
+In node before
+
+@node Top
+@top top sectionning
+
+in node Top
+
+@node after
+
+in node after
+
+@node chap
+@chapter chap
+
+in chap
+
+@xrefautomaticsectiontitle on
+@xref{node before}.
+@xref{after}.
+
+@xrefautomaticsectiontitle off
+@xref{node before}.
+@xref{after}.
+
+'],
 ['part_before_section',
 '@part part
 
@@ -2091,10 +2121,12 @@ my @xml_tests_cases_tests = ('part_before_section',
 'more_sections_than_nodes');
 
 my @latex_tests_cases_tests = ('loop_nodes', 'lone_Top_node',
- 'nodes_before_top', 'nodes_before_after_top');
+ 'nodes_before_top', 'nodes_before_after_top',
+ 'nodes_before_after_top_xref');
 
 my @file_latex_tests_cases_tests = ('loop_nodes', 'lone_Top_node',
- 'nodes_before_top', 'nodes_before_after_top');
+ 'nodes_before_top', 'nodes_before_after_top',
+ 'nodes_before_after_top_xref');
 
 foreach my $test (@test_cases) {
   push @{$test->[2]->{'test_formats'}}, 'xml'
diff --git a/tp/t/results/sectioning/nodes_before_after_top_xref.pl 
b/tp/t/results/sectioning/nodes_before_after_top_xref.pl
new file mode 100644
index 0000000..87723fe
--- /dev/null
+++ b/tp/t/results/sectioning/nodes_before_after_top_xref.pl
@@ -0,0 +1,859 @@
+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{'nodes_before_after_top_xref'} = {
+  'contents' => [
+    {
+      'contents' => [
+        {
+          'args' => [
+            {
+              'contents' => [
+                {
+                  'parent' => {},
+                  'text' => 'nodes_before_after_top_xref.info'
+                }
+              ],
+              'extra' => {
+                'spaces_after_argument' => '
+'
+              },
+              'parent' => {},
+              'type' => 'line_arg'
+            }
+          ],
+          'cmdname' => 'setfilename',
+          'extra' => {
+            'spaces_before_argument' => ' ',
+            'text_arg' => 'nodes_before_after_top_xref.info'
+          },
+          'line_nr' => {
+            'file_name' => '',
+            'line_nr' => 1,
+            'macro' => ''
+          },
+          'parent' => {}
+        },
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        }
+      ],
+      'parent' => {},
+      'type' => 'text_root'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'node before'
+            }
+          ],
+          'extra' => {
+            'spaces_after_argument' => '
+'
+          },
+          'parent' => {},
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'node',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'In node before
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'paragraph'
+        },
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        }
+      ],
+      'extra' => {
+        'node_content' => [
+          {}
+        ],
+        'nodes_manuals' => [
+          {
+            'node_content' => [
+              {}
+            ],
+            'normalized' => 'node-before'
+          }
+        ],
+        'normalized' => 'node-before',
+        'spaces_before_argument' => ' '
+      },
+      'line_nr' => {
+        'file_name' => '',
+        'line_nr' => 3,
+        'macro' => ''
+      },
+      'parent' => {}
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'Top'
+            }
+          ],
+          'extra' => {
+            'spaces_after_argument' => '
+'
+          },
+          'parent' => {},
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'node',
+      'contents' => [],
+      'extra' => {
+        'node_content' => [
+          {}
+        ],
+        'nodes_manuals' => [
+          {
+            'node_content' => [
+              {}
+            ],
+            'normalized' => 'Top'
+          }
+        ],
+        'normalized' => 'Top',
+        'spaces_before_argument' => ' '
+      },
+      'line_nr' => {
+        'file_name' => '',
+        'line_nr' => 7,
+        'macro' => ''
+      },
+      'parent' => {}
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'top sectionning'
+            }
+          ],
+          'extra' => {
+            'spaces_after_argument' => '
+'
+          },
+          'parent' => {},
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'top',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'in node Top
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'paragraph'
+        },
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        }
+      ],
+      'extra' => {
+        'spaces_before_argument' => ' '
+      },
+      'level' => 0,
+      'line_nr' => {
+        'file_name' => '',
+        'line_nr' => 8,
+        'macro' => ''
+      },
+      'parent' => {}
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'after'
+            }
+          ],
+          'extra' => {
+            'spaces_after_argument' => '
+'
+          },
+          'parent' => {},
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'node',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'in node after
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'paragraph'
+        },
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        }
+      ],
+      'extra' => {
+        'node_content' => [
+          {}
+        ],
+        'nodes_manuals' => [
+          {
+            'node_content' => [
+              {}
+            ],
+            'normalized' => 'after'
+          }
+        ],
+        'normalized' => 'after',
+        'spaces_before_argument' => ' '
+      },
+      'line_nr' => {
+        'file_name' => '',
+        'line_nr' => 12,
+        'macro' => ''
+      },
+      'parent' => {}
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'chap'
+            }
+          ],
+          'extra' => {
+            'spaces_after_argument' => '
+'
+          },
+          'parent' => {},
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'node',
+      'contents' => [],
+      'extra' => {
+        'node_content' => [
+          {}
+        ],
+        'nodes_manuals' => [
+          {
+            'node_content' => [
+              {}
+            ],
+            'normalized' => 'chap'
+          }
+        ],
+        'normalized' => 'chap',
+        'spaces_before_argument' => ' '
+      },
+      'line_nr' => {
+        'file_name' => '',
+        'line_nr' => 16,
+        'macro' => ''
+      },
+      'parent' => {}
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'chap'
+            }
+          ],
+          'extra' => {
+            'spaces_after_argument' => '
+'
+          },
+          'parent' => {},
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'chapter',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'in chap
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'paragraph'
+        },
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'args' => [
+            {
+              'contents' => [
+                {
+                  'parent' => {},
+                  'text' => 'on'
+                }
+              ],
+              'extra' => {
+                'spaces_after_argument' => '
+'
+              },
+              'parent' => {},
+              'type' => 'line_arg'
+            }
+          ],
+          'cmdname' => 'xrefautomaticsectiontitle',
+          'extra' => {
+            'misc_args' => [
+              'on'
+            ],
+            'spaces_before_argument' => ' '
+          },
+          'line_nr' => {
+            'file_name' => '',
+            'line_nr' => 21,
+            'macro' => ''
+          },
+          'parent' => {}
+        },
+        {
+          'contents' => [
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'parent' => {},
+                      'text' => 'node before'
+                    }
+                  ],
+                  'parent' => {},
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => 'xref',
+              'contents' => [],
+              'extra' => {
+                'label' => {},
+                'node_argument' => {
+                  'node_content' => [
+                    {}
+                  ],
+                  'normalized' => 'node-before'
+                }
+              },
+              'line_nr' => {
+                'file_name' => '',
+                'line_nr' => 22,
+                'macro' => ''
+              },
+              'parent' => {}
+            },
+            {
+              'parent' => {},
+              'text' => '.
+'
+            },
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'parent' => {},
+                      'text' => 'after'
+                    }
+                  ],
+                  'parent' => {},
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => 'xref',
+              'contents' => [],
+              'extra' => {
+                'label' => {},
+                'node_argument' => {
+                  'node_content' => [
+                    {}
+                  ],
+                  'normalized' => 'after'
+                }
+              },
+              'line_nr' => {
+                'file_name' => '',
+                'line_nr' => 23,
+                'macro' => ''
+              },
+              'parent' => {}
+            },
+            {
+              'parent' => {},
+              'text' => '.
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'paragraph'
+        },
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'args' => [
+            {
+              'contents' => [
+                {
+                  'parent' => {},
+                  'text' => 'off'
+                }
+              ],
+              'extra' => {
+                'spaces_after_argument' => '
+'
+              },
+              'parent' => {},
+              'type' => 'line_arg'
+            }
+          ],
+          'cmdname' => 'xrefautomaticsectiontitle',
+          'extra' => {
+            'misc_args' => [
+              'off'
+            ],
+            'spaces_before_argument' => ' '
+          },
+          'line_nr' => {
+            'file_name' => '',
+            'line_nr' => 25,
+            'macro' => ''
+          },
+          'parent' => {}
+        },
+        {
+          'contents' => [
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'parent' => {},
+                      'text' => 'node before'
+                    }
+                  ],
+                  'parent' => {},
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => 'xref',
+              'contents' => [],
+              'extra' => {
+                'label' => {},
+                'node_argument' => {
+                  'node_content' => [
+                    {}
+                  ],
+                  'normalized' => 'node-before'
+                }
+              },
+              'line_nr' => {
+                'file_name' => '',
+                'line_nr' => 26,
+                'macro' => ''
+              },
+              'parent' => {}
+            },
+            {
+              'parent' => {},
+              'text' => '.
+'
+            },
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'parent' => {},
+                      'text' => 'after'
+                    }
+                  ],
+                  'parent' => {},
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => 'xref',
+              'contents' => [],
+              'extra' => {
+                'label' => {},
+                'node_argument' => {
+                  'node_content' => [
+                    {}
+                  ],
+                  'normalized' => 'after'
+                }
+              },
+              'line_nr' => {
+                'file_name' => '',
+                'line_nr' => 27,
+                'macro' => ''
+              },
+              'parent' => {}
+            },
+            {
+              'parent' => {},
+              'text' => '.
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'paragraph'
+        },
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        }
+      ],
+      'extra' => {
+        'spaces_before_argument' => ' '
+      },
+      'level' => 1,
+      'line_nr' => {
+        'file_name' => '',
+        'line_nr' => 17,
+        'macro' => ''
+      },
+      'number' => 1,
+      'parent' => {}
+    }
+  ],
+  'type' => 'document_root'
+};
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[0]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[0]{'contents'}[1]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[0]{'parent'} = 
$result_trees{'nodes_before_after_top_xref'};
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[1]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[1]{'args'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[1]{'args'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[1];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[1]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[1];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[1]{'contents'}[1]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[1]{'contents'}[1];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[1]{'contents'}[1]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[1];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[1]{'contents'}[2]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[1];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[1]{'extra'}{'node_content'}[0]
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[1]{'args'}[0]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[1]{'extra'}{'nodes_manuals'}[0]{'node_content'}[0]
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[1]{'args'}[0]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[1]{'parent'} = 
$result_trees{'nodes_before_after_top_xref'};
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[2]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[2]{'args'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[2]{'args'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[2];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[2]{'extra'}{'node_content'}[0]
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[2]{'args'}[0]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[2]{'extra'}{'nodes_manuals'}[0]{'node_content'}[0]
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[2]{'args'}[0]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[2]{'parent'} = 
$result_trees{'nodes_before_after_top_xref'};
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[3]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[3]{'args'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[3]{'args'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[3];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[3]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[3];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[3]{'contents'}[1]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[3]{'contents'}[1];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[3]{'contents'}[1]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[3];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[3]{'contents'}[2]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[3];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[3]{'parent'} = 
$result_trees{'nodes_before_after_top_xref'};
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[4]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[4]{'args'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[4]{'args'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[4];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[4]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[4];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[4]{'contents'}[1]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[4]{'contents'}[1];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[4]{'contents'}[1]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[4];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[4]{'contents'}[2]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[4];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[4]{'extra'}{'node_content'}[0]
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[4]{'args'}[0]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[4]{'extra'}{'nodes_manuals'}[0]{'node_content'}[0]
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[4]{'args'}[0]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[4]{'parent'} = 
$result_trees{'nodes_before_after_top_xref'};
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[5]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[5]{'args'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[5]{'args'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[5];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[5]{'extra'}{'node_content'}[0]
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[5]{'args'}[0]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[5]{'extra'}{'nodes_manuals'}[0]{'node_content'}[0]
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[5]{'args'}[0]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[5]{'parent'} = 
$result_trees{'nodes_before_after_top_xref'};
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'args'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'args'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[1]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[1];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[1]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[2]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[3]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[3]{'args'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[3]{'args'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[3];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[3]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[0]{'args'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[0]{'args'}[0]{'parent'}
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[0]{'extra'}{'label'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[1];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[0]{'extra'}{'node_argument'}{'node_content'}[0]
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[1]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[2]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[2]{'args'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[2]{'args'}[0]{'parent'}
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[2];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[2]{'extra'}{'label'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[4];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[2]{'extra'}{'node_argument'}{'node_content'}[0]
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[2]{'args'}[0]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[2]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'contents'}[3]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[4]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[5]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[6]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[6]{'args'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[6]{'args'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[6];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[6]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[0]{'args'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[0]{'args'}[0]{'parent'}
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[0]{'extra'}{'label'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[1];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[0]{'extra'}{'node_argument'}{'node_content'}[0]
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[0]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[1]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[2]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[2]{'args'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[2]{'args'}[0]{'parent'}
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[2];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[2]{'extra'}{'label'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[4];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[2]{'extra'}{'node_argument'}{'node_content'}[0]
 = 
$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[2]{'args'}[0]{'contents'}[0];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[2]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'contents'}[3]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[7]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'contents'}[8]{'parent'}
 = $result_trees{'nodes_before_after_top_xref'}{'contents'}[6];
+$result_trees{'nodes_before_after_top_xref'}{'contents'}[6]{'parent'} = 
$result_trees{'nodes_before_after_top_xref'};
+
+$result_texis{'nodes_before_after_top_xref'} = '@setfilename 
nodes_before_after_top_xref.info
+
+@node node before
+
+In node before
+
+@node Top
+@top top sectionning
+
+in node Top
+
+@node after
+
+in node after
+
+@node chap
+@chapter chap
+
+in chap
+
+@xrefautomaticsectiontitle on
+@xref{node before}.
+@xref{after}.
+
+@xrefautomaticsectiontitle off
+@xref{node before}.
+@xref{after}.
+
+';
+
+
+$result_texts{'nodes_before_after_top_xref'} = '
+
+In node before
+
+top sectionning
+***************
+
+in node Top
+
+
+in node after
+
+1 chap
+******
+
+in chap
+
+node before.
+after.
+
+node before.
+after.
+
+';
+
+$result_sectioning{'nodes_before_after_top_xref'} = {
+  'level' => -1,
+  'section_childs' => [
+    {
+      'cmdname' => 'top',
+      'extra' => {
+        'associated_node' => {
+          'cmdname' => 'node',
+          'extra' => {
+            'normalized' => 'Top',
+            'spaces_before_argument' => ' '
+          }
+        },
+        'spaces_before_argument' => ' '
+      },
+      'level' => 0,
+      'section_childs' => [
+        {
+          'cmdname' => 'chapter',
+          'extra' => {
+            'associated_node' => {
+              'cmdname' => 'node',
+              'extra' => {
+                'normalized' => 'chap',
+                'spaces_before_argument' => ' '
+              }
+            },
+            'spaces_before_argument' => ' '
+          },
+          'level' => 1,
+          'number' => 1,
+          'section_up' => {},
+          'toplevel_prev' => {},
+          'toplevel_up' => {}
+        }
+      ],
+      'section_up' => {}
+    }
+  ]
+};
+$result_sectioning{'nodes_before_after_top_xref'}{'section_childs'}[0]{'section_childs'}[0]{'section_up'}
 = $result_sectioning{'nodes_before_after_top_xref'}{'section_childs'}[0];
+$result_sectioning{'nodes_before_after_top_xref'}{'section_childs'}[0]{'section_childs'}[0]{'toplevel_prev'}
 = $result_sectioning{'nodes_before_after_top_xref'}{'section_childs'}[0];
+$result_sectioning{'nodes_before_after_top_xref'}{'section_childs'}[0]{'section_childs'}[0]{'toplevel_up'}
 = $result_sectioning{'nodes_before_after_top_xref'}{'section_childs'}[0];
+$result_sectioning{'nodes_before_after_top_xref'}{'section_childs'}[0]{'section_up'}
 = $result_sectioning{'nodes_before_after_top_xref'};
+
+$result_nodes{'nodes_before_after_top_xref'} = {
+  'cmdname' => 'node',
+  'extra' => {
+    'associated_section' => {
+      'cmdname' => 'top',
+      'extra' => {
+        'spaces_before_argument' => ' '
+      },
+      'level' => 0
+    },
+    'normalized' => 'Top',
+    'spaces_before_argument' => ' '
+  },
+  'node_next' => {
+    'cmdname' => 'node',
+    'extra' => {
+      'associated_section' => {
+        'cmdname' => 'chapter',
+        'extra' => {
+          'spaces_before_argument' => ' '
+        },
+        'level' => 1,
+        'number' => 1
+      },
+      'normalized' => 'chap',
+      'spaces_before_argument' => ' '
+    },
+    'node_prev' => {},
+    'node_up' => {}
+  }
+};
+$result_nodes{'nodes_before_after_top_xref'}{'node_next'}{'node_prev'} = 
$result_nodes{'nodes_before_after_top_xref'};
+$result_nodes{'nodes_before_after_top_xref'}{'node_next'}{'node_up'} = 
$result_nodes{'nodes_before_after_top_xref'};
+
+$result_menus{'nodes_before_after_top_xref'} = {
+  'cmdname' => 'node',
+  'extra' => {
+    'normalized' => 'Top',
+    'spaces_before_argument' => ' '
+  }
+};
+
+$result_errors{'nodes_before_after_top_xref'} = [];
+
+
+$result_floats{'nodes_before_after_top_xref'} = {};
+
+
+
+$result_converted{'latex'}->{'nodes_before_after_top_xref'} = '
+\\label{anchor:node-before}%
+
+In node before
+
+\\label{anchor:after}%
+
+in node after
+
+\\chapter{chap}
+\\label{anchor:chap}%
+
+in chap
+
+See \\hyperref[anchor:node-before]{Chapter~\\ref*{anchor:node-before} [top 
sectionning], page~\\pageref*{anchor:node-before}}.
+See \\hyperref[anchor:after]{Chapter~\\ref*{anchor:after} [top sectionning], 
page~\\pageref*{anchor:after}}.
+
+See \\hyperref[anchor:node-before]{Chapter~\\ref*{anchor:node-before} [node 
before], page~\\pageref*{anchor:node-before}}.
+See \\hyperref[anchor:after]{Chapter~\\ref*{anchor:after} [after], 
page~\\pageref*{anchor:after}}.
+
+';
+
+1;
diff --git 
a/tp/t/results/sectioning/nodes_before_after_top_xref/res_latex/nodes_before_after_top_xref.tex
 
b/tp/t/results/sectioning/nodes_before_after_top_xref/res_latex/nodes_before_after_top_xref.tex
new file mode 100644
index 0000000..b52753c
--- /dev/null
+++ 
b/tp/t/results/sectioning/nodes_before_after_top_xref/res_latex/nodes_before_after_top_xref.tex
@@ -0,0 +1,84 @@
+\documentclass{book}
+\usepackage{makeidx}\makeindex
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage[gen]{eurosym}
+\usepackage[T1]{fontenc}
+\usepackage{textcomp}
+\usepackage{graphicx}
+\usepackage{needspace}
+\usepackage{etoolbox}
+\usepackage{fancyhdr}
+\usepackage{float}
+% use hidelinks to remove boxes around links to be similar with Texinfo TeX
+\usepackage[hidelinks]{hyperref}
+\usepackage[utf8]{inputenc}
+
+% redefine the \mainmatter command such that it does not clear page
+% as if in double page
+\makeatletter
+\renewcommand\mainmatter{\clearpage\@mainmattertrue\pagenumbering{arabic}}
+\makeatother
+
+% command that does nothing used to help with substitutions in commands
+\newcommand{\GNUTexinfoplaceholder}[1]{}
+
+% called when setting single headers
+% use \nouppercase to match with Texinfo TeX style
+\newcommand{\GNUTexinfosetsingleheader}{\pagestyle{fancy}
+\fancyhf{}
+\lhead{\nouppercase{\leftmark}}
+\rhead{\thepage}
+}
+
+% called when setting double headers
+\newcommand{\GNUTexinfosetdoubleheader}[1]{\pagestyle{fancy}
+\fancyhf{}
+\fancyhead[LE,RO]{\thepage}
+\fancyhead[RE]{#1}
+\fancyhead[LO]{\nouppercase{\leftmark}}
+}
+
+% for part and chapter, which call \thispagestyle{plain}
+\fancypagestyle{plain}{ %
+ \fancyhf{}
+ \fancyhead[LE,RO]{\thepage}
+}
+
+% match Texinfo TeX style
+\renewcommand{\headrulewidth}{0pt}%
+
+% avoid pagebreak and headings setting for a sectionning command
+\newcommand{\GNUTexinfonopagebreakheading}[2]{\let\clearpage\relax 
\let\cleardoublepage\relax \let\thispagestyle\GNUTexinfoplaceholder #1{#2}}
+
+
+\renewcommand{\includegraphics}[1]{\fbox{FIG #1}}
+
+% set default for @setchapternewpage
+\makeatletter
+\patchcmd{\chapter}{\if@openright\cleardoublepage\else\clearpage\fi}{\GNUTexinfoplaceholder{setchapternewpage
 placeholder}\clearpage}{}{}
+\makeatother
+\GNUTexinfosetsingleheader{}%
+
+\begin{document}
+
+\label{anchor:node-before}%
+
+In node before
+
+\label{anchor:after}%
+
+in node after
+
+\chapter{chap}
+\label{anchor:chap}%
+
+in chap
+
+See \hyperref[anchor:node-before]{Chapter~\ref*{anchor:node-before} [chap], 
page~\pageref*{anchor:node-before}}.
+See \hyperref[anchor:after]{Chapter~\ref*{anchor:after} [chap], 
page~\pageref*{anchor:after}}.
+
+See \hyperref[anchor:node-before]{Chapter~\ref*{anchor:node-before} [node 
before], page~\pageref*{anchor:node-before}}.
+See \hyperref[anchor:after]{Chapter~\ref*{anchor:after} [after], 
page~\pageref*{anchor:after}}.
+
+\end{document}



reply via email to

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