texinfo-commits
[Top][All Lists]
Advanced

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

branch master updated: * tp/Texinfo/Convert/HTML.pm (_convert_xref_comma


From: Patrice Dumas
Subject: branch master updated: * tp/Texinfo/Convert/HTML.pm (_convert_xref_commands), tp/Texinfo/XS/convert/convert_html.c (convert_xref_commands): handle better formatting of internal ref in string context with nested references.
Date: Sat, 07 Sep 2024 05:48:21 -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 9e4004f328 * tp/Texinfo/Convert/HTML.pm (_convert_xref_commands), 
tp/Texinfo/XS/convert/convert_html.c (convert_xref_commands): handle better 
formatting of internal ref in string context with nested references.
9e4004f328 is described below

commit 9e4004f3282c50f37f514b54aab6ae6858b4f35e
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Sat Sep 7 11:48:22 2024 +0200

    * tp/Texinfo/Convert/HTML.pm (_convert_xref_commands),
    tp/Texinfo/XS/convert/convert_html.c (convert_xref_commands): handle
    better formatting of internal ref in string context with nested
    references.
    
    * tp/maintain/check_epubcheck_texi_t.sh: call with
    NO_TOP_NODE_OUTPUT=0 to avoid lots of false positives.
    
    * tp/Makefile.tres, tp/t/html_tests.t
    (double_recursive_self_section_reference_node_no_use_node): new test
    of recursive references, split with USE_NODES=0.
---
 ChangeLog                                          |  14 +
 tp/Makefile.tres                                   |   2 +
 tp/Texinfo/Convert/HTML.pm                         |  31 +-
 tp/Texinfo/XS/convert/convert_html.c               |  22 +-
 tp/maintain/check_epubcheck_texi_t.sh              |   2 +-
 tp/t/html_tests.t                                  |  12 +
 ...sive_self_section_reference_node_no_use_node.pl | 321 +++++++++++++++++++++
 .../res_html/n1.html                               |  40 +++
 .../res_html/n2.html                               |  39 +++
 9 files changed, 469 insertions(+), 14 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 2827bb31e7..5f8da3efe4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2024-09-07  Patrice Dumas  <pertusus@free.fr>
+
+       * tp/Texinfo/Convert/HTML.pm (_convert_xref_commands),
+       tp/Texinfo/XS/convert/convert_html.c (convert_xref_commands): handle
+       better formatting of internal ref in string context with nested
+       references.
+
+       * tp/maintain/check_epubcheck_texi_t.sh: call with
+       NO_TOP_NODE_OUTPUT=0 to avoid lots of false positives.
+
+       * tp/Makefile.tres, tp/t/html_tests.t
+       (double_recursive_self_section_reference_node_no_use_node): new test
+       of recursive references, split with USE_NODES=0.
+
 2024-09-06  Patrice Dumas  <pertusus@free.fr>
 
        * tp/ext/epub3.pm (epub_finish): use transliterate_protect_file_name
diff --git a/tp/Makefile.tres b/tp/Makefile.tres
index 510283ab6a..7075766b5c 100644
--- a/tp/Makefile.tres
+++ b/tp/Makefile.tres
@@ -648,6 +648,8 @@ test_files_generated_list = 
$(test_tap_files_generated_list) \
   t/results/html_tests/double_contents_separate_element_nodes/res_html \
   t/results/html_tests/double_contents_separate_element_section.pl \
   t/results/html_tests/double_contents_separate_element_section/res_html \
+  
t/results/html_tests/double_recursive_self_section_reference_node_no_use_node.pl
 \
+  
t/results/html_tests/double_recursive_self_section_reference_node_no_use_node/res_html
 \
   t/results/html_tests/empty_chapter_in_html_title.pl \
   t/results/html_tests/empty_chapter_in_html_title/res_html \
   t/results/html_tests/empty_chapter_in_html_title_no_node_no_use_nodes.pl \
diff --git a/tp/Texinfo/Convert/HTML.pm b/tp/Texinfo/Convert/HTML.pm
index 863b75d7f7..7b77ad4e47 100644
--- a/tp/Texinfo/Convert/HTML.pm
+++ b/tp/Texinfo/Convert/HTML.pm
@@ -6112,7 +6112,10 @@ sub _convert_xref_commands($$$$)
          if (!$target_node->{'extra'}->{'associated_section'}
              or $target_node->{'extra'}->{'associated_section'} ne 
$target_root);
 
-    my $href = $self->command_href($target_root, undef, $command);
+    my $href;
+    if (!in_string($self)) {
+      $href = $self->command_href($target_root, undef, $command);
+    }
 
     if (!defined($name)) {
       if ($self->get_conf('xrefautomaticsectiontitle') eq 'on'
@@ -6127,10 +6130,19 @@ sub _convert_xref_commands($$$$)
          and not _command_is_in_referred_command_stack($self,
                           $target_node->{'extra'}->{'associated_section'})) {
         $target_root = $target_node->{'extra'}->{'associated_section'};
-        $name = $self->command_text($target_root, 'text_nonumber');
+        if (in_string($self)) {
+          $name = $self->command_text($target_root, 'string');
+        } else {
+          $name = $self->command_text($target_root, 'text_nonumber');
+        }
       } elsif ($target_node->{'cmdname'} eq 'float') {
         if (!$self->get_conf('XREF_USE_FLOAT_LABEL')) {
-          $name = $self->command_text($target_root);
+          if (in_string($self)) {
+            # not tested
+            $name = $self->command_text($target_root, 'string');
+          } else {
+            $name = $self->command_text($target_root);
+          }
         }
         if (!defined($name) or $name eq '') {
           if (defined($args->[0]->{'monospace'})) {
@@ -6147,7 +6159,11 @@ sub _convert_xref_commands($$$$)
          # to the node
               and not _command_is_in_referred_command_stack($self,
                                                             $target_root)) {
-        $name = $self->command_text($target_root, 'text_nonumber');
+        if (in_string($self)) {
+          $name = $self->command_text($target_root, 'string');
+        } else {
+          $name = $self->command_text($target_root, 'text_nonumber');
+        }
         #die "$target_root $target_root->{'normalized'}" if (!defined($name));
       } elsif (defined($args->[0]->{'monospace'})) {
         $name = $args->[0]->{'monospace'};
@@ -6156,9 +6172,10 @@ sub _convert_xref_commands($$$$)
       }
     }
     my $reference = $name;
-    $reference = $self->html_attribute_class('a', [$cmdname])
-                      ." href=\"$href\">$name</a>" if (defined($href)
-                                                       and !in_string($self));
+    if (defined($href)) {
+      $reference = $self->html_attribute_class('a', [$cmdname])
+                      ." href=\"$href\">$name</a>";
+    }
     my $substrings
       = { 'reference_name' => {'type' => '_converted', 'text' => $reference} };
 
diff --git a/tp/Texinfo/XS/convert/convert_html.c 
b/tp/Texinfo/XS/convert/convert_html.c
index a2cb6f3419..974ec0aa9d 100644
--- a/tp/Texinfo/XS/convert/convert_html.c
+++ b/tp/Texinfo/XS/convert/convert_html.c
@@ -12180,7 +12180,7 @@ convert_xref_commands (CONVERTER *self, const enum 
command_id cmd,
   /* internal reference */
   if (target_node)
     {
-      char *href;
+      char *href = 0;
       STRING_LIST *classes = 0;
      /* This is the node if USE_NODES, otherwise this may be the sectioning
         command (if the sectioning command is really associated to the node) */
@@ -12195,7 +12195,8 @@ convert_xref_commands (CONVERTER *self, const enum 
command_id cmd,
       if (!associated_section || associated_section != target_root)
         target_root = target_node;
 
-      href = html_command_href (self, target_root, 0, element, 0);
+      if (!html_in_string (self))
+        href = html_command_href (self, target_root, 0, element, 0);
 
       if (!name)
         {
@@ -12213,13 +12214,19 @@ convert_xref_commands (CONVERTER *self, const enum 
command_id cmd,
                    &self->referred_command_stack, associated_section, 0))
             {
               target_root = associated_section;
-              name = html_command_text (self, target_root, HTT_text_nonumber);
+              if (html_in_string (self))
+                name = html_command_text (self, target_root, HTT_string);
+              else
+                name = html_command_text (self, target_root, 
HTT_text_nonumber);
             }
           else if (target_node->cmd == CM_float)
             {
               if (self->conf->XREF_USE_FLOAT_LABEL.o.integer <= 0)
                 {
-                  name = html_command_text (self, target_root, 0);
+                  if (html_in_string (self))
+                    name = html_command_text (self, target_root, HTT_string);
+                  else
+                    name = html_command_text (self, target_root, 0);
                 }
               if (!name || !strlen (name))
                 {
@@ -12243,7 +12250,10 @@ convert_xref_commands (CONVERTER *self, const enum 
command_id cmd,
                    && !command_is_in_referred_command_stack (
                          &self->referred_command_stack, target_root, 0))
             {
-              name = html_command_text (self, target_root, HTT_text_nonumber);
+              if (html_in_string (self))
+                name = html_command_text (self, target_root, HTT_string);
+              else
+                name = html_command_text (self, target_root, 
HTT_text_nonumber);
             }
           else if (args_formatted->number > 0
                    && args_formatted->args[0].formatted[AFT_type_monospace])
@@ -12255,7 +12265,7 @@ convert_xref_commands (CONVERTER *self, const enum 
command_id cmd,
             name = strdup ("");
         }
 
-      if (href && !html_in_string (self))
+      if (href)
         {
           char *attribute_class;
 
diff --git a/tp/maintain/check_epubcheck_texi_t.sh 
b/tp/maintain/check_epubcheck_texi_t.sh
index 9d2d3c51f8..fa9fdafe06 100755
--- a/tp/maintain/check_epubcheck_texi_t.sh
+++ b/tp/maintain/check_epubcheck_texi_t.sh
@@ -85,7 +85,7 @@ for dir in `find t_texis/ -type d` ; do
       continue
     fi
     echo "    -> $file: EPUB"
-    ${srcdir}/texi2any.pl --epub --force --error=100000 -o 
$mdir/epubcheck_EPUB/$bdir/$bfile.epub -c 
SUBDIR=$mdir/epubcheck_package/$bdir/${bfile}_epub_package -c EPUB_STRICT=1 -c 
EPUB_KEEP_CONTAINER_FOLDER=1 $file
+    ${srcdir}/texi2any.pl --epub --force --error=100000 -o 
$mdir/epubcheck_EPUB/$bdir/$bfile.epub -c 
SUBDIR=$mdir/epubcheck_package/$bdir/${bfile}_epub_package -c EPUB_STRICT=1 -c 
EPUB_KEEP_CONTAINER_FOLDER=1 -c NO_TOP_NODE_OUTPUT=0 -c SHOW_TITLE=1 $file
     echo "              epubcheck"
     epubcheck $mdir/epubcheck_EPUB/$bdir/$bfile.epub 
2>$mdir/epubcheck_check/$bdir/$bfile.out
   done
diff --git a/tp/t/html_tests.t b/tp/t/html_tests.t
index 78b7e98df8..7113da6f37 100644
--- a/tp/t/html_tests.t
+++ b/tp/t/html_tests.t
@@ -1520,6 +1520,18 @@ undef, {'test_file' => 
'simple_only_special_spaces_node.texi',
         'init_files' => ['no_navigation.pm']},
        # needed to test for the bug
        {'SPLIT' => 'node'}],
+# also in *sectioning.t.  Here we are interested both by the infinite
+# recursion and by the title strings to verify that they do not end up
+# with attributes
+['double_recursive_self_section_reference_node_no_use_node',
+'@node n1
+@chapter @ref{n2}
+
+@node n2
+@chapter @ref{n1}
+', {}, {'USE_NODES' => 0,
+        # needed for the test
+        'SPLIT' => 'node'}],
 # also in *sectioning.t.  Here we are interested by testing spaces
 # in filenames.
 ['setfilename_on_top_and_after_node_epub',
diff --git 
a/tp/t/results/html_tests/double_recursive_self_section_reference_node_no_use_node.pl
 
b/tp/t/results/html_tests/double_recursive_self_section_reference_node_no_use_node.pl
new file mode 100644
index 0000000000..a95d749dbd
--- /dev/null
+++ 
b/tp/t/results/html_tests/double_recursive_self_section_reference_node_no_use_node.pl
@@ -0,0 +1,321 @@
+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 %result_indices_sort_strings);
+
+use utf8;
+
+$result_trees{'double_recursive_self_section_reference_node_no_use_node'} = {
+  'contents' => [
+    {
+      'contents' => [
+        {
+          'type' => 'preamble_before_content'
+        }
+      ],
+      'type' => 'before_node_section'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'text' => 'n1'
+            }
+          ],
+          'info' => {
+            'spaces_after_argument' => {
+              'text' => '
+'
+            }
+          },
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'node',
+      'extra' => {
+        'is_target' => 1,
+        'normalized' => 'n1'
+      },
+      'info' => {
+        'spaces_before_argument' => {
+          'text' => ' '
+        }
+      },
+      'source_info' => {
+        'line_nr' => 1
+      }
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'text' => 'n2'
+                    }
+                  ],
+                  'extra' => {
+                    'node_content' => {
+                      'contents' => [
+                        {}
+                      ]
+                    },
+                    'normalized' => 'n2'
+                  },
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => 'ref',
+              'source_info' => {
+                'line_nr' => 2
+              }
+            }
+          ],
+          'info' => {
+            'spaces_after_argument' => {
+              'text' => '
+'
+            }
+          },
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'chapter',
+      'contents' => [
+        {
+          'text' => '
+',
+          'type' => 'empty_line'
+        }
+      ],
+      'extra' => {
+        'section_number' => '1'
+      },
+      'info' => {
+        'spaces_before_argument' => {
+          'text' => ' '
+        }
+      },
+      'source_info' => {
+        'line_nr' => 2
+      }
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'text' => 'n2'
+            }
+          ],
+          'info' => {
+            'spaces_after_argument' => {
+              'text' => '
+'
+            }
+          },
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'node',
+      'extra' => {
+        'is_target' => 1,
+        'normalized' => 'n2'
+      },
+      'info' => {
+        'spaces_before_argument' => {
+          'text' => ' '
+        }
+      },
+      'source_info' => {
+        'line_nr' => 4
+      }
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'text' => 'n1'
+                    }
+                  ],
+                  'extra' => {
+                    'node_content' => {
+                      'contents' => [
+                        {}
+                      ]
+                    },
+                    'normalized' => 'n1'
+                  },
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => 'ref',
+              'source_info' => {
+                'line_nr' => 5
+              }
+            }
+          ],
+          'info' => {
+            'spaces_after_argument' => {
+              'text' => '
+'
+            }
+          },
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'chapter',
+      'extra' => {
+        'section_number' => '2'
+      },
+      'info' => {
+        'spaces_before_argument' => {
+          'text' => ' '
+        }
+      },
+      'source_info' => {
+        'line_nr' => 5
+      }
+    }
+  ],
+  'type' => 'document_root'
+};
+$result_trees{'double_recursive_self_section_reference_node_no_use_node'}{'contents'}[2]{'args'}[0]{'contents'}[0]{'args'}[0]{'extra'}{'node_content'}{'contents'}[0]
 = 
