001: /*
002: * (c) Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
003: * All rights reserved.
004: *
005: * Redistribution and use in source and binary forms, with or without
006: * modification, are permitted provided that the following conditions
007: * are met:
008: * 1. Redistributions of source code must retain the above copyright
009: * notice, this list of conditions and the following disclaimer.
010: * 2. Redistributions in binary form must reproduce the above copyright
011: * notice, this list of conditions and the following disclaimer in the
012: * documentation and/or other materials provided with the distribution.
013: * 3. The name of the author may not be used to endorse or promote products
014: * derived from this software without specific prior written permission.
015:
016: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
017: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
018: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
019: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
020: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
021: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
022: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
023: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
024: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
025: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
026:
027: * * $Id: IanaLanguageTag.java,v 1.6 2008/01/02 12:10:06 andy_seaborne Exp $
028:
029: AUTHOR: Jeremy J. Carroll
030: */
031: /*
032: * IanaLanguageTags.java
033: *
034: * Created on July 24, 2001, 11:47 PM
035: */
036:
037: package com.hp.hpl.jena.rdf.arp.lang;
038:
039: import java.util.HashMap;
040: import java.util.Map;
041:
042: /**
043: *Language codes registered by IANA.
044: An encapsulation of the IANA language registry
045: * found at
046: * <a href="
047: * http://www.iana.org/assignments/language-tags">
048: * http://www.iana.org/assignments/language-tags</a>.
049: *
050: * The values were updated on 8th July 2002 from a file dated
051: * 7th July 2002.
052: *
053: * @author jjc
054: */
055: public class IanaLanguageTag extends LanguageTag {
056: static final Map all = new HashMap();
057: static {
058: try {
059: all.put("lojban",
060: new IanaLanguageTag[] { new IanaLanguageTag(
061: "art-lojban") });
062: all.put("gaulish",
063: new IanaLanguageTag[] { new IanaLanguageTag(
064: "cel-gaulish") });
065: all.put("scouse",
066: new IanaLanguageTag[] { new IanaLanguageTag(
067: "en-scouse") });
068: all.put("ami", new IanaLanguageTag[] { new IanaLanguageTag(
069: "i-ami") });
070: all.put("bnn", new IanaLanguageTag[] { new IanaLanguageTag(
071: "i-bnn") });
072: all.put("default",
073: new IanaLanguageTag[] { new IanaLanguageTag(
074: "i-default", LT_DEFAULT) });
075: all.put("enochian",
076: new IanaLanguageTag[] { new IanaLanguageTag(
077: "i-enochian") });
078: all.put("hak", new IanaLanguageTag[] { new IanaLanguageTag(
079: "i-hak", LT_IANA_DEPRECATED) });
080: all.put("klingon",
081: new IanaLanguageTag[] { new IanaLanguageTag(
082: "i-klingon") });
083: all.put("lux", new IanaLanguageTag[] { new IanaLanguageTag(
084: "i-lux", LT_IANA_DEPRECATED) });
085: all.put("mingo",
086: new IanaLanguageTag[] { new IanaLanguageTag(
087: "i-mingo") });
088: all.put("navajo",
089: new IanaLanguageTag[] { new IanaLanguageTag(
090: "i-navajo", LT_IANA_DEPRECATED) });
091: all.put("pwn", new IanaLanguageTag[] { new IanaLanguageTag(
092: "i-pwn") });
093: all.put("tao", new IanaLanguageTag[] { new IanaLanguageTag(
094: "i-tao") });
095: all.put("tay", new IanaLanguageTag[] { new IanaLanguageTag(
096: "i-tay") });
097: all.put("tsu", new IanaLanguageTag[] { new IanaLanguageTag(
098: "i-tsu") });
099: all.put("bok", new IanaLanguageTag[] { new IanaLanguageTag(
100: "no-bok", LT_IANA_DEPRECATED) });
101: all.put("nyn", new IanaLanguageTag[] { new IanaLanguageTag(
102: "no-nyn", LT_IANA_DEPRECATED) });
103: all.put("be", new IanaLanguageTag[] {
104: new IanaLanguageTag("sgn-BE-fr"),
105: new IanaLanguageTag("sgn-BE-nl") });
106: all.put("br", new IanaLanguageTag[] { new IanaLanguageTag(
107: "sgn-BR") });
108: all.put("ch", new IanaLanguageTag[] { new IanaLanguageTag(
109: "sgn-CH-de") });
110: all.put("co", new IanaLanguageTag[] { new IanaLanguageTag(
111: "sgn-CO") });
112: all.put("de", new IanaLanguageTag[] { new IanaLanguageTag(
113: "sgn-DE") });
114: all.put("dk", new IanaLanguageTag[] { new IanaLanguageTag(
115: "sgn-DK") });
116: all.put("es", new IanaLanguageTag[] { new IanaLanguageTag(
117: "sgn-ES") });
118: all.put("fr", new IanaLanguageTag[] { new IanaLanguageTag(
119: "sgn-FR") });
120: all.put("gb", new IanaLanguageTag[] { new IanaLanguageTag(
121: "sgn-GB") });
122: all.put("gr", new IanaLanguageTag[] { new IanaLanguageTag(
123: "sgn-GR") });
124: all.put("ie", new IanaLanguageTag[] { new IanaLanguageTag(
125: "sgn-IE") });
126: all.put("it", new IanaLanguageTag[] { new IanaLanguageTag(
127: "sgn-IT") });
128: all.put("jp", new IanaLanguageTag[] { new IanaLanguageTag(
129: "sgn-JP") });
130: all.put("mx", new IanaLanguageTag[] { new IanaLanguageTag(
131: "sgn-MX") });
132: all.put("ni", new IanaLanguageTag[] { new IanaLanguageTag(
133: "sgn-NI") });
134: all.put("nl", new IanaLanguageTag[] { new IanaLanguageTag(
135: "sgn-NL") });
136: all.put("no", new IanaLanguageTag[] { new IanaLanguageTag(
137: "sgn-NO") });
138: all.put("pt", new IanaLanguageTag[] { new IanaLanguageTag(
139: "sgn-PT") });
140: all.put("se", new IanaLanguageTag[] { new IanaLanguageTag(
141: "sgn-SE") });
142: all.put("us", new IanaLanguageTag[] { new IanaLanguageTag(
143: "sgn-US") });
144: all.put("za", new IanaLanguageTag[] { new IanaLanguageTag(
145: "sgn-ZA") });
146: all.put("gan", new IanaLanguageTag[] { new IanaLanguageTag(
147: "zh-gan") });
148: all.put("guoyu",
149: new IanaLanguageTag[] { new IanaLanguageTag(
150: "zh-guoyu") });
151: all.put("hakka",
152: new IanaLanguageTag[] { new IanaLanguageTag(
153: "zh-hakka") });
154: all.put("min", new IanaLanguageTag[] {
155: new IanaLanguageTag("zh-min"),
156: new IanaLanguageTag("zh-min-nan") });
157: all.put("wuu", new IanaLanguageTag[] { new IanaLanguageTag(
158: "zh-wuu") });
159: all.put("xiang",
160: new IanaLanguageTag[] { new IanaLanguageTag(
161: "zh-xiang") });
162: all.put("yue", new IanaLanguageTag[] { new IanaLanguageTag(
163: "zh-yue") });
164: } catch (LanguageTagSyntaxException ee) {
165: System.err
166: .println("Internal Error in static initializer of IanaLnaguageTag.");
167: }
168:
169: }
170: /** The bitwise OR of all applicable values
171: * from {@link LanguageTagCodes}.
172: * The possibilities are:
173: * <ul>
174: * <li><CODE>LT_IANA</CODE></li>
175: * <li><CODE>LT_IANA|LT_IANA_DEPRECATED</CODE></li>
176: * <li><CODE>LT_IANA|LT_DEFAULT</CODE> i.e. <CODE>i-default</CODE></li>
177: *</ul>
178: *
179: */
180: final public int classification;
181:
182: private IanaLanguageTag(String s, int classification)
183: throws LanguageTagSyntaxException {
184: super (s);
185: this .classification = LT_IANA | classification;
186: }
187:
188: private IanaLanguageTag(String s) throws LanguageTagSyntaxException {
189: this (s, 0);
190: }
191:
192: /** Look up a language
193: * identifier in the IANA list.
194: * Trailing additional subtags are ignored.
195: * @param t The LanguageTag corresponding to the
196: * item being looked up.
197: * @return The IanaLanguageTag if found, or null if it is not in the list.
198: */
199: static public IanaLanguageTag find(LanguageTag t) {
200: if (t.tags.length < 2)
201: return null;
202: IanaLanguageTag matches[] = (IanaLanguageTag[]) all
203: .get(t.tags[1]);
204: if (matches == null)
205: return null;
206: nextMatch: for (int i = 0; i < matches.length; i++) {
207: if (t.tags.length >= matches[i].tags.length) {
208: for (int j = 0; j < matches[i].tags.length; j++) {
209: if (!t.tags[j].equals(matches[i].tags[j]))
210: continue nextMatch;
211: }
212: return matches[i];
213: }
214: }
215: return null;
216: }
217:
218: }
|