summaryrefslogtreecommitdiff
path: root/regen/tidy_embed.pl
blob: bafe9de082f9910dda7357d08a799b782c03943a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
use lib "regen";
use HeaderParser;
use strict;
use warnings;

my $parser= HeaderParser->new(
        pre_process_content => sub {
            my ($self,$line_data)= @_;
            $self->tidy_embed_fnc_entry($line_data);
            my $embed= $line_data->{embed}
                or return;
        },
        _post_process_grouped_content => sub {
            my ($self,$group_ary)= @_;
            @{$group_ary}=
                sort {
                    $a->{embed}{name} cmp $b->{embed}{name}
                } @{$group_ary};
        },
    );
my $tap;
if (@ARGV and $ARGV[0] eq "--tap") {
    $tap = shift @ARGV;
}
my $file= "embed.fnc";
if (@ARGV) {
    $file= shift @ARGV;
}
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*:/)
) {
    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);
if ($grouped_content_txt ne $parser->{orig_content}) {
    if ($tap) {
        print "not ok - $0 $file\n";
    } elsif (-t) {
        print "Updating $file\n";
    }
    open my $fh,">",$new
        or die "Failed to open '$new' for write: $!";
    print $fh $grouped_content_txt
        or die "Failed to print to '$new': $!";
    close $fh
        or die "Failed to close '$new': $!";
    rename $file, $bak
        or die "Couldn't move '$file' to '$bak': $!";
    rename $new, $file
        or die "Couldn't move embed.fnc.new to embed.fnc: $!";
} elsif ($tap) {
    print "ok - $0 $file\n";
}