зеркало из https://github.com/mozilla/gecko-dev.git
87 строки
2.2 KiB
Perl
87 строки
2.2 KiB
Perl
#!/usr/bin/env perl
|
|
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
# This tool is used to prepare a list of valid language subtags from the
|
|
# IANA registry (http://www.iana.org/assignments/language-subtag-registry).
|
|
|
|
# Run as
|
|
#
|
|
# perl genLanguageTagList.pl language-subtag-registry > gfxLanguageTagList.cpp
|
|
#
|
|
# where language-subtag-registry is a copy of the IANA registry file.
|
|
|
|
use strict;
|
|
|
|
my $timestamp = gmtime();
|
|
print <<__END;
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/*
|
|
* Derived from the IANA language subtag registry by genLanguageTagList.pl.
|
|
*
|
|
* Created on $timestamp.
|
|
*
|
|
* * * * * This file contains MACHINE-GENERATED DATA, do not edit! * * * * *
|
|
*/
|
|
|
|
__END
|
|
|
|
my $isLanguage = 0;
|
|
|
|
while (<>) {
|
|
# strip leading/trailing whitespace, if any
|
|
chomp;
|
|
s/^\s+//;
|
|
s/\s+$//;
|
|
|
|
# assume File-Date precedes the actual list;
|
|
# record the date, and begin assignment to an array of valid tags
|
|
if (m/^File-Date:\s*(.+)$/) {
|
|
print "// Based on IANA registry dated $1\n\n";
|
|
print "static const uint32_t sLanguageTagList[] = {";
|
|
next;
|
|
}
|
|
|
|
if (m/^%%/) {
|
|
$isLanguage = 0;
|
|
next;
|
|
}
|
|
|
|
# we only care about records of type 'language'
|
|
if (m/^Type:\s*(.+)$/) {
|
|
$isLanguage = ($1 eq 'language');
|
|
next;
|
|
}
|
|
|
|
# append the tag to our string, with ";" as a delimiter
|
|
if ($isLanguage && m/^Subtag:\s*([a-z]{2,3})\s*$/) {
|
|
my $tagstr = $1;
|
|
print "\n TRUETYPE_TAG(",
|
|
join(",", map { $_ eq " " ? " 0 " : "'" . $_ . "'" } split(//, substr($tagstr . " ", 0, 4))),
|
|
"), // ", $tagstr;
|
|
next;
|
|
}
|
|
|
|
if ($isLanguage && m/^Description:\s*(.+)$/) {
|
|
print " = $1";
|
|
$isLanguage = 0; # only print first Description field
|
|
next;
|
|
}
|
|
}
|
|
|
|
# at end of file, terminate our assignment to the array of tags
|
|
print <<__END;
|
|
|
|
0x0 // end of language code list
|
|
};
|
|
|
|
/*
|
|
* * * * * This file contains MACHINE-GENERATED DATA, do not edit! * * * * *
|
|
*/
|
|
__END
|