Пример #1
0
        public VersionSchema(XElement element)
        {
            Id         = element.Attribute("id").Value;
            NifVersion = NIFVersion.Parse(element.Attribute("num").Value);
            Supported  = bool.Parse(element.Attribute("supported")?.Value ?? "true");

            if (element.Attribute("bsver") != null)
            {
                BethesdaVersions = element.Attribute("bsver")
                                   .Value
                                   .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                                   .Select(n => (uint)Utils.ParseLong(n))
                                   .ToList();
            }
            if (element.Attribute("user") != null)
            {
                UserVersions = element.Attribute("user")
                               .Value
                               .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                               .Select(n => (uint)Utils.ParseLong(n))
                               .ToList();
            }

            NIFExtensions = (element.Attribute("ext")?.Value ?? "")
                            .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                            .ToList();
        }
Пример #2
0
        void ParseTextToken(TextToken token)
        {
            var lastPart = CurrentParts.LastOrDefault();

            if (lastPart is Part.Operator operatorPart)
            {
                if (operatorPart.Value is Syntax.Operator.Structural.Member)
                {
                    var memberExpression = new Expression.MemberName(token.Content);
                    CurrentParts.Add(new Part.Operand(memberExpression));
                    return;
                }
            }

            if (Utils.TryParseLong(token.Content, out var literalValue))
            {
                CurrentParts.Add(new Part.Operand(new Literal(literalValue)));
                return;
            }
            if (NIFVersion.TryParse(token.Content, out var nifVersion))
            {
                CurrentParts.Add(new Part.Operand(new Literal(nifVersion)));
                return;
            }

            var paramtereExpression = new Expression.Parameter(token.Content);

            CurrentParts.Add(new Part.Operand(paramtereExpression));
            return;
        }
Пример #3
0
        public FieldSchema(XElement element)
        {
            Name = element.Attribute("name").Value;
            Type = element.Attribute("type").Value;

            MinVersion = NIFVersion.Parse(element.Attribute("ver1"));
            MaxVersion = NIFVersion.Parse(element.Attribute("ver2"));

            Dimensions = new string[]
            {
                element.Attribute("arr1")?.Value,
                element.Attribute("arr2")?.Value,
            }.Where(a => a != null).ToList();

            Condition        = element.Attribute("cond")?.Value;
            VersionCondition = element.Attribute("vercond")?.Value;
            OnlyT            = element.Attribute("onlyT")?.Value;
            ExcludeT         = element.Attribute("excludeT")?.Value;

            Argument = element.Attribute("arg")?.Value;
            Template = element.Attribute("template")?.Value;
        }
Пример #4
0
        public SchemaDocument(XElement element)
        {
            SchemaVersion = NIFVersion.Parse(element.Attribute("version").Value);

            var elementsByName = element.Elements()
                                 .ToLookup(e => e.Name);

            Tokens = elementsByName["token"]
                     .Select(e => new TokenSchema(e))
                     .ToList();
            Versions = elementsByName["version"]
                       .Select(e => new VersionSchema(e))
                       .ToList();

            NiObjects = elementsByName["niobject"]
                        .Select(e => new NiObjectSchema(e))
                        .ToDictionary(s => s.Name);
            Compounds = elementsByName["compound"]
                        .Select(e => new CompoundSchema(e))
                        .ToDictionary(s => s.Name);
            Basics = elementsByName["basic"]
                     .Select(e => new BasicSchema(e))
                     .ToDictionary(s => s.Name);
            Enums = elementsByName["enum"]
                    .Select(e => new EnumSchema(e))
                    .ToDictionary(s => s.Name);
            Bitfields = elementsByName["bitfield"]
                        .Select(e => new BitFieldSchema(e))
                        .ToDictionary(s => s.Name);
            Bitflags = elementsByName["bitflags"]
                       .Select(e => new BitflagsSchema(e))
                       .ToDictionary(s => s.Name);

            TokenLookup       = new TokenLookup(Tokens.Concat(StaticTokens));
            InheritanceLookup = new InheritanceLookup(NiObjects);
            ExpressionLookup  = new ExpressionLookup(NiObjects.Values, Compounds.Values, TokenLookup);
            ParameterLookup   = new ParameterLookup(Compounds.Values, ExpressionLookup);
            TypeLookup        = new TypeLookup(Compounds.Values, NiObjects.Values);
        }