texinfo-commits
[Top][All Lists]
Advanced

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

[no subject]


From: Patrice Dumas
Date: Wed, 2 Oct 2024 02:13:43 -0400 (EDT)

branch: master
commit 18fd6f317069ebc806ea44479717411d6b1a5634
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Tue Jul 30 14:43:08 2024 +0200

    * tp/Texinfo/XS/convert/convert_html.c (direction_string)
    (from_element_direction): return 0 if the direction is negative, which
    should mean a Perl direction not found in C.
    
    * tp/Texinfo/XS/main/get_perl_info.c (html_get_direction_index):
    return -2 if there are directions in the converter and the direction
    is not found (instead of -1).
    
    * tp/Texinfo/XS/main/get_perl_info.c
    (html_get_button_specification_list): add more checks of empty arrays,
    undef values.
    
    * tp/Makefile.am (test_files), tp/Makefile.tres,
    tp/t/init_files_tests.t ($special_unit_direction_customization_text)
    (special_unit_direction_customization),
    tp/t/init/special_unit_direction_customization.pm: add test of special
    unit direction customization.
---
 ChangeLog                                          |  20 ++
 tp/Makefile.am                                     |   1 +
 tp/Makefile.tres                                   |   2 +
 tp/Texinfo/XS/convert/convert_html.c               |  11 +-
 tp/Texinfo/XS/convert/get_converter_perl_info.c    |  87 -------
 tp/Texinfo/XS/main/get_perl_info.c                 |  51 +++-
 tp/t/init/special_unit_direction_customization.pm  |   4 +
 tp/t/init_files_tests.t                            |  15 ++
 .../special_unit_direction_customization.pl        | 290 +++++++++++++++++++++
 .../res_html/chapter.html                          |  40 +++
 .../res_html/index.html                            |  57 ++++
 11 files changed, 486 insertions(+), 92 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 78c353aac3..df97d5aaf2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2024-07-30  Patrice Dumas  <pertusus@free.fr>
+
+       * tp/Texinfo/XS/convert/convert_html.c (direction_string)
+       (from_element_direction): return 0 if the direction is negative, which
+       should mean a Perl direction not found in C.
+
+       * tp/Texinfo/XS/main/get_perl_info.c (html_get_direction_index):
+       return -2 if there are directions in the converter and the direction
+       is not found (instead of -1).
+
+       * tp/Texinfo/XS/main/get_perl_info.c
+       (html_get_button_specification_list): add more checks of empty arrays,
+       undef values.
+
+       * tp/Makefile.am (test_files), tp/Makefile.tres,
+       tp/t/init_files_tests.t ($special_unit_direction_customization_text)
+       (special_unit_direction_customization),
+       tp/t/init/special_unit_direction_customization.pm: add test of special
+       unit direction customization.
+
 2024-07-30  Patrice Dumas  <pertusus@free.fr>
 
        * tp/Texinfo/XS/convert/convert_html.c
diff --git a/tp/Makefile.am b/tp/Makefile.am
index 4fe28ecead..5600c998e7 100644
--- a/tp/Makefile.am
+++ b/tp/Makefile.am
@@ -204,6 +204,7 @@ test_files = \
  t/init/redirection_file_collision_with_user_def.init \
  t/init/set_unit_file_name_filepath.pm \
  t/init/special_element_customization.pm \
+ t/init/special_unit_direction_customization.pm \
  t/init/t2h_buttons.pm \
  t/init/t2h_singular.init \
  t/init/test_css_info_functions.pm \
diff --git a/tp/Makefile.tres b/tp/Makefile.tres
index efc19ed084..be400a7969 100644
--- a/tp/Makefile.tres
+++ b/tp/Makefile.tres
@@ -1123,6 +1123,8 @@ test_files_generated_list = 
$(test_tap_files_generated_list) \
   t/results/init_files_tests/redefined_need.pl \
   t/results/init_files_tests/sc_formatting_with_css.pl \
   t/results/init_files_tests/sc_formatting_with_css/res_html \
+  t/results/init_files_tests/special_unit_direction_customization.pl \
+  t/results/init_files_tests/special_unit_direction_customization/res_html \
   t/results/init_files_tests/test_format_single_footnote_in_inline_content.pl \
   
