示例#1
0
 internal void AttributeReader_WriteCurrentAttributeValueTo(ITextSink sink)
 {
     if (this.state != HtmlReader.State.BeginAttributeValue)
     {
         this.AssertInAttribute();
         if (this.state > HtmlReader.State.BeginAttributeValue)
         {
             throw new InvalidOperationException("Reader must be positioned before attribute value");
         }
         if (!this.SkipToAttributeValue())
         {
             this.state = HtmlReader.State.EndAttribute;
             return;
         }
     }
     for (;;)
     {
         this.parserToken.Attributes[this.currentAttribute].Value.WriteTo(sink);
         if (this.parserToken.Attributes[this.currentAttribute].IsAttrEnd)
         {
             break;
         }
         this.ParseToken();
         this.currentAttribute = 0;
     }
     this.state = HtmlReader.State.EndAttribute;
 }
示例#2
0
        // Token: 0x06001245 RID: 4677 RVA: 0x000833E4 File Offset: 0x000815E4
        protected internal void WriteEscapedOriginalTo(ref Token.Fragment fragment, ITextSink sink)
        {
            int num = fragment.Head;

            if (num != fragment.Tail)
            {
                int num2 = fragment.HeadOffset;
                do
                {
                    Token.RunEntry runEntry = this.RunList[num];
                    if (runEntry.Type == (RunType)2147483648U || runEntry.Type == (RunType)3221225472U)
                    {
                        if (runEntry.Kind == 184549376U && this.Buffer[num2] == '/')
                        {
                            string text = "/**/";
                            for (int i = 0; i < text.Length; i++)
                            {
                                sink.Write((int)text[i]);
                            }
                        }
                        else
                        {
                            this.EscapeAndWriteBuffer(this.Buffer, num2, runEntry.Length, sink);
                        }
                    }
                    num2 += runEntry.Length;
                }while (++num != fragment.Tail && !sink.IsEnough);
            }
        }
示例#3
0
        protected internal void WriteTo(LexicalUnit unit, ITextSink sink)
        {
            int run = unit.head;

            if (run != -1)
            {
                int runOffset = unit.headOffset;

                RunEntry runEntry = this.runList[run];
                uint     kind     = runEntry.MajorKind;

                do
                {
                    if (runEntry.Type == RunType.Normal)
                    {
                        sink.Write(this.buffer, runOffset, runEntry.Length);
                    }
                    else if (runEntry.Type == RunType.Literal)
                    {
                        sink.Write(runEntry.Value);
                    }

                    runOffset += runEntry.Length;

                    runEntry = this.runList[++run];
                }while (runEntry.MajorKindPlusStartFlag == kind && !sink.IsEnough);
            }
        }
示例#4
0
        protected internal void WriteTo(ref Fragment fragment, ITextSink sink)
        {
            int run = fragment.head;

            if (run != fragment.tail)
            {
                int runOffset = fragment.headOffset;

                do
                {
                    RunEntry runEntry = this.runList[run];

                    if (runEntry.Type == RunType.Normal)
                    {
                        sink.Write(this.buffer, runOffset, runEntry.Length);
                    }
                    else if (runEntry.Type == RunType.Literal)
                    {
                        sink.Write(runEntry.Value);
                    }

                    runOffset += runEntry.Length;
                }while (++run != fragment.tail && !sink.IsEnough);
            }
        }
