/// <summary> /// Currencies%narrow{ /// AOA{"Kz"} /// ARS{"$"} /// ... /// } /// </summary> internal void ConsumeCurrenciesNarrowEntry(ResourceKey key, ResourceValue value) { Debug.Assert(narrowSymbol != null); // No extra structure to traverse. if (narrowSymbol.narrowSymbol == null) { narrowSymbol.narrowSymbol = value.GetString(); } }
/// <summary> /// Currencies%variant{ /// TRY{"TL"} /// } /// </summary> internal void ConsumeCurrenciesVariantTable(ResourceKey key, ResourceValue value) { // Note: This data is used for parsing but not formatting. Debug.Assert(parsingData != null); IResourceTable table = value.GetTable(); for (int i = 0; table.GetKeyAndValue(i, key, value); i++) { string isoCode = key.ToString(); parsingData.symbolToIsoCode[value.GetString()] = isoCode; } }
/// <summary> /// Currencies{ /// ... /// USD{ /// "US$", => symbol /// "US Dollar", => display name /// } /// ... /// ESP{ /// "₧", => symbol /// "pesseta espanyola", => display name /// { /// "¤ #,##0.00", => currency-specific pattern /// ",", => currency-specific grouping separator /// ".", => currency-specific decimal separator /// } /// } /// ... /// } /// </summary> internal void ConsumeCurrenciesTable(ResourceKey key, ResourceValue value) { // The full Currencies table is consumed for parsing only. Debug.Assert(parsingData != null); IResourceTable table = value.GetTable(); for (int i = 0; table.GetKeyAndValue(i, key, value); i++) { string isoCode = key.ToString(); if (value.Type != UResourceType.Array) { throw new ICUException("Unexpected data type in Currencies table for " + isoCode); } IResourceArray array = value.GetArray(); parsingData.symbolToIsoCode[isoCode] = isoCode; // Add the ISO code itself as a symbol array.GetValue(0, value); parsingData.symbolToIsoCode[value.GetString()] = isoCode; array.GetValue(1, value); parsingData.nameToIsoCode[value.GetString()] = isoCode; } }
internal void ConsumeCurrenciesEntry(ResourceKey key, ResourceValue value) { Debug.Assert(formattingData != null); string isoCode = key.ToString(); if (value.Type != UResourceType.Array) { throw new ICUException("Unexpected data type in Currencies table for " + isoCode); } IResourceArray array = value.GetArray(); if (formattingData.symbol == null) { array.GetValue(0, value); formattingData.symbol = value.GetString(); } if (formattingData.displayName == null) { array.GetValue(1, value); formattingData.displayName = value.GetString(); } // If present, the third element is the currency format info. // TODO: Write unit test to ensure that this data is being used by number formatting. if (array.Length > 2 && formattingData.formatInfo == null) { array.GetValue(2, value); IResourceArray formatArray = value.GetArray(); formatArray.GetValue(0, value); string formatPattern = value.GetString(); formatArray.GetValue(1, value); string decimalSeparator = value.GetString(); formatArray.GetValue(2, value); string groupingSeparator = value.GetString(); formattingData.formatInfo = new CurrencyFormatInfo( isoCode, formatPattern, decimalSeparator, groupingSeparator); } }
/// <summary> /// CurrencyUnitPatterns{ /// other{"{0} {1}"} /// ... /// } /// </summary> internal void ConsumeCurrencyUnitPatternsTable(ResourceKey key, ResourceValue value) { Debug.Assert(unitPatterns != null); IResourceTable table = value.GetTable(); for (int i = 0; table.GetKeyAndValue(i, key, value); i++) { string pluralKeyword = key.ToString(); if (!unitPatterns.TryGetValue(pluralKeyword, out string unitPattern) || unitPattern == null) { unitPatterns[pluralKeyword] = value.GetString(); } } }
/// <summary> /// currencySpacing{ /// afterCurrency{ /// currencyMatch{"[:^S:]"} /// insertBetween{" "} /// surroundingMatch{"[:digit:]"} /// } /// beforeCurrency{ /// currencyMatch{"[:^S:]"} /// insertBetween{" "} /// surroundingMatch{"[:digit:]"} /// } /// } /// </summary> internal void ConsumeCurrencySpacingTable(ResourceKey key, ResourceValue value) { Debug.Assert(spacingInfo != null); IResourceTable spacingTypesTable = value.GetTable(); for (int i = 0; spacingTypesTable.GetKeyAndValue(i, key, value); ++i) { CurrencySpacingInfo.SpacingType type; if (key.ContentEquals("beforeCurrency")) { type = CurrencySpacingInfo.SpacingType.Before; spacingInfo.HasBeforeCurrency = true; } else if (key.ContentEquals("afterCurrency")) { type = CurrencySpacingInfo.SpacingType.After; spacingInfo.HasAfterCurrency = true; } else { continue; } IResourceTable patternsTable = value.GetTable(); for (int j = 0; patternsTable.GetKeyAndValue(j, key, value); ++j) { CurrencySpacingInfo.SpacingPattern pattern; if (key.ContentEquals("currencyMatch")) { pattern = CurrencySpacingInfo.SpacingPattern.CurrencyMatch; } else if (key.ContentEquals("surroundingMatch")) { pattern = CurrencySpacingInfo.SpacingPattern.SurroundingMatch; } else if (key.ContentEquals("insertBetween")) { pattern = CurrencySpacingInfo.SpacingPattern.InsertBetween; } else { continue; } spacingInfo.SetSymbolIfNull(type, pattern, value.GetString()); } } }
internal void ConsumeCurrencyPluralsEntry(ResourceKey key, ResourceValue value) { Debug.Assert(pluralsData != null); IResourceTable pluralsTable = value.GetTable(); for (int j = 0; pluralsTable.GetKeyAndValue(j, key, value); j++) { StandardPlural?plural = StandardPluralUtil.OrNullFromString(key.ToString()); if (plural == null) { throw new ICUException("Could not make StandardPlural from keyword " + key); } if (pluralsData[1 + (int)plural] == null) { pluralsData[1 + (int)plural] = value.GetString(); } } }
/// <summary> /// CurrencyPlurals{ /// BYB{ /// one{"Belarusian new rouble (1994–1999)"} /// other{"Belarusian new roubles (1994–1999)"} /// } /// ... /// } /// </summary> internal void ConsumeCurrencyPluralsTable(ResourceKey key, ResourceValue value) { // The full CurrencyPlurals table is consumed for parsing only. Debug.Assert(parsingData != null); IResourceTable table = value.GetTable(); for (int i = 0; table.GetKeyAndValue(i, key, value); i++) { string isoCode = key.ToString(); IResourceTable pluralsTable = value.GetTable(); for (int j = 0; pluralsTable.GetKeyAndValue(j, key, value); j++) { StandardPlural?plural = StandardPluralUtil.OrNullFromString(key.ToString()); if (plural == null) { throw new ICUException("Could not make StandardPlural from keyword " + key); } parsingData.nameToIsoCode[value.GetString()] = isoCode; } } }