Пример #1
0
        static bool TryGetAttribute(XmlNode node, string attribute, out CapnpGen.CapParameterType value)
        {
            value = CapnpGen.CapParameterType.@float;

            if (node.Attributes[attribute] == null)
            {
                return(false);
            }

            string valueString = node.Attributes[attribute].Value;
            var    enumValues  = Enum.GetValues(typeof(CapnpGen.CapParameterType));

            foreach (var enumValue in enumValues)
            {
                string enumValueString = enumValue.ToString();
                if (enumValueString[0] == '@') // Capnproto will prepend "@" on reserved keywords, let's filter that away
                {
                    enumValueString = enumValueString.Substring(1);
                }

                if (valueString == enumValueString)
                {
                    value = (CapnpGen.CapParameterType)enumValue;
                    return(true);
                }
            }

            return(false);
        }
Пример #2
0
        static bool ParseParameter(XmlNode parameterNode, List <CapnpGen.CapParameter> parameters, out string error)
        {
            error = "";
            CapnpGen.CapParameter parameter = new CapnpGen.CapParameter();

            string name = "";

            if (!TryGetAttribute(parameterNode, "name", out name))
            {
                error = "Parameter node does not have a name attribute";
                return(false);
            }
            parameter.Name = name;

            CapnpGen.CapParameterType parameterType = CapnpGen.CapParameterType.@float;
            if (!TryGetAttribute(parameterNode, "type", out parameterType))
            {
                error = "Parameter node \"" + parameter.Name + "\" does not have a valid type attribute, valid values: ";
                var values = Enum.GetValues(typeof(CapnpGen.CapParameterType));
                foreach (var value in values)
                {
                    string valueString = value.ToString();
                    if (valueString[0] == '@') // Capnproto will prepend "@" on reserved keywords, let's filter that away
                    {
                        valueString = valueString.Substring(1);
                    }

                    error += value + " ";
                }
                return(false);
            }
            parameter.Type = parameterType;

            if (parameterType.ToString().StartsWith("texture"))
            {
                CapnpGen.CapSubType subType = CapnpGen.CapSubType.@float;
                if (!TryGetAttribute(parameterNode, "subtype", out subType))
                {
                    error = "Parameter node \"" + parameter.Name + "\" is of a texture type but does not have a valid subtype attribute, valid values: ";
                    var values = Enum.GetValues(typeof(CapnpGen.CapSubType));
                    foreach (var value in values)
                    {
                        string valueString = value.ToString();
                        if (valueString[0] == '@') // Capnproto will prepend "@" on reserved keywords, let's filter that away
                        {
                            valueString = valueString.Substring(1);
                        }

                        error += value + " ";
                    }
                    return(false);
                }
                parameter.SubType = subType;
            }

            parameters.Add(parameter);
            return(true);
        }