Exemplo n.º 1
0
        internal override IProducerConsumer CreatePullChain(Stream input, ConverterReader converterReader)
        {
            if (this.inputEncoding == null)
            {
                throw new InvalidOperationException(Strings.InputEncodingRequired);
            }

            this.outputEncoding = Encoding.Unicode;

            ConverterInput converterIn = new ConverterDecodingInput(
                input,
                false,
                this.inputEncoding,
                this.detectEncodingFromByteOrderMark,
                this.maxHtmlTagSize,
                this.testMaxHtmlRestartOffset,
                this.InputStreamBufferSize,
                this.TestBoundaryConditions,
                this as IResultsFeedback,
                converterReader as IProgressMonitor);

            ConverterOutput converterOut = new ConverterUnicodeOutput(
                converterReader,
                false,
                true);

            return(CreateChain(converterIn, converterOut, converterReader as IProgressMonitor));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Releases the unmanaged resources used by the <see cref="T:System.IO.TextReader"/> and optionally releases the managed resources.
        /// </summary>
        /// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (this.source != null)
                {
                    if (this.source is Stream)
                    {
                        ((Stream)this.source).Close();
                    }
                    else
                    {
                        ((TextReader)this.source).Close();
                    }
                }
            }

            if (this.producer != null && this.producer is IDisposable)
            {
                ((IDisposable)this.producer).Dispose();
            }

            this.source             = null;
            this.producer           = null;
            this.sourceOutputObject = null;
            this.writeBuffer        = null;

            base.Dispose(disposing);
        }
Exemplo n.º 3
0
        internal override IProducerConsumer CreatePushChain(ConverterStream converterStream, TextWriter output)
        {
            if (inputEncoding == null)
            {
                throw new InvalidOperationException(Strings.InputEncodingRequired);
            }

            outputEncoding = Encoding.Unicode;

            ConverterInput converterIn = new ConverterDecodingInput(
                converterStream,
                true,
                inputEncoding,
                detectEncodingFromByteOrderMark,
                maxHtmlTagSize,
                testMaxHtmlRestartOffset,
                InputStreamBufferSize,
                testBoundaryConditions,
                this as IResultsFeedback,
                null);

            ConverterOutput converterOut = new ConverterUnicodeOutput(
                output,
                true,
                true);

            return(CreateChain(converterIn, converterOut, converterStream as IProgressMonitor));
        }
Exemplo n.º 4
0
        internal override IProducerConsumer CreatePullChain(TextReader input, ConverterReader converterReader)
        {
            this.inputEncoding  = Encoding.Unicode;
            this.outputEncoding = Encoding.Unicode;
            ConverterInput  input2 = new ConverterUnicodeInput(input, false, 4096, this.testBoundaryConditions, converterReader);
            ConverterOutput output = new ConverterUnicodeOutput(converterReader, false, false);

            return(this.CreateChain(input2, output, converterReader));
        }
Exemplo n.º 5
0
        internal override IProducerConsumer CreatePushChain(ConverterWriter converterWriter, TextWriter output)
        {
            this.inputEncoding  = Encoding.Unicode;
            this.outputEncoding = Encoding.Unicode;
            ConverterInput  input   = new ConverterUnicodeInput(converterWriter, true, 4096, this.testBoundaryConditions, null);
            ConverterOutput output2 = new ConverterUnicodeOutput(output, true, false);

            return(this.CreateChain(input, output2, converterWriter));
        }
Exemplo n.º 6
0
        internal override IProducerConsumer CreatePullChain(Stream input, ConverterReader converterReader)
        {
            if (this.inputEncoding == null)
            {
                throw new InvalidOperationException(TextConvertersStrings.InputEncodingRequired);
            }
            this.outputEncoding = Encoding.Unicode;
            ConverterInput  input2 = new ConverterDecodingInput(input, false, this.inputEncoding, this.detectEncodingFromByteOrderMark, 4096, 0, base.InputStreamBufferSize, this.testBoundaryConditions, this, converterReader);
            ConverterOutput output = new ConverterUnicodeOutput(converterReader, false, true);

            return(this.CreateChain(input2, output, converterReader));
        }
Exemplo n.º 7
0
        // Token: 0x06000FA7 RID: 4007 RVA: 0x000750E0 File Offset: 0x000732E0
        internal override IProducerConsumer CreatePushChain(ConverterStream converterStream, TextWriter output)
        {
            if (this.inputEncoding == null)
            {
                throw new InvalidOperationException(TextConvertersStrings.InputEncodingRequired);
            }
            this.outputEncoding = Encoding.Unicode;
            ConverterInput  input   = new ConverterDecodingInput(converterStream, true, this.inputEncoding, this.detectEncodingFromByteOrderMark, this.testMaxHtmlTagSize, this.testMaxHtmlRestartOffset, base.InputStreamBufferSize, this.testBoundaryConditions, this, null);
            ConverterOutput output2 = new ConverterUnicodeOutput(output, true, true);

            return(this.CreateChain(input, output2, converterStream));
        }