$result_trees{'double_recursive_self_section_reference_node_no_use_node'}{'contents'}[2]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'double_recursive_self_section_reference_node_no_use_node'}{'contents'}[4]{'args'}[0]{'contents'}[0]{'args'}[0]{'extra'}{'node_content'}{'contents'}[0]
 = 
$result_trees{'double_recursive_self_section_reference_node_no_use_node'}{'contents'}[4]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0];
+
+$result_texis{'double_recursive_self_section_reference_node_no_use_node'} = 
'@node n1
+@chapter @ref{n2}
+
+@node n2
+@chapter @ref{n1}
+';
+
+
+$result_texts{'double_recursive_self_section_reference_node_no_use_node'} = '1 
n2
+****
+
+2 n1
+****
+';
+
+$result_sectioning{'double_recursive_self_section_reference_node_no_use_node'} 
= {
+  'extra' => {
+    'section_childs' => [
+      {
+        'cmdname' => 'chapter',
+        'extra' => {
+          'associated_node' => {
+            'cmdname' => 'node',
+            'extra' => {
+              'normalized' => 'n1'
+            }
+          },
+          'section_directions' => {},
+          'section_level' => 1,
+          'section_number' => '1',
+          'sectioning_root' => {},
+          'toplevel_directions' => {}
+        }
+      },
+      {
+        'cmdname' => 'chapter',
+        'extra' => {
+          'associated_node' => {
+            'cmdname' => 'node',
+            'extra' => {
+              'normalized' => 'n2'
+            }
+          },
+          'section_directions' => {
+            'prev' => {}
+          },
+          'section_level' => 1,
+          'section_number' => '2',
+          'toplevel_directions' => {
+            'prev' => {}
+          }
+        }
+      }
+    ],
+    'section_level' => 0
+  }
+};
+$result_sectioning{'double_recursive_self_section_reference_node_no_use_node'}{'extra'}{'section_childs'}[0]{'extra'}{'sectioning_root'}
 = 
