public ParseResult Parse(ExtractResult extResult) { ParseResult pr; if (extResult.Data is List <ExtractResult> ) { pr = MergeCompoundUnit(extResult); } else { pr = numberWithUnitParser.Parse(extResult); var value = pr.Value as UnitValue; Config.CurrencyNameToIsoCodeMap.TryGetValue(value?.Unit, out var mainUnitIsoCode); if (string.IsNullOrEmpty(mainUnitIsoCode) || mainUnitIsoCode.StartsWith(Constants.FAKE_ISO_CODE_PREFIX, StringComparison.Ordinal)) { pr.Value = new UnitValue { Unit = value?.Unit, Number = value?.Number, }; } else { pr.Value = new CurrencyUnitValue { Unit = value?.Unit, Number = value?.Number, IsoCurrency = mainUnitIsoCode, }; } } return(pr); }
public ParseResult Parse(ExtractResult extResult) { ParseResult pr; if (extResult.Data is List <ExtractResult> ) { pr = MergeMultiplier(extResult); if (pr == null) { pr = MergeCompoundUnit(extResult); } } else { pr = numberWithUnitParser.Parse(extResult); var value = pr.Value as UnitValue; // Parse unit like "MUSD" that resolves to "1 million USD" if (extResult.Data is ExtractResult) { var data = (ExtractResult)extResult.Data; var unitStr = extResult.Text.Replace(data.Text, string.Empty).Trim(); if (this.Config.MultiplierIsoCodeList.Contains(unitStr) && float.TryParse(value?.Number, out var number)) { value.Number = (number * 1000000).ToString("G15", CultureInfo.InvariantCulture); pr.Value = new UnitValue { Unit = value?.Unit, Number = value?.Number, }; } } Config.CurrencyNameToIsoCodeMap.TryGetValue(value?.Unit, out var mainUnitIsoCode); if (string.IsNullOrEmpty(mainUnitIsoCode) || mainUnitIsoCode.StartsWith(Constants.FAKE_ISO_CODE_PREFIX, StringComparison.Ordinal)) { pr.Value = new UnitValue { Unit = value?.Unit, Number = value?.Number, }; } else { pr.Value = new CurrencyUnitValue { Unit = value?.Unit, Number = value?.Number, IsoCurrency = mainUnitIsoCode, }; } } return(pr); }
public ParseResult Parse(ExtractResult extResult) { ParseResult pr; // For now only currency model recognizes compound units. if (extResult.Type.Equals(Constants.SYS_UNIT_CURRENCY, StringComparison.Ordinal)) { pr = new BaseCurrencyParser(Config).Parse(extResult); } else { pr = numberWithUnitParser.Parse(extResult); } return(pr); }