private void AddTagMatchingRules(INamedTypeSymbol type, TagHelperDescriptorBuilder descriptorBuilder)
    {
        var targetElementAttributes = type
                                      .GetAttributes()
                                      .Where(attribute => SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, _htmlTargetElementAttributeSymbol));

        // If there isn't an attribute specifying the tag name derive it from the name
        if (!targetElementAttributes.Any())
        {
            var name = type.Name;

            if (name.EndsWith(TagHelperNameEnding, StringComparison.OrdinalIgnoreCase))
            {
                name = name.Substring(0, name.Length - TagHelperNameEnding.Length);
            }

            descriptorBuilder.TagMatchingRule(ruleBuilder =>
            {
                var htmlCasedName   = HtmlConventions.ToHtmlCase(name);
                ruleBuilder.TagName = htmlCasedName;
            });

            return;
        }

        foreach (var targetElementAttribute in targetElementAttributes)
        {
            descriptorBuilder.TagMatchingRule(ruleBuilder =>
            {
                var tagName         = HtmlTargetElementAttribute_Tag(targetElementAttribute);
                ruleBuilder.TagName = tagName;

                var parentTag         = HtmlTargetElementAttribute_ParentTag(targetElementAttribute);
                ruleBuilder.ParentTag = parentTag;

                var tagStructure         = HtmlTargetElementAttribute_TagStructure(targetElementAttribute);
                ruleBuilder.TagStructure = tagStructure;

                var requiredAttributeString = HtmlTargetElementAttribute_Attributes(targetElementAttribute);
                RequiredAttributeParser.AddRequiredAttributes(requiredAttributeString, ruleBuilder);
            });
        }
    }
        private static void AddTagMatchingRules(Type type, TagHelperDescriptorBuilder descriptorBuilder)
        {
            var targetElementAttributes = type.GetCustomAttributes <HtmlTargetElementAttribute>();

            // If there isn't an attribute specifying the tag name derive it from the name
            if (!targetElementAttributes.Any())
            {
                var name = type.Name;

                if (name.EndsWith("TagHelper", StringComparison.OrdinalIgnoreCase))
                {
                    name = name.Substring(0, name.Length - "TagHelper".Length);
                }

                descriptorBuilder.TagMatchingRule(ruleBuilder =>
                {
                    var htmlCasedName   = HtmlConventions.ToHtmlCase(name);
                    ruleBuilder.TagName = htmlCasedName;
                });

                return;
            }

            foreach (var targetElementAttribute in targetElementAttributes)
            {
                descriptorBuilder.TagMatchingRule(ruleBuilder =>
                {
                    var tagName         = targetElementAttribute.Tag;
                    ruleBuilder.TagName = tagName;

                    var parentTag         = targetElementAttribute.ParentTag;
                    ruleBuilder.ParentTag = parentTag;

                    var tagStructure         = targetElementAttribute.TagStructure;
                    ruleBuilder.TagStructure = (Microsoft.AspNetCore.Razor.Language.TagStructure)tagStructure;

                    var requiredAttributeString = targetElementAttribute.Attributes;
                    RequiredAttributeParser.AddRequiredAttributes(requiredAttributeString, ruleBuilder);
                });
            }
        }
示例#3
0
    public static TagHelperDescriptorBuilder TagMatchingRuleDescriptor(
        this TagHelperDescriptorBuilder builder,
        Action <TagMatchingRuleDescriptorBuilder> configure)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }

        builder.TagMatchingRule(configure);

        return(builder);
    }
        private static void ReadTagMatchingRule(JsonReader reader, TagHelperDescriptorBuilder builder)
        {
            if (!reader.Read())
            {
                return;
            }

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

            builder.TagMatchingRule(rule =>
            {
                reader.ReadProperties(propertyName =>
                {
                    switch (propertyName)
                    {
                    case nameof(TagMatchingRuleDescriptor.TagName):
                        if (reader.Read())
                        {
                            var tagName  = (string)reader.Value;
                            rule.TagName = tagName;
                        }
                        break;

                    case nameof(TagMatchingRuleDescriptor.ParentTag):
                        if (reader.Read())
                        {
                            var parentTag  = (string)reader.Value;
                            rule.ParentTag = parentTag;
                        }
                        break;

                    case nameof(TagMatchingRuleDescriptor.TagStructure):
                        rule.TagStructure = (TagStructure)reader.ReadAsInt32();
                        break;

                    case nameof(TagMatchingRuleDescriptor.Attributes):
                        ReadRequiredAttributeValues(reader, rule);
                        break;

                    case nameof(TagMatchingRuleDescriptor.Diagnostics):
                        ReadDiagnostics(reader, rule.Diagnostics);
                        break;
                    }
                });
            });
        }
示例#5
0
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType != JsonToken.StartObject)
        {
            return(null);
        }
        JObject jObject       = JObject.Load(reader);
        string  kind          = jObject["Kind"].Value <string>();
        string  name          = jObject["Name"].Value <string>();
        string  assemblyName  = jObject["AssemblyName"].Value <string>();
        JArray  jArray        = jObject["TagMatchingRules"].Value <JArray>();
        JArray  jArray2       = jObject["BoundAttributes"].Value <JArray>();
        JArray  jArray3       = jObject["AllowedChildTags"].Value <JArray>();
        string  documentation = jObject["Documentation"].Value <string>();
        string  tagOutputHint = jObject["TagOutputHint"].Value <string>();
        bool    caseSensitive = jObject["CaseSensitive"].Value <bool>();
        JArray  jArray4       = jObject["Diagnostics"].Value <JArray>();
        JObject jObject2      = jObject["Metadata"].Value <JObject>();
        TagHelperDescriptorBuilder tagHelperDescriptorBuilder = TagHelperDescriptorBuilder.Create(kind, name, assemblyName);

        tagHelperDescriptorBuilder.Documentation = documentation;
        tagHelperDescriptorBuilder.TagOutputHint = tagOutputHint;
        tagHelperDescriptorBuilder.CaseSensitive = caseSensitive;
        foreach (JToken item2 in jArray)
        {
            JObject rule = item2.Value <JObject>();
            tagHelperDescriptorBuilder.TagMatchingRule(delegate(TagMatchingRuleDescriptorBuilder b)
            {
                ReadTagMatchingRule(b, rule, serializer);
            });
        }
        foreach (JToken item3 in jArray2)
        {
            JObject attribute = item3.Value <JObject>();
            tagHelperDescriptorBuilder.BindAttribute(delegate(BoundAttributeDescriptorBuilder b)
            {
                ReadBoundAttribute(b, attribute, serializer);
            });
        }
        foreach (JToken item4 in jArray3)
        {
            JObject tag = item4.Value <JObject>();
            tagHelperDescriptorBuilder.AllowChildTag(delegate(AllowedChildTagDescriptorBuilder childTagBuilder)
            {
                ReadAllowedChildTag(childTagBuilder, tag, serializer);
            });
        }
        foreach (JToken item5 in jArray4)
        {
            JsonReader      reader2 = item5.CreateReader();
            RazorDiagnostic item    = serializer.Deserialize <RazorDiagnostic>(reader2);
            tagHelperDescriptorBuilder.Diagnostics.Add(item);
        }
        JsonReader reader3 = jObject2.CreateReader();

        foreach (KeyValuePair <string, string> item6 in serializer.Deserialize <Dictionary <string, string> >(reader3))
        {
            tagHelperDescriptorBuilder.Metadata[item6.Key] = item6.Value;
        }
        return(tagHelperDescriptorBuilder.Build());
    }