/* */ package com.ibm.icu.util;
/* */
/* */ import java.util.Collections;
/* */ import java.util.Comparator;
/* */ import java.util.Iterator;
/* */ import java.util.LinkedHashMap;
/* */ import java.util.LinkedHashSet;
/* */ import java.util.Map;
/* */ import java.util.Set;
/* */ import java.util.TreeMap;
/* */ import java.util.regex.Matcher;
/* */ import java.util.regex.Pattern;
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public class LocalePriorityList
/* */ implements Iterable<ULocale>
/* */ {
/* */ private static final double D0 = 0.0D;
/* 69 */ private static final Double D1 = Double.valueOf(1.0D);
/* */
/* 71 */ private static final Pattern languageSplitter = Pattern.compile("\\s*,\\s*");
/* 72 */ private static final Pattern weightSplitter = Pattern.compile("\\s*(\\S*)\\s*;\\s*q\\s*=\\s*(\\S*)");
/* */
/* */
/* */
/* */
/* */ private final Map<ULocale, Double> languagesAndWeights;
/* */
/* */
/* */
/* */
/* */ public static Builder add(ULocale languageCode)
/* */ {
/* 84 */ return new Builder(null).add(languageCode);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public static Builder add(ULocale languageCode, double weight)
/* */ {
/* 96 */ return new Builder(null).add(languageCode, weight);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public static Builder add(LocalePriorityList languagePriorityList)
/* */ {
/* 107 */ return new Builder(null).add(languagePriorityList);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public static Builder add(String acceptLanguageString)
/* */ {
/* 119 */ return new Builder(null).add(acceptLanguageString);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public Double getWeight(ULocale language)
/* */ {
/* 131 */ return (Double)this.languagesAndWeights.get(language);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */ public String toString()
/* */ {
/* 140 */ StringBuilder result = new StringBuilder();
/* 141 */ for (ULocale language : this.languagesAndWeights.keySet()) {
/* 142 */ if (result.length() != 0) {
/* 143 */ result.append(", ");
/* */ }
/* 145 */ result.append(language);
/* 146 */ double weight = ((Double)this.languagesAndWeights.get(language)).doubleValue();
/* 147 */ if (weight != D1.doubleValue()) {
/* 148 */ result.append(";q=").append(weight);
/* */ }
/* */ }
/* 151 */ return result.toString();
/* */ }
/* */
/* */
/* */
/* */
/* */ public Iterator<ULocale> iterator()
/* */ {
/* 159 */ return this.languagesAndWeights.keySet().iterator();
/* */ }
/* */
/* */
/* */
/* */
/* */ public boolean equals(Object o)
/* */ {
/* */ try
/* */ {
/* 169 */ LocalePriorityList that = (LocalePriorityList)o;
/* 170 */ return this.languagesAndWeights.equals(that.languagesAndWeights);
/* */ } catch (RuntimeException e) {}
/* 172 */ return false;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public int hashCode()
/* */ {
/* 182 */ return this.languagesAndWeights.hashCode();
/* */ }
/* */
/* */
/* */
/* */ private LocalePriorityList(Map<ULocale, Double> languageToWeight)
/* */ {
/* 189 */ this.languagesAndWeights = languageToWeight;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public static class Builder
/* */ {
/* 201 */ private final Map<ULocale, Double> languageToWeight = new LinkedHashMap();
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public LocalePriorityList build()
/* */ {
/* 218 */ return build(false);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public LocalePriorityList build(boolean preserveWeights)
/* */ {
/* 231 */ Map<Double, Set<ULocale>> doubleCheck = new TreeMap(LocalePriorityList.myDescendingDouble);
/* */
/* 233 */ for (ULocale lang : this.languageToWeight.keySet()) {
/* 234 */ Double weight = (Double)this.languageToWeight.get(lang);
/* 235 */ Set<ULocale> s = (Set)doubleCheck.get(weight);
/* 236 */ if (s == null) {
/* 237 */ doubleCheck.put(weight, s = new LinkedHashSet());
/* */ }
/* 239 */ s.add(lang);
/* */ }
/* */
/* */
/* 243 */ Map<ULocale, Double> temp = new LinkedHashMap();
/* 244 */ for (Iterator i$ = doubleCheck.keySet().iterator(); i$.hasNext();) { weight = (Double)i$.next();
/* 245 */ for (ULocale lang : (Set)doubleCheck.get(weight))
/* 246 */ temp.put(lang, preserveWeights ? weight : LocalePriorityList.D1);
/* */ }
/* */ Double weight;
/* 249 */ return new LocalePriorityList(Collections.unmodifiableMap(temp), null);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public Builder add(LocalePriorityList languagePriorityList)
/* */ {
/* 261 */ for (ULocale language : languagePriorityList.languagesAndWeights.keySet())
/* */ {
/* 263 */ add(language, ((Double)languagePriorityList.languagesAndWeights.get(language)).doubleValue());
/* */ }
/* 265 */ return this;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public Builder add(ULocale languageCode)
/* */ {
/* 276 */ return add(languageCode, LocalePriorityList.D1.doubleValue());
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public Builder add(ULocale... languageCodes)
/* */ {
/* 287 */ for (ULocale languageCode : languageCodes) {
/* 288 */ add(languageCode, LocalePriorityList.D1.doubleValue());
/* */ }
/* 290 */ return this;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public Builder add(ULocale languageCode, double weight)
/* */ {
/* 304 */ if (this.languageToWeight.containsKey(languageCode)) {
/* 305 */ this.languageToWeight.remove(languageCode);
/* */ }
/* 307 */ if (weight <= 0.0D)
/* 308 */ return this;
/* 309 */ if (weight > LocalePriorityList.D1.doubleValue()) {
/* 310 */ weight = LocalePriorityList.D1.doubleValue();
/* */ }
/* 312 */ this.languageToWeight.put(languageCode, Double.valueOf(weight));
/* 313 */ return this;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public Builder add(String acceptLanguageList)
/* */ {
/* 324 */ String[] items = LocalePriorityList.languageSplitter.split(acceptLanguageList.trim());
/* 325 */ Matcher itemMatcher = LocalePriorityList.weightSplitter.matcher("");
/* 326 */ for (String item : items) {
/* 327 */ if (itemMatcher.reset(item).matches()) {
/* 328 */ ULocale language = new ULocale(itemMatcher.group(1));
/* 329 */ double weight = Double.parseDouble(itemMatcher.group(2));
/* 330 */ if ((weight < 0.0D) || (weight > LocalePriorityList.D1.doubleValue())) {
/* 331 */ throw new IllegalArgumentException("Illegal weight, must be 0..1: " + weight);
/* */ }
/* */
/* 334 */ add(language, weight);
/* 335 */ } else if (item.length() != 0) {
/* 336 */ add(new ULocale(item));
/* */ }
/* */ }
/* 339 */ return this;
/* */ }
/* */ }
/* */
/* 343 */ private static Comparator<Double> myDescendingDouble = new Comparator() {
/* */ public int compare(Double o1, Double o2) {
/* 345 */ return -o1.compareTo(o2);
/* */ }
/* */ };
/* */ }
/* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\ibm\icu\util\LocalePriorityList.class
* Java compiler version: 5 (49.0)
* JD-Core Version: 0.7.1
*/