#!/usr/bin/env perl
#
# Author: Makarius
#
# update_sub_sup - update Isabelle symbols involving sub/superscripts

use warnings;
use strict;

sub update_sub_sup {
    my ($file) = @_;

    open (FILE, $file) || die $!;
    undef $/; my $text = <FILE>; $/ = "\n";         # slurp whole file
    close FILE || die $!;

    $_ = $text;

    s/\Q\<^isub>\E/\\<^sub>/g;
    s/\Q\<^isup>\E/\\<^sup>/g;
    s/\Q\<onesuperior>\E/\\<^sup>1/g;
    s/\Q\<twosuperior>\E/\\<^sup>2/g;
    s/\Q\<threesuperior>\E/\\<^sup>3/g;

    my $result = $_;

    if ($text ne $result) {
        print STDERR "changing $file\n";
        if (! -f "$file~~") {
            rename $file, "$file~~" || die $!;
        }
        open (FILE, "> $file") || die $!;
        print FILE $result;
        close FILE || die $!;
    }
}


## main

foreach my $file (@ARGV) {
  eval { &update_sub_sup($file); };
  if ($@) { print STDERR "*** update_sub_sup $file: ", $@, "\n"; }
}