t/results/init_files_tests/test_format_single_footnote_in_inline_content/res_html
 \
   t/results/init_files_tests/translation_in_parser_in_translation.pl \
diff --git a/tp/Texinfo/XS/convert/convert_html.c 
b/tp/Texinfo/XS/convert/convert_html.c
index 8c81c24c76..0b89056583 100644
--- a/tp/Texinfo/XS/convert/convert_html.c
+++ b/tp/Texinfo/XS/convert/convert_html.c
@@ -3039,6 +3039,11 @@ direction_string (CONVERTER *self, int direction,
                   enum direction_string_context context)
 {
   int direction_unit_direction_idx = direction;
+
+  /* Perl direction not found in C */
+  if (direction < 0)
+    return 0;
+
   if (direction >= FIRSTINFILE_MIN_IDX && direction <= FIRSTINFILE_MAX_IDX)
     {
       direction += FIRSTINFILE_OFFSET;
@@ -4413,6 +4418,10 @@ from_element_direction (CONVERTER *self, int direction,
   const OUTPUT_UNIT *target_unit = 0;
   const ELEMENT *command = 0;
 
+  /* this means that the direction given in Perl was not found in C */
+  if (direction < 0)
+    return 0;
+
   if (!source_unit)
     source_unit = self->current_output_unit;
 
@@ -4422,7 +4431,7 @@ from_element_direction (CONVERTER *self, int direction,
     filename_from = self->current_filename.filename;
 
   /* To debug:
-  fprintf (stderr, "%s %s\n", html_command_text_type_name[type],
+  fprintf (stderr, "FED: %s %s\n", html_command_text_type_name[type],
                               self->direction_unit_direction_name[direction]);
    */
 
diff --git a/tp/Texinfo/XS/convert/get_converter_perl_info.c 
b/tp/Texinfo/XS/convert/get_converter_perl_info.c
index 13ef9a5377..8c935b0bde 100644
--- a/tp/Texinfo/XS/convert/get_converter_perl_info.c
+++ b/tp/Texinfo/XS/convert/get_converter_perl_info.c
@@ -169,92 +169,6 @@ get_expanded_formats (HV *hv, EXPANDED_FORMAT 
**expanded_formats)
     }
 }
 
-/* Texinfo::Convert::Converter generic initialization for all the converters */
-/* Called early, in particuliar before any format specific code has been
-   called */
-int
-converter_initialize (SV *converter_sv)
-{
-  HV *hv_in;
-  SV **configured_sv;
-  SV **output_format_sv;
-  size_t converter_descriptor = 0;
-  CONVERTER *converter;
-
-  dTHX;
-
-  converter_descriptor = new_converter ();
-  converter = retrieve_converter (converter_descriptor);
-
-  hv_in = (HV *)SvRV (converter_sv);
-
-#define FETCH(key) key##_sv = hv_fetch (hv_in, #key, strlen (#key), 0);
-  FETCH(output_format)
-
-  if (output_format_sv && SvOK (*output_format_sv))
-    {
-      converter->output_format
-         = non_perl_strdup (SvPVutf8_nolen (*output_format_sv));
-    }
-
-   /*
-  fprintf (stderr, "XS|CONVERTER Init: %zu; %s\n", converter_descriptor,
-                   converter->output_format);
-    */
-
-  converter->conf = new_options ();
-  /* force is not set, but at this point, the configured field should not
-     be set, so it would not have an effect anyway */
-  copy_converter_conf_sv (hv_in, converter, &converter->conf, "conf", 0);
-
-  converter->init_conf = new_options ();
-  copy_converter_conf_sv (hv_in, converter, &converter->init_conf,
-                                              "converter_init_conf", 1);
-
-  FETCH(configured);
-
-  if (configured_sv && SvOK (*configured_sv))
-    {
-      get_sv_configured_options (*configured_sv, converter->conf);
-    }
-
-#undef FETCH
-  set_translated_commands (converter, hv_in);
-
-  converter->expanded_formats = new_expanded_formats ();
-  set_expanded_formats_from_options (converter->expanded_formats,
-                                     converter->conf);
-
-  converter->hv = hv_in;
-
-  /* store converter_descriptor in perl converter */
-  hv_store (hv_in, "converter_descriptor",
-            strlen ("converter_descriptor"),
-            newSViv (converter_descriptor), 0);
-
-  return converter_descriptor;
-}
-
-/* currently unused */
-/* reset output_init_conf.  Can be called after it has been modified */
-void
-reset_output_init_conf (SV *sv_in)
-{
-  CONVERTER *converter;
-
-  dTHX;
-
-  converter = get_sv_converter (sv_in, "reset_output_init_conf");
-
-  if (converter)
-    {
-      HV *hv_in = (HV *)SvRV (sv_in);
-
-      copy_converter_conf_sv (hv_in, converter, &converter->init_conf,
-                             "output_init_conf", 1);
-    }
-}
-
 /* output format specific */
 
 /* map hash reference of Convert::Text options to TEXT_OPTIONS */
@@ -345,4 +259,3 @@ copy_sv_options_for_convert_text (SV *sv_in)
   return text_options;
 }
 #undef FETCH
-
diff --git a/tp/Texinfo/XS/main/get_perl_info.c 
b/tp/Texinfo/XS/main/get_perl_info.c
index 63618f2608..6ebe8cb374 100644
--- a/tp/Texinfo/XS/main/get_perl_info.c
+++ b/tp/Texinfo/XS/main/get_perl_info.c
@@ -736,6 +736,9 @@ force_sv_conf (CONVERTER *converter, const char *conf, SV 
*value)
     get_sv_option (converter->conf, conf, value, 1, converter);
 }
 
