Package tech.units.indriya.format
Class LocalUnitFormat
- java.lang.Object
-
- tech.units.indriya.format.AbstractUnitFormat
-
- tech.units.indriya.format.LocalUnitFormat
-
- All Implemented Interfaces:
javax.measure.format.UnitFormat
public class LocalUnitFormat extends AbstractUnitFormat
This class represents the local sensitive format.
Here is the grammar for CommonUnits in Extended Backus-Naur Form (EBNF)
Note that the grammar has been left-factored to be suitable for use by a top-down parser generator such as JavaCC
Lexical Entities: <sign> := "+" | "-" <digit> := "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" <superscript_digit> := "⁰" | "¹" | "²" | "³" | "⁴" | "⁵" | "⁶" | "⁷" | "⁸" | "⁹" <integer> := (<digit>)+ <number> := (<sign>)? (<digit>)* (".")? (<digit>)+ (("e" | "E") (<sign>)? (<digit>)+)? <exponent> := ( "^" ( <sign> )? <integer> )
| ( "^(" (<sign>)? <integer> ( "/" (<sign>)? <integer> )? ")" )
| ( <superscript_digit> )+<initial_char> := ? Any Unicode character excluding the following: ASCII control & whitespace (\u0000 - \u0020), decimal digits '0'-'9', '(' (\u0028), ')' (\u0029), '*' (\u002A), '+' (\u002B), '-' (\u002D), '.' (\u002E), '/' (\u005C), ':' (\u003A), '^' (\u005E), '²' (\u00B2), '³' (\u00B3), '·' (\u00B7), '¹' (\u00B9), '⁰' (\u2070), '⁴' (\u2074), '⁵' (\u2075), '⁶' (\u2076), '⁷' (\u2077), '⁸' (\u2078), '⁹' (\u2079) ? <unit_identifier> := <initial_char> ( <initial_char> | <digit> )* Non-Terminals: <unit_expr> := <compound_expr> <compound_expr> := <add_expr> ( ":" <add_expr> )* <add_expr> := ( <number> <sign> )? <mul_expr> ( <sign> <number> )? <mul_expr> := <exponent_expr> ( ( ( "*" | "·" ) <exponent_expr> ) | ( "/" <exponent_expr> ) )* <exponent_expr> := ( <atomic_expr> ( <exponent> )? )
| (<integer> "^" <atomic_expr>)
| ( ( "log" ( <integer> )? ) | "ln" ) "(" <add_expr> ")" )<atomic_expr> := <number>
| <unit_identifier>
| ( "(" <add_expr> ")" )- Since:
- 1.0
- Version:
- 1.0.2, April 30, 2017
-
-
Field Summary
Fields Modifier and Type Field Description private static intADDITION_PRECEDENCEOperator precedence for the addition and subtraction operationsprivate static LocalUnitFormatDEFAULT_INSTANCEDefaultQuantityFactory locale instance.private static intEXPONENT_PRECEDENCEOperator precedence for the exponentiation and logarithm operationsprivate static charMIDDLE_DOTMultiplicand characterprivate static intNOOP_PRECEDENCEOperator precedence for a unit identifier containing no mathematical operations (i.e., consisting exclusively of an identifier and possibly a prefix).private static intPRODUCT_PRECEDENCEOperator precedence for the multiplication and division operationsprivate SymbolMapsymbolMapThe symbol map used by this instance to map betweenUnits andStrings, etc...
-
Constructor Summary
Constructors Modifier Constructor Description privateLocalUnitFormat(SymbolMap symbols)Base constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.Appendableformat(javax.measure.Unit<?> unit, java.lang.Appendable appendable)Formats the specified unit.private intformatConverter(javax.measure.UnitConverter converter, boolean continued, int unitPrecedence, java.lang.StringBuilder buffer)Formats the given converter to the given StringBuffer and returns the operator precedence of the converter's mathematical operation.private voidformatExponent(javax.measure.Unit<?> unit, int pow, int root, boolean continued, java.lang.Appendable buffer)Format the given unit raised to the given fractional power to the givenStringBuffer.private intformatInternal(javax.measure.Unit<?> unit, java.lang.Appendable buffer)Format the given unit to the given StringBuilder, then return the operator precedence of the outermost operator in the unit expression that was formatted.static LocalUnitFormatgetInstance()Returns the instance for the current default locale (non-ascii characters are allowed)static LocalUnitFormatgetInstance(java.util.Locale locale)Returns an instance for the given locale.static LocalUnitFormatgetInstance(SymbolMap symbols)Returns an instance for the given symbol map.protected SymbolMapgetSymbols()Get the symbol map used by this instance to map betweenUnits andStrings, etc...booleanisLocaleSensitive()javax.measure.Unit<? extends javax.measure.Quantity<?>>parse(java.lang.CharSequence csq)protected javax.measure.Unit<?>parse(java.lang.CharSequence csq, int index)Parses a portion of the specifiedCharSequencefrom the specified position to produce a unit.javax.measure.Unit<?>parse(java.lang.CharSequence csq, java.text.ParsePosition cursor)Parses a portion of the specifiedCharSequencefrom the specified position to produce a unit.-
Methods inherited from class tech.units.indriya.format.AbstractUnitFormat
format, format, label
-
-
-
-
Field Detail
-
DEFAULT_INSTANCE
private static final LocalUnitFormat DEFAULT_INSTANCE
DefaultQuantityFactory locale instance. If the default locale is changed after the class is initialized, this instance will no longer be used.
-
MIDDLE_DOT
private static final char MIDDLE_DOT
Multiplicand character- See Also:
- Constant Field Values
-
ADDITION_PRECEDENCE
private static final int ADDITION_PRECEDENCE
Operator precedence for the addition and subtraction operations- See Also:
- Constant Field Values
-
PRODUCT_PRECEDENCE
private static final int PRODUCT_PRECEDENCE
Operator precedence for the multiplication and division operations- See Also:
- Constant Field Values
-
EXPONENT_PRECEDENCE
private static final int EXPONENT_PRECEDENCE
Operator precedence for the exponentiation and logarithm operations- See Also:
- Constant Field Values
-
NOOP_PRECEDENCE
private static final int NOOP_PRECEDENCE
Operator precedence for a unit identifier containing no mathematical operations (i.e., consisting exclusively of an identifier and possibly a prefix). Defined to beInteger.MAX_VALUEso that no operator can have a higher precedence.- See Also:
- Constant Field Values
-
symbolMap
private final transient SymbolMap symbolMap
The symbol map used by this instance to map betweenUnits andStrings, etc...
-
-
Constructor Detail
-
LocalUnitFormat
private LocalUnitFormat(SymbolMap symbols)
Base constructor.- Parameters:
symbols- the symbol mapping.
-
-
Method Detail
-
getInstance
public static LocalUnitFormat getInstance()
Returns the instance for the current default locale (non-ascii characters are allowed)
-
getInstance
public static LocalUnitFormat getInstance(java.util.Locale locale)
Returns an instance for the given locale.- Parameters:
locale-
-
getInstance
public static LocalUnitFormat getInstance(SymbolMap symbols)
Returns an instance for the given symbol map.
-
getSymbols
protected SymbolMap getSymbols()
Get the symbol map used by this instance to map betweenUnits andStrings, etc...- Specified by:
getSymbolsin classAbstractUnitFormat- Returns:
- SymbolMap the current symbol map
-
format
public java.lang.Appendable format(javax.measure.Unit<?> unit, java.lang.Appendable appendable) throws java.io.IOExceptionDescription copied from class:AbstractUnitFormatFormats the specified unit.- Specified by:
formatin interfacejavax.measure.format.UnitFormat- Specified by:
formatin classAbstractUnitFormat- Parameters:
unit- the unit to format.appendable- the appendable destination.- Returns:
- The appendable destination passed in as
appendable, with formatted text appended. - Throws:
java.io.IOException- if an error occurs.
-
isLocaleSensitive
public boolean isLocaleSensitive()
-
parse
protected javax.measure.Unit<?> parse(java.lang.CharSequence csq, int index) throws javax.measure.format.ParserExceptionDescription copied from class:AbstractUnitFormatParses a portion of the specifiedCharSequencefrom the specified position to produce a unit. If there is no unit to parseAbstractUnit.ONEis returned.- Specified by:
parsein classAbstractUnitFormat- Parameters:
csq- theCharSequenceto parse.index- the current parsing index.- Returns:
- the unit parsed from the specified character sub-sequence.
- Throws:
javax.measure.format.ParserException
-
parse
public javax.measure.Unit<?> parse(java.lang.CharSequence csq, java.text.ParsePosition cursor) throws javax.measure.format.ParserExceptionDescription copied from class:AbstractUnitFormatParses a portion of the specifiedCharSequencefrom the specified position to produce a unit. If there is no unit to parseAbstractUnit.ONEis returned.- Specified by:
parsein classAbstractUnitFormat- Parameters:
csq- theCharSequenceto parse.cursor- the cursor holding the current parsing index.- Returns:
- the unit parsed from the specified character sub-sequence.
- Throws:
javax.measure.format.ParserException
-
parse
public javax.measure.Unit<? extends javax.measure.Quantity<?>> parse(java.lang.CharSequence csq) throws javax.measure.format.ParserException- Throws:
javax.measure.format.ParserException
-
formatInternal
private int formatInternal(javax.measure.Unit<?> unit, java.lang.Appendable buffer) throws java.io.IOExceptionFormat the given unit to the given StringBuilder, then return the operator precedence of the outermost operator in the unit expression that was formatted. SeeConverterFormatfor the constants that define the various precedence values.- Parameters:
unit- the unit to be formattedbuffer- theStringBuilderto be written to- Returns:
- the operator precedence of the outermost operator in the unit expression that was output
- Throws:
java.io.IOException
-
formatExponent
private void formatExponent(javax.measure.Unit<?> unit, int pow, int root, boolean continued, java.lang.Appendable buffer) throws java.io.IOExceptionFormat the given unit raised to the given fractional power to the givenStringBuffer.- Parameters:
unit- Unit the unit to be formattedpow- int the numerator of the fractional powerroot- int the denominator of the fractional powercontinued- booleantrueif the converter expression should begin with an operator, otherwisefalse. This will always be true unless the unit being modified is equal to Unit.ONE.buffer- StringBuffer the buffer to append to. No assumptions should be made about its content.- Throws:
java.io.IOException
-
formatConverter
private int formatConverter(javax.measure.UnitConverter converter, boolean continued, int unitPrecedence, java.lang.StringBuilder buffer)Formats the given converter to the given StringBuffer and returns the operator precedence of the converter's mathematical operation. This is the default implementation, which supports all built-in UnitConverter implementations. Note that it recursively calls itself in the case of aCompoundconverter.- Parameters:
converter- the converter to be formattedcontinued-trueif the converter expression should begin with an operator, otherwisefalse.unitPrecedence- the operator precedence of the operation expressed by the unit being modified by the given converter.buffer- theStringBufferto append to.- Returns:
- the operator precedence of the given UnitConverter
-
-