/// <summary> /// Reads a <see cref="IccMultiLocalizedUnicodeTagDataEntry"/> /// </summary> /// <returns>The read entry</returns> public IccMultiLocalizedUnicodeTagDataEntry ReadMultiLocalizedUnicodeTagDataEntry() { int start = this.currentIndex - 8; // 8 is the tag header size uint recordCount = this.ReadUInt32(); this.ReadUInt32(); // Record size (always 12) IccLocalizedString[] text = new IccLocalizedString[recordCount]; CultureInfo[] culture = new CultureInfo[recordCount]; uint[] length = new uint[recordCount]; uint[] offset = new uint[recordCount]; for (int i = 0; i < recordCount; i++) { string languageCode = this.ReadAsciiString(2); string countryCode = this.ReadAsciiString(2); culture[i] = ReadCulture(languageCode, countryCode); length[i] = this.ReadUInt32(); offset[i] = this.ReadUInt32(); } for (int i = 0; i < recordCount; i++) { this.currentIndex = (int)(start + offset[i]); text[i] = new IccLocalizedString(culture[i], this.ReadUnicodeString((int)length[i])); } return(new IccMultiLocalizedUnicodeTagDataEntry(text)); CultureInfo ReadCulture(string language, string country) { if (string.IsNullOrWhiteSpace(language)) { return(CultureInfo.InvariantCulture); } else if (string.IsNullOrWhiteSpace(country)) { try { return(new CultureInfo(language)); } catch (CultureNotFoundException) { return(CultureInfo.InvariantCulture); } } else { try { return(new CultureInfo($"{language}-{country}")); } catch (CultureNotFoundException) { return(ReadCulture(language, null)); } } } }
/// <summary> /// Reads a <see cref="IccMultiLocalizedUnicodeTagDataEntry"/> /// </summary> /// <returns>The read entry</returns> public IccMultiLocalizedUnicodeTagDataEntry ReadMultiLocalizedUnicodeTagDataEntry() { int start = this.currentIndex - 8; // 8 is the tag header size uint recordCount = this.ReadUInt32(); // TODO: Why are we storing variable uint recordSize = this.ReadUInt32(); IccLocalizedString[] text = new IccLocalizedString[recordCount]; string[] culture = new string[recordCount]; uint[] length = new uint[recordCount]; uint[] offset = new uint[recordCount]; for (int i = 0; i < recordCount; i++) { culture[i] = $"{this.ReadAsciiString(2)}-{this.ReadAsciiString(2)}"; length[i] = this.ReadUInt32(); offset[i] = this.ReadUInt32(); } for (int i = 0; i < recordCount; i++) { this.currentIndex = (int)(start + offset[i]); text[i] = new IccLocalizedString(new CultureInfo(culture[i]), this.ReadUnicodeString((int)length[i])); } return(new IccMultiLocalizedUnicodeTagDataEntry(text)); }