+/* output format specific */
+
+/* return -2 if there are info and not found. */
 static int
 html_get_direction_index (const CONVERTER *converter, const char *direction)
 {
@@ -747,6 +750,7 @@ html_get_direction_index (const CONVERTER *converter, const 
char *direction)
           if (!strcmp (direction, converter->direction_unit_direction_name[i]))
             return i;
         }
+      return -2;
     }
   return -1;
 }
@@ -792,6 +796,10 @@ html_get_button_specification_list (const CONVERTER 
*converter,
 
   result->BIT_user_function_number = 0;
   result->number = (size_t) buttons_nr;
+
+  if (result->number == 0)
+    return 0;
+
   result->list = (BUTTON_SPECIFICATION *)
     malloc (result->number * sizeof (BUTTON_SPECIFICATION));
   memset (result->list, 0, result->number * sizeof (BUTTON_SPECIFICATION));
@@ -801,6 +809,11 @@ html_get_button_specification_list (const CONVERTER 
*converter,
       SV **button_sv = av_fetch (buttons_av, i, 0);
       BUTTON_SPECIFICATION *button = &result->list[i];
 
+      if (!button_sv || !SvOK (*button_sv))
+        {
+          fprintf (stderr, "ERROR: missing button %zu\n", i);
+        }
+
       button->sv = *button_sv;
       SvREFCNT_inc (button->sv);
 
@@ -811,12 +824,13 @@ html_get_button_specification_list (const CONVERTER 
*converter,
               button->type = BST_function;
               button->b.sv_reference = *button_sv;
             }
-          else if (SvTYPE (SvRV(*button_sv)) == SVt_PVAV)
+          else if (SvTYPE (SvRV(*button_sv)) == SVt_PVAV) /* ARRAY */
             {
               AV *button_spec_info_av = (AV *) SvRV(*button_sv);
               SV **direction_sv = av_fetch (button_spec_info_av, 0, 0);
               SV **button_spec_info_type
                  = av_fetch (button_spec_info_av, 1, 0);
+              const char *direction_name;
 
               BUTTON_SPECIFICATION_INFO *button_spec
                 = (BUTTON_SPECIFICATION_INFO *)
@@ -826,9 +840,32 @@ html_get_button_specification_list (const CONVERTER 
*converter,
               button->type = BST_direction_info;
               button->b.button_info = button_spec;
 
+              if (!direction_sv || !SvOK (*direction_sv))
+                {
+                  fprintf (stderr,
+                           "ERROR: missing direction in button %zu array\n",
+                           i);
+                  continue;
+                }
+              if (!button_spec_info_type || !SvOK (*button_spec_info_type))
+                {
+                  fprintf (stderr,
+                           "ERROR: missing specification in button %zu 
array\n",
+                           i);
+                  continue;
+                }
+
+              direction_name = SvPVutf8_nolen (*direction_sv);
               button_spec->direction
-                = html_get_direction_index (converter,
-                                            SvPVutf8_nolen (*direction_sv));
+                = html_get_direction_index (converter, direction_name);
+               /* to debug
+              if (button_spec->direction == -2)
+                {
+                  fprintf (stderr,
+                           "REMARK: unknown button %zu array direction: %s\n",
+                           i, direction_name);
+                }
+                */
 
               if (SvROK (*button_spec_info_type))
                 {
@@ -904,9 +941,15 @@ html_get_button_specification_list (const CONVERTER 
*converter,
         }
       else
         {
+          const char *direction_name = SvPVutf8_nolen (*button_sv);
           button->type = BST_direction;
           button->b.direction = html_get_direction_index (converter,
-                                              SvPVutf8_nolen (*button_sv));
+                                                          direction_name);
+           /* To debug
+          if (button->b.direction == -2)
+            fprintf (stderr, "REMARK: unknown button %zu string direction: 
%s\n",
+                             i, direction_name);
+            */
         }
     }
 
diff --git a/tp/t/init/special_unit_direction_customization.pm 
b/tp/t/init/special_unit_direction_customization.pm
new file mode 100644
index 0000000000..7bf78a6da9
--- /dev/null
+++ b/tp/t/init/special_unit_direction_customization.pm
@@ -0,0 +1,4 @@
+
+use strict;
+
+texinfo_register_special_unit_info('direction', 'contents', 'Table');
diff --git a/tp/t/init_files_tests.t b/tp/t/init_files_tests.t
index cf6a88d62f..c0ee55011a 100644
--- a/tp/t/init_files_tests.t
+++ b/tp/t/init_files_tests.t
@@ -109,6 +109,15 @@ my $documentation_examples_text = '
 
 ';
 
+my $special_unit_direction_customization_text = '@contents
+
+@node Top
+@top top
+
+@node chapter
+@chapter chap
+';
+
 my @file_tests = (
 ['customize_translations',
 '
@@ -254,6 +263,12 @@ In quotation
 @chapter Chap
 ', {'init_files' => ['access_document_name_in_handler.pm']},
 ],
+# a series of tests with special unit direction customization showing the
+# effect of adding customization information needed by the change.
+['special_unit_direction_customization',
+$special_unit_direction_customization_text,
+{'init_files' => ['special_unit_direction_customization.pm']},
+],
 );
 
 foreach my $test (@test_cases) {
diff --git 
a/tp/t/results/init_files_tests/special_unit_direction_customization.pl 
b/tp/t/results/init_files_tests/special_unit_direction_customization.pl
new file mode 100644
index 0000000000..e09c729ad6
--- /dev/null
+++ b/tp/t/results/init_files_tests/special_unit_direction_customization.pl
@@ -0,0 +1,290 @@
+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{'special_unit_direction_customization'} = {
+  'contents' => [
+    {
+      'contents' => [
+        {
+          'contents' => [
+            {
+              'args' => [
+                {
+                  'text' => '
+',
+                  'type' => 'rawline_arg'
+                }
+              ],
+              'cmdname' => 'contents',
+              'extra' => {},
+              'source_info' => {
+                'line_nr' => 1
+              }
+            },
+            {
+              'text' => '
+',
+              'type' => 'empty_line'
+            }
+          ],
+          'type' => 'preamble_before_content'
+        }
+      ],
+      'type' => 'before_node_section'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'text' => 'Top'
+            }
+          ],
+          'info' => {
+            'spaces_after_argument' => {
+              'text' => '
+'
+            }
+          },
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'node',
+      'extra' => {
+        'is_target' => 1,
+        'normalized' => 'Top'
+      },
+      'info' => {
+        'spaces_before_argument' => {
+          'text' => ' '
+        }
+      },
+      'source_info' => {
+        'line_nr' => 3
+      }
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'text' => 'top'
+            }
+          ],
+          'info' => {
+            'spaces_after_argument' => {
+              'text' => '
+'
+            }
+          },
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'top',
+      'contents' => [
+        {
+          'text' => '
+',
+          'type' => 'empty_line'
+        }
+      ],
+      'extra' => {},
+      'info' => {
+        'spaces_before_argument' => {
+          'text' => ' '
+        }
+      },
+      'source_info' => {
+        'line_nr' => 4
+      }
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'text' => 'chapter'
+            }
+          ],
+          'info' => {
+            'spaces_after_argument' => {
+              'text' => '
+'
+            }
+          },
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'node',
+      'extra' => {
+        'is_target' => 1,
+        'normalized' => 'chapter'
+      },
+      'info' => {
+        'spaces_before_argument' => {
+          'text' => ' '
+        }
+      },
+      'source_info' => {
+        'line_nr' => 6
+      }
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'text' => 'chap'
+            }
+          ],
+          'info' => {
+            'spaces_after_argument' => {
+              'text' => '
+'
+            }
+          },
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'chapter',
+      'extra' => {
+        'section_number' => '1'
+      },
+      'info' => {
+        'spaces_before_argument' => {
+          'text' => ' '
+        }
+      },
+      'source_info' => {
+        'line_nr' => 7
+      }
+    }
+  ],
+  'type' => 'document_root'
+};
+
+$result_texis{'special_unit_direction_customization'} = '@contents
+
+@node Top
+@top top
+
+@node chapter
+@chapter chap
+';
+
+
+$result_texts{'special_unit_direction_customization'} = '
+top
+***
+
+1 chap
+******
+';
+
+$result_sectioning{'special_unit_direction_customization'} = {
+  'extra' => {
+    'section_childs' => [
+      {
+        'cmdname' => 'top',
+        'extra' => {
+          'associated_node' => {
+            'cmdname' => 'node',
+            'extra' => {
+              'normalized' => 'Top'
+            }
+          },
+          'section_childs' => [
+            {
+              'cmdname' => 'chapter',
+              'extra' => {
+                'associated_node' => {
+                  'cmdname' => 'node',
+                  'extra' => {
+                    'normalized' => 'chapter'
+                  }
+                },
+                'section_directions' => {
+                  'up' => {}
+                },
+                'section_level' => 1,
+                'section_number' => '1',
+                'toplevel_directions' => {
+                  'prev' => {},
+                  'up' => {}
+                }
+              }
+            }
+          ],
+          'section_level' => 0,
+          'sectioning_root' => {},
+          'toplevel_directions' => {}
+        }
+      }
+    ],
+    'section_level' => -1
+  }
+};
+$result_sectioning{'special_unit_direction_customization'}{'extra'}{'section_childs'}[0]{'extra'}{'section_childs'}[0]{'extra'}{'section_directions'}{'up'}
 = 
