1 #!/usr/bin/perl -s- # -*-Perl-*-
3 #---------------------------------------------------------------------
4 #The following script file is useful to convert old theory files into a
5 #style consistent with new naming conventions. Now, the names of the
6 #files must be the same as the names of the theories they define (with
7 #a ".thy" suffix) and corresponding ML files must also be renamed.
9 #To make this renaming easier, the following perl script can be used.
10 #It traverses the given directory recursively. For each file of the
11 #form abc.thy, this script does the following steps:
13 #1. Reads the file and grabs the first identifier, say Abc (skipping comments
14 # (*...*) and white space).
15 #2. Outputs the commands needed to rename the file abc.thy to Abc.thy,
16 # including the appropriate CVS commands.
17 #3. If abc.ML also exists, it outputs appropriate commands to rename it
20 #These commands can be put into a file, which can then be executed.
21 #If you are not using cvs, use "grep" to extract just the "mv" commands.
25 #---------------------------------------------------------------------
27 open(MATCH_FILES, "find . -name \"*thy\" -print |");
29 foreach $each_match (<MATCH_FILES>) {
31 if($each_match =~ /(.*\/)(\w*)\.thy/) {$dirpart = $1;}
32 else {print "something wrong with finding path!\n";
34 open (CONTENTS, $each_match);
36 chop(@readit); $oneline = join(" ",@readit);
37 $oneline =~ s/\(\*([^\*]|(\*[^\)]))*\*\)//g ;
38 # comments: have to remove strings of anything but stars or stars
39 # followed by anything but right parenthesis
40 if($oneline =~ /\s*([^ ]*)\s*=.*/)
42 $new_name = $dirpart . $th_name . ".thy";
43 print "mv -i $each_match $new_name \n";
44 print "cvs rm $each_match ; cvs add $new_name \n";
46 $each_ML = $each_match;
47 $each_ML =~ s/.thy/.ML/;
48 if (-e $each_ML) { $new_ML = $dirpart . $th_name . ".ML";
49 print "mv -i $each_ML $new_ML \n";
50 print "cvs rm $each_ML ; cvs add $new_ML \n";}}
51 else {print "something wrong with format of theory file!\n";}