[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;