示例#5
0
        internal void WriteMarkupTextTo(ITextSink sink)
        {
            if (this.state == HtmlReader.State.BeginTag)
            {
                this.state = HtmlReader.State.ReadTag;
            }
            else if (this.state != HtmlReader.State.SpecialTag && this.state != HtmlReader.State.ReadTag && this.state != HtmlReader.State.Text)
            {
                this.AssertInToken();
                if (this.state > HtmlReader.State.BeginTag)
                {
                    throw new InvalidOperationException("Cannot read tag content as markup text after accessing tag name or attributes");
                }
                throw new InvalidOperationException("Reader must be positioned on Text, StartTag, EndTag, EmptyElementTag or SpecialTag token");
            }
            for (;;)
            {
                this.parserToken.Text.WriteOriginalTo(sink);
                if (this.state == HtmlReader.State.SpecialTag)
                {
                    if (this.parserToken.IsTagEnd)
                    {
                        break;
                    }
                }
                else if (this.state == HtmlReader.State.ReadTag)
                {
                    if (this.parserToken.IsTagEnd)
                    {
                        goto Block_9;
                    }
                }
                else
                {
                    HtmlTokenId htmlTokenId = this.PreviewNextToken();
                    if (htmlTokenId != HtmlTokenId.Text && (!this.literalTags || htmlTokenId != HtmlTokenId.Tag || this.nextParserToken.TagIndex >= HtmlTagIndex.Unknown))
                    {
                        goto IL_CD;
                    }
                }
                this.ParseToken();
            }
            this.state = HtmlReader.State.EndSpecialTag;
            return;

Block_9:
            this.state = HtmlReader.State.EndTag;
            return;

IL_CD:
            this.state = HtmlReader.State.EndText;
        }
示例#6
0
        private int WriteTo(ITextSink sink)
        {
            int num = 0;

            while (this.charBufferCount != 0 || this.DecodeMore())
            {
                sink.Write(this.charBuffer, this.charBufferOffet, this.charBufferCount);
                this.charBufferOffet = 0;
                this.charBufferCount = 0;
                num += this.charBufferCount;
            }
            return(num);
        }
示例#7
0
        private void EscapeAndWriteBuffer(
            char[] buffer,
            int offset,
            int length,
            ITextSink sink)
        {
            int lastIdx = offset;

            for (int idx = offset; idx < offset + length;)
            {
                char ch = buffer[idx];



                if (ch == '>' || ch == '<')
                {
                    if (idx - lastIdx > 0)
                    {
                        sink.Write(buffer, lastIdx, idx - lastIdx);
                    }



                    uint   value = (uint)ch;
                    char[] escapeSequenceBuffer = new char[4];
                    escapeSequenceBuffer[0] = '\\';
                    escapeSequenceBuffer[3] = ' ';
                    for (int i = 2; i > 0; --i)
                    {
                        uint digit = value & 0xF;
                        escapeSequenceBuffer[i] = (char)(digit + (digit < 10 ? '0' : 'A' - 10));
                        value >>= 4;
                    }
                    sink.Write(escapeSequenceBuffer, 0, 4);

                    lastIdx = ++idx;
                }
                else
                {
                    CssToken.AttemptUnescape(buffer, offset + length, ref ch, ref idx);
                    ++idx;
                }
            }


            sink.Write(buffer, lastIdx, length - (lastIdx - offset));
        }
示例#8
0
 internal void WriteTagNameTo(ITextSink sink)
 {
     if (this.state != HtmlReader.State.BeginTag)
     {
         this.AssertInTag();
         throw new InvalidOperationException("Reader must be positioned at the beginning of a StartTag, EndTag or EmptyElementTag token");
     }
     for (;;)
     {
         this.parserToken.Name.WriteTo(sink);
         if (this.parserToken.IsTagNameEnd)
         {
             break;
         }
         this.ParseToken();
     }
     this.state = HtmlReader.State.EndTagName;
 }
示例#9
0
        protected internal void WriteOriginalTo(ref Fragment fragment, ITextSink sink)
        {
            int num = fragment.head;

            if (num != fragment.tail)
            {
                int num2 = fragment.headOffset;
                do
                {
                    RunEntry runEntry = runList[num];
                    if (runEntry.Type == (RunType)2147483648u || runEntry.Type == (RunType)3221225472u)
                    {
                        sink.Write(buffer, num2, runEntry.Length);
                    }
                    num2 += runEntry.Length;
                }while (++num != fragment.tail && !sink.IsEnough);
            }
        }
