#!/usr/bin/env perl

# This file is part of OpenTTD.
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
# OpenTTD 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 General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.

use strict;
use warnings;

use utf8;

use File::Slurp;

my @langs = qw(
afrikaans.txt
arabic_egypt.txt
basque.txt
belarusian.txt
brazilian_portuguese.txt
bulgarian.txt
catalan.txt
chuvash.txt
croatian.txt
czech.txt
danish.txt
dutch.txt
english_AU.txt
english_US.txt
esperanto.txt
estonian.txt
faroese.txt
finnish.txt
french.txt
frisian.txt
gaelic.txt
galician.txt
german.txt
greek.txt
hebrew.txt
hindi.txt
hungarian.txt
icelandic.txt
ido.txt
indonesian.txt
irish.txt
italian.txt
japanese.txt
korean.txt
latin.txt
latvian.txt
lithuanian.txt
luxembourgish.txt
macedonian.txt
malay.txt
maltese.txt
marathi.txt
norwegian_bokmal.txt
norwegian_nynorsk.txt
persian.txt
polish.txt
portuguese.txt
romanian.txt
russian.txt
serbian.txt
simplified_chinese.txt
slovak.txt
slovenian.txt
spanish.txt
spanish_MX.txt
swedish.txt
tamil.txt
thai.txt
traditional_chinese.txt
turkish.txt
urdu.txt
ukrainian.txt
vietnamese.txt
welsh.txt
);


my @lang_lines;

my $override = 0;
my $no_translate = 0;
my @lines = read_file("extra/english.txt") or die("Can't read english.txt");
for (@lines) {
	$override = 0 if /##override off/;
	$override = 1 if /##override on/;
	$no_translate = 0 if /##no-translate off/;
	$no_translate = 1 if /##no-translate on/;

	next if $override;
	next if $no_translate;

	next if /^##/;

	push @lang_lines, $_;
}


for my $lang (@langs) {
	my @in_lines = read_file($lang);
	push @in_lines, read_file("extra/$lang");

	my %strs;
	for (@in_lines) {
		chomp;
		next if /^#/;

		if (/^(\w+)\s*:/) {
			$strs{$1} = $_;
		}
	}

	my @lines;
	my $suppress_whitespace = 1;
	for (@lang_lines) {
		if (/^(\w+)\s*:/) {
			my $str = $strs{$1};
			if ($str) {
				$str =~ s/\{((?:\d:)?)STRING\d\}/{${1}STRING}/g;
				$str =~ s/\{((?:\d:)?)RAW_STRING\}/{${1}STRING}/g;
				push @lines, $str . "\n";
				$suppress_whitespace = 0;
			}
		} else {
			next if ($_ eq "\n") && $suppress_whitespace;
			push @lines, $_;
			$suppress_whitespace = ($_ eq "\n");
		}
	}
	pop @lines if ($lines[-1] eq "\n");
	write_file("extra/$lang", @lines);
}
