/// <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));
                    }
                }
            }
        }
Beispiel #2
0
        /// <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));
        }