#include <utility>
#include "unicode/utypes.h"
#include "unicode/bytestrie.h"
#include "unicode/localpointer.h"
#include "unicode/locid.h"
#include "unicode/uobject.h"
#include "unicode/ures.h"
#include "unicode/uscript.h"
#include "charstr.h"
#include "cstring.h"
#include "loclikelysubtags.h"
#include "lsr.h"
#include "uassert.h"
#include "ucln_cmn.h"
#include "uhash.h"
#include "uinvchar.h"
#include "umutex.h"
#include "uniquecharstr.h"
#include "uresdata.h"
#include "uresimp.h"
#include "uvector.h"
U_NAMESPACE_BEGIN
namespace {
constexpr char PSEUDO_ACCENTS_PREFIX = …;
constexpr char PSEUDO_BIDI_PREFIX = …;
constexpr char PSEUDO_CRACKED_PREFIX = …;
}
LocaleDistanceData::LocaleDistanceData(LocaleDistanceData &&data) : … { … }
LocaleDistanceData::~LocaleDistanceData() { … }
struct LikelySubtagsData { … };
namespace {
LikelySubtags *gLikelySubtags = …;
UVector *gMacroregions = …;
UInitOnce gInitOnce { … };
UBool U_CALLCONV cleanup() { … }
constexpr const char16_t* MACROREGION_HARDCODE[] = …;
constexpr char16_t RANGE_MARKER = …;
void processMacroregionRange(const UnicodeString& regionName, UVector* newMacroRegions, UErrorCode& status) { … }
#if U_DEBUG
UVector* loadMacroregions(UErrorCode &status) {
if (U_FAILURE(status)) { return nullptr; }
LocalPointer<UVector> newMacroRegions(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
LocalUResourceBundlePointer supplementalData(ures_openDirect(nullptr,"supplementalData",&status));
LocalUResourceBundlePointer idValidity(ures_getByKey(supplementalData.getAlias(),"idValidity",nullptr,&status));
LocalUResourceBundlePointer regionList(ures_getByKey(idValidity.getAlias(),"region",nullptr,&status));
LocalUResourceBundlePointer regionMacro(ures_getByKey(regionList.getAlias(),"macroregion",nullptr,&status));
if (U_FAILURE(status)) {
return nullptr;
}
while (ures_hasNext(regionMacro.getAlias())) {
UnicodeString regionName = ures_getNextUnicodeString(regionMacro.getAlias(),nullptr,&status);
processMacroregionRange(regionName, newMacroRegions.getAlias(), status);
if (U_FAILURE(status)) {
return nullptr;
}
}
return newMacroRegions.orphan();
}
#endif
UVector* getStaticMacroregions(UErrorCode &status) { … }
}
void U_CALLCONV LikelySubtags::initLikelySubtags(UErrorCode &errorCode) { … }
const LikelySubtags *LikelySubtags::getSingleton(UErrorCode &errorCode) { … }
LikelySubtags::LikelySubtags(LikelySubtagsData &data) : … { … }
LikelySubtags::~LikelySubtags() { … }
LSR LikelySubtags::makeMaximizedLsrFrom(const Locale &locale,
bool returnInputIfUnmatch,
UErrorCode &errorCode) const { … }
namespace {
const char *getCanonical(const CharStringMap &aliases, const char *alias) { … }
}
LSR LikelySubtags::makeMaximizedLsr(const char *language, const char *script, const char *region,
const char *variant,
bool returnInputIfUnmatch,
UErrorCode &errorCode) const { … }
LSR LikelySubtags::maximize(const char *language, const char *script, const char *region,
bool returnInputIfUnmatch,
UErrorCode &errorCode) const { … }
bool LikelySubtags::isMacroregion(StringPiece& region, UErrorCode& errorCode) const { … }
LSR LikelySubtags::maximize(StringPiece language, StringPiece script, StringPiece region,
bool returnInputIfUnmatch,
UErrorCode &errorCode) const { … }
int32_t LikelySubtags::compareLikely(const LSR &lsr, const LSR &other, int32_t likelyInfo) const { … }
int32_t LikelySubtags::getLikelyIndex(const char *language, const char *script) const { … }
int32_t LikelySubtags::trieNext(BytesTrie &iter, const char *s, int32_t i) { … }
int32_t LikelySubtags::trieNext(BytesTrie &iter, StringPiece s, int32_t i) { … }
LSR LikelySubtags::minimizeSubtags(StringPiece language, StringPiece script,
StringPiece region,
bool favorScript,
UErrorCode &errorCode) const { … }
U_NAMESPACE_END