[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
texinfo/tp TODO Texinfo/Convert/Info.pm Texinfo...
From: |
Patrice Dumas |
Subject: |
texinfo/tp TODO Texinfo/Convert/Info.pm Texinfo... |
Date: |
Sat, 29 Jan 2011 14:04:37 +0000 |
CVSROOT: /sources/texinfo
Module name: texinfo
Changes by: Patrice Dumas <pertusus> 11/01/29 14:04:37
Modified files:
tp : TODO
tp/Texinfo/Convert: Info.pm Plaintext.pm
tp/t : 08misc_commands.t
tp/t/results/def: end_of_lines_protected_in_footnote.pl
Added files:
tp/t/results/misc_commands: no_empty_line_between_headings.pl
Log message:
Fix count of lines in contents output.
More empty lines if needed.
Better accounting for empty lines in multitable.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/TODO?cvsroot=texinfo&r1=1.69&r2=1.70
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Convert/Info.pm?cvsroot=texinfo&r1=1.15&r2=1.16
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Convert/Plaintext.pm?cvsroot=texinfo&r1=1.58&r2=1.59
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/08misc_commands.t?cvsroot=texinfo&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/def/end_of_lines_protected_in_footnote.pl?cvsroot=texinfo&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/misc_commands/no_empty_line_between_headings.pl?cvsroot=texinfo&rev=1.1
Patches:
Index: TODO
===================================================================
RCS file: /sources/texinfo/texinfo/tp/TODO,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -b -r1.69 -r1.70
--- TODO 29 Jan 2011 11:24:22 -0000 1.69
+++ TODO 29 Jan 2011 14:04:36 -0000 1.70
@@ -21,6 +21,17 @@
-> replace acronym_like with the already formatted text and
explanation with convert(explanation).
+def/end_of_lines_protected_in_footnote.pl the footnote is
+ (1) -- category: deffn_name arguments arg2 more args with end of line
+and not
+ (1)
+ -- category: deffn_name arguments arg2 more args with end of line
+It is unclear whether it is right or wrong, but even less clear why it
+happens this way.
+
+Test empty/no empty line at a multitable beginning, between 2 rows and
+after a multitable.
+
Test end_line_count in Texinfo/Convert/ containers.
Following should be an error:
Index: Texinfo/Convert/Info.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Convert/Info.pm,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- Texinfo/Convert/Info.pm 23 Jan 2011 23:46:16 -0000 1.15
+++ Texinfo/Convert/Info.pm 29 Jan 2011 14:04:37 -0000 1.16
@@ -261,7 +261,7 @@
my $section_root = shift;
my $contents_or_shortcontents = shift;
- return '';
+ return ('', 0);
}
my $index_length_to_node = 41;
Index: Texinfo/Convert/Plaintext.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Convert/Plaintext.pm,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -b -r1.58 -r1.59
--- Texinfo/Convert/Plaintext.pm 28 Jan 2011 23:54:30 -0000 1.58
+++ Texinfo/Convert/Plaintext.pm 29 Jan 2011 14:04:37 -0000 1.59
@@ -243,7 +243,7 @@
'SUBDIR' => undef,
'documentlanguage' => undef,
'NUMBER_FOOTNOTES' => 1,
- 'empty_lines_count' => 0,
+ 'empty_lines_count' => undef,
'SPLIT_SIZE' => 300000,
'expanded_formats' => undef,
'include_directories' => undef,
@@ -682,6 +682,18 @@
}
}
+sub _add_newline_if_needed($) {
+ my $self = shift;
+ if (defined($self->{'empty_lines_count'})
+ and $self->{'empty_lines_count'} == 0) {
+ $self->_add_text_count("\n");
+ $self->_add_lines_count(1);
+ $self->{'empty_lines_count'} = 1;
+ return "\n";
+ }
+ return '';
+}
+
my $footnote_indent = 3;
sub _footnotes($$)
{
@@ -690,16 +702,13 @@
my $result = '';
if (scalar(@{$self->{'pending_footnotes'}})) {
- unless ($self->{'empty_lines_count'}) {
- $result .= "\n";
- $self->_add_text_count("\n");
- $self->_add_lines_count(1);
- }
+ $result .= $self->_add_newline_if_needed();
if ($self->{'footnotestyle'} eq 'end' or !defined($element)) {
my $footnotes_header = " ---------- Footnotes ----------\n\n";
$result .= $footnotes_header;
$self->_add_text_count($footnotes_header);
$self->_add_lines_count(2);
+ $self->{'empty_lines_count'} = 1;
} else {
my $footnotes_node = {
@@ -730,12 +739,7 @@
$self->_add_text_count($footnote_text);
$result .= $self->_convert($footnote->{'root'}->{'args'}->[0]);
- unless ($self->{'empty_lines_count'}) {
- $result .= "\n";
- $self->_add_text_count("\n");
- $self->_add_lines_count(1);
- $self->{'empty_lines_count'} = 1;
- }
+ $result .= $self->_add_newline_if_needed();
pop @{$self->{'context'}};
pop @{$self->{'format_context'}};
@@ -865,8 +869,9 @@
my $section = $section_root->{'section_childs'}->[0];
my $root_level = $section->{'level'};
- #Â FIXME return bytes count? lines count?
+ #Â FIXME return bytes count?
my $result = '';
+ my $lines_count = 0;
while ($section and $section ne $section_root) {
push @{$self->{'count_context'}}, {'lines' => 0, 'bytes' => 0};
my ($section_title) = $self->convert_line({'contents'
@@ -875,6 +880,7 @@
my $text = Texinfo::Convert::Text::numbered_heading($section,
$section_title, $self->{'NUMBER_SECTIONS'})."\n";
$result .= (' ' x (2*($section->{'level'} - ($root_level+1)))) . $text;
+ $lines_count++;
if ($section->{'section_childs'}
and ($contents or $section->{'level'} < $root_level+1)) {
$section = $section->{'section_childs'}->[0];
@@ -890,7 +896,7 @@
}
}
}
- return $result;
+ return ($result, $lines_count);
}
sub _menu($$)
@@ -1376,7 +1382,8 @@
'paragraph_count' => 0,
'indent_level' =>
$self->{'format_context'}->[-1]->{'indent_level'},
- 'max' => $self->{'format_context'}->[-1]->{'max'} };
+ 'max' => $self->{'format_context'}->[-1]->{'max'},
+ };
$self->{'format_context'}->[-1]->{'indent_level'}++
if ($indented_commands{$root->{'cmdname'}});
if ($self->{'context'}->[-1] eq 'preformatted') {
@@ -1417,6 +1424,8 @@
}
print STDERR "MULTITABLE_SIZES @$columnsize\n" if ($self->{'DEBUG'});
$self->{'format_context'}->[-1]->{'columns_size'} = $columnsize;
+ $self->{'format_context'}->[-1]->{'row_empty_lines_count'}
+ = $self->{'empty_lines_count'};
} elsif ($root->{'cmdname'} eq 'float' and $root->{'extra'}
and $root->{'extra'}->{'normalized'}) {
$result .= $self->_anchor($root);
@@ -1427,21 +1436,26 @@
} elsif ($sectioning_commands{$root->{'cmdname'}}) {
if ($self->{'setcontentsaftertitlepage'}
and $root_commands{$root->{'cmdname'}}) {
- my $contents =
$self->_contents($self->{'structuring'}->{'sectioning_root'},
- 'contents') ."\n";
- $self->{'empty_lines_count'} = 0;
+ my ($contents, $lines_count)
+ =
$self->_contents($self->{'structuring'}->{'sectioning_root'},
+ 'contents');
+ $contents .= "\n";
+ $self->{'empty_lines_count'} = 1;
$self->{'setcontentsaftertitlepage'} = 0;
$self->_add_text_count($contents);
-
+ $self->_add_lines_count($lines_count+1);
$result .= $contents;
}
if ($self->{'setshortcontentsaftertitlepage'}
and $root_commands{$root->{'cmdname'}}) {
- my $contents =
$self->_contents($self->{'structuring'}->{'sectioning_root'},
- 'shortcontents')."\n";
- $self->{'empty_lines_count'} = 0;
+ my ($contents, $lines_count)
+ =
$self->_contents($self->{'structuring'}->{'sectioning_root'},
+ 'shortcontents');
+ $contents .= "\n";
+ $self->{'empty_lines_count'} = 1;
$self->{'setshortcontentsaftertitlepage'} = 0;
$self->_add_text_count($contents);
+ $self->_add_lines_count($lines_count+1);
$result .= $contents;
}
if ($root->{'args'}) {
@@ -1451,6 +1465,7 @@
my $heading_underlined =
Texinfo::Convert::Text::heading ($root, $heading,
$self->{'NUMBER_SECTIONS'});
+ $result .= $self->_add_newline_if_needed();
$self->{'empty_lines_count'} = 0 unless ($heading_underlined eq '');
$self->_add_text_count($heading_underlined);
#Â FIXME address@hidden and @c?
@@ -1512,6 +1527,9 @@
print STDERR "CELL [$root->{'extra'}->{'cell_number'}]:
address@hidden>{'cmdname'}. Width: $cell_width\n"
if ($self->{'DEBUG'});
die if (!defined($cell_width));
+ $self->{'empty_lines_count'}
+ = $self->{'format_context'}->[-1]->{'row_empty_lines_count'};
+
push @{$self->{'format_context'}},
{ 'cmdname' => $root->{'cmdname'},
'paragraph_count' => 0,
@@ -1523,7 +1541,6 @@
$preformatted = $self->new_formatter('unfilled');
push @{$self->{'formatters'}}, $preformatted;
}
- $self->{'empty_lines_count'} = 0;
$cell = 1;
} elsif ($root->{'cmdname'} eq 'center') {
#my ($counts, $new_locations);
@@ -1568,8 +1585,12 @@
and
@{$self->{'floats'}->{$root->{'extra'}->{'type'}->{'normalized'}}}) {
push @{$self->{'count_context'}}, {'lines' => 0, 'bytes' => 0};
my $lines_count = 0;
- $result .= "\n" if (!$self->{'empty_lines_count'});
+ if (!$self->{'empty_lines_count'}) {
+ $result .= "\n";
+ $lines_count++;
+ }
$result .= "* Menu:\n\n";
+ $lines_count += 2;
foreach my $float
(@{$self->{'floats'}->{$root->{'extra'}->{'type'}->{'normalized'}}}) {
next if
(!defined($float->{'extra'}->{'block_command_line_contents'}->[1]));
my $float_entry;
@@ -1648,8 +1669,11 @@
if (!defined($self->{'setcontentsaftertitlepage'})
and $self->{'structuring'}
and $self->{'structuring'}->{'sectioning_root'}) {
- $result =
$self->_contents($self->{'structuring'}->{'sectioning_root'},
+ my $lines_count;
+ ($result, $lines_count)
+ = $self->_contents($self->{'structuring'}->{'sectioning_root'},
'contents');
+ $self->_add_lines_count($lines_count);
$self->_add_text_count($result);
}
return $result;
@@ -1658,8 +1682,11 @@
if (!defined($self->{'setshortcontentsaftertitlepage'})
and $self->{'structuring'}
and $self->{'structuring'}->{'sectioning_root'}) {
- $result =
$self->_contents($self->{'structuring'}->{'sectioning_root'},
+ my $lines_count;
+ ($result, $lines_count)
+ = $self->_contents($self->{'structuring'}->{'sectioning_root'},
'shortcontents');
+ $self->_add_lines_count($lines_count);
$self->_add_text_count($result);
}
return $result;
@@ -1857,9 +1884,10 @@
# this is used to keep track of the last cell with content.
my $max_cell = scalar(@{$self->{'format_context'}->[-1]->{'row'}});
my $bytes_count = 0;
+ my $line;
for (my $line_idx = 0; $line_idx < $max_lines; $line_idx++) {
my $line_width = $indent_len;
- my $line = '';
+ $line = '';
# determine the last cell in the line, to fill spaces in
# cells preceding that cell on the line
my $last_cell = 0;
@@ -1913,6 +1941,12 @@
my $line = ' ' x $indent_len . '-' x $cell_beginning . "\n";
$bytes_count += $self->count_bytes($line);
$result .= $line;
+ $self->{'empty_lines_count'} = 0;
+ $max_lines++;
+ } elsif ($line eq "\n") {
+ $self->{'empty_lines_count'} = 1;
+ } else {
+ $self->{'empty_lines_count'} = 0;
}
$self->_update_locations_counts(address@hidden);
push @{$self->{'count_context'}->[-1]->{'locations'}}, @row_locations;
@@ -1920,6 +1954,8 @@
$self->{'count_context'}->[-1]->{'lines'} += $max_lines;
$self->{'format_context'}->[-1]->{'row'} = [];
$self->{'format_context'}->[-1]->{'row_counts'} = [];
+ $self->{'format_context'}->[-1]->{'row_empty_lines_count'}
+ = $self->{'empty_lines_count'};
}
}
if ($paragraph) {
Index: t/08misc_commands.t
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/08misc_commands.t,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- t/08misc_commands.t 28 Jan 2011 22:33:30 -0000 1.9
+++ t/08misc_commands.t 29 Jan 2011 14:04:37 -0000 1.10
@@ -199,6 +199,12 @@
@strong{ is it really strong? }
'],
+['no_empty_line_between_headings',
+'@top Top
address@hidden Subheading
address@hidden Chapter
address@hidden Section
+'],
);
foreach my $test (@converted_test_cases) {
Index: t/results/def/end_of_lines_protected_in_footnote.pl
===================================================================
RCS file:
/sources/texinfo/texinfo/tp/t/results/def/end_of_lines_protected_in_footnote.pl,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- t/results/def/end_of_lines_protected_in_footnote.pl 7 Dec 2010 20:34:28
-0000 1.14
+++ t/results/def/end_of_lines_protected_in_footnote.pl 29 Jan 2011 14:04:37
-0000 1.15
@@ -340,8 +340,7 @@
---------- Footnotes ----------
- (1)
- -- category: deffn_name arguments arg2 more args with end of line
+ (1) -- category: deffn_name arguments arg2 more args with end of line
within with 3 @ @ one last arg
deffn
Index: t/results/misc_commands/no_empty_line_between_headings.pl
===================================================================
RCS file: t/results/misc_commands/no_empty_line_between_headings.pl
diff -N t/results/misc_commands/no_empty_line_between_headings.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ t/results/misc_commands/no_empty_line_between_headings.pl 29 Jan 2011
14:04:37 -0000 1.1
@@ -0,0 +1,266 @@
+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_trees{'no_empty_line_between_headings'} = {
+ 'contents' => [
+ {
+ 'contents' => [],
+ 'parent' => {},
+ 'type' => 'text_root'
+ },
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => ' ',
+ 'type' => 'empty_spaces_after_command'
+ },
+ {
+ 'parent' => {},
+ 'text' => 'Top'
+ },
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'spaces_at_end'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'misc_line_arg'
+ }
+ ],
+ 'cmdname' => 'top',
+ 'contents' => [
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => ' ',
+ 'type' => 'empty_spaces_after_command'
+ },
+ {
+ 'parent' => {},
+ 'text' => 'Subheading'
+ },
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'spaces_at_end'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'misc_line_arg'
+ }
+ ],
+ 'cmdname' => 'subheading',
+ 'extra' => {
+ 'misc_content' => [
+ {}
+ ]
+ },
+ 'level' => 3,
+ 'line_nr' => {
+ 'file_name' => '',
+ 'line_nr' => 2,
+ 'macro' => ''
+ },
+ 'parent' => {}
+ }
+ ],
+ 'extra' => {
+ 'misc_content' => [
+ {}
+ ]
+ },
+ 'level' => 0,
+ 'line_nr' => {
+ 'file_name' => '',
+ 'line_nr' => 1,
+ 'macro' => ''
+ },
+ 'parent' => {}
+ },
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => ' ',
+ 'type' => 'empty_spaces_after_command'
+ },
+ {
+ 'parent' => {},
+ 'text' => 'Chapter'
+ },
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'spaces_at_end'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'misc_line_arg'
+ }
+ ],
+ 'cmdname' => 'chapter',
+ 'contents' => [],
+ 'extra' => {
+ 'misc_content' => [
+ {}
+ ]
+ },
+ 'level' => 1,
+ 'line_nr' => {
+ 'file_name' => '',
+ 'line_nr' => 3,
+ 'macro' => ''
+ },
+ 'number' => 1,
+ 'parent' => {}
+ },
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => ' ',
+ 'type' => 'empty_spaces_after_command'
+ },
+ {
+ 'parent' => {},
+ 'text' => 'Section'
+ },
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'spaces_at_end'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'misc_line_arg'
+ }
+ ],
+ 'cmdname' => 'section',
+ 'contents' => [],
+ 'extra' => {
+ 'misc_content' => [
+ {}
+ ]
+ },
+ 'level' => 2,
+ 'line_nr' => {
+ 'file_name' => '',
+ 'line_nr' => 4,
+ 'macro' => ''
+ },
+ 'number' => '1.1',
+ 'parent' => {}
+ }
+ ],
+ 'type' => 'document_root'
+};
+$result_trees{'no_empty_line_between_headings'}{'contents'}[0]{'parent'} =
$result_trees{'no_empty_line_between_headings'};
+$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'args'}[0]{'contents'}[0]{'parent'}
= $result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'args'}[0];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'args'}[0]{'contents'}[1]{'parent'}
= $result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'args'}[0];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'args'}[0]{'contents'}[2]{'parent'}
= $result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'args'}[0];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'args'}[0]{'parent'}
= $result_trees{'no_empty_line_between_headings'}{'contents'}[1];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
=
$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'contents'}[0]{'args'}[0];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'contents'}[0]{'args'}[0]{'contents'}[1]{'parent'}
=
$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'contents'}[0]{'args'}[0];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'contents'}[0]{'args'}[0]{'contents'}[2]{'parent'}
=
$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'contents'}[0]{'args'}[0];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'contents'}[0]{'args'}[0]{'parent'}
=
$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'contents'}[0];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'contents'}[0]{'extra'}{'misc_content'}[0]
=
$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'contents'}[0]{'args'}[0]{'contents'}[1];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'contents'}[0]{'parent'}
= $result_trees{'no_empty_line_between_headings'}{'contents'}[1];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'extra'}{'misc_content'}[0]
=
$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'args'}[0]{'contents'}[1];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[1]{'parent'} =
$result_trees{'no_empty_line_between_headings'};
+$result_trees{'no_empty_line_between_headings'}{'contents'}[2]{'args'}[0]{'contents'}[0]{'parent'}
= $result_trees{'no_empty_line_between_headings'}{'contents'}[2]{'args'}[0];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[2]{'args'}[0]{'contents'}[1]{'parent'}
= $result_trees{'no_empty_line_between_headings'}{'contents'}[2]{'args'}[0];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[2]{'args'}[0]{'contents'}[2]{'parent'}
= $result_trees{'no_empty_line_between_headings'}{'contents'}[2]{'args'}[0];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[2]{'args'}[0]{'parent'}
= $result_trees{'no_empty_line_between_headings'}{'contents'}[2];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[2]{'extra'}{'misc_content'}[0]
=
$result_trees{'no_empty_line_between_headings'}{'contents'}[2]{'args'}[0]{'contents'}[1];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[2]{'parent'} =
$result_trees{'no_empty_line_between_headings'};
+$result_trees{'no_empty_line_between_headings'}{'contents'}[3]{'args'}[0]{'contents'}[0]{'parent'}
= $result_trees{'no_empty_line_between_headings'}{'contents'}[3]{'args'}[0];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[3]{'args'}[0]{'contents'}[1]{'parent'}
= $result_trees{'no_empty_line_between_headings'}{'contents'}[3]{'args'}[0];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[3]{'args'}[0]{'contents'}[2]{'parent'}
= $result_trees{'no_empty_line_between_headings'}{'contents'}[3]{'args'}[0];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[3]{'args'}[0]{'parent'}
= $result_trees{'no_empty_line_between_headings'}{'contents'}[3];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[3]{'extra'}{'misc_content'}[0]
=
$result_trees{'no_empty_line_between_headings'}{'contents'}[3]{'args'}[0]{'contents'}[1];
+$result_trees{'no_empty_line_between_headings'}{'contents'}[3]{'parent'} =
$result_trees{'no_empty_line_between_headings'};
+
+$result_texis{'no_empty_line_between_headings'} = '@top Top
address@hidden Subheading
address@hidden Chapter
address@hidden Section
+';
+
+
+$result_texts{'no_empty_line_between_headings'} = 'Top
+***
+Subheading
+----------
+1 Chapter
+*********
+1.1 Section
+===========
+';
+
+$result_sectioning{'no_empty_line_between_headings'} = {
+ 'level' => -1,
+ 'section_childs' => [
+ {
+ 'cmdname' => 'top',
+ 'extra' => {},
+ 'level' => 0,
+ 'section_childs' => [
+ {
+ 'cmdname' => 'chapter',
+ 'extra' => {},
+ 'level' => 1,
+ 'number' => 1,
+ 'section_childs' => [
+ {
+ 'cmdname' => 'section',
+ 'extra' => {},
+ 'level' => 2,
+ 'number' => '1.1',
+ 'section_up' => {}
+ }
+ ],
+ 'section_up' => {}
+ }
+ ],
+ 'section_up' => {}
+ }
+ ]
+};
+$result_sectioning{'no_empty_line_between_headings'}{'section_childs'}[0]{'section_childs'}[0]{'section_childs'}[0]{'section_up'}
=
$result_sectioning{'no_empty_line_between_headings'}{'section_childs'}[0]{'section_childs'}[0];
+$result_sectioning{'no_empty_line_between_headings'}{'section_childs'}[0]{'section_childs'}[0]{'section_up'}
= $result_sectioning{'no_empty_line_between_headings'}{'section_childs'}[0];
+$result_sectioning{'no_empty_line_between_headings'}{'section_childs'}[0]{'section_up'}
= $result_sectioning{'no_empty_line_between_headings'};
+
+$result_errors{'no_empty_line_between_headings'} = [];
+
+
+
+$result_converted{'plaintext'}->{'no_empty_line_between_headings'} = 'Top
+***
+
+Subheading
+----------
+
+1 Chapter
+*********
+
+1.1 Section
+===========
+';
+
+1;