LEFT | RIGHT |
(no file at all) | |
1 // © 2017 and later: Unicode, Inc. and others. | 1 // © 2017 and later: Unicode, Inc. and others. |
2 // License & terms of use: http://www.unicode.org/copyright.html#License | 2 // License & terms of use: http://www.unicode.org/copyright.html#License |
3 package com.ibm.icu.number; | 3 package com.ibm.icu.number; |
4 | 4 |
5 import java.util.HashMap; | 5 import java.util.HashMap; |
6 import java.util.HashSet; | 6 import java.util.HashSet; |
7 import java.util.Map; | 7 import java.util.Map; |
8 import java.util.Set; | 8 import java.util.Set; |
9 | 9 |
10 import com.ibm.icu.impl.StandardPlural; | 10 import com.ibm.icu.impl.StandardPlural; |
11 import com.ibm.icu.impl.number.CompactData; | 11 import com.ibm.icu.impl.number.CompactData; |
12 import com.ibm.icu.impl.number.CompactData.CompactType; | 12 import com.ibm.icu.impl.number.CompactData.CompactType; |
13 import com.ibm.icu.impl.number.DecimalQuantity; | 13 import com.ibm.icu.impl.number.DecimalQuantity; |
14 import com.ibm.icu.impl.number.MicroProps; | 14 import com.ibm.icu.impl.number.MicroProps; |
15 import com.ibm.icu.impl.number.MicroPropsGenerator; | 15 import com.ibm.icu.impl.number.MicroPropsGenerator; |
16 import com.ibm.icu.impl.number.MutablePatternModifier; | 16 import com.ibm.icu.impl.number.MutablePatternModifier; |
17 import com.ibm.icu.impl.number.MutablePatternModifier.ImmutablePatternModifier; | 17 import com.ibm.icu.impl.number.MutablePatternModifier.ImmutablePatternModifier; |
18 import com.ibm.icu.impl.number.PatternStringParser; | 18 import com.ibm.icu.impl.number.PatternStringParser; |
19 import com.ibm.icu.impl.number.PatternStringParser.ParsedPatternInfo; | 19 import com.ibm.icu.impl.number.PatternStringParser.ParsedPatternInfo; |
20 import com.ibm.icu.text.CompactDecimalFormat.CompactStyle; | 20 import com.ibm.icu.text.CompactDecimalFormat.CompactStyle; |
21 import com.ibm.icu.text.PluralRules; | 21 import com.ibm.icu.text.PluralRules; |
22 import com.ibm.icu.util.ULocale; | 22 import com.ibm.icu.util.ULocale; |
23 | 23 |
24 | |
25 /** | 24 /** |
26 * A class that defines the scientific notation style to be used when formatting
numbers in NumberFormatter. | 25 * A class that defines the scientific notation style to be used when formatting
numbers in |
| 26 * NumberFormatter. |
27 * | 27 * |
28 * <p> | 28 * <p> |
29 * This class exposes no public functionality. To create a CompactNotation, use
one of the factory methods in | 29 * This class exposes no public functionality. To create a CompactNotation, use
one of the factory |
30 * {@link Notation}. | 30 * methods in {@link Notation}. |
31 * | 31 * |
32 * @draft ICU 60 | 32 * @draft ICU 60 |
33 * @provisional This API might change or be removed in a future release. | 33 * @provisional This API might change or be removed in a future release. |
34 * @see NumberFormatter | 34 * @see NumberFormatter |
35 */ | 35 */ |
36 public class CompactNotation extends Notation { | 36 public class CompactNotation extends Notation { |
37 | 37 |
38 final CompactStyle compactStyle; | 38 final CompactStyle compactStyle; |
39 final Map<String, Map<String, String>> compactCustomData; | 39 final Map<String, Map<String, String>> compactCustomData; |
40 | 40 |
41 /* package-private */ CompactNotation(CompactStyle compactStyle) { | 41 /* package-private */ CompactNotation(CompactStyle compactStyle) { |
42 compactCustomData = null; | 42 compactCustomData = null; |
43 this.compactStyle = compactStyle; | 43 this.compactStyle = compactStyle; |
44 } | 44 } |
45 | 45 |
46 /* package-private */ CompactNotation(Map<String, Map<String, String>> compa
ctCustomData) { | 46 /* package-private */ CompactNotation(Map<String, Map<String, String>> compa
ctCustomData) { |
47 compactStyle = null; | 47 compactStyle = null; |
48 this.compactCustomData = compactCustomData; | 48 this.compactCustomData = compactCustomData; |
49 } | 49 } |
50 | 50 |
51 /* package-private */ MicroPropsGenerator withLocaleData(ULocale locale, Str
ing nsName, CompactType compactType, | 51 /* package-private */ MicroPropsGenerator withLocaleData( |
52 PluralRules rules, MutablePatternModifier buildReference, MicroProps
Generator parent) { | 52 ULocale locale, |
| 53 String nsName, |
| 54 CompactType compactType, |
| 55 PluralRules rules, |
| 56 MutablePatternModifier buildReference, |
| 57 MicroPropsGenerator parent) { |
53 // TODO: Add a data cache? It would be keyed by locale, nsName, compact
type, and compact style. | 58 // TODO: Add a data cache? It would be keyed by locale, nsName, compact
type, and compact style. |
54 return new CompactHandler(this, locale, nsName, compactType, rules, buil
dReference, parent); | 59 return new CompactHandler(this, locale, nsName, compactType, rules, buil
dReference, parent); |
55 } | 60 } |
56 | 61 |
57 private static class CompactHandler implements MicroPropsGenerator { | 62 private static class CompactHandler implements MicroPropsGenerator { |
58 | 63 |
59 private static class CompactModInfo { | 64 private static class CompactModInfo { |
60 public ImmutablePatternModifier mod; | 65 public ImmutablePatternModifier mod; |
61 public int numDigits; | 66 public int numDigits; |
62 } | 67 } |
63 | 68 |
64 final PluralRules rules; | 69 final PluralRules rules; |
65 final MicroPropsGenerator parent; | 70 final MicroPropsGenerator parent; |
66 final Map<String, CompactModInfo> precomputedMods; | 71 final Map<String, CompactModInfo> precomputedMods; |
67 final CompactData data; | 72 final CompactData data; |
68 | 73 |
69 private CompactHandler(CompactNotation notation, ULocale locale, String
nsName, CompactType compactType, | 74 private CompactHandler( |
70 PluralRules rules, MutablePatternModifier buildReference, MicroP
ropsGenerator parent) { | 75 CompactNotation notation, |
| 76 ULocale locale, |
| 77 String nsName, |
| 78 CompactType compactType, |
| 79 PluralRules rules, |
| 80 MutablePatternModifier buildReference, |
| 81 MicroPropsGenerator parent) { |
71 this.rules = rules; | 82 this.rules = rules; |
72 this.parent = parent; | 83 this.parent = parent; |
73 this.data = new CompactData(); | 84 this.data = new CompactData(); |
74 if (notation.compactStyle != null) { | 85 if (notation.compactStyle != null) { |
75 data.populate(locale, nsName, notation.compactStyle, compactType
); | 86 data.populate(locale, nsName, notation.compactStyle, compactType
); |
76 } else { | 87 } else { |
77 data.populate(notation.compactCustomData); | 88 data.populate(notation.compactCustomData); |
78 } | 89 } |
79 if (buildReference != null) { | 90 if (buildReference != null) { |
80 // Safe code path | 91 // Safe code path |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 | 153 |
143 // FIXME: Deal with numDigits == 0 (Awaiting a test case) | 154 // FIXME: Deal with numDigits == 0 (Awaiting a test case) |
144 | 155 |
145 // We already performed rounding. Do not perform it again. | 156 // We already performed rounding. Do not perform it again. |
146 micros.rounding = Rounder.constructPassThrough(); | 157 micros.rounding = Rounder.constructPassThrough(); |
147 | 158 |
148 return micros; | 159 return micros; |
149 } | 160 } |
150 } | 161 } |
151 } | 162 } |
LEFT | RIGHT |