$result_sectioning{'special_unit_direction_customization'}{'extra'}{'section_childs'}[0];
+$result_sectioning{'special_unit_direction_customization'}{'extra'}{'section_childs'}[0]{'extra'}{'section_childs'}[0]{'extra'}{'toplevel_directions'}{'prev'}
 = 
$result_sectioning{'special_unit_direction_customization'}{'extra'}{'section_childs'}[0];
+$result_sectioning{'special_unit_direction_customization'}{'extra'}{'section_childs'}[0]{'extra'}{'section_childs'}[0]{'extra'}{'toplevel_directions'}{'up'}
 = 
$result_sectioning{'special_unit_direction_customization'}{'extra'}{'section_childs'}[0];
+$result_sectioning{'special_unit_direction_customization'}{'extra'}{'section_childs'}[0]{'extra'}{'sectioning_root'}
 = $result_sectioning{'special_unit_direction_customization'};
+
+$result_nodes{'special_unit_direction_customization'} = [
+  {
+    'cmdname' => 'node',
+    'extra' => {
+      'associated_section' => {
+        'cmdname' => 'top',
+        'extra' => {}
+      },
+      'node_directions' => {
+        'next' => {
+          'cmdname' => 'node',
+          'extra' => {
+            'associated_section' => {
+              'cmdname' => 'chapter',
+              'extra' => {
+                'section_number' => '1'
+              }
+            },
+            'node_directions' => {
+              'prev' => {},
+              'up' => {}
+            },
+            'normalized' => 'chapter'
+          }
+        }
+      },
+      'normalized' => 'Top'
+    }
+  },
+  {}
+];
+$result_nodes{'special_unit_direction_customization'}[0]{'extra'}{'node_directions'}{'next'}{'extra'}{'node_directions'}{'prev'}
 = $result_nodes{'special_unit_direction_customization'}[0];
