/// <summary>
        /// Gets a quotation mark for attribute value
        /// </summary>
        /// <param name="attributeValue">Attribute value</param>
        /// <returns>Quotation mark</returns>
        private static string GetQuoteForAttributeValue(string attributeValue)
        {
            if (HtmlAttributeValueHelpers.IsNotRequireQuotesInHtml5(attributeValue))
            {
                return(string.Empty);
            }

            return("\"");
        }
Example #2
0
        /// <summary>
        /// Process a attributes
        /// </summary>
        /// <returns>List of attributes</returns>
        private List <HtmlAttribute> ProcessAttributes()
        {
            string content         = _innerContext.SourceCode;
            int    currentPosition = _innerContext.Position;
            SourceCodeNodeCoordinates currentCoordinates = _innerContext.NodeCoordinates;

            Match match = _attributeRegex.Match(content, currentPosition, _innerContext.RemainderLength);

            while (match.Success)
            {
                GroupCollection groups                  = match.Groups;
                Group           attributeNameGroup      = groups["attributeName"];
                Group           attributeEqualSignGroup = groups["attributeEqualSign"];
                Group           attributeValueGroup     = groups["attributeValue"];

                string attributeName            = attributeNameGroup.Value;
                string attributeNameInLowercase = attributeName;
                if (Utils.ContainsUppercaseCharacters(attributeName))
                {
                    attributeNameInLowercase = attributeName.ToLowerInvariant();
                }
                string attributeValue = null;

                if (attributeEqualSignGroup.Success)
                {
                    if (attributeValueGroup.Success)
                    {
                        attributeValue = attributeValueGroup.Value;
                        if (!string.IsNullOrWhiteSpace(attributeValue))
                        {
                            attributeValue = HtmlAttributeValueHelpers.Decode(attributeValue);
                        }
                    }
                    else
                    {
                        attributeValue = string.Empty;
                    }
                }

                var attributeNameCoordinates = SourceCodeNodeCoordinates.Empty;
                int attributeNamePosition    = -1;
                if (attributeNameGroup.Success)
                {
                    attributeNamePosition = attributeNameGroup.Index;
                }

                if (attributeNamePosition != -1)
                {
                    int lineBreakCount;
                    int charRemainderCount;

                    SourceCodeNavigator.CalculateLineBreakCount(content, currentPosition,
                                                                attributeNamePosition - currentPosition, out lineBreakCount, out charRemainderCount);
                    attributeNameCoordinates = SourceCodeNavigator.CalculateAbsoluteNodeCoordinates(
                        currentCoordinates, lineBreakCount, charRemainderCount);

                    currentPosition    = attributeNamePosition;
                    currentCoordinates = attributeNameCoordinates;
                }

                var attributeValueCoordinates = SourceCodeNodeCoordinates.Empty;
                int attributeValuePosition    = -1;
                if (attributeValueGroup.Success)
                {
                    attributeValuePosition = attributeValueGroup.Index;
                }

                if (attributeValuePosition != -1)
                {
                    int lineBreakCount;
                    int charRemainderCount;

                    SourceCodeNavigator.CalculateLineBreakCount(content, currentPosition,
                                                                attributeValuePosition - currentPosition, out lineBreakCount, out charRemainderCount);
                    attributeValueCoordinates = SourceCodeNavigator.CalculateAbsoluteNodeCoordinates(
                        currentCoordinates, lineBreakCount, charRemainderCount);

                    currentPosition    = attributeValuePosition;
                    currentCoordinates = attributeValueCoordinates;
                }

                var attribute = new HtmlAttribute(attributeName, attributeNameInLowercase, attributeValue,
                                                  HtmlAttributeType.Unknown, attributeNameCoordinates, attributeValueCoordinates);
                _tempAttributes.Add(attribute);

                _innerContext.IncreasePosition(match.Length);
                match = _attributeRegex.Match(content, _innerContext.Position, _innerContext.RemainderLength);
            }

            int attributeCount = _tempAttributes.Count;
            var attributes     = new List <HtmlAttribute>(attributeCount);

            for (int attributeIndex = 0; attributeIndex < attributeCount; attributeIndex++)
            {
                attributes.Add(_tempAttributes[attributeIndex]);
            }

            _tempAttributes.Clear();

            return(attributes);
        }