示例#10
0
 internal void AttributeReader_WriteCurrentAttributeNameTo(ITextSink sink)
 {
     if (this.state != HtmlReader.State.BeginAttribute)
     {
         this.AssertInAttribute();
         throw new InvalidOperationException("Reader must be positioned at the beginning of attribute.");
     }
     for (;;)
     {
         this.parserToken.Attributes[this.currentAttribute].Name.WriteTo(sink);
         if (this.parserToken.Attributes[this.currentAttribute].IsAttrNameEnd)
         {
             break;
         }
         this.ParseToken();
         this.currentAttribute = 0;
     }
     this.state = HtmlReader.State.EndAttributeName;
 }
示例#11
0
 internal void WriteTextTo(ITextSink sink)
 {
     if (this.state != HtmlReader.State.Text)
     {
         this.AssertInToken();
         throw new InvalidOperationException("Reader must be positioned on a Text token");
     }
     for (;;)
     {
         this.parserToken.Text.WriteTo(sink);
         HtmlTokenId htmlTokenId = this.PreviewNextToken();
         if (htmlTokenId != HtmlTokenId.Text && (!this.literalTags || htmlTokenId != HtmlTokenId.Tag || this.nextParserToken.TagIndex >= HtmlTagIndex.Unknown))
         {
             break;
         }
         this.ParseToken();
     }
     this.state = HtmlReader.State.EndText;
 }
示例#12
0
        // Token: 0x06001246 RID: 4678 RVA: 0x000834B8 File Offset: 0x000816B8
        private void EscapeAndWriteBuffer(char[] buffer, int offset, int length, ITextSink sink)
        {
            int num = offset;
            int i   = offset;

            while (i < offset + length)
            {
                char c = buffer[i];
                if (c == '>' || c == '<')
                {
                    if (i - num > 0)
                    {
                        sink.Write(buffer, num, i - num);
                    }
                    uint   num2  = (uint)c;
                    char[] array = new char[]
                    {
                        '\\',
                        '\0',
                        '\0',
                        ' '
                    };
                    for (int j = 2; j > 0; j--)
                    {
                        uint num3 = num2 & 15U;
                        array[j] = (char)((ulong)num3 + (ulong)((num3 < 10U) ? 48L : 55L));
                        num2   >>= 4;
                    }
                    sink.Write(array, 0, 4);
                    i = (num = i + 1);
                }
                else
                {
                    CssToken.AttemptUnescape(buffer, offset + length, ref c, ref i);
                    i++;
                }
            }
            sink.Write(buffer, num, length - (num - offset));
        }
示例#13
0
        protected internal void WriteTo(LexicalUnit unit, ITextSink sink)
        {
            int num = unit.head;

            if (num != -1)
            {
                int      num2      = unit.headOffset;
                RunEntry runEntry  = runList[num];
                uint     majorKind = runEntry.MajorKind;
                do
                {
                    if (runEntry.Type == (RunType)2147483648u)
                    {
                        sink.Write(buffer, num2, runEntry.Length);
                    }
                    else if (runEntry.Type == (RunType)3221225472u)
                    {
                        sink.Write(runEntry.Value);
                    }
                    num2    += runEntry.Length;
                    runEntry = runList[++num];
                }while (runEntry.MajorKindPlusStartFlag == majorKind && !sink.IsEnough);
            }
        }
示例#14
0
        protected internal void WriteEscapedOriginalTo(ref Fragment fragment, ITextSink sink)
        {
            int run = fragment.head;

            if (run != fragment.tail)
            {
                int runOffset = fragment.headOffset;
                do
                {
                    RunEntry runEntry = this.runList[run];

                    if (runEntry.Type == RunType.Normal || runEntry.Type == RunType.Literal)
                    {
                        this.EscapeAndWriteBuffer(
                            this.buffer,
                            runOffset,
                            runEntry.Length,
                            sink);
                    }

                    runOffset += runEntry.Length;
                }while (++run != fragment.tail && !sink.IsEnough);
            }
        }
