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)); }
/// <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); }
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)); }
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)); }
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)); }
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)); }
// 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)); }
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)); }
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)); }
// 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)); }
// 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)); }
internal void SetSource(ConverterUnicodeOutput sourceOutputObject) { this.sourceOutputObject = sourceOutputObject; }
/// <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; } } }