$result_sectioning{'double_recursive_self_section_reference_node_no_use_node'};
+$result_sectioning{'double_recursive_self_section_reference_node_no_use_node'}{'extra'}{'section_childs'}[1]{'extra'}{'section_directions'}{'prev'}
 = 
$result_sectioning{'double_recursive_self_section_reference_node_no_use_node'}{'extra'}{'section_childs'}[0];
+$result_sectioning{'double_recursive_self_section_reference_node_no_use_node'}{'extra'}{'section_childs'}[1]{'extra'}{'toplevel_directions'}{'prev'}
 = 
$result_sectioning{'double_recursive_self_section_reference_node_no_use_node'}{'extra'}{'section_childs'}[0];
+
+$result_nodes{'double_recursive_self_section_reference_node_no_use_node'} = [
+  {
+    'cmdname' => 'node',
+    'extra' => {
+      'associated_section' => {
+        'cmdname' => 'chapter',
+        'extra' => {
+          'section_number' => '1'
+        }
+      },
+      'node_directions' => {
+        'next' => {
+          'cmdname' => 'node',
+          'extra' => {
+            'associated_section' => {
+              'cmdname' => 'chapter',
+              'extra' => {
+                'section_number' => '2'
+              }
+            },
+            'node_directions' => {
+              'prev' => {}
+            },
+            'normalized' => 'n2'
+          }
+        }
+      },
+      'normalized' => 'n1'
+    }
+  },
+  {}
+];
+$result_nodes{'double_recursive_self_section_reference_node_no_use_node'}[0]{'extra'}{'node_directions'}{'next'}{'extra'}{'node_directions'}{'prev'}
 = $result_nodes{'double_recursive_self_section_reference_node_no_use_node'}[0];
