예제 #1
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);
            }
        }
예제 #2
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);
            }
        }
예제 #3
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);
            }
        }
예제 #4
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));
        }
예제 #5
0
        protected internal void WriteTo(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)
                    {
                        sink.Write(buffer, num2, runEntry.Length);
                    }
                    else if (runEntry.Type == (RunType)3221225472u)
                    {
                        sink.Write(runEntry.Value);
                    }
                    num2 += runEntry.Length;
                }while (++num != fragment.tail && !sink.IsEnough);
            }
        }
예제 #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
        // 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));
        }
예제 #8
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);
            }
        }
 // 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);
 }