tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

displayoptions.cpp (4835B)


      1 // © 2022 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 
      4 #include "unicode/utypes.h"
      5 
      6 #if !UCONFIG_NO_FORMATTING
      7 
      8 #include "unicode/displayoptions.h"
      9 #include "unicode/udisplayoptions.h"
     10 #include "cstring.h"
     11 
     12 U_NAMESPACE_BEGIN
     13 
     14 DisplayOptions::Builder DisplayOptions::builder() { return {}; }
     15 
     16 DisplayOptions::Builder DisplayOptions::copyToBuilder() const { return Builder(*this); }
     17 
     18 DisplayOptions::DisplayOptions(const Builder &builder) {
     19    grammaticalCase = builder.grammaticalCase;
     20    nounClass = builder.nounClass;
     21    pluralCategory = builder.pluralCategory;
     22    capitalization = builder.capitalization;
     23    nameStyle = builder.nameStyle;
     24    displayLength = builder.displayLength;
     25    substituteHandling = builder.substituteHandling;
     26 }
     27 
     28 DisplayOptions::Builder::Builder() {
     29    // Sets default values.
     30    grammaticalCase = UDISPOPT_GRAMMATICAL_CASE_UNDEFINED;
     31    nounClass = UDISPOPT_NOUN_CLASS_UNDEFINED;
     32    pluralCategory = UDISPOPT_PLURAL_CATEGORY_UNDEFINED;
     33    capitalization = UDISPOPT_CAPITALIZATION_UNDEFINED;
     34    nameStyle = UDISPOPT_NAME_STYLE_UNDEFINED;
     35    displayLength = UDISPOPT_DISPLAY_LENGTH_UNDEFINED;
     36    substituteHandling = UDISPOPT_SUBSTITUTE_HANDLING_UNDEFINED;
     37 }
     38 
     39 DisplayOptions::Builder::Builder(const DisplayOptions &displayOptions) {
     40    grammaticalCase = displayOptions.grammaticalCase;
     41    nounClass = displayOptions.nounClass;
     42    pluralCategory = displayOptions.pluralCategory;
     43    capitalization = displayOptions.capitalization;
     44    nameStyle = displayOptions.nameStyle;
     45    displayLength = displayOptions.displayLength;
     46    substituteHandling = displayOptions.substituteHandling;
     47 }
     48 
     49 U_NAMESPACE_END
     50 
     51 // C API ------------------------------------------------------------------- ***
     52 
     53 U_NAMESPACE_USE
     54 
     55 namespace {
     56 
     57 const char *grammaticalCaseIds[] = {
     58    "undefined",           // 0
     59    "ablative",            // 1
     60    "accusative",          // 2
     61    "comitative",          // 3
     62    "dative",              // 4
     63    "ergative",            // 5
     64    "genitive",            // 6
     65    "instrumental",        // 7
     66    "locative",            // 8
     67    "locative_copulative", // 9
     68    "nominative",          // 10
     69    "oblique",             // 11
     70    "prepositional",       // 12
     71    "sociative",           // 13
     72    "vocative",            // 14
     73 };
     74 
     75 } // namespace
     76 
     77 U_CAPI const char * U_EXPORT2
     78 udispopt_getGrammaticalCaseIdentifier(UDisplayOptionsGrammaticalCase grammaticalCase) {
     79    if (grammaticalCase >= 0 && grammaticalCase < UPRV_LENGTHOF(grammaticalCaseIds)) {
     80        return grammaticalCaseIds[grammaticalCase];
     81    }
     82 
     83    return grammaticalCaseIds[0];
     84 }
     85 
     86 U_CAPI UDisplayOptionsGrammaticalCase U_EXPORT2
     87 udispopt_fromGrammaticalCaseIdentifier(const char *identifier) {
     88    for (int32_t i = 0; i < UPRV_LENGTHOF(grammaticalCaseIds); i++) {
     89        if (uprv_strcmp(identifier, grammaticalCaseIds[i]) == 0) {
     90            return static_cast<UDisplayOptionsGrammaticalCase>(i);
     91        }
     92    }
     93 
     94    return UDISPOPT_GRAMMATICAL_CASE_UNDEFINED;
     95 }
     96 
     97 namespace {
     98 
     99 const char *pluralCategoryIds[] = {
    100    "undefined", // 0
    101    "zero",      // 1
    102    "one",       // 2
    103    "two",       // 3
    104    "few",       // 4
    105    "many",      // 5
    106    "other",     // 6
    107 };
    108 
    109 } // namespace
    110 
    111 U_CAPI const char * U_EXPORT2
    112 udispopt_getPluralCategoryIdentifier(UDisplayOptionsPluralCategory pluralCategory) {
    113    if (pluralCategory >= 0 && pluralCategory < UPRV_LENGTHOF(pluralCategoryIds)) {
    114        return pluralCategoryIds[pluralCategory];
    115    }
    116 
    117    return pluralCategoryIds[0];
    118 }
    119 
    120 U_CAPI UDisplayOptionsPluralCategory U_EXPORT2
    121 udispopt_fromPluralCategoryIdentifier(const char *identifier) {
    122    for (int32_t i = 0; i < UPRV_LENGTHOF(pluralCategoryIds); i++) {
    123        if (uprv_strcmp(identifier, pluralCategoryIds[i]) == 0) {
    124            return static_cast<UDisplayOptionsPluralCategory>(i);
    125        }
    126    }
    127 
    128    return UDISPOPT_PLURAL_CATEGORY_UNDEFINED;
    129 }
    130 
    131 namespace {
    132 
    133 const char *nounClassIds[] = {
    134    "undefined", // 0
    135    "other",     // 1
    136    "neuter",    // 2
    137    "feminine",  // 3
    138    "masculine", // 4
    139    "animate",   // 5
    140    "inanimate", // 6
    141    "personal",  // 7
    142    "common",    // 8
    143 };
    144 
    145 } // namespace
    146 
    147 U_CAPI const char * U_EXPORT2
    148 udispopt_getNounClassIdentifier(UDisplayOptionsNounClass nounClass) {
    149    if (nounClass >= 0 && nounClass < UPRV_LENGTHOF(nounClassIds)) {
    150        return nounClassIds[nounClass];
    151    }
    152 
    153    return nounClassIds[0];
    154 }
    155 
    156 U_CAPI UDisplayOptionsNounClass U_EXPORT2
    157 udispopt_fromNounClassIdentifier(const char *identifier) {
    158    for (int32_t i = 0; i < UPRV_LENGTHOF(nounClassIds); i++) {
    159        if (uprv_strcmp(identifier, nounClassIds[i]) == 0) {
    160            return static_cast<UDisplayOptionsNounClass>(i);
    161        }
    162    }
    163 
    164    return UDISPOPT_NOUN_CLASS_UNDEFINED;
    165 }
    166 
    167 #endif /* #if !UCONFIG_NO_FORMATTING */