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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
#!/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
|