void InternalSettings::setPictographFontFamily(const String& family, const String& script, ExceptionCode& ec) { InternalSettingsGuardForSettings(); UScriptCode code = scriptNameToCode(script); if (code == USCRIPT_INVALID_CODE) return; m_backup.m_pictographFontFamilies.add(code, settings()->pictographFontFamily(code)); settings()->setPictographFontFamily(family, code); }
void InternalSettings::setPictographFontFamily(const AtomicString& family, const String& script, ExceptionState& exceptionState) { InternalSettingsGuardForSettings(); UScriptCode code = scriptNameToCode(script); if (code == USCRIPT_INVALID_CODE) return; if (settings()->genericFontFamilySettings().updatePictograph(family, code)) settings()->notifyGenericFontFamilyChange(); }
ExceptionOr<void> InternalSettings::setPictographFontFamily(const String& family, const String& script) { if (!m_page) return Exception { INVALID_ACCESS_ERR }; UScriptCode code = scriptNameToCode(script); if (code == USCRIPT_INVALID_CODE) return { }; m_backup.m_pictographFontFamilies.add(code, settings().pictographFontFamily(code)); settings().setPictographFontFamily(family, code); return { }; }
/** * Registers standard transliterators with the system. Called by * Transliterator during initialization. Scan all current targets and * register those that are scripts T as Any-T/V. */ void AnyTransliterator::registerIDs() { UErrorCode ec = U_ZERO_ERROR; Hashtable seen(TRUE, ec); int32_t sourceCount = Transliterator::_countAvailableSources(); for (int32_t s=0; s<sourceCount; ++s) { UnicodeString source; Transliterator::_getAvailableSource(s, source); // Ignore the "Any" source if (source.caseCompare(ANY, 3, 0 /*U_FOLD_CASE_DEFAULT*/) == 0) continue; int32_t targetCount = Transliterator::_countAvailableTargets(source); for (int32_t t=0; t<targetCount; ++t) { UnicodeString target; Transliterator::_getAvailableTarget(t, source, target); // Only process each target once if (seen.geti(target) != 0) continue; ec = U_ZERO_ERROR; seen.puti(target, 1, ec); // Get the script code for the target. If not a script, ignore. UScriptCode targetScript = scriptNameToCode(target); if (targetScript == USCRIPT_INVALID_CODE) continue; int32_t variantCount = Transliterator::_countAvailableVariants(source, target); // assert(variantCount >= 1); for (int32_t v=0; v<variantCount; ++v) { UnicodeString variant; Transliterator::_getAvailableVariant(v, source, target, variant); UnicodeString id; TransliteratorIDParser::STVtoID(UnicodeString(TRUE, ANY, 3), target, variant, id); ec = U_ZERO_ERROR; AnyTransliterator* t = new AnyTransliterator(id, target, variant, targetScript, ec); if (U_FAILURE(ec)) { delete t; } else { Transliterator::_registerInstance(t); Transliterator::_registerSpecialInverse(target, UnicodeString(TRUE, NULL_ID, 4), FALSE); } } } } }
UScriptCode localeToScriptCodeForFontSelection(const String& locale) { static NeverDestroyed<LocaleScriptMap> localeScriptMap; if (localeScriptMap.get().isEmpty()) { for (size_t i = 0; i < sizeof(localeScriptList) / sizeof(LocaleScript); ++i) localeScriptMap.get().set(ASCIILiteral(localeScriptList[i].locale), localeScriptList[i].script); } String canonicalLocale = locale.lower().replace('-', '_'); while (!canonicalLocale.isEmpty()) { LocaleScriptMap::iterator it = localeScriptMap.get().find(canonicalLocale); if (it != localeScriptMap.get().end()) return it->value; size_t pos = canonicalLocale.reverseFind('_'); if (pos == notFound) break; UScriptCode code = scriptNameToCode(canonicalLocale.substring(pos + 1)); if (code != USCRIPT_INVALID_CODE && code != USCRIPT_UNKNOWN) return code; canonicalLocale = canonicalLocale.substring(0, pos); } return USCRIPT_COMMON; }
static void setFontFamily(Settings* settings, const String& family, const String& script, SetFontFamilyFunction setter) { UScriptCode code = scriptNameToCode(script); if (code != USCRIPT_INVALID_CODE) (settings->*setter)(family, code); }