+$result_nodes{'double_recursive_self_section_reference_node_no_use_node'}[1] = 
$result_nodes{'double_recursive_self_section_reference_node_no_use_node'}[0]{'extra'}{'node_directions'}{'next'};
+
+$result_menus{'double_recursive_self_section_reference_node_no_use_node'} = [
+  {
+    'extra' => {
+      'normalized' => 'n1'
+    }
+  },
+  {
+    'extra' => {
+      'normalized' => 'n2'
+    }
+  }
+];
+
+$result_errors{'double_recursive_self_section_reference_node_no_use_node'} = 
[];
+
+
+$result_floats{'double_recursive_self_section_reference_node_no_use_node'} = 
{};
+
+
+$result_converted_errors{'file_html'}->{'double_recursive_self_section_reference_node_no_use_node'}
 = [
+  {
+    'error_line' => 'warning: must specify a title with a title command or @top
+',
+    'file_name' => 
'double_recursive_self_section_reference_node_no_use_node.texi',
+    'text' => 'must specify a title with a title command or @top',
+    'type' => 'warning'
+  }
+];
+
+
+1;
diff --git 
a/tp/t/results/html_tests/double_recursive_self_section_reference_node_no_use_node/res_html/n1.html
 
b/tp/t/results/html_tests/double_recursive_self_section_reference_node_no_use_node/res_html/n1.html
new file mode 100644
index 0000000000..9dcb4b76a0
--- /dev/null
+++ 
b/tp/t/results/html_tests/double_recursive_self_section_reference_node_no_use_node/res_html/n1.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html>
+<!-- Created by texinfo, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>1 2 n1 (Untitled Document)</title>
+
+<meta name="description" content="1 2 n1 (Untitled Document)">
+<meta name="keywords" content="1 2 n1 (Untitled Document)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+
+<link href="#n1" rel="start" title="1 2 n1">
+<link href="n2.html" rel="next" title="2 n1">
+<style type="text/css">
+<!--
+a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
+span:hover a.copiable-link {visibility: visible}
+-->
+</style>
+
+
+</head>
+
+<body lang="en">
+<div class="chapter-level-extent" id="n1">
+<div class="nav-panel">
+<p>
+Next: <a href="n2.html" accesskey="n" rel="next"><a class="ref" href="#n1"><a 
class="ref" href="n2.html">n2</a></a></a> &nbsp; </p>
+</div>
+<hr>
+<h2 class="chapter" id="n2-1"><span>1 <a class="ref" href="n2.html"><a 
class="ref" href="#n1"><a class="ref" href="n2.html">n2</a></a></a><a 
class="copiable-link" href="#n2-1"> &para;</a></span></h2>
+
+</div>
+
+
+
+</body>
+</html>
diff --git 
a/tp/t/results/html_tests/double_recursive_self_section_reference_node_no_use_node/res_html/n2.html
 
