#! /usr/bin/perl -w
use strict;
use IPC::Open2;

if (@ARGV != 1) {
    print STDERR "Usage: $0 localechooser-source-tree\n";
    exit 1;
}

my $localechooser = $ARGV[0];

# Some special cases that are handled strangely either here or in
# localechooser.
my %langcode_overrides = (
    'nb_NO' => 'nb',
    'nn_NO' => 'nn',
    'pt' => 'pt_PT',
    'se_NO' => 'se',
);

# The real localised names for these languages use characters not present in
# our font, or not rendered correctly for some other reason.
my @langname_notranslate = (
    'am',
    'ar',
    'bn',
    'bo',
    'dz',
    'gu',
    'hi',
    'km',
    'lo',
    'ml',
    'mr',
    'my',
    'ne',
    'pa',
    'ta',
    'th',
    'ug',
);
my %langname_notranslate = map { $_ => 1 } @langname_notranslate;

# Adjust the sort order slightly. (The values are not real language codes;
# they're just there to make the sort unambiguous.)
my %sort_ids = (
    'nb' => 'no_NB',
    'nn' => 'no_NN',
);

my %langnames;
my %locales;
open LIST, '<:utf8', "$localechooser/languagelist"
    or die "$0: can't open $localechooser/languagelist: $!";
while (<LIST>) {
    chomp;
    next if /^#/ or not /\S/;
    my @bits = split /;/;
    my $lang = $bits[0];
    next if $lang eq 'C';
    $lang = $langcode_overrides{$lang} if exists $langcode_overrides{$lang};
    if (exists $langname_notranslate{$lang}) {
	$langnames{$lang} = $bits[1];
    } elsif ($lang eq 'he') {
	my $bidi_pid = open2(\*BIDI_OUT, \*BIDI_IN, 'fribidi', '--nopad', '--nobreak');
	binmode BIDI_IN, ':utf8';
	binmode BIDI_OUT, ':utf8';
	print BIDI_IN $bits[2];
	close BIDI_IN;
	{ local $/ = undef; $langnames{$lang} = <BIDI_OUT>; }
	$langnames{$lang} =~ s/(.)%/%$1/g;
	waitpid $bidi_pid, 0;
    } else {
	$langnames{$lang} = $bits[2];
    }
    ($locales{$lang} = "$bits[6]") =~ s/[.@].*//;
    $sort_ids{$lang} = $lang unless exists $sort_ids{$lang};
}
close LIST;

binmode STDOUT, ':utf8';

print "/lang.defaultnames [\n";
for my $lang (sort { $sort_ids{$a} cmp $sort_ids{$b} } keys %langnames) {
    print qq{  [ "$lang" "$locales{$lang}" "$langnames{$lang}" ]\n};
}
print "] def\n";
