[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
texinfo/tp texi2any.pl Texinfo/Common.pm Texinf...
From: |
Patrice Dumas |
Subject: |
texinfo/tp texi2any.pl Texinfo/Common.pm Texinf... |
Date: |
Wed, 15 Feb 2012 20:45:31 +0000 |
CVSROOT: /sources/texinfo
Module name: texinfo
Changes by: Patrice Dumas <pertusus> 12/02/15 20:45:31
Modified files:
tp : texi2any.pl
tp/Texinfo : Common.pm
tp/Texinfo/Convert: Info.pm
Added files:
tp/t : index_before_item.t
Log message:
Move index entries appearing right before an @item in @enumerate
and @itemize right after the @item. Reprot from Joel Sherrill and
request from Karl.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/texi2any.pl?cvsroot=texinfo&r1=1.111&r2=1.112
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Common.pm?cvsroot=texinfo&r1=1.129&r2=1.130
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Convert/Info.pm?cvsroot=texinfo&r1=1.81&r2=1.82
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/index_before_item.t?cvsroot=texinfo&rev=1.1
Patches:
Index: texi2any.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/texi2any.pl,v
retrieving revision 1.111
retrieving revision 1.112
diff -u -b -r1.111 -r1.112
--- texi2any.pl 7 Feb 2012 19:41:39 -0000 1.111
+++ texi2any.pl 15 Feb 2012 20:45:30 -0000 1.112
@@ -774,6 +774,7 @@
exit 1 if (!$result_options);
+# For tests, set some strings to values not changing with releases
my %test_conf = (
'PACKAGE_VERSION' => '',
'PACKAGE' => 'texinfo',
Index: Texinfo/Common.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Common.pm,v
retrieving revision 1.129
retrieving revision 1.130
diff -u -b -r1.129 -r1.130
--- Texinfo/Common.pm 9 Feb 2012 00:05:54 -0000 1.129
+++ Texinfo/Common.pm 15 Feb 2012 20:45:30 -0000 1.130
@@ -57,6 +57,7 @@
protect_first_parenthesis
protect_hashchar_at_line_beginning
valid_tree_transformation
+move_index_entries_after_items_in_tree
) ] );
@EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
@@ -1723,6 +1724,101 @@
}
}
+sub move_index_entries_after_items($) {
+ # enumerate or itemize
+ my $format = shift;
+
+ my $previous;
+ return unless ($format->{'contents'});
+ foreach my $item (@{$format->{'contents'}}) {
+ #print STDERR "Before proceeding: $previous $item->{'cmdname'}
(@{$previous->{'contents'}})\n" if ($previous and $previous->{'contents'});
+ if (defined($previous) and $item->{'cmdname'}
+ and $item->{'cmdname'} eq 'item'
+ and $previous->{'contents'} and scalar(@{$previous->{'contents'}})) {
+
+ my $previous_ending_container;
+ if ($previous->{'contents'}->[-1]->{'type'}
+ and ($previous->{'contents'}->[-1]->{'type'} eq 'paragraph'
+ or $previous->{'contents'}->[-1]->{'type'} eq 'preformatted')) {
+ $previous_ending_container = $previous->{'contents'}->[-1];
+ } else {
+ $previous_ending_container = $previous;
+ }
+
+ my @gathered_index_entries;
+
+ #print STDERR "Gathering for item $item in previous $previous
($previous_ending_container)\n";
+ while ($previous_ending_container->{'contents'}->[-1]
+ and (($previous_ending_container->{'contents'}->[-1]->{'type'}
+ and
$previous_ending_container->{'contents'}->[-1]->{'type'} eq
'index_entry_command')
+ or
($previous_ending_container->{'contents'}->[-1]->{'cmdname'}
+ and
($previous_ending_container->{'contents'}->[-1]->{'cmdname'} eq 'c'
+ or
$previous_ending_container->{'contents'}->[-1]->{'cmdname'} eq 'comment')))) {
+ unshift @gathered_index_entries, pop
@{$previous_ending_container->{'contents'}};
+ }
+ #print STDERR "Gathered: @gathered_index_entries\n";
+ if (scalar(@gathered_index_entries)) {
+ # put back leading comments
+ while (!$gathered_index_entries[0]->{'type'}
+ or $gathered_index_entries[0]->{'type'} ne
'index_entry_command') {
+ #print STDERR "Putting back $gathered_index_entries[0]
$gathered_index_entries[0]->{'cmdname'}\n";
+ push @{$previous_ending_container->{'contents'}},
+ shift (@gathered_index_entries);
+ }
+
+ # We have the index entries of the previous @item or before item.
+ # Now put them right after the current @item command.
+ if (scalar(@gathered_index_entries)) {
+ my $item_container;
+ if ($item->{'contents'} and $item->{'contents'}->[0]
+ and $item->{'contents'}->[0]->{'type'}
+ and $item->{'contents'}->[0]->{'type'} eq 'preformatted') {
+ $item_container = $item->{'contents'}->[0];
+ } else {
+ $item_container = $item;
+ }
+ foreach my $entry(@gathered_index_entries) {
+ $entry->{'parent'} = $item_container;
+ }
+ if ($item_container->{'contents'}
+ and $item_container->{'contents'}->[0]
+ and $item_container->{'contents'}->[0]->{'type'}) {
+ if ($item_container->{'contents'}->[0]->{'type'} eq
'empty_line_after_command') {
+
+ unshift @gathered_index_entries, shift
@{$item_container->{'contents'}};
+ } elsif ($item_container->{'contents'}->[0]->{'type'} eq
'empty_spaces_after_command') {
+ unshift @gathered_index_entries, shift
@{$item_container->{'contents'}};
+ $gathered_index_entries[0]->{'type'} =
'empty_line_after_command';
+ $gathered_index_entries[0]->{'text'} .= "\n";
+ }
+ }
+ unshift @{$item_container->{'contents'}}, @gathered_index_entries;
+ }
+ }
+ }
+ $previous = $item;
+ }
+}
+
+sub _move_index_entries_after_items($)
+{
+ my $self = shift;
+ my $type = shift;
+ my $current = shift;
+
+ if ($current->{'cmdname'} and ($current->{'cmdname'} eq 'enumerate'
+ or $current->{'cmdname'} eq 'itemize')) {
+ move_index_entries_after_items($current);
+ }
+ return $current;
+}
+
+sub move_index_entries_after_items_in_tree($)
+{
+ my $tree = shift;
+ return modify_tree(undef, $tree, \&_move_index_entries_after_items);
+}
+
1;
__END__
Index: Texinfo/Convert/Info.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Convert/Info.pm,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -b -r1.81 -r1.82
--- Texinfo/Convert/Info.pm 14 Feb 2012 22:27:43 -0000 1.81
+++ Texinfo/Convert/Info.pm 15 Feb 2012 20:45:30 -0000 1.82
@@ -591,10 +591,7 @@
} else {
$text_result = $text;
}
- }# elsif (!defined($image_file)) {
- # $self->line_warn(sprintf($self->__("Cannot find address@hidden file
`%s.txt'"),
- # $basefile), $root->{'line_nr'});
- #}
+ }
my $result;
Index: t/index_before_item.t
===================================================================
RCS file: t/index_before_item.t
diff -N t/index_before_item.t
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ t/index_before_item.t 15 Feb 2012 20:45:31 -0000 1.1
@@ -0,0 +1,155 @@
+use strict;
+
+use Test::More;
+BEGIN { plan tests => 5 };
+
+use lib 'maintain/lib/Unicode-EastAsianWidth/lib/';
+use lib 'maintain/lib/libintl-perl/lib/';
+use lib 'maintain/lib/Text-Unidecode/lib/';
+use Texinfo::Parser qw(parse_texi_text);
+use Texinfo::Common qw(move_index_entries_after_items_in_tree);
+use Texinfo::Convert::Texinfo;
+use DebugTexinfo::DebugTree;
+
+ok(1);
+
+sub run_test($$$)
+{
+ my $in = shift;
+ my $out = shift;
+ my $name = shift;
+
+ my $tree = parse_texi_text(undef, $in);
+
+#print STDERR DebugTexinfo::DebugTree::convert(undef, $tree)."\n";
+
+ my $corrected_tree = move_index_entries_after_items_in_tree($tree);
+ my $texi_result = Texinfo::Convert::Texinfo::convert($corrected_tree);
+
+ if (!defined($out)) {
+ print STDERR " --> $name:\n$texi_result";
+ } else {
+ is ($texi_result, $out, $name);
+ }
+}
+
+run_test ('@itemize
+
address@hidden comment
address@hidden index entry
address@hidden first
+
+in item
address@hidden comment before index entry
address@hidden index in paragraph
address@hidden second
+
address@hidden index before comment
address@hidden comment between index entries
address@hidden after comment
address@hidden
+third
address@hidden itemize
+', '@itemize
+
address@hidden comment
address@hidden
address@hidden index entry
+first
+
+in item
address@hidden comment before index entry
address@hidden
address@hidden index in paragraph
+second
+
address@hidden
address@hidden index before comment
address@hidden comment between index entries
address@hidden after comment
+third
address@hidden itemize
+', 'entries before items');
+
+run_test ('@example
+
address@hidden
+
address@hidden idx
address@hidden it
+
address@hidden ttt
address@hidden comment
address@hidden
+two
+
address@hidden c
address@hidden gg
address@hidden
+
address@hidden itemize
address@hidden example
+','@example
+
address@hidden
+
address@hidden
address@hidden idx
+it
+
address@hidden
address@hidden ttt
address@hidden comment
+two
+
address@hidden c
address@hidden
address@hidden gg
+
+', 'in example');
+
+run_test('
address@hidden
address@hidden gg
address@hidden
address@hidden
address@hidden
address@hidden itemize
+', '
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden gg
address@hidden itemize
+', 'empty_items');
+
+run_test('
address@hidden
address@hidden gg
address@hidden
address@hidden comment
address@hidden
address@hidden inter
address@hidden
address@hidden comment
address@hidden
address@hidden c
address@hidden
+in item
address@hidden itemize
+', '
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden gg
address@hidden comment
address@hidden inter
address@hidden comment
address@hidden c
+in item
address@hidden itemize
+', 'only comments and index entries in items');
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- texinfo/tp texi2any.pl Texinfo/Common.pm Texinf...,
Patrice Dumas <=