1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
#!/usr/bin/env perl
use strict;
use warnings;
use open ':std', ':encoding(UTF-8)';
use JSON::MaybeXS qw/JSON/;
open my $data_in, '<:encoding(UTF-8)', 'lib/Test/BDD/Cucumber/I18N/Data.pm';
open my $data_out, '>:encoding(UTF-8)', 'Data.pm.updated';
system 'curl https://raw.githubusercontent.com/cucumber/cucumber/master/gherkin/gherkin-languages.json >languages.json';
open my $json_in, '<:encoding(UTF-8)', 'languages.json'
or die "Can't download the gherkin languages JSON: $!";;
my $json;
{
local $/ = undef;
$json = <$json_in>;
}
close $json_in;
my $langdefs = JSON()->new->decode($json);
for my $lang (values %$langdefs) {
for my $keyword (keys %{$lang}) {
$lang->{$keyword} =
join '|', grep { not m/^[*]\s*$/ } @{$lang->{$keyword}}
if ref $lang->{$keyword};
$lang->{$keyword} =~ s/'/\\'/g;
}
}
my $data_line =
'our %languages = (' .
join(',', map {
my $l = $langdefs->{$_};
("'$_',{"
. join(',', map { "'$_','$l->{$_}'" } sort keys %$l )
. '}')
} sort keys %$langdefs )
. ");\n";
while (my $line = <$data_in>) {
if ($line =~ m/^our %languages/) {
print $data_out $data_line;
}
else {
print $data_out $line;
}
}
close $data_in;
close $data_out;
system q{rm languages.json};
system q{mv Data.pm.updated lib/Test/BDD/Cucumber/I18N/Data.pm};
print "Successfully regenerated language data.\n";
|