texinfo-commits
[Top][All Lists]
Advanced

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

[no subject]


From: Patrice Dumas
Date: Sat, 22 Oct 2022 11:03:14 -0400 (EDT)

branch: master
commit d79cafd640b947c3a67df0f71ce98f327ba7276c
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Sat Oct 22 17:02:59 2022 +0200

    * tp/Texinfo/ParserNonXS.pm (_parse_line_command_args): set
    definfoenclose defined command nesting.
---
 ChangeLog                                          |   5 +
 tp/Texinfo/ParserNonXS.pm                          |   7 +-
 tp/Texinfo/XS/parsetexi/parser.c                   |  11 +-
 tp/t/08misc_commands.t                             |  11 +
 .../misc_commands/definfoenclose_nestings.pl       | 426 +++++++++++++++++++++
 5 files changed, 453 insertions(+), 7 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 35faa36bfb..029a2bbae7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2022-10-22  Patrice Dumas  <pertusus@free.fr>
+
+       * tp/Texinfo/ParserNonXS.pm (_parse_line_command_args): set
+       definfoenclose defined command nesting.
+
 2022-10-22  Eli Zaretskii  <eliz@gnu.org>
 
        * tp/Texinfo/XS/parsetexi/api.c
diff --git a/tp/Texinfo/ParserNonXS.pm b/tp/Texinfo/ParserNonXS.pm
index 65383db694..357a665ef1 100644
--- a/tp/Texinfo/ParserNonXS.pm
+++ b/tp/Texinfo/ParserNonXS.pm
@@ -456,7 +456,6 @@ foreach my $not_in_simple_text_command('xref', 'ref', 
'pxref', 'inforef') {
 }
 
 
-
 # commands that only accept plain text, ie only accent, symbol and glyph 
commands
 my %plain_text_commands = %contain_plain_text_commands;
 
@@ -5985,7 +5984,11 @@ sub _parse_line_command_args($$$)
       $self->{'definfoenclose'}->{$cmd_name} = [ $begin, $end ];
       print STDERR "DEFINFOENCLOSE \@$cmd_name: $begin, $end\n"
                if ($self->{'DEBUG'});
