public AttributeLiteralToken With(string unescapedValue = null, AttributeLiteralKind?literalKind = null) { unescapedValue = unescapedValue ?? UnescapedValue; if ((literalKind == null || literalKind != LiteralKind) && unescapedValue == UnescapedValue) { return(this); } switch (literalKind ?? LiteralKind) { case AttributeLiteralKind.DoubleQuoted: case AttributeLiteralKind.Invalid: return(new AttributeLiteralToken( LeadingTrivia, string.Format("\"{0}\"", UxTextEncoding.EncodeAttribute(unescapedValue, '"')), TrailingTrivia, AttributeLiteralKind.DoubleQuoted, unescapedValue)); case AttributeLiteralKind.SingleQuoted: return(new AttributeLiteralToken( LeadingTrivia, string.Format("'{0}'", UxTextEncoding.EncodeAttribute(unescapedValue, '\'')), TrailingTrivia, AttributeLiteralKind.SingleQuoted, unescapedValue)); case AttributeLiteralKind.Unquoted: if (SyntaxParser.IsValidUnquotedAttributeValue(unescapedValue)) { return(new AttributeLiteralToken( LeadingTrivia, unescapedValue, TrailingTrivia, AttributeLiteralKind.Unquoted, unescapedValue)); } return(new AttributeLiteralToken( LeadingTrivia, UxTextEncoding.EncodeAttribute(unescapedValue, '"'), TrailingTrivia, AttributeLiteralKind.DoubleQuoted, unescapedValue)); default: throw new NotSupportedException("Attribute kind is unknown, don't know how to handle."); } }
static AttributeLiteralKind GetLiteralKind(string escapedValue) { var len = escapedValue.Length; if (len > 1) { var quote = escapedValue[0]; if (quote == '\"' || quote == '\'') { // Should find _one_ quote of same type at end of string if (escapedValue.IndexOf(quote, 1) != len - 1) { return(AttributeLiteralKind.Invalid); } return(quote == '\'' ? AttributeLiteralKind.SingleQuoted : AttributeLiteralKind.DoubleQuoted); } } return(SyntaxParser.IsValidUnquotedAttributeValue(escapedValue) ? AttributeLiteralKind.Unquoted : AttributeLiteralKind.Invalid); }