Class 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 operations
      private static LocalUnitFormat DEFAULT_INSTANCE
      DefaultQuantityFactory locale instance.
      private static int EXPONENT_PRECEDENCE
      Operator precedence for the exponentiation and logarithm operations
      private static char MIDDLE_DOT
      Multiplicand character
      private 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 operations
      private SymbolMap symbolMap
      The symbol map used by this instance to map between Units and Strings, 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 given StringBuffer.
      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 between Units and Strings, 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 specified CharSequence 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 specified CharSequence from the specified position to produce a unit.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 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 be Integer.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 between Units and Strings, 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 between Units and Strings, etc...
        Specified by:
        getSymbols in class AbstractUnitFormat
        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 interface javax.measure.format.UnitFormat
        Specified by:
        format in class AbstractUnitFormat
        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 specified CharSequence from the specified position to produce a unit. If there is no unit to parse AbstractUnit.ONE is returned.
        Specified by:
        parse in class AbstractUnitFormat
        Parameters:
        csq - the CharSequence 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 specified CharSequence from the specified position to produce a unit. If there is no unit to parse AbstractUnit.ONE is returned.
        Specified by:
        parse in class AbstractUnitFormat
        Parameters:
        csq - the CharSequence 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. See ConverterFormat for the constants that define the various precedence values.
        Parameters:
        unit - the unit to be formatted
        buffer - the StringBuilder 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 given StringBuffer.
        Parameters:
        unit - Unit the unit to be formatted
        pow - int the numerator of the fractional power
        root - int the denominator of the fractional power
        continued - boolean true if the converter expression should begin with an operator, otherwise false. 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 a Compound converter.
        Parameters:
        converter - the converter to be formatted
        continued - true if the converter expression should begin with an operator, otherwise false.
        unitPrecedence - the operator precedence of the operation expressed by the unit being modified by the given converter.
        buffer - the StringBuffer to append to.
        Returns:
        the operator precedence of the given UnitConverter