diff options
Diffstat (limited to 'regen')
-rw-r--r-- | regen/tidy_embed.pl | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/regen/tidy_embed.pl b/regen/tidy_embed.pl index bafe9de082..b0b7182b4f 100644 --- a/regen/tidy_embed.pl +++ b/regen/tidy_embed.pl @@ -10,12 +10,25 @@ my $parser= HeaderParser->new( my $embed= $line_data->{embed} or return; }, - _post_process_grouped_content => sub { - my ($self,$group_ary)= @_; + post_process_grouped_content => sub { + my ($self, $group_ary)= @_; + my $last=chr(0x10FFFF); + for(my $i= $#$group_ary; $i>=0; $i--) { + my $entry= $group_ary->[$i]; + if ($entry->{embed}) { + $last = $entry->{embed}{name}; + } + $entry->{sort}{klc}= lc($last)=~s/[^a-z]+//gr; + $entry->{sort}{key}= $last; + $entry->{sort}{idx}= $i; + } @{$group_ary}= sort { - $a->{embed}{name} cmp $b->{embed}{name} + $a->{sort}{klc} cmp $b->{sort}{klc} || + $a->{sort}{key} cmp $b->{sort}{key} || + $a->{sort}{idx} <=> $b->{sort}{idx} } @{$group_ary}; + delete $_->{sort} for @$group_ary; }, ); my $tap; @@ -30,16 +43,21 @@ my $new= "$file.new"; my $bak= "$file.bak"; $parser->read_file($file); my $lines= $parser->lines; -my @tail; -while ($lines->[-1]{type} eq "content" and - ($lines->[-1]{line} eq "\n" or $lines->[-1]{line}=~/^\s*:/) -) { +my (@head, @tail); +# strip off comments at the start of the file +while ($lines->[0]{type} eq "content" and !$lines->[0]{embed}) { + push @head, shift @$lines; +} + +# strip off comments at the bottom of the file +while ($lines->[-1]{type} eq "content" and !$lines->[-1]{embed}) +{ unshift @tail, pop @$lines; } my $grouped_content_ary= $parser->group_content(); -push @$grouped_content_ary, @tail; -my $grouped_content_txt= $parser->lines_as_str($grouped_content_ary); +my $grouped_content_txt= $parser->lines_as_str( + [ @head, @$grouped_content_ary, @tail ]); if ($grouped_content_txt ne $parser->{orig_content}) { if ($tap) { print "not ok - $0 $file\n"; |