-      $self->{'brace_commands'}->{$cmd_name} = 'definfoenclose';
+      # consistent with XS parser, not actually used anywhere.
+      $self->{'brace_commands'}->{$cmd_name} = 'style_other';
+      # this allows to obtain the same result as the XS parser which checks
+      # dynamically the brace_commands type
+      $self->{'valid_nestings'}->{$cmd_name} = \%in_full_text_commands;
       # note that a built-in command previously in a hash classifying the
       # @-command will remain there, possibly having specific effects.
     } else {
diff --git a/tp/Texinfo/XS/parsetexi/parser.c b/tp/Texinfo/XS/parsetexi/parser.c
index f0c1cf02c1..1e3f19bea1 100644
--- a/tp/Texinfo/XS/parsetexi/parser.c
+++ b/tp/Texinfo/XS/parsetexi/parser.c
@@ -904,7 +904,7 @@ check_valid_nesting (ELEMENT *current, enum command_id cmd)
   /* Check whether outer command can contain cmd.  Commands are
      classified according to what commands they can contain:
 
-     accents
+     plain text
      full text
      simple text
      full line
@@ -914,8 +914,7 @@ check_valid_nesting (ELEMENT *current, enum command_id cmd)
 
   int ok = 0; /* Whether nesting is allowed. */
 
-  /* Whether command is a "simple text" command.  Use a variable
-     to avoid repeating a complex conditional. */
+  /* Whether command is a "simple text" command */
   int simple_text_command = 0;
 
   enum command_id outer = current->parent->cmd;
@@ -975,8 +974,10 @@ check_valid_nesting (ELEMENT *current, enum command_id cmd)
     {
       /* Start by checking if the command is allowed inside a "full text 
          command" - this is the most permissive. */
-      /* all the brace commands */
-      /* FIXME except of CF_INFOENCLOSE, seems different from perl Parser? */
+      /* in the perl parser the checks are not dynamic as in this function,
+         a hash is used and modified when defining the definfoencose command */
+      /* all the brace commands, not the definfoenclose commands, which
+         should be consistent with the perl parser */
       if (cmd_flags & CF_brace && !(cmd_flags & CF_INFOENCLOSE))
         ok = 1;
       if (cmd_flags & CF_nobrace && command_data(cmd).data == NOBRACE_symbol)
diff --git a/tp/t/08misc_commands.t b/tp/t/08misc_commands.t
index cb6cd35f09..97e379b9e3 100644
--- a/tp/t/08misc_commands.t
+++ b/tp/t/08misc_commands.t
@@ -229,6 +229,17 @@ definfoenclose phi,:,:  @definfoenclose phi,:,:
 
 My @headword{something}.
 
+'],
+['definfoenclose_nestings',
+'@definfoenclose phoo,//,\\
+
+@code{@phoo{in phoo in code}}.
+
+@phoo{@code{in code in phoo}}.
+
+@phoo{
+@center in center in phoo
+}
 '],
 ['no_empty_line_between_headings',
 '@top Top
diff --git a/tp/t/results/misc_commands/definfoenclose_nestings.pl 
b/tp/t/results/misc_commands/definfoenclose_nestings.pl
new file mode 100644
index 0000000000..e5cdc7128c
--- /dev/null
+++ b/tp/t/results/misc_commands/definfoenclose_nestings.pl
@@ -0,0 +1,426 @@
+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{'definfoenclose_nestings'} = {
+  'contents' => [
+    {
+      'contents' => [
+        {
+          'args' => [
+            {
+              'contents' => [
+                {
+                  'parent' => {},
+                  'text' => 'phoo,//,\\'
+                }
+              ],
+              'extra' => {
+                'spaces_after_argument' => '
+'
+              },
+              'parent' => {},
+              'type' => 'line_arg'
+            }
+          ],
+          'cmdname' => 'definfoenclose',
+          'extra' => {
+            'misc_args' => [
+              'phoo',
+              '//',
+              '\\'
+            ],
+            'spaces_before_argument' => ' '
+          },
+          'parent' => {},
+          'source_info' => {
+            'file_name' => '',
+            'line_nr' => 1,
+            'macro' => ''
+          }
+        },
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'contents' => [
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'args' => [
+                        {
+                          'contents' => [
+                            {
+                              'parent' => {},
+                              'text' => 'in phoo in code'
+                            }
+                          ],
+                          'parent' => {},
+                          'type' => 'brace_command_arg'
+                        }
+                      ],
+                      'cmdname' => 'phoo',
+                      'extra' => {
+                        'begin' => '//',
+                        'end' => '\\'
+                      },
+                      'parent' => {},
+                      'source_info' => {
+                        'file_name' => '',
+                        'line_nr' => 3,
+                        'macro' => ''
+                      },
+                      'type' => 'definfoenclose_command'
+                    }
+                  ],
+                  'parent' => {},
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => 'code',
+              'parent' => {},
+              'source_info' => {
+                'file_name' => '',
+                'line_nr' => 3,
+                'macro' => ''
+              }
+            },
+            {
+              'parent' => {},
+              'text' => '.
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'paragraph'
+        },
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'contents' => [
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'args' => [
+                        {
+                          'contents' => [
+                            {
+                              'parent' => {},
+                              'text' => 'in code in phoo'
+                            }
+                          ],
+                          'parent' => {},
+                          'type' => 'brace_command_arg'
+                        }
+                      ],
+                      'cmdname' => 'code',
+                      'parent' => {},
+                      'source_info' => {
+                        'file_name' => '',
+                        'line_nr' => 5,
+                        'macro' => ''
+                      }
+                    }
+                  ],
+                  'parent' => {},
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => 'phoo',
+              'extra' => {
+                'begin' => '//',
+                'end' => '\\'
+              },
+              'parent' => {},
+              'source_info' => {
+                'file_name' => '',
+                'line_nr' => 5,
+                'macro' => ''
+              },
+              'type' => 'definfoenclose_command'
+            },
+            {
+              'parent' => {},
+              'text' => '.
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'paragraph'
+        },
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'contents' => [
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'parent' => {},
+                      'text' => '
+'
+                    }
+                  ],
+                  'parent' => {},
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => 'phoo',
+              'extra' => {
+                'begin' => '//',
+                'end' => '\\'
+              },
+              'parent' => {},
+              'source_info' => {
+                'file_name' => '',
+                'line_nr' => 7,
+                'macro' => ''
+              },
+              'type' => 'definfoenclose_command'
+            }
+          ],
+          'parent' => {},
+          'type' => 'paragraph'
+        },
+        {
+          'args' => [
+            {
+              'contents' => [
+                {
+                  'parent' => {},
+                  'text' => 'in center in phoo'
+                }
+              ],
+              'extra' => {
+                'spaces_after_argument' => '
+'
+              },
+              'parent' => {},
+              'type' => 'line_arg'
+            }
+          ],
+          'cmdname' => 'center',
+          'extra' => {
+            'spaces_before_argument' => ' '
+          },
+          'parent' => {},
+          'source_info' => {
+            'file_name' => '',
+            'line_nr' => 8,
+            'macro' => ''
+          }
+        },
+        {
+          'parent' => {},
+          'text' => '
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'before_node_section'
+    }
+  ],
+  'type' => 'document_root'
+};
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[1]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = 
$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'args'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'args'}[0]{'parent'}
 = 
