Element* AccessibilitySVGElement::childElementWithMatchingLanguage(ChildrenType& children) const { String languageCode = language(); if (languageCode.isEmpty()) languageCode = defaultLanguage(); // The best match for a group of child SVG2 'title' or 'desc' elements may be the one // which lacks a 'lang' attribute value. However, indexOfBestMatchingLanguageInList() // currently bases its decision on non-empty strings. Furthermore, we cannot count on // that child element having a given position. So we'll look for such an element while // building the language list and save it as our fallback. Element* fallback = nullptr; Vector<String> childLanguageCodes; Vector<Element*> elements; for (auto& child : children) { auto& lang = child.attributeWithoutSynchronization(SVGNames::langAttr); childLanguageCodes.append(lang); elements.append(&child); // The current draft of the SVG2 spec states if there are multiple equally-valid // matches, the first match should be used. if (lang.isEmpty() && !fallback) fallback = &child; } bool exactMatch; size_t index = indexOfBestMatchingLanguageInList(languageCode, childLanguageCodes, exactMatch); if (index < childLanguageCodes.size()) return elements[index]; return fallback; }
static int textTrackLanguageSelectionScore(const TextTrack& track) { if (track.language().isEmpty()) return 0; Vector<AtomicString> languages = userPreferredLanguages(); size_t languageMatchIndex = indexOfBestMatchingLanguageInList(track.language(), languages); if (languageMatchIndex >= languages.size()) return 0; return languages.size() - languageMatchIndex; }
int CaptionUserPreferences::textTrackLanguageSelectionScore(TextTrack* track, const Vector<String>& preferredLanguages) const { if (track->language().isEmpty()) return 0; size_t languageMatchIndex = indexOfBestMatchingLanguageInList(track->language(), preferredLanguages); if (languageMatchIndex >= preferredLanguages.size()) return 0; // Matching a track language is more important than matching track type, so this multiplier must be // greater than the maximum value returned by textTrackSelectionScore. return (preferredLanguages.size() - languageMatchIndex) * 10; }