Example #1
0
        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.");
            }
        }
Example #2
0
        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);
        }