Exemplo n.º 1
0
        public void TextPropertyAlt2Write()
        {
            using (var stream = new MemoryStream())
                using (var writer = new BinaryWriter(stream))
                {
                    var text = new ArgumentFormatTextEntry(Alt2TextFlags)
                    {
                        SourceFormat = new BaseTextEntry(Alt2TextSourceFlags)
                        {
                            Key   = Alt2TextKey,
                            Value = Alt2TextValue
                        }
                    };
                    text.Arguments.Add(Alt2ArgumentFormat);

                    var prop = new TextProperty(Alt2TextName)
                    {
                        Text = text
                    };

                    prop.Serialize(writer, BuildVersion);

                    Assert.AreEqual(111, prop.SerializedLength);
                    CollectionAssert.AreEqual(Alt2TextBytes, stream.ToArray());
                }
        }
Exemplo n.º 2
0
        public static TextEntry ParseTextEntry(BinaryReader reader, int buildVersion)
        {
            var flags       = reader.ReadInt32();
            var historyType = (ETextHistoryType)reader.ReadByte();

            switch (historyType)
            {
            case ETextHistoryType.Base:
            {
                return(new BaseTextEntry(flags)
                    {
                        Namespace = reader.ReadLengthPrefixedString(),
                        Key = reader.ReadLengthPrefixedString(),
                        Value = reader.ReadLengthPrefixedString()
                    });
            }

            case ETextHistoryType.ArgumentFormat:
            {
                var result = new ArgumentFormatTextEntry(flags)
                {
                    SourceFormat = (BaseTextEntry)ParseTextEntry(reader, buildVersion)
                };

                var count = reader.ReadInt32();
                for (var i = 0; i < count; i++)
                {
                    result.Arguments.Add(new ArgumentFormat()
                        {
                            Name      = reader.ReadLengthPrefixedString(),
                            ValueType = (EFormatArgumentType)reader.ReadByte(),
                            Value     = ParseTextEntry(reader, buildVersion)
                        });
                }
                return(result);
            }

            case ETextHistoryType.None:
            {
                var entry = new NoneTextEntry(flags);

                if (buildVersion >= CultureInvariantChangeBuild)
                {
                    entry.HasCultureInvariantString = reader.ReadInt32() == 1;

                    if (entry.HasCultureInvariantString.Value)
                    {
                        entry.CultureInvariantString = reader.ReadLengthPrefixedString();
                    }
                }

                return(entry);
            }

            default:
                throw new NotImplementedException($"Unknown ETextHistoryType {historyType}");
            }
        }