IsSelfClosing() public method

Determines if given element is self-closing (i.e. does not allow content)
public IsSelfClosing ( ITextProvider text, ITextRange nameRange ) : bool
text ITextProvider Text provider
nameRange ITextRange Element name
return bool
Ejemplo n.º 1
0
        /// <summary>
        /// Determines if element is a self-closing element (i.e. like &lt;br /&gt;
        /// </summary>
        /// <param name="textProvider">Text provider</param>
        /// <param name="prefixRange">Text range of the element prefix</param>
        /// <param name="nameRange">Text range of the element name</param>
        /// <returns>True if element is a self-closing element.</returns>
        public bool IsSelfClosing(ITextProvider textProvider, ITextRange prefixRange, ITextRange nameRange)
        {
            if (nameRange.Length == 0)
            {
                return(false);
            }

            string name = textProvider.GetText(nameRange);

            if (name[0] == '!')
            {
                return(true); // bang tags are always self-closing
            }
            if (prefixRange.Length == 0)
            {
                return(_defaultProvider.IsSelfClosing(textProvider, nameRange));
            }

            string prefix = textProvider.GetText(prefixRange);

            IHtmlClosureProvider provider;;

            _providers.TryGetValue(prefix, out provider);

            var textRangeProvider = provider as IHtmlClosureProviderTextRange;

            if (textRangeProvider != null)
            {
                return(textRangeProvider.IsSelfClosing(textProvider, nameRange));
            }

            if (provider != null)
            {
                return(provider.IsSelfClosing(name));
            }

            return(false);
        }
Ejemplo n.º 2
0
        public void IsSelfClosingTest() {
            string[] selfClosingElements = new string[]{
                "area",
                "base",
                "basefont",
                "br",
                "col",
                "command",
                "embed",
                "hr",
                "img",
                "input",
                "isindex",
                "link",
                "meta",
                "param",
                "source",
                "track",
                "wbr",
            };

            string[] notSelfClosingElements = new string[]{
               "html",
                "123",
                " ",
                "!",
                "абвгд",
             };


            var target = new DefaultHtmlClosureProvider();
            bool actual;

            foreach (string s in selfClosingElements) {
                actual = target.IsSelfClosing(new TextStream(s), TextRange.FromBounds(0, s.Length));
                Assert.True(actual);
            }

            foreach (string s in notSelfClosingElements) {
                actual = target.IsSelfClosing(new TextStream(s), TextRange.FromBounds(0, s.Length));
                Assert.False(actual);
            }
        }