b/tp/t/results/html_tests/double_recursive_self_section_reference_node_no_use_node/res_html/n2.html
new file mode 100644
index 0000000000..e56be49551
--- /dev/null
+++ 
b/tp/t/results/html_tests/double_recursive_self_section_reference_node_no_use_node/res_html/n2.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+<!-- Created by texinfo, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>2 1 2 n1 (Untitled Document)</title>
+
+<meta name="description" content="2 1 2 n1 (Untitled Document)">
+<meta name="keywords" content="2 1 2 n1 (Untitled Document)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+
+<link href="n1.html" rel="start" title="1 2 n1">
+<link href="n1.html" rel="prev" title="1 2 n1">
+<style type="text/css">
+<!--
+a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
+span:hover a.copiable-link {visibility: visible}
+-->
+</style>
+
+
+</head>
+
+<body lang="en">
+<div class="chapter-level-extent" id="n2">
+<div class="nav-panel">
+<p>
+Prev: <a href="n1.html" accesskey="p" rel="prev"><a class="ref" 
href="n2.html">n2</a></a> &nbsp; </p>
+</div>
+<hr>
+<h2 class="chapter" id="n1-1"><span>2 <a class="ref" href="n1.html"><a 
class="ref" href="n2.html">n2</a></a><a class="copiable-link" href="#n1-1"> 
&para;</a></span></h2>
+</div>
+
+
+
+</body>
+</html>



reply via email to

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