summaryrefslogtreecommitdiffstats
path: root/gfx/thebes/genLanguageTagList.pl
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/thebes/genLanguageTagList.pl')
-rw-r--r--gfx/thebes/genLanguageTagList.pl86
1 files changed, 86 insertions, 0 deletions
diff --git a/gfx/thebes/genLanguageTagList.pl b/gfx/thebes/genLanguageTagList.pl
new file mode 100644
index 000000000..0fa6c65f8
--- /dev/null
+++ b/gfx/thebes/genLanguageTagList.pl
@@ -0,0 +1,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