• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* GENERATED SOURCE. DO NOT MODIFY. */
2 // © 2016 and later: Unicode, Inc. and others.
3 // License & terms of use: http://www.unicode.org/copyright.html#License
4 /*
5  *******************************************************************************
6  * Copyright (C) 2009-2014, International Business Machines Corporation and    *
7  * others. All Rights Reserved.                                                *
8  *******************************************************************************
9  */
10 package ohos.global.icu.impl.locale;
11 
12 import java.util.Collections;
13 import java.util.Map.Entry;
14 import java.util.Set;
15 import java.util.SortedMap;
16 import java.util.SortedSet;
17 import java.util.TreeMap;
18 import java.util.TreeSet;
19 
20 /**
21  * @hide exposed on OHOS
22  */
23 public class UnicodeLocaleExtension extends Extension {
24     public static final char SINGLETON = 'u';
25 
26     private static final SortedSet<String> EMPTY_SORTED_SET = new TreeSet<String>();
27     private static final SortedMap<String, String> EMPTY_SORTED_MAP = new TreeMap<String, String>();
28 
29     private SortedSet<String> _attributes = EMPTY_SORTED_SET;
30     private SortedMap<String, String> _keywords = EMPTY_SORTED_MAP;
31 
32     public static final UnicodeLocaleExtension CA_JAPANESE;
33     public static final UnicodeLocaleExtension NU_THAI;
34 
35     static {
36         CA_JAPANESE = new UnicodeLocaleExtension();
37         CA_JAPANESE._keywords = new TreeMap<String, String>();
38         CA_JAPANESE._keywords.put("ca", "japanese");
39         CA_JAPANESE._value = "ca-japanese";
40 
41         NU_THAI = new UnicodeLocaleExtension();
42         NU_THAI._keywords = new TreeMap<String, String>();
43         NU_THAI._keywords.put("nu", "thai");
44         NU_THAI._value = "nu-thai";
45     }
46 
UnicodeLocaleExtension()47     private UnicodeLocaleExtension() {
48         super(SINGLETON);
49     }
50 
UnicodeLocaleExtension(SortedSet<String> attributes, SortedMap<String, String> keywords)51     UnicodeLocaleExtension(SortedSet<String> attributes, SortedMap<String, String> keywords) {
52         this();
53         if (attributes != null && attributes.size() > 0) {
54             _attributes = attributes;
55         }
56         if (keywords != null && keywords.size() > 0) {
57             _keywords = keywords;
58         }
59 
60         if (_attributes.size() > 0 || _keywords.size() > 0) {
61             StringBuilder sb = new StringBuilder();
62             for (String attribute : _attributes) {
63                 sb.append(LanguageTag.SEP).append(attribute);
64             }
65             for (Entry<String, String> keyword : _keywords.entrySet()) {
66                 String key = keyword.getKey();
67                 String value = keyword.getValue();
68 
69                 sb.append(LanguageTag.SEP).append(key);
70                 if (value.length() > 0) {
71                     sb.append(LanguageTag.SEP).append(value);
72                 }
73             }
74             _value = sb.substring(1);   // skip leading '-'
75         }
76     }
77 
getUnicodeLocaleAttributes()78     public Set<String> getUnicodeLocaleAttributes() {
79         return Collections.unmodifiableSet(_attributes);
80     }
81 
getUnicodeLocaleKeys()82     public Set<String> getUnicodeLocaleKeys() {
83         return Collections.unmodifiableSet(_keywords.keySet());
84     }
85 
getUnicodeLocaleType(String unicodeLocaleKey)86     public String getUnicodeLocaleType(String unicodeLocaleKey) {
87         return _keywords.get(unicodeLocaleKey);
88     }
89 
isSingletonChar(char c)90     public static boolean isSingletonChar(char c) {
91         return (SINGLETON == AsciiUtil.toLower(c));
92     }
93 
isAttribute(String s)94     public static boolean isAttribute(String s) {
95         // 3*8alphanum
96         return (s.length() >= 3) && (s.length() <= 8) && AsciiUtil.isAlphaNumericString(s);
97     }
98 
isKey(String s)99     public static boolean isKey(String s) {
100         // key = alphanum alpha ;
101         return (s.length() == 2) && AsciiUtil.isAlphaNumeric(s.charAt(0)) &&
102             AsciiUtil.isAlpha(s.charAt(1));
103     }
104 
isTypeSubtag(String s)105     public static boolean isTypeSubtag(String s) {
106         // 3*8alphanum
107         return (s.length() >= 3) && (s.length() <= 8) && AsciiUtil.isAlphaNumericString(s);
108     }
109 
isType(String s)110     public static boolean isType(String s) {
111         // sequence of type subtags delimited by '-'
112         int startIdx = 0;
113         boolean sawSubtag = false;
114         while (true) {
115             int idx = s.indexOf(LanguageTag.SEP, startIdx);
116             String subtag = idx < 0 ? s.substring(startIdx) : s.substring(startIdx, idx);
117             if (!isTypeSubtag(subtag)) {
118                 return false;
119             }
120             sawSubtag = true;
121             if (idx < 0) {
122                 break;
123             }
124             startIdx = idx + 1;
125         }
126         return sawSubtag && startIdx < s.length();
127     }
128 }
129