+
+void
+load_language_tag_list (boost::filesystem::path tags_directory, string name, vector<LanguageTag::SubtagData>& list)
+{
+ auto f = fopen_boost (tags_directory / name, "r");
+ if (!f) {
+ throw FileError ("Could not open tags file", tags_directory / name, errno);
+ }
+ char buffer[512];
+
+ int i = 0;
+ while (!feof(f)) {
+ char* r = fgets (buffer, sizeof(buffer), f);
+ if (r == 0) {
+ break;
+ }
+ string a = buffer;
+ trim (a);
+ r = fgets (buffer, sizeof(buffer), f);
+ if (r == 0) {
+ fclose (f);
+ throw FileError ("Bad tags file", tags_directory / name, -1);
+ }
+ string b = buffer;
+ trim (b);
+ list.push_back (LanguageTag::SubtagData(a, b));
+ ++i;
+ }
+
+ fclose (f);
+}
+
+
+void
+dcp::load_language_tag_lists (boost::filesystem::path tags_directory)
+{
+ load_language_tag_list (tags_directory, "language", language_list);
+ load_language_tag_list (tags_directory, "variant", variant_list);
+ load_language_tag_list (tags_directory, "region", region_list);
+ load_language_tag_list (tags_directory, "script", script_list);
+ load_language_tag_list (tags_directory, "extlang", extlang_list);
+}
+
+