コード例 #1
0
ファイル: CssToken.cs プロジェクト: tinytian/Schubert
        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));
        }
コード例 #2
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));
        }