blob: fad0043f8b8ae07d72be8c3cadb47c3871ae4744 [file] [log] [blame]
#!/usr/bin/perl -w
use strict;
use English;
sub translateAvailability {
my $version = shift;
$version =~ s/^\s+|\s+$//g;
if ($version eq "NA") { return "unavailable"; }
$version =~ /([0-9]+)_([0-9]+)/;
return "introduced=$1.$2";
}
my $prefixLength = 2;
my %minimumValues = ();
my %maximumValues = ();
my %rangeAvailability = ();
my $prev_had_availability = 0;
foreach my $line (<STDIN>) {
chomp $line;
if ($line =~ /([A-Za-z_][A-Za-z_0-9]+).*=[^0-9A-Za-z_-]*([A-Za-z0-9_-]+)/) {
my $fullname = $1;
my $value = $2;
my $has_availability = 0;
my $availability = "";
# if ($line =~ /AVAILABLE\s*[(](([0-9]+_[0-9]+)|(NA))[ ]*,[ ]*(([0-9]+_[0-9]+)|(NA))[)]/) {
if ($line =~ /AVAILABLE[ ]*[(]([^),]*),([^)]*)[)]/) {
$has_availability = 1;
my $osx = $1;
my $ios = $2;
$osx = translateAvailability($osx);
$ios = translateAvailability($ios);
$availability = " \@available(OSX, $osx) \@available(iOS, $ios)\n";
}
# If the full name ends in "Minimum" or "Maximum", it's for a range.
my $rangeName = "";
if ($fullname =~ /(Minimum|Maximum)$/) {
$rangeName = substr $PREMATCH, $prefixLength;
if ($MATCH eq "Minimum") {
$minimumValues{$rangeName} = $value;
} else {
$maximumValues{$rangeName} = $value;
}
$rangeAvailability{$rangeName} = $availability;
} else {
if ($availability ne "") {
if ($prev_had_availability == 0) {
print("\n");
}
print("$availability");
}
my $casename = substr $fullname, $prefixLength;
print(" case $casename = $value\n");
if ($availability ne "") {
print("\n");
$prev_had_availability = 1;
} else {
$prev_had_availability = 0;
}
}
}
}
# Print properties for the ranges.
foreach my $key (sort keys(%minimumValues)) {
my $minimum = $minimumValues{$key};
my $maximum = $maximumValues{$key};
my $availability = $rangeAvailability{$key};
print "\n";
if ($availability ne "") {
print $availability;
}
print(" public var is$key: Bool {\n");
print(" return rawValue >= $minimum && rawValue <= $maximum;\n");
print(" }\n");
}