Exemplo n.º 8
0
        internal override IProducerConsumer CreatePullChain(TextReader input, ConverterReader converterReader)
        {
            this.inputEncoding  = Encoding.Unicode;
            this.outputEncoding = Encoding.Unicode;

            ConverterInput converterIn = new ConverterUnicodeInput(
                input,
                false,
                this.maxHtmlTagSize,
                this.TestBoundaryConditions,
                converterReader as IProgressMonitor);

            ConverterOutput converterOut = new ConverterUnicodeOutput(
                converterReader,
                false,
                false);

            return(CreateChain(converterIn, converterOut, converterReader as IProgressMonitor));
        }
Exemplo n.º 9
0
        internal override IProducerConsumer CreatePushChain(ConverterWriter converterWriter, TextWriter output)
        {
            inputEncoding  = Encoding.Unicode;
            outputEncoding = Encoding.Unicode;

            ConverterInput converterIn = new ConverterUnicodeInput(
                converterWriter,
                true,
                maxHtmlTagSize,
                testBoundaryConditions,
                null);

            ConverterOutput converterOut = new ConverterUnicodeOutput(
                output,
                true,
                false);

            return(CreateChain(converterIn, converterOut, converterWriter as IProgressMonitor));
        }
Exemplo n.º 10
0
        // Token: 0x06000EF7 RID: 3831 RVA: 0x000739B0 File Offset: 0x00071BB0
        internal override IProducerConsumer CreatePullChain(Stream input, ConverterReader converterReader)
        {
            ConverterOutput output = new ConverterUnicodeOutput(converterReader, false, false);

            return(this.CreateChain(input, false, output, converterReader));
        }
Exemplo n.º 11
0
        // Token: 0x06000EF2 RID: 3826 RVA: 0x00073924 File Offset: 0x00071B24
        internal override IProducerConsumer CreatePushChain(ConverterStream converterStream, TextWriter output)
        {
            ConverterOutput output2 = new ConverterUnicodeOutput(output, true, false);

            return(this.CreateChain(converterStream, true, output2, converterStream));
        }
Exemplo n.º 12
0
 internal void SetSource(ConverterUnicodeOutput sourceOutputObject)
 {
     this.sourceOutputObject = sourceOutputObject;
 }
