Admin/isa-migrate
author haftmann
Fri, 17 Jun 2005 16:12:49 +0200
changeset 16417 9bc16273c2d4
parent 16411 04cc6b4b3439
permissions -rw-r--r--
migrated theory headers to new format
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16310
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     1
#!/usr/bin/env perl
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     2
#
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     3
# $Id$
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     4
# Author: Florian Haftmann, TUM
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     5
#
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     6
# A generic framework script for simple theory file migrations
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     7
# (under developement)
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     8
#
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     9
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    10
use strict;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    11
use File::Find;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    12
use File::Basename;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    13
use File::Copy;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    14
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    15
# configuration
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    16
my @suffices = ('\.thy');
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    17
my $backupext = '.bak';
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    18
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    19
# migrator lookup hash
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    20
my %migrators = (
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    21
    id => sub {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    22
        my ($file, @content) = @_;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    23
    },
16311
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    24
    thyheader => sub {
16310
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    25
        my ($file, @content) = @_;
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 16411
diff changeset
    26
        #~ my $diag = 1;
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 16411
diff changeset
    27
        my $diag = 0;
16311
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    28
        $_ = join("", @content);
16382
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    29
        if (m!^theory!cgoms) {
16407
e3c3405613c5 isa-migrate ++
haftmann
parents: 16406
diff changeset
    30
            my $prelude = $`;
16382
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    31
            my $thyheader = "theory";
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    32
            $thyheader .= skip_wscomment();
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    33
            if (m!\G(\S+)!cgoms) {
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    34
                $thyheader .= $1;
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    35
                $thyheader .= skip_wscomment();
16404
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    36
                $diag and print "--->\n(1)>>>$thyheader<<<\n<---\n";
16382
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    37
                if (m!\G(?:imports|=)!cgoms) {
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    38
                    $thyheader .= "imports";
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    39
                    $thyheader .= skip_wscomment() || " ";
16404
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    40
                    $diag and print "--->\n(2)>>>$thyheader<<<\n<---\n";
16411
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
    41
                    while (m/\G(?!uses|files|begin|:)/cgoms && m!\G(?:[\w_]+|"[^"]+")!cgoms) {
16404
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    42
                        $diag and print "--->\n(3)>>>$&<<<\n<---\n";
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    43
                        $thyheader .= $&;
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    44
                        $thyheader .= skip_wscomment();
16411
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
    45
                        if (m!\G\+!cgoms) {
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
    46
                            m!\G ?!cgoms;
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
    47
                        }
16382
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    48
                        $thyheader .= skip_wscomment();
16411
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
    49
                        #~ if (m/\G(?!uses|files|begin|:)/cgoms) { print '!!!'; }
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
    50
                        #~ if (m!\G[\w_]+!cgoms) { print '§§§'; }
16382
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    51
                    }
16404
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    52
                    $diag and print "--->\n(4)>>>$thyheader<<<\n<---\n";
16382
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    53
                }
16411
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
    54
                #~ m!\G.{19}!cgoms;
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
    55
                #~ print "***$&\n";
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
    56
                #~ die;
16382
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    57
                if (m!\G(?:files|uses)!cgoms) {
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    58
                    $thyheader .= "uses";
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    59
                    $thyheader .= skip_wscomment();
16404
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    60
                    $diag and print "--->\n(5)>>>$thyheader<<<\n<---\n";
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    61
                    while (m/\G(?!begin|:)/cgoms && m!\G(\("[^"]+"\)|"[^"]+"|[^"\s]+)!cgoms) {
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    62
                        $diag and print "--->\n(6)>>>$&<<<\n<---\n";
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    63
                        $thyheader .= $&;
16382
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    64
                        $thyheader .= skip_wscomment();
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    65
                    }
16404
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    66
                    $diag and print "--->\n(7)>>>$thyheader<<<\n<---\n";
16382
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    67
                }
16411
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
    68
                
16404
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    69
16382
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    70
                if (m!\G(?:begin|:)!cgoms) {
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    71
                    my $postlude = $';
16408
9bbaa5695691 isa-migrate ++
haftmann
parents: 16407
diff changeset
    72
                    if ($& eq ":") {
16404
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    73
                        $thyheader .= " ";
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
    74
                    }
16382
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    75
                    $thyheader .=  "begin";
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    76
                    # do replacement here
16406
4f393b8f84b7 isa-migrate ++
haftmann
parents: 16404
diff changeset
    77
                    if ($diag) {
4f393b8f84b7 isa-migrate ++
haftmann
parents: 16404
diff changeset
    78
                        print "$file:\n$thyheader\n\n";
4f393b8f84b7 isa-migrate ++
haftmann
parents: 16404
diff changeset
    79
                    } else {
4f393b8f84b7 isa-migrate ++
haftmann
parents: 16404
diff changeset
    80
                        open(OSTREAM, ">$file") or die("error opening $file");
4f393b8f84b7 isa-migrate ++
haftmann
parents: 16404
diff changeset
    81
                        print OSTREAM "$prelude$thyheader$postlude";
4f393b8f84b7 isa-migrate ++
haftmann
parents: 16404
diff changeset
    82
                        close(OSTREAM);
4f393b8f84b7 isa-migrate ++
haftmann
parents: 16404
diff changeset
    83
                    }
16382
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    84
                }
4fc8d8c99e9e experimental
haftmann
parents: 16311
diff changeset
    85
            }
16311
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    86
        }
16310
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    87
    }
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    88
);
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    89
16311
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    90
# utility functions
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    91
sub skip_wscomment {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    92
    my $commentlevel = 0;
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    93
    my @skipped = ();
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    94
    while () {
16411
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
    95
        if (m!\G\(\*!cgoms) {
16311
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    96
            push(@skipped, $&);
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    97
            $commentlevel++;
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    98
        } elsif ($commentlevel > 0) {
16411
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
    99
            if (m!\G\*\)!cgoms) {
16311
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   100
                push(@skipped, $&);
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   101
                $commentlevel--;
16411
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
   102
            } elsif (m/\G(?:
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
   103
                        \*(?!\))|\((?!\*)|[^(*]
04cc6b4b3439 isa-migrate ++
haftmann
parents: 16408
diff changeset
   104
                       )*/cgomsx) {
16311
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   105
                push(@skipped, $&);
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   106
            } else {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   107
                die ("probably incorrectly nested comment");
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   108
            }
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   109
        } elsif (m!\G\s+!cgoms) {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   110
            push(@skipped, $&);
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   111
        } else {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   112
            return join('', @skipped);
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   113
        }
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   114
    }
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   115
}
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
   116
16310
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   117
# process dir tree
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   118
sub process_tree {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   119
    my ($root, $migrator, $backupext) = @_;
16404
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
   120
    find(sub { process($_, $migrator, $backupext) }, $root);
16310
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   121
}
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   122
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   123
# process single file
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   124
sub process {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   125
    my ($file, $migrator, $backupext) = @_;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   126
    my ($basename, $dirname, $ext) = fileparse($file, @suffices);
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   127
    #~ print "$file\n";
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   128
    if ($ext) {
16406
4f393b8f84b7 isa-migrate ++
haftmann
parents: 16404
diff changeset
   129
        open(ISTREAM, $file) or die("error opening $file");
16310
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   130
        my @content = <ISTREAM>;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   131
        close ISTREAM;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   132
        if ($backupext) {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   133
            copy($file, "$file$backupext");
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   134
        }
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   135
        print "Migrating $file...\n";
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   136
        &$migrator($file, @content);
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   137
    }
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   138
}
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   139
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   140
# first argument: migrator name
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   141
my $migrator = $migrators{shift @ARGV};
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   142
$migrator or die ("invalid migrator name");
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   143
# other arguments: files or trees
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   144
foreach my $fileloc (@ARGV) {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   145
    -e $fileloc or die ("no file $fileloc");
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   146
}
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   147
foreach my $fileloc (@ARGV) {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   148
    if (-d $fileloc) {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   149
        process_tree($fileloc, $migrator, $backupext);
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   150
    } else {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   151
        process($fileloc, $migrator, $backupext);
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   152
    }
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   153
}
16404
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
   154
5f263e81e366 isa-migrate ++
haftmann
parents: 16382
diff changeset
   155
#!!! example file: