Search in sources :

Example 1 with UnitFormatParser

use of tech.units.indriya.internal.format.UnitFormatParser in project indriya by unitsofmeasurement.

the class EBNFUnitFormat method parse.

@Override
protected Unit<? extends Quantity<?>> parse(CharSequence csq, ParsePosition cursor) throws MeasurementParseException {
    // Parsing reads the whole character sequence from the parse position.
    int start = cursor != null ? cursor.getIndex() : 0;
    int end = csq.length();
    if (end <= start) {
        return AbstractUnit.ONE;
    }
    String source = csq.subSequence(start, end).toString().trim();
    if (source.length() == 0) {
        return AbstractUnit.ONE;
    }
    try {
        UnitFormatParser parser = new UnitFormatParser(symbolMap, new StringReader(source));
        Unit<?> result = parser.parseUnit();
        if (cursor != null)
            cursor.setIndex(end);
        return result;
    } catch (TokenException e) {
        if (e.currentToken != null) {
            cursor.setErrorIndex(start + e.currentToken.endColumn);
        } else {
            cursor.setErrorIndex(start);
        }
        throw new MeasurementParseException(e);
    } catch (TokenMgrError e) {
        cursor.setErrorIndex(start);
        throw new IllegalArgumentException(e.getMessage());
    }
}
Also used : TokenException(tech.units.indriya.internal.format.TokenException) StringReader(java.io.StringReader) TokenMgrError(tech.units.indriya.internal.format.TokenMgrError) UnitFormatParser(tech.units.indriya.internal.format.UnitFormatParser) MeasurementParseException(javax.measure.format.MeasurementParseException)

Aggregations

StringReader (java.io.StringReader)1 MeasurementParseException (javax.measure.format.MeasurementParseException)1 TokenException (tech.units.indriya.internal.format.TokenException)1 TokenMgrError (tech.units.indriya.internal.format.TokenMgrError)1 UnitFormatParser (tech.units.indriya.internal.format.UnitFormatParser)1