Exemple #1
0
        private TranslatedFSString ReadTranslatedFSString(BinaryReader reader)
        {
            var str = new TranslatedFSString();

            var valueLength = reader.ReadInt32();

            str.Value = ReadString(reader, valueLength);

            var handleLength = reader.ReadInt32();

            str.Handle = ReadString(reader, handleLength);

            var arguments = reader.ReadInt32();

            str.Arguments = new List <TranslatedFSStringArgument>(arguments);
            for (int i = 0; i < arguments; i++)
            {
                var arg          = new TranslatedFSStringArgument();
                var argKeyLength = reader.ReadInt32();
                arg.Key = ReadString(reader, argKeyLength);

                arg.String = ReadTranslatedFSString(reader);

                var argValueLength = reader.ReadInt32();
                arg.Value = ReadString(reader, argValueLength);

                str.Arguments.Add(arg);
            }

            return(str);
        }
Exemple #2
0
        private TranslatedFSStringArgument ReadFSStringArgument(JsonReader reader)
        {
            var    fs  = new TranslatedFSStringArgument();
            string key = null;

            while (reader.Read())
            {
                if (reader.TokenType == JsonToken.EndObject)
                {
                    break;
                }
                else if (reader.TokenType == JsonToken.PropertyName)
                {
                    key = reader.Value.ToString();
                }
                else if (reader.TokenType == JsonToken.String)
                {
                    if (key == "key")
                    {
                        fs.Key = reader.Value.ToString();
                    }
                    else if (key == "value")
                    {
                        fs.Value = reader.Value.ToString();
                    }
                    else
                    {
                        throw new InvalidDataException("Unknown property encountered during TranslatedFSString argument parsing: " + key);
                    }
                }
                else if (reader.TokenType == JsonToken.StartObject && key == "string")
                {
                    fs.String = ReadTranslatedFSString(reader);
                }
                else
                {
                    throw new InvalidDataException("Unexpected JSON token during parsing of TranslatedFSString argument: " + reader.TokenType);
                }
            }

            return(fs);
        }
Exemple #3
0
        private void ReadTranslatedFSString(TranslatedFSString fs)
        {
            fs.Value  = reader["value"];
            fs.Handle = reader["handle"];
            Debug.Assert(fs.Handle != null);

            var arguments = Convert.ToInt32(reader["arguments"]);

            fs.Arguments = new List <TranslatedFSStringArgument>(arguments);
            if (arguments > 0)
            {
                while (reader.Read() && reader.NodeType != XmlNodeType.Element)
                {
                    ;
                }
                if (reader.Name != "arguments")
                {
                    throw new InvalidFormatException(String.Format("Expected <arguments>: {0}", reader.Name));
                }

                int processedArgs = 0;
                while (processedArgs < arguments && reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        if (reader.Name != "argument")
                        {
                            throw new InvalidFormatException(String.Format("Expected <argument>: {0}", reader.Name));
                        }

                        var arg = new TranslatedFSStringArgument();
                        arg.Key   = reader["key"];
                        arg.Value = reader["value"];

                        while (reader.Read() && reader.NodeType != XmlNodeType.Element)
                        {
                            ;
                        }
                        if (reader.Name != "string")
                        {
                            throw new InvalidFormatException(String.Format("Expected <string>: {0}", reader.Name));
                        }

                        arg.String = new TranslatedFSString();
                        ReadTranslatedFSString(arg.String);

                        fs.Arguments.Add(arg);
                        processedArgs++;

                        while (reader.Read() && reader.NodeType != XmlNodeType.EndElement)
                        {
                            ;
                        }
                    }
                }

                while (reader.Read() && reader.NodeType != XmlNodeType.EndElement)
                {
                    ;
                }
                // Close outer element
                while (reader.Read() && reader.NodeType != XmlNodeType.EndElement)
                {
                    ;
                }
                Debug.Assert(processedArgs == arguments);
            }
        }