lib/scripts/fixnumerals.pl
author wenzelm
Fri, 23 Jul 1999 14:05:50 +0200
changeset 7065 aa1d0d620031
permissions -rw-r--r--
fix occurences of numerals in HOL/ZF terms;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7065
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
     1
#
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
     2
# $Id$
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
     3
#
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
     4
# fixnumerals.pl - fix occurences of numerals in HOL/ZF terms
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
     5
#
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
     6
# tries to be smart; may produce garbage if nested comments and
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
     7
# solitary quotes (") are intermixed badly;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
     8
#
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
     9
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    10
sub fixdots {
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    11
    my ($constr, $file) = @_;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    12
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    13
    open (FILE, $file) || die $!;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    14
    undef $/; $text = <FILE>; $/ = "\n";         # slurp whole file
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    15
    close FILE || die $!;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    16
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    17
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    18
    $result = "";
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    19
    $rest = $text;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    20
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    21
    while (1) {
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    22
	$_ = $rest;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    23
	($pre, $str, $rest) =
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    24
	    m/^((?: \(\*.*?\*\) | [^"] )*)      # pre: text or (non-nested!) comments
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    25
            "((?: [^"\\] | \\\S | \\\s+\\ )*)"  # quoted string
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    26
            (.*)$/sx;                           # rest of file
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    27
	if ($str) {
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    28
	    $_ = $str;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    29
	    if (!m/^[a-zA-Z0-9_\/\.]*$/s && !m/\.ML/s && !m/\.thy/s) {   # exclude filenames!
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    30
		if ($constr eq "true") {
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    31
		    s/#([0-9]+)/($1::int)/sg;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    32
		    s/#-([0-9]+)/(~$1::int)/sg;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    33
		} else {
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    34
		    s/#([0-9]+)/$1/sg;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    35
		    s/#-([0-9]+)/~$1/sg;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    36
		}
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    37
	    }
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    38
            $result = $result . $pre . '"' . $_ . '"';
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    39
        } else {
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    40
 	    $result = $result . $_;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    41
    	    last;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    42
	}
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    43
    }
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    44
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    45
    if ($text ne $result) {
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    46
	print STDERR "fixing $file\n";
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    47
        if (! -f "$file~~") {
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    48
	    rename $file, "$file~~" || die $!;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    49
        }
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    50
	open (FILE, "> $file") || die $!;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    51
	print FILE $result;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    52
	close FILE || die $!;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    53
    }
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    54
}
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    55
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    56
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    57
## main
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    58
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    59
$constr = shift;
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    60
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    61
foreach $file (@ARGV) {
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    62
  eval { &fixdots($constr, $file); };
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    63
  if ($@) { print STDERR "*** fixdots $file: ", $@, "\n"; }
aa1d0d620031 fix occurences of numerals in HOL/ZF terms;
wenzelm
parents:
diff changeset
    64
}