## Summary * Add swedish hyphenation using scripts/update_hypenation.sh * Add hyphenation test data using the Swedish translation of Andy Weir's Project Hail Mary --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**NO**_
58 lines
2.5 KiB
C++
58 lines
2.5 KiB
C++
#include "LanguageRegistry.h"
|
|
|
|
#include <algorithm>
|
|
#include <array>
|
|
|
|
#include "HyphenationCommon.h"
|
|
#include "generated/hyph-de.trie.h"
|
|
#include "generated/hyph-en.trie.h"
|
|
#include "generated/hyph-es.trie.h"
|
|
#include "generated/hyph-fr.trie.h"
|
|
#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 {
|
|
|
|
// English hyphenation patterns (3/3 minimum prefix/suffix length)
|
|
LanguageHyphenator englishHyphenator(en_patterns, isLatinLetter, toLowerLatin, 3, 3);
|
|
LanguageHyphenator frenchHyphenator(fr_patterns, isLatinLetter, toLowerLatin);
|
|
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, 9>;
|
|
|
|
const EntryArray& entries() {
|
|
static const EntryArray kEntries = {{{"english", "en", &englishHyphenator},
|
|
{"french", "fr", &frenchHyphenator},
|
|
{"german", "de", &germanHyphenator},
|
|
{"russian", "ru", &russianHyphenator},
|
|
{"spanish", "es", &spanishHyphenator},
|
|
{"italian", "it", &italianHyphenator},
|
|
{"polish", "pl", &polishHyphenator},
|
|
{"swedish", "sv", &swedishHyphenator},
|
|
{"ukrainian", "uk", &ukrainianHyphenator}}};
|
|
return kEntries;
|
|
}
|
|
|
|
} // namespace
|
|
|
|
const LanguageHyphenator* getLanguageHyphenatorForPrimaryTag(const std::string& primaryTag) {
|
|
const auto& allEntries = entries();
|
|
const auto it = std::find_if(allEntries.begin(), allEntries.end(),
|
|
[&primaryTag](const LanguageEntry& entry) { return primaryTag == entry.primaryTag; });
|
|
return (it != allEntries.end()) ? it->hyphenator : nullptr;
|
|
}
|
|
|
|
LanguageEntryView getLanguageEntries() {
|
|
const auto& allEntries = entries();
|
|
return LanguageEntryView{allEntries.data(), allEntries.size()};
|
|
}
|