コード例 #1
0
        private void ReadTagMatchingRule(TagMatchingRuleDescriptorBuilder builder, JObject rule, JsonSerializer serializer)
        {
            var tagName      = rule[nameof(TagMatchingRuleDescriptor.TagName)].Value <string>();
            var attributes   = rule[nameof(TagMatchingRuleDescriptor.Attributes)].Value <JArray>();
            var parentTag    = rule[nameof(TagMatchingRuleDescriptor.ParentTag)].Value <string>();
            var tagStructure = rule[nameof(TagMatchingRuleDescriptor.TagStructure)].Value <int>();
            var diagnostics  = rule[nameof(TagMatchingRuleDescriptor.Diagnostics)].Value <JArray>();

            builder.TagName      = tagName;
            builder.ParentTag    = parentTag;
            builder.TagStructure = (TagStructure)tagStructure;

            foreach (var attribute in attributes)
            {
                var attibuteValue = attribute.Value <JObject>();
                builder.Attribute(b => ReadRequiredAttribute(b, attibuteValue, serializer));
            }

            foreach (var diagnostic in diagnostics)
            {
                var diagnosticReader = diagnostic.CreateReader();
                var diagnosticObject = serializer.Deserialize <RazorDiagnostic>(diagnosticReader);
                builder.Diagnostics.Add(diagnosticObject);
            }
        }
コード例 #2
0
    private static void ReadTagMatchingRule(TagMatchingRuleDescriptorBuilder builder, JObject rule, JsonSerializer serializer)
    {
        string tagName      = rule["TagName"].Value <string>();
        JArray jArray       = rule["Attributes"].Value <JArray>();
        string parentTag    = rule["ParentTag"].Value <string>();
        int    tagStructure = rule["TagStructure"].Value <int>();
        JArray jArray2      = rule["Diagnostics"].Value <JArray>();

        builder.TagName      = tagName;
        builder.ParentTag    = parentTag;
        builder.TagStructure = (TagStructure)tagStructure;
        foreach (JToken item2 in jArray)
        {
            JObject attibuteValue = item2.Value <JObject>();
            builder.Attribute(delegate(RequiredAttributeDescriptorBuilder b)
            {
                ReadRequiredAttribute(b, attibuteValue, serializer);
            });
        }
        foreach (JToken item3 in jArray2)
        {
            JsonReader      reader = item3.CreateReader();
            RazorDiagnostic item   = serializer.Deserialize <RazorDiagnostic>(reader);
            builder.Diagnostics.Add(item);
        }
    }
コード例 #3
0
            public void AddRequiredAttributes(TagMatchingRuleDescriptorBuilder ruleBuilder)
            {
                if (string.IsNullOrEmpty(_requiredAttributes))
                {
                    return;
                }
                var descriptors = new List <RequiredAttributeDescriptor>();

                PassOptionalWhitespace();

                do
                {
                    var successfulParse = true;
                    ruleBuilder.Attribute(attributeBuilder =>
                    {
                        if (At('['))
                        {
                            if (!TryParseCssSelector(attributeBuilder))
                            {
                                successfulParse = false;
                                return;
                            }
                        }
                        else
                        {
                            ParsePlainSelector(attributeBuilder);
                        }

                        PassOptionalWhitespace();

                        if (At(','))
                        {
                            _index++;

                            if (!EnsureNotAtEnd(attributeBuilder))
                            {
                                successfulParse = false;
                                return;
                            }
                        }
                        else if (!AtEnd)
                        {
                            //var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidRequiredAttributeCharacter(Current, _requiredAttributes);
                            //attributeBuilder.Diagnostics.Add(diagnostic);
                            successfulParse = false;
                            return;
                        }

                        PassOptionalWhitespace();
                    });

                    if (!successfulParse)
                    {
                        break;
                    }
                }while (!AtEnd);
            }
コード例 #4
0
        private static void ReadRequiredAttribute(JsonReader reader, TagMatchingRuleDescriptorBuilder builder)
        {
            if (!reader.Read())
            {
                return;
            }

            if (reader.TokenType != JsonToken.StartObject)
            {
                return;
            }

            builder.Attribute(attribute =>
            {
                reader.ReadProperties(propertyName =>
                {
                    switch (propertyName)
                    {
                    case nameof(RequiredAttributeDescriptor.Name):
                        if (reader.Read())
                        {
                            var name       = (string)reader.Value;
                            attribute.Name = name;
                        }
                        break;

                    case nameof(RequiredAttributeDescriptor.NameComparison):
                        var nameComparison           = (RequiredAttributeDescriptor.NameComparisonMode)reader.ReadAsInt32();
                        attribute.NameComparisonMode = nameComparison;
                        break;

                    case nameof(RequiredAttributeDescriptor.Value):
                        if (reader.Read())
                        {
                            var value       = (string)reader.Value;
                            attribute.Value = value;
                        }
                        break;

                    case nameof(RequiredAttributeDescriptor.ValueComparison):
                        var valueComparison           = (RequiredAttributeDescriptor.ValueComparisonMode)reader.ReadAsInt32();
                        attribute.ValueComparisonMode = valueComparison;
                        break;

                    case nameof(RequiredAttributeDescriptor.Diagnostics):
                        ReadDiagnostics(reader, attribute.Diagnostics);
                        break;

                    case nameof(RequiredAttributeDescriptor.Metadata):
                        ReadMetadata(reader, attribute.Metadata);
                        break;
                    }
                });
            });
        }
    public static TagMatchingRuleDescriptorBuilder RequireTagName(this TagMatchingRuleDescriptorBuilder builder, string tagName)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }

        builder.TagName = tagName;

        return(builder);
    }
    public static TagMatchingRuleDescriptorBuilder AddDiagnostic(this TagMatchingRuleDescriptorBuilder builder, RazorDiagnostic diagnostic)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }

        builder.Diagnostics.Add(diagnostic);

        return(builder);
    }
    public static TagMatchingRuleDescriptorBuilder RequireParentTag(this TagMatchingRuleDescriptorBuilder builder, string parentTag)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }

        builder.ParentTag = parentTag;

        return(builder);
    }
    public static TagMatchingRuleDescriptorBuilder RequireAttributeDescriptor(
        this TagMatchingRuleDescriptorBuilder builder,
        Action <RequiredAttributeDescriptorBuilder> configure)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }

        builder.Attribute(configure);

        return(builder);
    }
コード例 #9
0
        private static void ReadRequiredAttributeValues(JsonReader reader, TagMatchingRuleDescriptorBuilder builder)
        {
            if (!reader.Read())
            {
                return;
            }

            if (reader.TokenType != JsonToken.StartArray)
            {
                return;
            }

            do
            {
                ReadRequiredAttribute(reader, builder);
            } while (reader.TokenType != JsonToken.EndArray);
        }
コード例 #10
0
        public static void AddRequiredAttributes(string requiredAttributes, TagMatchingRuleDescriptorBuilder ruleBuilder)
        {
            var requiredAttributeParser = new DefaultRequiredAttributeParser(requiredAttributes);

            requiredAttributeParser.AddRequiredAttributes(ruleBuilder);
        }