Add swedish hyphenation (upstream PR 1637)

This commit is contained in:
jpirnay
2026-05-16 09:39:19 +02:00
parent 1395676674
commit c06fdc4577
6 changed files with 19 additions and 4 deletions
+13 -3
View File
@@ -8,15 +8,19 @@
#include "LanguageHyphenator.h"
#include "LanguageRegistry.h"
const LanguageHyphenator* Hyphenator::cachedHyphenator_ = nullptr;
struct Iso639Mapping {
const char* iso639_2;
const char* iso639_1;
};
static constexpr Iso639Mapping kIso639Mappings[] = {{"eng", "en"}, {"fra", "fr"}, {"fre", "fr"}, {"deu", "de"},
{"ger", "de"}, {"rus", "ru"}, {"spa", "es"}, {"ita", "it"},
{"ukr", "uk"}, {"swe", "sv"}};
namespace {
// Maps a BCP-47 language tag to a language-specific hyphenator.
const LanguageHyphenator* hyphenatorForLanguage(const std::string& langTag) {
if (langTag.empty()) return nullptr;
// Extract primary subtag and normalize to lowercase (e.g., "en-US" -> "en").
std::string primary;
primary.reserve(langTag.size());
for (char c : langTag) {
@@ -26,6 +30,12 @@ const LanguageHyphenator* hyphenatorForLanguage(const std::string& langTag) {
}
if (primary.empty()) return nullptr;
for (const auto& mapping : kIso639Mappings) {
if (primary == mapping.iso639_2) {
return getLanguageHyphenatorForPrimaryTag(mapping.iso639_1);
}
}
return getLanguageHyphenatorForPrimaryTag(primary);
}
@@ -11,6 +11,7 @@
#include "generated/hyph-it.trie.h"
#include "generated/hyph-pl.trie.h"
#include "generated/hyph-ru.trie.h"
#include "generated/hyph-sv.trie.h"
#include "generated/hyph-uk.trie.h"
namespace {
@@ -22,10 +23,11 @@ LanguageHyphenator germanHyphenator(de_patterns, isLatinLetter, toLowerLatin);
LanguageHyphenator russianHyphenator(ru_patterns, isCyrillicLetter, toLowerCyrillic);
LanguageHyphenator spanishHyphenator(es_patterns, isLatinLetter, toLowerLatin);
LanguageHyphenator italianHyphenator(it_patterns, isLatinLetter, toLowerLatin);
LanguageHyphenator swedishHyphenator(sv_patterns, isLatinLetter, toLowerLatin);
LanguageHyphenator ukrainianHyphenator(uk_patterns, isCyrillicLetter, toLowerCyrillic);
LanguageHyphenator polishHyphenator(pl_patterns, isLatinLetter, toLowerLatin);
using EntryArray = std::array<LanguageEntry, 8>;
using EntryArray = std::array<LanguageEntry, 9>;
const EntryArray& entries() {
static const EntryArray kEntries = {{{"english", "en", &englishHyphenator},
@@ -34,6 +36,7 @@ const EntryArray& entries() {
{"russian", "ru", &russianHyphenator},
{"spanish", "es", &spanishHyphenator},
{"italian", "it", &italianHyphenator},
{"swedish", "sv", &swedishHyphenator},
{"polish", "pl", &polishHyphenator},
{"ukrainian", "uk", &ukrainianHyphenator}}};
return kEntries;
Binary file not shown.