2 *******************************************************************************
\r
3 * Copyright (C) 2009, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.impl.locale;
\r
9 import com.ibm.icu.impl.locale.LanguageTag.ParseStatus;
\r
11 public class Extension {
\r
13 protected String _value;
\r
15 protected Extension(char key) {
\r
19 public char getKey() {
\r
23 public String getValue() {
\r
27 public String getID() {
\r
28 return _key + LanguageTag.SEP + _value;
\r
31 public String toString() {
\r
35 public static Extension create(StringTokenIterator itr, ParseStatus sts) {
\r
36 if (sts.isError() || itr.isDone()) {
\r
40 Extension ext = null;
\r
41 String key = itr.current();
\r
42 if (LanguageTag.isExtensionSingleton(key) || LanguageTag.isPrivateuseSingleton(key)) {
\r
44 ext = create(key.charAt(0), itr, sts);
\r
50 public static Extension create(char key, StringTokenIterator val, ParseStatus sts) {
\r
51 if (sts.isError()) {
\r
55 sts.errorIndex = val.currentStart();
\r
56 sts.errorMsg = "Missing extension subtag for extension :" + key;
\r
60 Extension ext = null;
\r
61 key = AsciiUtil.toLower(key);
\r
64 case UnicodeLocaleExtension.SINGLETON:
\r
65 ext = new UnicodeLocaleExtension();
\r
67 case PrivateuseExtension.SINGLETON:
\r
68 ext = new PrivateuseExtension();
\r
71 ext = new Extension(key);
\r
75 ext.setExtensionValue(val, sts);
\r
77 if (ext.getValue() == null) {
\r
78 // return null only when nothing parsed.
\r
85 protected void setExtensionValue(StringTokenIterator itr, ParseStatus sts) {
\r
86 if (sts.isError() || itr.isDone()) {
\r
91 StringBuilder buf = new StringBuilder();
\r
92 while (!itr.isDone()) {
\r
93 String s = itr.current();
\r
94 if (!LanguageTag.isExtensionSubtag(s)) {
\r
97 s = LanguageTag.canonicalizeExtensionSubtag(s);
\r
98 if (buf.length() != 0) {
\r
99 buf.append(LanguageTag.SEP);
\r
102 sts.parseLength = itr.currentEnd();
\r
106 if (buf.length() == 0) {
\r
107 sts.errorIndex = itr.currentStart();
\r
108 sts.errorMsg = "Invalid extension subtag: " + itr.current();
\r
111 _value = buf.toString();
\r