/** * Copyright (c) André Bargull * Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms. * * <https://github.com/anba/es6draft> */ package com.github.anba.es6draft.runtime.objects.intl; import com.github.anba.es6draft.runtime.Realm; import com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject; import com.ibm.icu.impl.ICUData; import com.ibm.icu.impl.ICUResourceBundle; import com.ibm.icu.text.ListFormatter; import com.ibm.icu.util.ULocale; import com.ibm.icu.util.UResourceBundle; /** * <h1>ListFormat Objects</h1> * <ul> * <li>Properties of Intl.ListFormat Instances * </ul> */ public final class ListFormatObject extends OrdinaryObject { /** [[Locale]] */ private String locale; /** [[Type]] */ private String type; /** [[Style]] */ private String style; private ListFormatter listFormatter; /** * Constructs a new ListFormat object. * * @param realm * the realm object */ public ListFormatObject(Realm realm) { super(realm); } /** * Returns the ICU {@link ListFormatter} instance. * * @return the ListFormatter instance */ public ListFormatter getListFormatter() { if (listFormatter == null) { listFormatter = createListFormatter(); } return listFormatter; } @SuppressWarnings("deprecation") private ListFormatter createListFormatter() { ULocale locale = ULocale.forLanguageTag(this.locale); ICUResourceBundle r = (ICUResourceBundle) UResourceBundle.getBundleInstance(ICUData.ICU_BASE_NAME, locale); String resourceStyle = resourceStyle(); return new ListFormatter(r.getWithFallback("listPattern/" + resourceStyle + "/2").getString(), r.getWithFallback("listPattern/" + resourceStyle + "/start").getString(), r.getWithFallback("listPattern/" + resourceStyle + "/middle").getString(), r.getWithFallback("listPattern/" + resourceStyle + "/end").getString()); } private String resourceStyle() { if ("regular".equals(type)) { switch (style) { case "long": return "standard"; case "short": case "narrow": return "standard-short"; default: throw new AssertionError(); } } assert "unit".equals(type); switch (style) { case "long": return "unit"; case "short": return "unit-short"; case "narrow": return "unit-narrow"; default: throw new AssertionError(); } } /** * [[Locale]] * * @return the locale */ public String getLocale() { return locale; } /** * [[Locale]] * * @param locale * the new locale */ public void setLocale(String locale) { this.locale = locale; } /** * [[Type]] * * @return the type */ public String getType() { return type; } /** * [[Type]] * * @param type * the new type */ public void setType(String type) { this.type = type; } /** * [[Style]] * * @return the style */ public String getStyle() { return style; } /** * [[Style]] * * @param style * the new style */ public void setStyle(String style) { this.style = style; } @Override public String toString() { return String.format("%s, locale=%s, type=%s, style=%s, listFormatter=%s", super.toString(), locale, type, style, listFormatter); } }