Ejemplo n.º 1
0
        // Token: 0x060002A4 RID: 676 RVA: 0x0000C89C File Offset: 0x0000B89C
        internal static string Read(Record record, int lengthBits, ref int continueIndex, ref ushort offset)
        {
            string empty = string.Empty;

            UnicodeBytes.ReadState readState = new UnicodeBytes.ReadState(record, lengthBits, continueIndex, offset);
            UnicodeBytes.Read(readState);
            continueIndex = readState.ContinueIndex;
            offset        = readState.Offset;
            return(new string(readState.CharactersRead.ToArray()));
        }
Ejemplo n.º 2
0
        // Token: 0x060002A5 RID: 677 RVA: 0x0000C8E4 File Offset: 0x0000B8E4
        private static void Read(UnicodeBytes.ReadState state)
        {
            Bytes  recordData = state.GetRecordData();
            bool   flag       = (state.OptionsFlags & 1) == 0;
            ushort num        = (ushort)(recordData.Length - (int)state.Offset);

            if (state.CharactersRead.Count < (int)state.TotalCharacters)
            {
                ushort num2 = (ushort)((int)state.TotalCharacters - state.CharactersRead.Count);
                if (!flag)
                {
                    num2 *= 2;
                }
                ushort num3;
                if (num < num2)
                {
                    num3 = num;
                }
                else
                {
                    num3 = num2;
                }
                byte[] array = recordData.Get((int)state.Offset, (int)num3).ByteArray;
                if (flag)
                {
                    byte[] array2 = new byte[array.Length * 2];
                    for (int i = 0; i < array.Length; i++)
                    {
                        array2[2 * i] = array[i];
                    }
                    array = array2;
                }
                state.Offset += num3;
                num          -= num3;
                state.CharactersRead.AddRange(Encoding.Unicode.GetChars(array));
            }
            bool flag2 = state.CharactersRead.Count == (int)state.TotalCharacters;

            if (state.HasRichTextSettings && num > 0 && flag2 && state.FormattingRunBytes.Count < (int)(state.FormattingRunCount * 4))
            {
                ushort num3 = Math.Min(num, (ushort)Math.Min((int)(state.FormattingRunCount * 4), 65535));
                state.FormattingRunBytes.AddRange(recordData.Get((int)state.Offset, (int)num3).ByteArray);
                state.Offset += num3;
                num          -= num3;
            }
            if (state.HasAsianPhonetics && num > 0 && flag2 && (long)state.PhoneticSettingsBytes.Count < (long)((ulong)state.PhoneticSettingsByteCount))
            {
                ushort num3 = Math.Min(num, (ushort)Math.Min(state.PhoneticSettingsByteCount, 65535U));
                state.PhoneticSettingsBytes.AddRange(recordData.Get((int)state.Offset, (int)num3).ByteArray);
                state.Offset += num3;
                num          -= num3;
            }
            if (state.CharactersRead.Count < (int)state.TotalCharacters || state.FormattingRunBytes.Count < (int)(state.FormattingRunCount * 4) || (long)state.PhoneticSettingsBytes.Count < (long)((ulong)state.PhoneticSettingsByteCount))
            {
                state.Continue(true);
                UnicodeBytes.Read(state);
                return;
            }
            if (num == 0 && state.ContinueIndex + 1 < state.Record.Continues.Count)
            {
                state.Continue(false);
            }
        }