// Helper adds all the scripts from sid_set converted to ids from osd_set to // allowed_ids. static void AddAllScriptsConverted(const UNICHARSET& sid_set, const UNICHARSET& osd_set, GenericVector<int>* allowed_ids) { for (int i = 0; i < sid_set.get_script_table_size(); ++i) { if (i != sid_set.null_sid()) { const char* script = sid_set.get_script_from_script_id(i); allowed_ids->push_back(osd_set.get_script_id_from_name(script)); } } }
// Helper gets the combined x-heights string. std::string GetXheightString(const std::string& script_dir, const UNICHARSET& unicharset) { std::string xheights_str; for (int s = 0; s < unicharset.get_script_table_size(); ++s) { // Load the xheights for the script if available. std::string filename = script_dir + "/" + unicharset.get_script_from_script_id(s) + ".xheights"; std::string script_heights; if (File::ReadFileToString(filename, &script_heights)) xheights_str += script_heights; } return xheights_str; }
// Helper to set the properties for an input unicharset file, writes to the // output file. If an appropriate script unicharset can be found in the // script_dir directory, then the tops and bottoms are expanded using the // script unicharset. // If non-empty, xheight data for the fonts are written to the xheights_file. void SetPropertiesForInputFile(const string& script_dir, const string& input_unicharset_file, const string& output_unicharset_file, const string& output_xheights_file) { UNICHARSET unicharset; // Load the input unicharset unicharset.load_from_file(input_unicharset_file.c_str()); tprintf("Loaded unicharset of size %d from file %s\n", unicharset.size(), input_unicharset_file.c_str()); // Set unichar properties tprintf("Setting unichar properties\n"); SetupBasicProperties(true, false, &unicharset); string xheights_str; for (int s = 0; s < unicharset.get_script_table_size(); ++s) { // Load the unicharset for the script if available. string filename = script_dir + "/" + unicharset.get_script_from_script_id(s) + ".unicharset"; UNICHARSET script_set; if (script_set.load_from_file(filename.c_str())) { unicharset.SetPropertiesFromOther(script_set); } // Load the xheights for the script if available. filename = script_dir + "/" + unicharset.get_script_from_script_id(s) + ".xheights"; string script_heights; if (File::ReadFileToString(filename, &script_heights)) xheights_str += script_heights; } if (!output_xheights_file.empty()) File::WriteStringToFileOrDie(xheights_str, output_xheights_file); for (int c = SPECIAL_UNICHAR_CODES_COUNT; c < unicharset.size(); ++c) { if (unicharset.PropertiesIncomplete(c)) { tprintf("Warning: properties incomplete for index %d = %s\n", c, unicharset.id_to_unichar(c)); } } // Write the output unicharset tprintf("Writing unicharset to file %s\n", output_unicharset_file.c_str()); unicharset.save_to_file(output_unicharset_file.c_str()); }