[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[no subject]
From: |
Patrice Dumas |
Date: |
Sun, 29 Sep 2024 09:50:05 -0400 (EDT) |
branch: master
commit e50037f05d056599764a2b9ae887ea404e52514c
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Mon Jul 1 21:06:59 2024 +0200
* tp/Texinfo/ParserNonXS.pm (_end_line),
tp/Texinfo/XS/parsetexi/end_line.c (end_line): close a bogus brace
@-command without argument followed by spaces only, and not by
newlinewithout argument followed by spaces only, and not by newline.
* tp/Makefile.tres, tp/t/03coverage_braces.t (seeentry_no_braces):
test of @seeentry without braces at end of document, on an index entry
command line.
* tp/Makefile.tres, tp/t/08misc_commands.t
(command_not_closed_on_center_line): add test.
---
ChangeLog | 28 +-
tp/Makefile.tres | 2 +
tp/Texinfo/ParserNonXS.pm | 19 +-
tp/Texinfo/XS/parsetexi/end_line.c | 14 +
tp/t/03coverage_braces.t | 11 +
tp/t/08misc_commands.t | 4 +
tp/t/results/coverage_braces/seeentry_no_braces.pl | 435 +++++++++++++++++++++
.../command_not_closed_on_center_line.pl | 96 +++++
8 files changed, 600 insertions(+), 9 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index e54585bc67..2a1aa7d199 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2024-07-01 Patrice Dumas <pertusus@free.fr>
+
+ * tp/Texinfo/ParserNonXS.pm (_end_line),
+ tp/Texinfo/XS/parsetexi/end_line.c (end_line): close a bogus brace
+ @-command without argument followed by spaces only, and not by
+ newlinewithout argument followed by spaces only, and not by newline.
+
+ * tp/Makefile.tres, tp/t/03coverage_braces.t (seeentry_no_braces):
+ test of @seeentry without braces at end of document, on an index entry
+ command line.
+
+ * tp/Makefile.tres, tp/t/08misc_commands.t
+ (command_not_closed_on_center_line): add test.
+
2024-07-01 Patrice Dumas <pertusus@free.fr>
* tp/Texinfo/Convert/HTML.pm (_prepare_converted_output_info),
@@ -520,7 +534,7 @@
* tp/Texinfo/XS/convert/convert_html.c,
tp/Texinfo/XS/main/DocumentXS.xs,
tp/Texinfo/XS/main/build_perl_info.c, tp/Texinfo/XS/main/document.c,
- tp/Texinfo/XS/main/get_perl_info.c, tp/Texinfo/XS/main/translations.c,
+ tp/Texinfo/XS/main/get_perl_info.c, tp/Texinfo/XS/main/translations.c,
tp/Texinfo/XS/parsetexi/Parsetexi.xs, tp/Texinfo/XS/parsetexi/api.c,
tp/Texinfo/XS/parsetexi/parser.c: use size_t more for document
descriptors.
@@ -1228,7 +1242,7 @@
tp/Texinfo/XS/parsetexi/close.c (close_command_cleanup): update code
taking into account that
i) there cannot be ignorable_spaces_after_command before before_item,
- as it is added only after commands, and inside commands arguments.
+ as it is added only after commands, and inside commands arguments.
ii) there cannot be an @end in before_item, as soon as an @end is seen
it is popped from the element it is in, before closing.
iii) there can only be before_item or elements associated with @*item
@@ -1355,7 +1369,7 @@
2024-06-12 Patrice Dumas <pertusus@free.fr>
- * tp/Texinfo/XS/convert/ConvertXS.xs (html_register_file_information):
+ * tp/Texinfo/XS/convert/ConvertXS.xs (html_register_file_information):
really use the string stored in small_strings.
2024-06-12 Patrice Dumas <pertusus@free.fr>
@@ -1386,7 +1400,7 @@
2024-06-12 Patrice Dumas <pertusus@free.fr>
- * tp/Texinfo/XS/convert/ConvertXS.xs (html_register_file_information):
+ * tp/Texinfo/XS/convert/ConvertXS.xs (html_register_file_information):
make sure that the key is saved on the heap by adding to converter
small_strings.
@@ -1458,7 +1472,7 @@
(INDEX_ENTRY_LOCATION, KEY_PAIR, enum extra_type),
tp/Texinfo/XS/parsetexi/indices.c (enter_index_entry),
tp/Texinfo/XS/structuring_transfo/transformations.c
- (lookup_index_entry, relate_index_entries_to_table_items_in): add
+ (lookup_index_entry, relate_index_entries_to_table_items_in): add
extra_index_entry extra type that represents the location of an index
entry, with index name and number in index. Use it instead of
misc_args for index entries.
@@ -1523,7 +1537,7 @@
tp/Texinfo/XS/main/convert_to_text.c (convert_to_text_internal):
do text element more separately from other elements.
- * tp/Texinfo/XS/main/build_perl_info.c (element_to_perl_hash):
+ * tp/Texinfo/XS/main/build_perl_info.c (element_to_perl_hash):
use flag for condition that select types only if needed in Perl.
* tp/Texinfo/XS/main/convert_to_text.c (convert_to_text_internal):
@@ -1701,7 +1715,7 @@
* tp/Texinfo/Convert/DocBook.pm (%container_ignored_if_empty)
(_convert), tp/Texinfo/Convert/LaTeX.pm (%container_ignored_if_empty)
(_convert), tp/Texinfo/Convert/TexinfoMarkup.pm
- (%container_ignored_if_empty, _convert): ignore explicitely some
+ (%container_ignored_if_empty, _convert): ignore explicitely some
empty containers instead of relying on the tree to be without those
empty containers.
diff --git a/tp/Makefile.tres b/tp/Makefile.tres
index e0373192c0..927a1f03bc 100644
--- a/tp/Makefile.tres
+++ b/tp/Makefile.tres
@@ -436,6 +436,7 @@ test_files_generated_list =
$(test_tap_files_generated_list) \
t/results/coverage_braces/recursive_acronym_definition.pl \
t/results/coverage_braces/ref_empty_node.pl \
t/results/coverage_braces/ref_in_style_command.pl \
+ t/results/coverage_braces/seeentry_no_braces.pl \
t/results/coverage_braces/simple.pl \
t/results/coverage_braces/space_command_in_image.pl \
t/results/coverage_braces/space_in_anchor.pl \
@@ -1595,6 +1596,7 @@ test_files_generated_list =
$(test_tap_files_generated_list) \
t/results/misc_commands/command_in_heading_footing.pl \
t/results/misc_commands/command_line_in_paragraph.pl \
t/results/misc_commands/command_not_closed_in_documentencoding.pl \
+ t/results/misc_commands/command_not_closed_on_center_line.pl \
t/results/misc_commands/comment_space_command_on_line.pl \
t/results/misc_commands/comments_in_text.pl \
t/results/misc_commands/contents.pl \
diff --git a/tp/Texinfo/ParserNonXS.pm b/tp/Texinfo/ParserNonXS.pm
index a6435dd75a..5ed1a995ab 100644
--- a/tp/Texinfo/ParserNonXS.pm
+++ b/tp/Texinfo/ParserNonXS.pm
@@ -4740,8 +4740,9 @@ sub _end_line($$$)
_move_last_space_to_element($self, $current);
}
- # this happens if there is a nesting of line @-commands on a line.
- # they are reprocessed here.
+ # this happens if there is a nesting of @-commands on a line, for
+ # instance line commands, but also bogus brace commands
+ # without args or not closed. They are reprocessed here.
my $top_context = $self->_top_context();
if (($top_context eq 'ct_line'
and defined($self->{'context_command_stack'}->[-1]))
@@ -4749,6 +4750,20 @@ sub _end_line($$$)
print STDERR "Still opened line/block command $top_context: "
.Texinfo::Common::debug_print_element($current, 1)."\n"
if ($self->{'conf'}->{'DEBUG'});
+
+ # should correspond to a bogus brace @-commands without argument
+ # followed by spaces only, and not by newline, at the end of the document
+ # on a line/def command
+ if ($current->{'cmdname'}
+ and defined($self->{'brace_commands'}->{$current->{'cmdname'}})) {
+ $self->_line_error(sprintf(__("\@%s expected braces"),
+ $current->{'cmdname'}), $source_info);
+ if ($current->{'contents'}) {
+ _gather_spaces_after_cmd_before_arg($self, $current);
+ }
+ $current = $current->{'parent'};
+ }
+
if ($top_context eq 'ct_def') {
while ($current->{'parent'}
and !($current->{'parent'}->{'extra'}
diff --git a/tp/Texinfo/XS/parsetexi/end_line.c
b/tp/Texinfo/XS/parsetexi/end_line.c
index a78737e976..03ee0084cf 100644
--- a/tp/Texinfo/XS/parsetexi/end_line.c
+++ b/tp/Texinfo/XS/parsetexi/end_line.c
@@ -1952,6 +1952,20 @@ end_line (ELEMENT *current)
debug_nonl ("Still opened line/block command %s: ",
context_name (current_context ()));
debug_parser_print_element (current, 1); debug ("");
+
+ /* should correspond to a bogus brace @-commands without argument
+ followed by spaces only, and not by newline, at the end of the document
+ on a line/def command
+ */
+ if (command_flags(current) & CF_brace)
+ {
+ line_error ("@%s expected braces",
+ command_name(current->e.c->cmd));
+ if (current->e.c->contents.number > 0)
+ gather_spaces_after_cmd_before_arg (current);
+ current = current->parent;
+ }
+
if (current_context () == ct_def)
{
while (current->parent
diff --git a/tp/t/03coverage_braces.t b/tp/t/03coverage_braces.t
index ee8545aeee..b64baa88a9 100644
--- a/tp/t/03coverage_braces.t
+++ b/tp/t/03coverage_braces.t
@@ -101,6 +101,17 @@ my @test_cases = (
['U_no_braces', '@U'],
['hyphenation_no_braces', '@hyphenation'],
['titlefont_no_braces', '@titlefont'],
+# tests a brace command without braces on a line command at the end of a
+# document
+['seeentry_no_braces', '@node Top
+@top top
+
+@node chap
+@chapter chap
+
+@printindex cp
+
+@cindex aa @seeentry'],
['verb_in_xref',
'@anchor{point}
diff --git a/tp/t/08misc_commands.t b/tp/t/08misc_commands.t
index 541f5e485f..f4ea654d1e 100644
--- a/tp/t/08misc_commands.t
+++ b/tp/t/08misc_commands.t
@@ -193,6 +193,10 @@ documentlanguage @documentlanguage en
'],
['command_not_closed_in_documentencoding',
'@documentencoding @strong{'],
+['command_not_closed_on_center_line',
+'@center c @strong{
+st}
+'],
['text_before_line_command',
'before title @title the title
diff --git a/tp/t/results/coverage_braces/seeentry_no_braces.pl
b/tp/t/results/coverage_braces/seeentry_no_braces.pl
new file mode 100644
index 0000000000..ea08027276
--- /dev/null
+++ b/tp/t/results/coverage_braces/seeentry_no_braces.pl
@@ -0,0 +1,435 @@
+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{'seeentry_no_braces'} = {
+ 'contents' => [
+ {
+ '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' => 1
+ }
+ },
+ {
+ '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' => 2
+ }
+ },
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'text' => 'chap'
+ }
+ ],
+ 'info' => {
+ 'spaces_after_argument' => {
+ 'text' => '
+'
+ }
+ },
+ 'type' => 'line_arg'
+ }
+ ],
+ 'cmdname' => 'node',
+ 'extra' => {
+ 'is_target' => 1,
+ 'isindex' => 1,
+ 'normalized' => 'chap'
+ },
+ 'info' => {
+ 'spaces_before_argument' => {
+ 'text' => ' '
+ }
+ },
+ 'source_info' => {
+ 'line_nr' => 4
+ }
+ },
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'text' => 'chap'
+ }
+ ],
+ 'info' => {
+ 'spaces_after_argument' => {
+ 'text' => '
+'
+ }
+ },
+ 'type' => 'line_arg'
+ }
+ ],
+ 'cmdname' => 'chapter',
+ 'contents' => [
+ {
+ 'text' => '
+',
+ 'type' => 'empty_line'
+ },
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'text' => 'cp'
+ }
+ ],
+ 'info' => {
+ 'spaces_after_argument' => {
+ 'text' => '
+'
+ }
+ },
+ 'type' => 'line_arg'
+ }
+ ],
+ 'cmdname' => 'printindex',
+ 'extra' => {
+ 'misc_args' => [
+ 'cp'
+ ]
+ },
+ 'info' => {
+ 'spaces_before_argument' => {
+ 'text' => ' '
+ }
+ },
+ 'source_info' => {
+ 'line_nr' => 7
+ }
+ },
+ {
+ 'text' => '
+',
+ 'type' => 'empty_line'
+ },
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'text' => 'aa'
+ },
+ {
+ 'text' => ' ',
+ 'type' => 'spaces_at_end'
+ },
+ {
+ 'cmdname' => 'seeentry',
+ 'source_info' => {
+ 'line_nr' => 9
+ }
+ }
+ ],
+ 'type' => 'line_arg'
+ }
+ ],
+ 'cmdname' => 'cindex',
+ 'extra' => {
+ 'element_node' => {},
+ 'index_entry' => [
+ 'cp',
+ 1
+ ]
+ },
+ 'info' => {
+ 'command_name' => 'cindex',
+ 'spaces_before_argument' => {
+ 'text' => ' '
+ }
+ },
+ 'source_info' => {
+ 'line_nr' => 9
+ },
+ 'type' => 'index_entry_command'
+ }
+ ],
+ 'extra' => {
+ 'section_number' => '1'
+ },
+ 'info' => {
+ 'spaces_before_argument' => {
+ 'text' => ' '
+ }
+ },
+ 'source_info' => {
+ 'line_nr' => 5
+ }
+ }
+ ],
+ 'type' => 'document_root'
+};
+$result_trees{'seeentry_no_braces'}{'contents'}[4]{'contents'}[3]{'extra'}{'element_node'}
= $result_trees{'seeentry_no_braces'}{'contents'}[3];
+
+$result_texis{'seeentry_no_braces'} = '@node Top
+@top top
+
+@node chap
+@chapter chap
+
+@printindex cp
+
+@cindex aa @seeentry';
+
+
+$result_texts{'seeentry_no_braces'} = 'top
+***
+
+1 chap
+******
+
+
+';
+
+$result_sectioning{'seeentry_no_braces'} = {
+ 'extra' => {
+ 'section_childs' => [
+ {
+ 'cmdname' => 'top',
+ 'extra' => {
+ 'associated_node' => {
+ 'cmdname' => 'node',
+ 'extra' => {
+ 'normalized' => 'Top'
+ }
+ },
+ 'section_childs' => [
+ {
+ 'cmdname' => 'chapter',
+ 'extra' => {
+ 'associated_node' => {
+ 'cmdname' => 'node',
+ 'extra' => {
+ 'isindex' => 1,
+ 'normalized' => 'chap'
+ }
+ },
+ '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{'seeentry_no_braces'}{'extra'}{'section_childs'}[0]{'extra'}{'section_childs'}[0]{'extra'}{'section_directions'}{'up'}
= $result_sectioning{'seeentry_no_braces'}{'extra'}{'section_childs'}[0];
+$result_sectioning{'seeentry_no_braces'}{'extra'}{'section_childs'}[0]{'extra'}{'section_childs'}[0]{'extra'}{'toplevel_directions'}{'prev'}
= $result_sectioning{'seeentry_no_braces'}{'extra'}{'section_childs'}[0];
+$result_sectioning{'seeentry_no_braces'}{'extra'}{'section_childs'}[0]{'extra'}{'section_childs'}[0]{'extra'}{'toplevel_directions'}{'up'}
= $result_sectioning{'seeentry_no_braces'}{'extra'}{'section_childs'}[0];
+$result_sectioning{'seeentry_no_braces'}{'extra'}{'section_childs'}[0]{'extra'}{'sectioning_root'}
= $result_sectioning{'seeentry_no_braces'};
+
+$result_nodes{'seeentry_no_braces'} = [
+ {
+ 'cmdname' => 'node',
+ 'extra' => {
+ 'associated_section' => {
+ 'cmdname' => 'top',
+ 'extra' => {}
+ },
+ 'node_directions' => {
+ 'next' => {
+ 'cmdname' => 'node',
+ 'extra' => {
+ 'associated_section' => {
+ 'cmdname' => 'chapter',
+ 'extra' => {
+ 'section_number' => '1'
+ }
+ },
+ 'isindex' => 1,
+ 'node_directions' => {
+ 'prev' => {},
+ 'up' => {}
+ },
+ 'normalized' => 'chap'
+ }
+ }
+ },
+ 'normalized' => 'Top'
+ }
+ },
+ {}
+];
+$result_nodes{'seeentry_no_braces'}[0]{'extra'}{'node_directions'}{'next'}{'extra'}{'node_directions'}{'prev'}
= $result_nodes{'seeentry_no_braces'}[0];
+$result_nodes{'seeentry_no_braces'}[0]{'extra'}{'node_directions'}{'next'}{'extra'}{'node_directions'}{'up'}
= $result_nodes{'seeentry_no_braces'}[0];
+$result_nodes{'seeentry_no_braces'}[1] =
$result_nodes{'seeentry_no_braces'}[0]{'extra'}{'node_directions'}{'next'};
+
+$result_menus{'seeentry_no_braces'} = [
+ {
+ 'extra' => {
+ 'normalized' => 'Top'
+ }
+ },
+ {
+ 'extra' => {
+ 'normalized' => 'chap'
+ }
+ }
+];
+
+$result_errors{'seeentry_no_braces'} = [
+ {
+ 'error_line' => '@seeentry expected braces
+',
+ 'line_nr' => 9,
+ 'text' => '@seeentry expected braces',
+ 'type' => 'error'
+ }
+];
+
+
+$result_floats{'seeentry_no_braces'} = {};
+
+
+$result_indices_sort_strings{'seeentry_no_braces'} = {
+ 'cp' => [
+ 'aa'
+ ]
+};
+
+
+
+$result_converted{'plaintext'}->{'seeentry_no_braces'} = 'top
+***
+
+1 chap
+******
+
+* Menu:
+
+* aa: chap. (line 0)
+
+';
+
+
+$result_converted{'html_text'}->{'seeentry_no_braces'} = '<div
class="top-level-extent" id="Top">
+<div class="nav-panel">
+<p>
+[<a href="#chap" title="Index" rel="index">Index</a>]</p>
+</div>
+<h1 class="top" id="top"><span>top<a class="copiable-link" href="#top">
¶</a></span></h1>
+
+<ul class="mini-toc">
+<li><a href="#chap" accesskey="1">chap</a></li>
+</ul>
+<hr>
+<div class="chapter-level-extent" id="chap">
+<div class="nav-panel">
+<p>
+[<a href="#chap" title="Index" rel="index">Index</a>]</p>
+</div>
+<h2 class="chapter" id="chap-1"><span>1 chap<a class="copiable-link"
href="#chap-1"> ¶</a></span></h2>
+
+<div class="printindex cp-printindex">
+<table class="cp-entries-printindex" border="0">
+<tr><td></td><th class="entries-header-printindex">Index Entry</th><th
class="sections-header-printindex">Section</th></tr>
+<tr><td colspan="3"><hr></td></tr>
+<tr><th id="chap_cp_letter-A">A</th></tr>
+<tr><td></td><td class="printindex-index-entry"><a
href="#index-aa">aa</a></td><td class="printindex-index-section"><a
href="#chap">chap</a></td></tr>
+<tr><td colspan="3"><hr></td></tr>
+</table>
+</div>
+
+<a class="index-entry-id" id="index-aa"></a>
+</div>
+</div>
+';
+
+
+$result_converted{'latex_text'}->{'seeentry_no_braces'} = '\\label{anchor:Top}%
+\\chapter{{chap}}
+\\label{anchor:chap}%
+
+\\printindex[cp]
+
+\\index[cp]{aa@aa}%
+';
+
+
+$result_converted{'docbook'}->{'seeentry_no_braces'} = '<chapter label="1"
id="chap">
+<title>chap</title>
+
+<index role="cp"></index>
+
+<indexterm role="cp"><primary>aa</primary></indexterm></chapter>
+';
+
+1;
diff --git a/tp/t/results/misc_commands/command_not_closed_on_center_line.pl
b/tp/t/results/misc_commands/command_not_closed_on_center_line.pl
new file mode 100644
index 0000000000..3cce29f178
--- /dev/null
+++ b/tp/t/results/misc_commands/command_not_closed_on_center_line.pl
@@ -0,0 +1,96 @@
+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{'command_not_closed_on_center_line'} = {
+ 'contents' => [
+ {
+ 'contents' => [
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'text' => 'c '
+ },
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'text' => '
+'
+ }
+ ],
+ 'type' => 'brace_container'
+ }
+ ],
+ 'cmdname' => 'strong',
+ 'source_info' => {
+ 'line_nr' => 1
+ }
+ }
+ ],
+ 'type' => 'line_arg'
+ }
+ ],
+ 'cmdname' => 'center',
+ 'info' => {
+ 'spaces_before_argument' => {
+ 'text' => ' '
+ }
+ },
+ 'source_info' => {
+ 'line_nr' => 1
+ }
+ },
+ {
+ 'contents' => [
+ {
+ 'text' => 'st
+'
+ }
+ ],
+ 'type' => 'paragraph'
+ }
+ ],
+ 'type' => 'before_node_section'
+ }
+ ],
+ 'type' => 'document_root'
+};
+
+$result_texis{'command_not_closed_on_center_line'} = '@center c @strong{
+}st
+';
+
+
+$result_texts{'command_not_closed_on_center_line'} = 'c
+st
+';
+
+$result_errors{'command_not_closed_on_center_line'} = [
+ {
+ 'error_line' => '@strong missing closing brace
+',
+ 'line_nr' => 1,
+ 'text' => '@strong missing closing brace',
+ 'type' => 'error'
+ },
+ {
+ 'error_line' => 'misplaced }
+',
+ 'line_nr' => 2,
+ 'text' => 'misplaced }',
+ 'type' => 'error'
+ }
+];
+
+
+$result_floats{'command_not_closed_on_center_line'} = {};
+
+
+1;