예제 #1
0
// 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);
    }
}
예제 #2
0
파일: menumanager.cpp 프로젝트: gobby/gobby
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);
		}
	}
}