Package com.ibm.icu.text
Class NFSubstitution
java.lang.Object
com.ibm.icu.text.NFSubstitution
- Direct Known Subclasses:
AbsoluteValueSubstitution
,FractionalPartSubstitution
,IntegralPartSubstitution
,ModulusSubstitution
,MultiplierSubstitution
,NumeratorSubstitution
,SameValueSubstitution
An abstract class defining protocol for substitutions. A substitution
is a section of a rule that inserts text into the rule's rule text
based on some part of the number being formatted.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final long
(package private) final DecimalFormat
The DecimalFormat this substitution uses to format its result, or null.(package private) final int
The substitution's position in the rule text of the rule that owns it(package private) final NFRuleSet
The rule set this substitution uses to format its result, or null. -
Constructor Summary
ConstructorsConstructorDescriptionNFSubstitution
(int pos, NFRuleSet ruleSet, String description) Base constructor for substitutions. -
Method Summary
Modifier and TypeMethodDescriptionabstract double
calcUpperBound
(double oldUpperBound) Calculates an upper bound when searching for a rule that matches this substitution.abstract double
composeRuleValue
(double newRuleValue, double oldRuleValue) Derives a new value from the two values passed in.doParse
(String text, ParsePosition parsePosition, double baseValue, double upperBound, boolean lenientParse, int nonNumericalExecutedRuleMask, int recursionCount) Parses a string using the rule set or DecimalFormat belonging to this substitution.void
doSubstitution
(double number, StringBuilder toInsertInto, int position, int recursionCount) Performs a mathematical operation on the number, formats it using either ruleSet or decimalFormat, and inserts the result into toInsertInto.void
doSubstitution
(long number, StringBuilder toInsertInto, int position, int recursionCount) Performs a mathematical operation on the number, formats it using either ruleSet or decimalFormat, and inserts the result into toInsertInto.boolean
Compares two substitutions for equalityfinal int
getPos()
Returns the substitution's position in the rule that owns it.int
hashCode()
boolean
Returns true if this is a modulus substitution.static NFSubstitution
makeSubstitution
(int pos, NFRule rule, NFRule rulePredecessor, NFRuleSet ruleSet, RuleBasedNumberFormat formatter, String description) Parses the description, creates the right kind of substitution, and initializes it based on the description.void
setDecimalFormatSymbols
(DecimalFormatSymbols newSymbols) void
setDivisor
(int radix, short exponent) Set's the substitution's divisor.(package private) abstract char
Returns the character used in the textual representation of substitutions of this type.toString()
Returns a textual description of the substitutionabstract double
transformNumber
(double number) Subclasses override this function to perform some kind of mathematical operation on the number.abstract long
transformNumber
(long number) Subclasses override this function to perform some kind of mathematical operation on the number.
-
Field Details
-
pos
final int posThe substitution's position in the rule text of the rule that owns it -
ruleSet
The rule set this substitution uses to format its result, or null. (Either this or numberFormat has to be non-null.) -
numberFormat
The DecimalFormat this substitution uses to format its result, or null. (Either this or ruleSet has to be non-null.) -
MAX_INT64_IN_DOUBLE
private static final long MAX_INT64_IN_DOUBLE- See Also:
-
-
Constructor Details
-
NFSubstitution
Base constructor for substitutions. This constructor sets up the fields which are common to all substitutions.- Parameters:
pos
- The substitution's position in the owning rule's rule textruleSet
- The rule set that owns this substitutiondescription
- The substitution descriptor (i.e., the text inside the token characters)
-
-
Method Details
-
makeSubstitution
public static NFSubstitution makeSubstitution(int pos, NFRule rule, NFRule rulePredecessor, NFRuleSet ruleSet, RuleBasedNumberFormat formatter, String description) Parses the description, creates the right kind of substitution, and initializes it based on the description.- Parameters:
pos
- The substitution's position in the rule text of the rule that owns it.rule
- The rule containing this substitutionrulePredecessor
- The rule preceding the one that contains this substitution in the rule set's rule list (this is used only for >>> substitutions).ruleSet
- The rule set containing the rule containing this substitutionformatter
- The RuleBasedNumberFormat that ultimately owns this substitutiondescription
- The description to parse to build the substitution (this is just the substring of the rule's description containing the substitution token itself)- Returns:
- A new substitution constructed according to the description
-
setDivisor
public void setDivisor(int radix, short exponent) Set's the substitution's divisor. Used by NFRule.setBaseValue(). A no-op for all substitutions except multiplier and modulus substitutions.- Parameters:
radix
- The radix of the divisorexponent
- The exponent of the divisor
-
equals
Compares two substitutions for equality -
hashCode
public int hashCode() -
toString
Returns a textual description of the substitution -
doSubstitution
public void doSubstitution(long number, StringBuilder toInsertInto, int position, int recursionCount) Performs a mathematical operation on the number, formats it using either ruleSet or decimalFormat, and inserts the result into toInsertInto.- Parameters:
number
- The number being formatted.toInsertInto
- The string we insert the result intoposition
- The position in toInsertInto where the owning rule's rule text begins (this value is added to this substitution's position to determine exactly where to insert the new text)
-
doSubstitution
public void doSubstitution(double number, StringBuilder toInsertInto, int position, int recursionCount) Performs a mathematical operation on the number, formats it using either ruleSet or decimalFormat, and inserts the result into toInsertInto.- Parameters:
number
- The number being formatted.toInsertInto
- The string we insert the result intoposition
- The position in toInsertInto where the owning rule's rule text begins (this value is added to this substitution's position to determine exactly where to insert the new text)
-
transformNumber
public abstract long transformNumber(long number) Subclasses override this function to perform some kind of mathematical operation on the number. The result of this operation is formatted using the rule set or DecimalFormat that this substitution refers to, and the result is inserted into the result string.- Parameters:
number
- The number being formatted- Returns:
- The result of performing the opreration on the number
-
transformNumber
public abstract double transformNumber(double number) Subclasses override this function to perform some kind of mathematical operation on the number. The result of this operation is formatted using the rule set or DecimalFormat that this substitution refers to, and the result is inserted into the result string.- Parameters:
number
- The number being formatted- Returns:
- The result of performing the opreration on the number
-
doParse
public Number doParse(String text, ParsePosition parsePosition, double baseValue, double upperBound, boolean lenientParse, int nonNumericalExecutedRuleMask, int recursionCount) Parses a string using the rule set or DecimalFormat belonging to this substitution. If there's a match, a mathematical operation (the inverse of the one used in formatting) is performed on the result of the parse and the value passed in and returned as the result. The parse position is updated to point to the first unmatched character in the string.- Parameters:
text
- The string to parseparsePosition
- On entry, ignored, but assumed to be 0. On exit, this is updated to point to the first unmatched character (or 0 if the substitution didn't match)baseValue
- A partial parse result that should be combined with the result of this parseupperBound
- When searching the rule set for a rule matching the string passed in, only rules with base values lower than this are consideredlenientParse
- If true and matching against rules fails, the substitution will also try matching the text against numerals using a default-constructed NumberFormat. If false, no extra work is done. (This value is false whenever the formatter isn't in lenient-parse mode, but is also false under some conditions even when the formatter _is_ in lenient-parse mode.)- Returns:
- If there's a match, this is the result of composing baseValue with whatever was returned from matching the characters. This will be either a Long or a Double. If there's no match this is Long.valueOf(0) (not null), and parsePosition is left unchanged.
-
composeRuleValue
public abstract double composeRuleValue(double newRuleValue, double oldRuleValue) Derives a new value from the two values passed in. The two values are typically either the base values of two rules (the one containing the substitution and the one matching the substitution) or partial parse results derived in some other way. The operation is generally the inverse of the operation performed by transformNumber().- Parameters:
newRuleValue
- The value produced by matching this substitutionoldRuleValue
- The value that was passed to the substitution by the rule that owns it- Returns:
- A third value derived from the other two, representing a partial parse result
-
calcUpperBound
public abstract double calcUpperBound(double oldUpperBound) Calculates an upper bound when searching for a rule that matches this substitution. Rules with base values greater than or equal to upperBound are not considered.- Parameters:
oldUpperBound
- The current upper-bound setting. The new upper bound can't be any higher.
-
getPos
public final int getPos()Returns the substitution's position in the rule that owns it.- Returns:
- The substitution's position in the rule that owns it.
-
tokenChar
abstract char tokenChar()Returns the character used in the textual representation of substitutions of this type. Used by toString().- Returns:
- This substitution's token character.
-
isModulusSubstitution
public boolean isModulusSubstitution()Returns true if this is a modulus substitution. (We didn't do this with instanceof partially because it causes source files to proliferate and partially because we have to port this to C++.)- Returns:
- true if this object is an instance of ModulusSubstitution
-
setDecimalFormatSymbols
-