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); }
private bool EnsureNotAtEnd(RequiredAttributeDescriptorBuilder builder) { if (AtEnd) { var diagnostic = RazorDiagnosticFactory.CreateTagHelper_CouldNotFindMatchingEndBrace(_requiredAttributes); builder.Diagnostics.Add(diagnostic); return(false); } return(true); }