示例#15
0
 public void WriteTo(ITextSink sink)
 {
     this.token.WriteTo(this.token.attributeList[this.token.currentAttribute].value, sink);
 }
示例#16
0
 public void WriteTo(ITextSink sink)
 {
     this.token.WriteTo(this.token.name, sink);
 }
示例#17
0
 public void WriteTo(ITextSink sink)
 {
     this.token.WriteTo(this.token.unstructured, sink);
 }
示例#18
0
 // Token: 0x0600157B RID: 5499 RVA: 0x000A618E File Offset: 0x000A438E
 public void WriteTo(ITextSink sink)
 {
     this.token.WriteTo(this.token.AttributeList[this.token.CurrentAttribute].Name, sink);
 }
示例#19
0
 // Token: 0x06001573 RID: 5491 RVA: 0x000A6090 File Offset: 0x000A4290
 public void WriteTo(ITextSink sink)
 {
     this.token.WriteTo(this.token.NameInternal, sink);
 }
 // Token: 0x060016AA RID: 5802 RVA: 0x000B21C8 File Offset: 0x000B03C8
 internal void WriteValueTo(ITextSink sink)
 {
     this.reader.AttributeReader_WriteCurrentAttributeValueTo(sink);
 }
示例#21
0
 // Token: 0x06001282 RID: 4738 RVA: 0x000840E2 File Offset: 0x000822E2
 public void WriteTo(ITextSink sink)
 {
     this.token.WriteTo(ref this.token.SelectorList[this.token.CurrentSelector].ClassName, sink);
 }
 // Token: 0x0600193F RID: 6463 RVA: 0x000C89DE File Offset: 0x000C6BDE
 public void WriteTo(ITextSink sink)
 {
     sink.Write(this.token.CharBuffer, this.token.ElementOffset, this.token.ElementLength);
 }
示例#23
0
 // Token: 0x06001263 RID: 4707 RVA: 0x00083B20 File Offset: 0x00081D20
 public void WriteOriginalTo(ITextSink sink)
 {
     this.token.WriteOriginalTo(ref this.token.PropertyList[this.token.CurrentProperty].Value, sink);
 }
示例#24
0
 public void WriteOriginalTo(ITextSink sink)
 {
     this.token.WriteEscapedOriginalTo(ref this.token.selectorList[this.token.currentSelector].className, sink);
 }
示例#25
0
 public void WriteEscapedOriginalTo(ITextSink sink)
 {
     this.token.WriteEscapedOriginalTo(ref this.token.propertyList[this.token.currentProperty].value, sink);
 }
示例#26
0
 public void WriteOriginalTo(ITextSink sink)
 {
     this.token.WriteOriginalTo(ref this.token.propertyList[this.token.currentProperty].name, sink);
 }
示例#27
0
 // Token: 0x06001256 RID: 4694 RVA: 0x000838B2 File Offset: 0x00081AB2
 public void WriteTo(ITextSink sink)
 {
     this.token.WriteTo(ref this.token.PropertyList[this.token.CurrentProperty].Name, sink);
 }
示例#28
0
 // Token: 0x0600127A RID: 4730 RVA: 0x00083FA4 File Offset: 0x000821A4
 public void WriteOriginalTo(ITextSink sink)
 {
     this.token.WriteOriginalTo(ref this.token.SelectorList[this.token.CurrentSelector].Name, sink);
 }
示例#29
0
 public void WriteTo(ITextSink sink)
 {
     token.WriteTo(ref token.whole, sink);
 }
示例#30
0
 public int WriteTo(ITextSink sink)
 {
     return(this.token.WriteTo(sink));
 }