| // © 2017 and later: Unicode, Inc. and others. |
| // License & terms of use: http://www.unicode.org/copyright.html#License |
| package com.ibm.icu.impl.number.parse; |
| |
| import static com.ibm.icu.impl.number.parse.ParsingUtils.safeContains; |
| |
| import com.ibm.icu.impl.StaticUnicodeSets; |
| import com.ibm.icu.impl.StringSegment; |
| import com.ibm.icu.text.DecimalFormatSymbols; |
| |
| /** |
| * @author sffc |
| * |
| */ |
| public class PlusSignMatcher extends SymbolMatcher { |
| |
| private static final PlusSignMatcher DEFAULT = new PlusSignMatcher(false); |
| private static final PlusSignMatcher DEFAULT_ALLOW_TRAILING = new PlusSignMatcher(true); |
| |
| public static PlusSignMatcher getInstance(DecimalFormatSymbols symbols, boolean allowTrailing) { |
| String symbolString = symbols.getPlusSignString(); |
| if (safeContains(DEFAULT.uniSet, symbolString)) { |
| return allowTrailing ? DEFAULT_ALLOW_TRAILING : DEFAULT; |
| } else { |
| return new PlusSignMatcher(symbolString, allowTrailing); |
| } |
| } |
| |
| private final boolean allowTrailing; |
| |
| private PlusSignMatcher(String symbolString, boolean allowTrailing) { |
| super(symbolString, DEFAULT.uniSet); |
| this.allowTrailing = allowTrailing; |
| } |
| |
| private PlusSignMatcher(boolean allowTrailing) { |
| super(StaticUnicodeSets.Key.PLUS_SIGN); |
| this.allowTrailing = allowTrailing; |
| } |
| |
| @Override |
| protected boolean isDisabled(ParsedNumber result) { |
| return !allowTrailing && result.seenNumber(); |
| } |
| |
| @Override |
| protected void accept(StringSegment segment, ParsedNumber result) { |
| result.setCharsConsumed(segment); |
| } |
| |
| @Override |
| public String toString() { |
| return "<PlusSignMatcher>"; |
| } |
| |
| } |