$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[2]{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[2];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[2]{'contents'}[1]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[2];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[2]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[3]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[4]{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[4]{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[4]{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = 
$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[4]{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[4]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[4]{'contents'}[0]{'args'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[4]{'contents'}[0]{'args'}[0]{'parent'}
 = 
$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[4]{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[4]{'contents'}[0]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[4];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[4]{'contents'}[1]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[4];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[4]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[5]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[6]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[6]{'contents'}[0]{'args'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[6]{'contents'}[0]{'args'}[0]{'parent'}
 = 
$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[6]{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[6]{'contents'}[0]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[6];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[6]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[7]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[7]{'args'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[7]{'args'}[0]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[7];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[7]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'contents'}[8]{'parent'}
 = $result_trees{'definfoenclose_nestings'}{'contents'}[0];
+$result_trees{'definfoenclose_nestings'}{'contents'}[0]{'parent'} = 
$result_trees{'definfoenclose_nestings'};
+
+$result_texis{'definfoenclose_nestings'} = '@definfoenclose phoo,//,\\
+
+@code{@phoo{in phoo in code}}.
+
+@phoo{@code{in code in phoo}}.
+
+@phoo{
+}@center in center in phoo
+
+';
+
+
+$result_texts{'definfoenclose_nestings'} = '
+in phoo in code.
+
+in code in phoo.
+
+
+in center in phoo
+
+';
+
+$result_errors{'definfoenclose_nestings'} = [
+  {
+    'error_line' => 'warning: @definfoenclose is obsolete
+',
+    'file_name' => '',
+    'line_nr' => 1,
+    'macro' => '',
+    'text' => '@definfoenclose is obsolete',
+    'type' => 'warning'
+  },
+  {
+    'error_line' => 'warning: @phoo should not appear in @code
+',
+    'file_name' => '',
+    'line_nr' => 3,
+    'macro' => '',
+    'text' => '@phoo should not appear in @code',
+    'type' => 'warning'
+  },
+  {
+    'error_line' => 'warning: @center should not appear in @phoo
+',
+    'file_name' => '',
+    'line_nr' => 8,
+    'macro' => '',
+    'text' => '@center should not appear in @phoo',
+    'type' => 'warning'
+  },
+  {
+    'error_line' => '@phoo missing closing brace
+',
+    'file_name' => '',
+    'line_nr' => 7,
+    'macro' => '',
+    'text' => '@phoo missing closing brace',
+    'type' => 'error'
+  },
+  {
+    'error_line' => 'misplaced }
+',
+    'file_name' => '',
+    'line_nr' => 9,
+    'macro' => '',
+    'text' => 'misplaced }',
+    'type' => 'error'
+  }
+];
+
+
+$result_floats{'definfoenclose_nestings'} = {};
+
+
+
+$result_converted{'plaintext'}->{'definfoenclose_nestings'} = '‘//in phoo in 
code\\’.
+
+   //‘in code in phoo’\\.
+
+   // \\
+                           in center in phoo
+
+';
+
+
+$result_converted{'html_text'}->{'definfoenclose_nestings'} = '
+<p><code class="code">//in phoo in code\\</code>.
+</p>
+<p>//<code class="code">in code in phoo</code>\\.
+</p>
+<p>//
+\\</p><div class="center">in center in phoo
+</div>
+';
+
+
+$result_converted{'latex'}->{'definfoenclose_nestings'} = 
'\\documentclass{book}
+\\usepackage{amsfonts}
+\\usepackage{amsmath}
+\\usepackage[gen]{eurosym}
+\\usepackage[T1]{fontenc}
+\\usepackage{textcomp}
+\\usepackage{graphicx}
+\\usepackage{etoolbox}
+\\usepackage{titleps}
+\\usepackage{float}
+% use hidelinks to remove boxes around links to be similar to Texinfo TeX
+\\usepackage[hidelinks]{hyperref}
+\\usepackage[utf8]{inputenc}
+
+\\makeatletter
+\\newcommand{\\Texinfosettitle}{No Title}%
+
+% redefine the \\mainmatter command such that it does not clear page
+% as if in double page
+\\renewcommand\\mainmatter{\\clearpage\\@mainmattertrue\\pagenumbering{arabic}}
+\\newenvironment{Texinfopreformatted}{%
+  
\\par\\GNUTobeylines\\obeyspaces\\frenchspacing\\parskip=\\z@\\parindent=\\z@}{}
+{\\catcode`\\^^M=13 \\gdef\\GNUTobeylines{\\catcode`\\^^M=13 
\\def^^M{\\null\\par}}}
+\\newenvironment{Texinfoindented}{\\begin{list}{}{}\\item\\relax}{\\end{list}}
+
+% used for substitutions in commands
+\\newcommand{\\Texinfoplaceholder}[1]{}
+
+\\newpagestyle{single}{\\sethead[\\chaptername{} \\thechapter{} 
\\chaptertitle{}][][\\thepage]
+                              {\\chaptername{} \\thechapter{} 
\\chaptertitle{}}{}{\\thepage}}
+
+% allow line breaking at underscore
+\\let\\Texinfounderscore\\_
+\\renewcommand{\\_}{\\Texinfounderscore\\discretionary{}{}{}}
+\\renewcommand{\\includegraphics}[1]{\\fbox{FIG \\detokenize{#1}}}
+
+\\makeatother
+% set default for @setchapternewpage
+\\makeatletter
+\\patchcmd{\\chapter}{\\if@openright\\cleardoublepage\\else\\clearpage\\fi}{\\Texinfoplaceholder{setchapternewpage
 placeholder}\\clearpage}{}{}
+\\makeatother
+\\pagestyle{single}%
+
+
+\\texttt{in phoo in code}.
+
+\\texttt{in code in phoo}.
+
+
+\\begin{center}
+in center in phoo
+\\end{center}
+
+\\end{document}
+';
+
+1;



reply via email to

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