コード例 #1
0
        private bool TryParseCssSelector(RequiredAttributeDescriptorBuilder attributeBuilder)
        {
            Debug.Assert(At('['));

            // Move past '['.
            _index++;
            PassOptionalWhitespace();

            ParseCssAttributeName(attributeBuilder);

            PassOptionalWhitespace();

            if (!EnsureNotAtEnd(attributeBuilder))
            {
                return(false);
            }

            if (!TryParseCssValueComparison(attributeBuilder, out RequiredAttributeDescriptor.ValueComparisonMode valueComparison))
            {
                return(false);
            }

            PassOptionalWhitespace();

            if (!EnsureNotAtEnd(attributeBuilder))
            {
                return(false);
            }

            if (valueComparison != RequiredAttributeDescriptor.ValueComparisonMode.None && !TryParseCssValue(attributeBuilder))
            {
                return(false);
            }

            PassOptionalWhitespace();

            if (At(']'))
            {
                // Move past the ending bracket.
                _index++;
                return(true);
            }
            else if (AtEnd)
            {
                var diagnostic = RazorDiagnosticFactory.CreateTagHelper_CouldNotFindMatchingEndBrace(_requiredAttributes);
                attributeBuilder.Diagnostics.Add(diagnostic);
            }
            else
            {
                var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidRequiredAttributeCharacter(Current, _requiredAttributes);
                attributeBuilder.Diagnostics.Add(diagnostic);
            }

            return(false);
        }
コード例 #2
0
        private bool EnsureNotAtEnd(RequiredAttributeDescriptorBuilder builder)
        {
            if (AtEnd)
            {
                var diagnostic = RazorDiagnosticFactory.CreateTagHelper_CouldNotFindMatchingEndBrace(_requiredAttributes);
                builder.Diagnostics.Add(diagnostic);

                return(false);
            }

            return(true);
        }