+$result_nodes{'special_unit_direction_customization'}[0]{'extra'}{'node_directions'}{'next'}{'extra'}{'node_directions'}{'up'}
 = $result_nodes{'special_unit_direction_customization'}[0];
+$result_nodes{'special_unit_direction_customization'}[1] = 
$result_nodes{'special_unit_direction_customization'}[0]{'extra'}{'node_directions'}{'next'};
+
+$result_menus{'special_unit_direction_customization'} = [
+  {
+    'extra' => {
+      'normalized' => 'Top'
+    }
+  },
+  {
+    'extra' => {
+      'normalized' => 'chapter'
+    }
+  }
+];
+
+$result_errors{'special_unit_direction_customization'} = [];
+
+
+$result_floats{'special_unit_direction_customization'} = {};
+
+
+1;
diff --git 
a/tp/t/results/init_files_tests/special_unit_direction_customization/res_html/chapter.html
 
b/tp/t/results/init_files_tests/special_unit_direction_customization/res_html/chapter.html
new file mode 100644
index 0000000000..dbd842248d
--- /dev/null
+++ 
b/tp/t/results/init_files_tests/special_unit_direction_customization/res_html/chapter.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>chapter (top)</title>
+
+<meta name="description" content="chapter (top)">
+<meta name="keywords" content="chapter (top)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+
+<link href="index.html" rel="start" title="Top">
+<link href="index.html" rel="up" title="Top">
+<link href="index.html" rel="prev" title="Top">
+<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="chapter">
+<div class="nav-panel">
+<p>
+Previous: <a href="index.html" accesskey="p" rel="prev">top</a>, Up: <a 
href="index.html" accesskey="u" rel="up">top</a> &nbsp; </p>
+</div>
+<hr>
+<h2 class="chapter" id="chap"><span>1 chap<a class="copiable-link" 
href="#chap"> &para;</a></span></h2>
+</div>
+
+
+
+</body>
+</html>
diff --git 
a/tp/t/results/init_files_tests/special_unit_direction_customization/res_html/index.html
 