Exemplo n.º 13
0
 /// <summary>
 /// Sets the data source for conversion.
 /// </summary>
 /// <param name="converterUnicodeOutputSource">The data source for conversion.</param>
 internal void SetSource(ConverterUnicodeOutput converterUnicodeOutputSource)
 {
     this.sourceOutputObject = converterUnicodeOutputSource;
 }
        // Token: 0x0600106F RID: 4207 RVA: 0x00078874 File Offset: 0x00076A74
        public override void Write(char[] buffer, int offset, int count, IFallback fallback)
        {
            byte unsafeAsciiMask = 0;

            byte[] unsafeAsciiMap   = (fallback == null) ? null : fallback.GetUnsafeAsciiMap(out unsafeAsciiMask);
            bool   hasUnsafeUnicode = fallback != null && fallback.HasUnsafeUnicode();

            if (this.cache.Length == 0)
            {
                if (!this.canRestart)
                {
                    if (this.pullSink != null)
                    {
                        char[] array;
                        int    num;
                        int    num2;
                        this.pullSink.GetOutputBuffer(out array, out num, out num2);
                        if (num2 != 0)
                        {
                            if (fallback != null)
                            {
                                int num3 = num;
                                while (count != 0 && num2 != 0)
                                {
                                    char c = buffer[offset];
                                    if (ConverterUnicodeOutput.IsUnsafeCharacter(c, unsafeAsciiMap, unsafeAsciiMask, hasUnsafeUnicode, this.isFirstChar, fallback))
                                    {
                                        int num4 = num;
                                        if (!fallback.FallBackChar(c, array, ref num, num + num2))
                                        {
                                            break;
                                        }
                                        num2 -= num - num4;
                                    }
                                    else
                                    {
                                        array[num++] = c;
                                        num2--;
                                    }
                                    this.isFirstChar = false;
                                    count--;
                                    offset++;
                                }
                                this.pullSink.ReportOutput(num - num3);
                            }
                            else
                            {
                                int num5 = Math.Min(num2, count);
                                Buffer.BlockCopy(buffer, offset * 2, array, num * 2, num5 * 2);
                                this.isFirstChar = false;
                                count           -= num5;
                                offset          += num5;
                                this.pullSink.ReportOutput(num5);
                                num  += num5;
                                num2 -= num5;
                            }
                        }
                        while (count != 0)
                        {
                            if (fallback != null)
                            {
                                char[] array2;
                                int    num6;
                                int    num7;
                                this.cache.GetBuffer(16, out array2, out num6, out num7);
                                int num8 = num6;
                                while (count != 0 && num7 != 0)
                                {
                                    char c2 = buffer[offset];
                                    if (ConverterUnicodeOutput.IsUnsafeCharacter(c2, unsafeAsciiMap, unsafeAsciiMask, hasUnsafeUnicode, this.isFirstChar, fallback))
                                    {
                                        int num9 = num6;
                                        if (!fallback.FallBackChar(c2, array2, ref num6, num6 + num7))
                                        {
                                            break;
                                        }
                                        num7 -= num6 - num9;
                                    }
                                    else
                                    {
                                        array2[num6++] = c2;
                                        num7--;
                                    }
                                    this.isFirstChar = false;
                                    count--;
                                    offset++;
                                }
                                this.cache.Commit(num6 - num8);
                            }
                            else
                            {
                                int    size = Math.Min(count, 256);
                                char[] array2;
                                int    num6;
                                int    num7;
                                this.cache.GetBuffer(size, out array2, out num6, out num7);
                                int num10 = Math.Min(num7, count);
                                Buffer.BlockCopy(buffer, offset * 2, array2, num6 * 2, num10 * 2);
                                this.isFirstChar = false;
                                this.cache.Commit(num10);
                                offset += num10;
                                count  -= num10;
                            }
                        }
                        while (num2 != 0)
                        {
                            if (this.cache.Length == 0)
                            {
                                return;
                            }
                            char[] src;
                            int    num11;
                            int    val;
                            this.cache.GetData(out src, out num11, out val);
                            int num12 = Math.Min(val, num2);
                            Buffer.BlockCopy(src, num11 * 2, array, num * 2, num12 * 2);
                            this.cache.ReportRead(num12);
                            this.pullSink.ReportOutput(num12);
                            num  += num12;
                            num2 -= num12;
                        }
                    }
                    else
                    {
                        if (fallback != null)
                        {
                            char[] array3;
                            int    num13;
                            int    num14;
                            this.cache.GetBuffer(1024, out array3, out num13, out num14);
                            int num15 = num13;
                            int num16 = num14;
                            while (count != 0)
                            {
                                while (count != 0 && num14 != 0)
                                {
                                    char c3 = buffer[offset];
                                    if (ConverterUnicodeOutput.IsUnsafeCharacter(c3, unsafeAsciiMap, unsafeAsciiMask, hasUnsafeUnicode, this.isFirstChar, fallback))
                                    {
                                        int num17 = num13;
                                        if (!fallback.FallBackChar(c3, array3, ref num13, num13 + num14))
                                        {
                                            break;
                                        }
                                        num14 -= num13 - num17;
                                    }
                                    else
                                    {
                                        array3[num13++] = c3;
                                        num14--;
                                    }
                                    this.isFirstChar = false;
                                    count--;
                                    offset++;
                                }
                                if (num13 - num15 != 0)
                                {
                                    this.pushSink.Write(array3, num15, num13 - num15);
                                    num13 = num15;
                                    num14 = num16;
                                }
                            }
                            return;
                        }
                        if (count != 0)
                        {
                            this.pushSink.Write(buffer, offset, count);
                            this.isFirstChar = false;
                        }
                    }
                    return;
                }
            }
            while (count != 0)
            {
                if (fallback != null)
                {
                    char[] array4;
                    int    num18;
                    int    num19;
                    this.cache.GetBuffer(16, out array4, out num18, out num19);
                    int num20 = num18;
                    while (count != 0 && num19 != 0)
                    {
                        char c4 = buffer[offset];
                        if (ConverterUnicodeOutput.IsUnsafeCharacter(c4, unsafeAsciiMap, unsafeAsciiMask, hasUnsafeUnicode, this.isFirstChar, fallback))
                        {
                            int num21 = num18;
                            if (!fallback.FallBackChar(c4, array4, ref num18, num18 + num19))
                            {
                                break;
                            }
                            num19 -= num18 - num21;
                        }
                        else
                        {
                            array4[num18++] = c4;
                            num19--;
                        }
                        this.isFirstChar = false;
                        count--;
                        offset++;
                    }
                    this.cache.Commit(num18 - num20);
                }
                else
                {
                    int    size2 = Math.Min(count, 256);
                    char[] array4;
                    int    num18;
                    int    num19;
                    this.cache.GetBuffer(size2, out array4, out num18, out num19);
                    int num22 = Math.Min(num19, count);
                    Buffer.BlockCopy(buffer, offset * 2, array4, num18 * 2, num22 * 2);
                    this.isFirstChar = false;
                    this.cache.Commit(num22);
                    offset += num22;
                    count  -= num22;
                }
            }
        }