#!/usr/bin/env perl
#
#  Copyright (C) 2006, 2021 Apple Inc.
#
#  This library is free software; you can redistribute it and/or
#  modify it under the terms of the GNU Library General Public
#  License as published by the Free Software Foundation; either
#  version 2 of the License, or (at your option) any later version.
#
#  This library is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#  Library General Public License for more details.
#
#  You should have received a copy of the GNU Library General Public License
#  along with this library; see the file COPYING.LIB.  If not, write to
#  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
#  Boston, MA 02110-1301, USA.
#

# Usage: preprocess-localized-strings.pl <header> <output> <input> ...

use strict;
use warnings;
use FindBin;
use lib "$FindBin::Bin/bindings/scripts";

use Getopt::Long;

my $defines;
my $preprocessor;
GetOptions('defines=s' => \$defines,
           'preprocessor=s' => \$preprocessor);

my $out = $ARGV[0];
shift;

open OUT, ">", $out or die;

for my $in (@ARGV) {
    $in =~ /(\w+)\.txt$/ or $in =~ /(\w+)\.strings$/ or die;

    my $text;
    require preprocessor;
    $text = join('', applyPreprocessor($in, $defines, $preprocessor, "YES"));

    print OUT $text;
}