b/tp/t/results/init_files_tests/special_unit_direction_customization/res_html/index.html
new file mode 100644
index 0000000000..bb84e0b7a0
--- /dev/null
+++ 
b/tp/t/results/init_files_tests/special_unit_direction_customization/res_html/index.html
@@ -0,0 +1,57 @@
+<!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>Top (top)</title>
+
+<meta name="description" content="Top (top)">
+<meta name="keywords" content="Top (top)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+
+<link href="#Top" rel="start" title="Top">
+<link href="chapter.html" rel="next" title="chapter">
+<style type="text/css">
+<!--
+a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
+span:hover a.copiable-link {visibility: visible}
+ul.toc-numbered-mark {list-style: none}
+-->
+</style>
+
+
+</head>
+
+<body lang="en">
+
+<div class="top-level-extent" id="Top">
+<div class="nav-panel">
+<p>
+Next: <a href="chapter.html" accesskey="n" rel="next">chap</a> &nbsp; </p>
+</div>
+<hr>
+<h1 class="top" id="top"><span>top<a class="copiable-link" href="#top"> 
&para;</a></span></h1>
+
+<div class="region-contents" id="SEC_Contents">
+<h2 class="contents-heading">Table of Contents</h2>
+
+<div class="contents">
+
+<ul class="toc-numbered-mark">
+  <li><a id="toc-chap" href="chapter.html">1 chap</a></li>
+</ul>
+</div>
+</div>
+</div>
+<hr>
+<div class="nav-panel">
+<p>
+Next: <a href="chapter.html" accesskey="n" rel="next">chap</a> &nbsp; </p>
+</div>
+
+
+
+</body>
+</html>



reply via email to

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