summaryrefslogtreecommitdiff
path: root/regen/tidy_embed.pl
diff options
context:
space:
mode:
Diffstat (limited to 'regen/tidy_embed.pl')
-rw-r--r--regen/tidy_embed.pl36
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";