#/**
# *******************************************************************************
# * Copyright (C) 2001-2002, International Business Machines Corporation and    *
# * others. All Rights Reserved.                                                *
# *******************************************************************************
# *
# * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/translit/varsub.bat,v $
# * $Date: 2002/12/18 03:56:41 $
# * $Revision: 1.2 $
# *
# *******************************************************************************
# */

@rem = '--*-Perl-*--
@echo off
if "%OS%" == "Windows_NT" goto WinNT
perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
:WinNT
perl -x -S "%0" %*
if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
if %errorlevel% == 9009 echo You do not have Perl in your PATH.
goto endofperl
@rem ';
#!perl
#line 14

# Usage: perl varsub.bat [-n|-nr] <infile> <outfile>
#
# Substitutes variables into rules and deletes variable definition
# statements.  Variables that expand to UnicodeSets are NOT
# substituted.
#
#  -n   Afterwards, run native2ascii -encoding UTF8
#  -nr  Afterwards, run native2ascii -encoding UTF8 -reverse

$N2A = 0;

$IN = shift;
if ($IN =~ /^-n/) {
    $N2A = 1;
    $N2Aoption = ($IN eq '-nr') ? " -reverse " : "";
    $IN = shift;
}
$OUT = shift;

if (!($IN && $OUT)) {
    die "Usage: $0 [-n|-nr] <infile> <outfile>";
}

open(IN) or die "Can't open $IN: $!";
open(OUT, ">$OUT") or die "Can't open $OUT: $!";

while (<IN>) {
    if (/^\s*\$([a-zA-Z0-9_]+)\s*=\s*([^;\#]+)\s*;\s*(\#.*)?$/) {
        # This looks like a variable definition
        my ($var, $def) = ($1, $2);
        # Don't substitute UnicodeSet vars
        if ($def !~ /^\[/) {
            if (exists $VAR{$var}) {
                print STDERR "Error: Duplicate definition of $var\n";
            } else {
                $VAR{$var} = $def;
            }
            next;
        }
    }
    
    # Do variable substitutions, and output line
    foreach my $var (keys %VAR) {
        my $def = $VAR{$var};
        s/\$$var\b/$def/g;
    }
    print OUT;
}

close(OUT);
close(IN);

if ($N2A) {
    `native2ascii -encoding UTF8 $N2Aoption $OUT $OUT.native2ascii`;
    unlink $OUT;
    rename "$OUT.native2ascii", $OUT;
}

__END__
:endofperl
