// static StatusWithFTSLanguage FTSLanguage::make(StringData langName, TextIndexVersion textIndexVersion) { if (textIndexVersion >= TEXT_INDEX_VERSION_2) { LanguageMap* languageMap = (textIndexVersion == TEXT_INDEX_VERSION_3) ? &languageMapV3 : &languageMapV2; LanguageMap::const_iterator it = languageMap->find(langName.toString()); if (it == languageMap->end()) { // TEXT_INDEX_VERSION_2 and above reject unrecognized language strings. Status status = Status(ErrorCodes::BadValue, str::stream() << "unsupported language: \"" << langName << "\" for text index version " << textIndexVersion); return StatusWithFTSLanguage(status); } return StatusWithFTSLanguage(it->second); } else { // Legacy text index. invariant(textIndexVersion == TEXT_INDEX_VERSION_1); LanguageMapLegacy::const_iterator it = languageMapV1.find(langName); if (it == languageMapV1.end()) { // TEXT_INDEX_VERSION_1 treats unrecognized language strings as "none". return StatusWithFTSLanguage(&languageNoneV1); } return StatusWithFTSLanguage(it->second); } }
Gobby::MenuManager::MenuManager(GtkSourceLanguageManager* language_manager) { Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/menu.ui"); m_app_menu = Glib::RefPtr<Gio::Menu>::cast_dynamic( builder->get_object("appmenu")); m_menu = Glib::RefPtr<Gio::Menu>::cast_dynamic( builder->get_object("winmenu")); Glib::RefPtr<Gio::Menu> highlight_mode_menu = get_highlight_mode_menu(); const gchar* const* language_ids = gtk_source_language_manager_get_language_ids( language_manager); if(language_ids != NULL) { typedef std::list<GtkSourceLanguage*> LanguageList; typedef std::map<std::string, LanguageList> LanguageMap; LanguageMap languages; for(const gchar* const* id = language_ids; *id != NULL; ++id) { GtkSourceLanguage* language = gtk_source_language_manager_get_language( language_manager, *id); if(gtk_source_language_get_hidden(language)) continue; const std::string section = gtk_source_language_get_section(language); languages[section].push_back(language); } for(LanguageMap::iterator iter = languages.begin(); iter != languages.end(); ++iter) { Glib::RefPtr<Gio::Menu> submenu(Gio::Menu::create()); LanguageList& list = iter->second; list.sort(language_sort_func); for(LanguageList::const_iterator liter = list.begin(); liter != list.end(); ++liter) { GtkSourceLanguage* language = *liter; const std::string id = gtk_source_language_get_id(language); const std::string name = gtk_source_language_get_name(language); Glib::RefPtr<Gio::MenuItem> item( Gio::MenuItem::create( name, Glib::ustring::compose( "win.highlight-mode" "('%1')", id))); submenu->append_item(item); } highlight_mode_menu->append_submenu( iter->first, submenu); } } }