Example #1
0
        public void HtmlTokenizer_GetNameToken_BasicTest() {
            var cs = new HtmlCharStream("foo");
            HtmlTokenizer target = new HtmlTokenizer(cs);
            NameToken actual = target.GetNameToken();

            Assert.Equal(3, actual.Length);
            Assert.Equal(0, actual.Start);
            Assert.Equal(3, actual.End);

            Assert.Equal(3, actual.NameRange.Length);
            Assert.Equal(0, actual.NameRange.Start);
            Assert.Equal(3, actual.NameRange.End);

            Assert.Equal(0, actual.PrefixRange.Start);
            Assert.Equal(0, actual.PrefixRange.End);
        }
Example #2
0
        public void HtmlTokenizer_GetNameToken_MissingNameTest() {
            var cs = new HtmlCharStream("foo:");
            HtmlTokenizer target = new HtmlTokenizer(cs);
            NameToken actual = target.GetNameToken();

            Assert.Equal(4, actual.Length);
            Assert.Equal(0, actual.Start);
            Assert.Equal(4, actual.End);

            Assert.True(actual.HasPrefix());
            Assert.Equal(0, actual.PrefixRange.Start);
            Assert.Equal(3, actual.PrefixRange.End);

            Assert.False(actual.HasName());
            Assert.Equal(0, actual.NameRange.Length);

            Assert.False(actual.HasQualifiedName());
            Assert.Equal(0, actual.QualifiedName.Start);
            Assert.Equal(4, actual.QualifiedName.End);
        }
Example #3
0
        public void HtmlTokenizer_SkipWhitespaceTest() {
            var cs = new HtmlCharStream("   abc\t\tdef\r\n gh");
            HtmlTokenizer target = new HtmlTokenizer(cs);
            target.SkipWhitespace();
            Assert.Equal(3, cs.Position);

            target.SkipWhitespace();
            Assert.Equal(3, cs.Position);

            cs.Advance(3);
            target.SkipWhitespace();
            Assert.Equal(8, cs.Position);

            cs.Advance(3);
            target.SkipWhitespace();
            Assert.Equal(14, cs.Position);
        }
Example #4
0
        /// <summary>
        /// Parse text from a text provider within a given range
        /// </summary>
        /// <param name="textProvider">Text provider</param>
        /// <param name="range">Range to parse</param>
        public void Parse(ITextProvider textProvider, ITextRange range) {
            DateTime? timeStart = null;

            if (Stats.Enabled)
                timeStart = DateTime.UtcNow;

            if (ParsingStarting != null)
                ParsingStarting(this, new HtmlParserRangeEventArgs(range));

            DocType = DocType.Undefined;

            _cs = new HtmlCharStream(textProvider, range);
            _tokenizer = new HtmlTokenizer(_cs);
            _softRangeEnd = range.End;

            OnTextState();

            if (ParsingComplete != null)
                ParsingComplete(this, new HtmlParserRangeEventArgs(range));

            if (Stats.Enabled) {
                Stats.ParseTime = (DateTime.UtcNow - timeStart.Value);
                Stats.CharactersPerSecond = (int)(1000.0 * (double)_cs.Length / (double)Stats.ParseTime.TotalMilliseconds + 0.5);
            }
        }