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 int
ADDITION_PRECEDENCE
Operator precedence for the addition and subtraction operationsprivate static LocalUnitFormat
DEFAULT_INSTANCE
DefaultQuantityFactory locale instance.private static int
EXPONENT_PRECEDENCE
Operator precedence for the exponentiation and logarithm operationsprivate static char
MIDDLE_DOT
Multiplicand characterprivate static int
NOOP_PRECEDENCE
Operator precedence for a unit identifier containing no mathematical operations (i.e., consisting exclusively of an identifier and possibly a prefix).private static int
PRODUCT_PRECEDENCE
Operator precedence for the multiplication and division operationsprivate SymbolMap
symbolMap
The symbol map used by this instance to map betweenUnit
s andString
s, etc...
-
Constructor Summary
Constructors Modifier Constructor Description private
LocalUnitFormat(SymbolMap symbols)
Base constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.Appendable
format(javax.measure.Unit<?> unit, java.lang.Appendable appendable)
Formats the specified unit.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.private void
formatExponent(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 int
formatInternal(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 LocalUnitFormat
getInstance()
Returns the instance for the current default locale (non-ascii characters are allowed)static LocalUnitFormat
getInstance(java.util.Locale locale)
Returns an instance for the given locale.static LocalUnitFormat
getInstance(SymbolMap symbols)
Returns an instance for the given symbol map.protected SymbolMap
getSymbols()
Get the symbol map used by this instance to map betweenUnit
s andString
s, etc...boolean
isLocaleSensitive()
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 specifiedCharSequence
from the specified position to produce a unit.javax.measure.Unit<?>
parse(java.lang.CharSequence csq, java.text.ParsePosition cursor)
Parses a portion of the specifiedCharSequence
from 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_VALUE
so 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 betweenUnit
s andString
s, 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 betweenUnit
s andString
s, etc...- Specified by:
getSymbols
in classAbstractUnitFormat
- Returns:
- SymbolMap the current symbol map
-
format
public java.lang.Appendable format(javax.measure.Unit<?> unit, java.lang.Appendable appendable) throws java.io.IOException
Description copied from class:AbstractUnitFormat
Formats the specified unit.- Specified by:
format
in interfacejavax.measure.format.UnitFormat
- Specified by:
format
in 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.ParserException
Description copied from class:AbstractUnitFormat
Parses a portion of the specifiedCharSequence
from the specified position to produce a unit. If there is no unit to parseAbstractUnit.ONE
is returned.- Specified by:
parse
in classAbstractUnitFormat
- Parameters:
csq
- theCharSequence
to 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.ParserException
Description copied from class:AbstractUnitFormat
Parses a portion of the specifiedCharSequence
from the specified position to produce a unit. If there is no unit to parseAbstractUnit.ONE
is returned.- Specified by:
parse
in classAbstractUnitFormat
- Parameters:
csq
- theCharSequence
to 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.IOException
Format the given unit to the given StringBuilder, then return the operator precedence of the outermost operator in the unit expression that was formatted. SeeConverterFormat
for the constants that define the various precedence values.- Parameters:
unit
- the unit to be formattedbuffer
- theStringBuilder
to 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.IOException
Format 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
- booleantrue
if 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 aCompound
converter.- Parameters:
converter
- the converter to be formattedcontinued
-true
if 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
- theStringBuffer
to append to.- Returns:
- the operator precedence of the given UnitConverter
-
-