#!/usr/bin/env perl
use 5.010;
use strict;
use warnings;

use Data::Dump 'pp';
use File::Slurp 'read_file';
use JSON;

local $/;  # slurp
my $source = readline;

for ($source) { # cleanup
	s/\A\(// and s/\);?\s*\Z//;  # empty callback
	next if /^\{/;  # valid json

	# convert seperate variables to hash keys
	s/\A/{\n/;
	s/^caniuse\.(\w+) *= */"$1":/gm;
	s/;$/,/gm;
	s/,\s*\Z/\n}/;
	# fractions not supported by barekey
	s/(?<=[,{\n]) (\d*\.\d) (?=:['"])/"$1"/gx;
	# escapes not supported in singlequote
	s{: *\K'((?:[^\\']+|\\.)*)'}{
		my $_ = $1;
		s/"/\\"/g;
		s/\\'/'/g;
		qq("$_");
	}ge;
}

my $data = from_json($source, {
	allow_singlequote => 1,
	allow_barekey => 1,
});

print pp($data);

__END__

=head1 NAME

convert-caniuse - Turn Javascript data into an equivalent Perl structure

=head1 SYNOPSIS

	curl http://caniuse.com/jsonp.php |
	tools/convert-caniuse.pl > browser-support.inc.pl

