Ejemplo n.º 1
0
        private void EnsureSize(IArrayPool <char> bufferPool, int appendLength)
        {
            char[] chArray = BufferUtils.RentBuffer(bufferPool, (this._position + appendLength) * 2);
            if (this._buffer != null)
            {
                Array.Copy((Array)this._buffer, (Array)chArray, this._position);
                BufferUtils.ReturnBuffer(bufferPool, this._buffer);
            }

            this._buffer = chArray;
        }
Ejemplo n.º 2
0
        public static void WriteEscapedJavaScriptString(
            TextWriter writer,
            string s,
            char delimiter,
            bool appendDelimiters,
            bool[] charEscapeFlags,
            StringEscapeHandling stringEscapeHandling,
            IArrayPool <char> bufferPool,
            ref char[] writeBuffer)
        {
            if (appendDelimiters)
            {
                writer.Write(delimiter);
            }
            if (!string.IsNullOrEmpty(s))
            {
                int num1 = JavaScriptUtils.FirstCharToEscape(s, charEscapeFlags, stringEscapeHandling);
                switch (num1)
                {
                case -1:
                    writer.Write(s);
                    break;

                case 0:
                    for (int index = num1; index < s.Length; ++index)
                    {
                        char c = s[index];
                        if ((int)c >= charEscapeFlags.Length || charEscapeFlags[(int)c])
                        {
                            string a;
                            switch (c)
                            {
                            case '\b':
                                a = "\\b";
                                break;

                            case '\t':
                                a = "\\t";
                                break;

                            case '\n':
                                a = "\\n";
                                break;

                            case '\f':
                                a = "\\f";
                                break;

                            case '\r':
                                a = "\\r";
                                break;

                            case '\\':
                                a = "\\\\";
                                break;

                            case '\x0085':
                                a = "\\u0085";
                                break;

                            case '\x2028':
                                a = "\\u2028";
                                break;

                            case '\x2029':
                                a = "\\u2029";
                                break;

                            default:
                                if ((int)c < charEscapeFlags.Length ||
                                    stringEscapeHandling == StringEscapeHandling.EscapeNonAscii)
                                {
                                    if (c == '\'' && stringEscapeHandling != StringEscapeHandling.EscapeHtml)
                                    {
                                        a = "\\'";
                                        break;
                                    }

                                    if (c == '"' && stringEscapeHandling != StringEscapeHandling.EscapeHtml)
                                    {
                                        a = "\\\"";
                                        break;
                                    }

                                    if (writeBuffer == null || writeBuffer.Length < 6)
                                    {
                                        writeBuffer = BufferUtils.EnsureBufferSize(bufferPool, 6, writeBuffer);
                                    }
                                    StringUtils.ToCharAsUnicode(c, writeBuffer);
                                    a = "!";
                                    break;
                                }

                                a = (string)null;
                                break;
                            }

                            if (a != null)
                            {
                                bool flag = string.Equals(a, "!");
                                if (index > num1)
                                {
                                    int minSize = index - num1 + (flag ? 6 : 0);
                                    int num2    = flag ? 6 : 0;
                                    if (writeBuffer == null || writeBuffer.Length < minSize)
                                    {
                                        char[] chArray = BufferUtils.RentBuffer(bufferPool, minSize);
                                        if (flag)
                                        {
                                            Array.Copy((Array)writeBuffer, (Array)chArray, 6);
                                        }
                                        BufferUtils.ReturnBuffer(bufferPool, writeBuffer);
                                        writeBuffer = chArray;
                                    }

                                    s.CopyTo(num1, writeBuffer, num2, minSize - num2);
                                    writer.Write(writeBuffer, num2, minSize - num2);
                                }

                                num1 = index + 1;
                                if (!flag)
                                {
                                    writer.Write(a);
                                }
                                else
                                {
                                    writer.Write(writeBuffer, 0, 6);
                                }
                            }
                        }
                    }

                    int num3 = s.Length - num1;
                    if (num3 > 0)
                    {
                        if (writeBuffer == null || writeBuffer.Length < num3)
                        {
                            writeBuffer = BufferUtils.EnsureBufferSize(bufferPool, num3, writeBuffer);
                        }
                        s.CopyTo(num1, writeBuffer, 0, num3);
                        writer.Write(writeBuffer, 0, num3);
                        break;
                    }

                    break;

                default:
                    if (writeBuffer == null || writeBuffer.Length < num1)
                    {
                        writeBuffer = BufferUtils.EnsureBufferSize(bufferPool, num1, writeBuffer);
                    }
                    s.CopyTo(0, writeBuffer, 0, num1);
                    writer.Write(writeBuffer, 0, num1);
                    goto case 0;
                }
            }

            if (!appendDelimiters)
            {
                return;
            }
            writer.Write(delimiter);
        }
Ejemplo n.º 3
0
 public StringBuffer(IArrayPool <char> bufferPool, int initalSize)
 {
     this = new StringBuffer(BufferUtils.RentBuffer(bufferPool, initalSize));
 }