Пример #1
0
        private void CreateDetectionStream(BodyStreamFormat format, Charset contentCharset, string extraData, bool trustHtmlMetaTag)
        {
            this.detectorCache = new PooledMemoryStream(8192);
            if (extraData != null)
            {
                byte[] bytes = ConvertUtils.UnicodeEncoding.GetBytes(extraData);
                this.detectorCache.Write(bytes, 0, bytes.Length);
            }
            switch (format)
            {
            case BodyStreamFormat.Text:
            {
                if (contentCharset.CodePage == 1200)
                {
                    this.detectorConversionStream = new StreamWrapper(this.detectorCache, false);
                    return;
                }
                TextToText textToText = new TextToText(TextToTextConversionMode.ConvertCodePageOnly);
                textToText.InputEncoding          = contentCharset.GetEncoding();
                textToText.OutputEncoding         = ConvertUtils.UnicodeEncoding;
                textToText.OutputStreamBufferSize = 1024;
                textToText.InputStreamBufferSize  = 1024;
                this.detectorConversionStream     = new ConverterStream(new StreamWrapper(this.detectorCache, false), textToText, ConverterStreamAccess.Write);
                return;
            }

            case BodyStreamFormat.Html:
            {
                HtmlToText htmlToText = new HtmlToText(TextExtractionMode.ExtractText);
                htmlToText.InputEncoding             = contentCharset.GetEncoding();
                htmlToText.OutputEncoding            = ConvertUtils.UnicodeEncoding;
                htmlToText.DetectEncodingFromMetaTag = trustHtmlMetaTag;
                htmlToText.OutputStreamBufferSize    = 1024;
                htmlToText.InputStreamBufferSize     = 1024;
                this.detectorConversionStream        = new ConverterStream(new StreamWrapper(this.detectorCache, false), htmlToText, ConverterStreamAccess.Write);
                return;
            }

            case BodyStreamFormat.RtfCompressed:
            case BodyStreamFormat.RtfUncompressed:
            {
                RtfToText rtfToText = new RtfToText(TextExtractionMode.ExtractText);
                rtfToText.OutputEncoding         = ConvertUtils.UnicodeEncoding;
                rtfToText.OutputStreamBufferSize = 1024;
                rtfToText.InputStreamBufferSize  = 1024;
                this.detectorConversionStream    = new ConverterStream(new StreamWrapper(this.detectorCache, false), rtfToText, ConverterStreamAccess.Write);
                if (format == BodyStreamFormat.RtfCompressed)
                {
                    RtfCompressedToRtf rtfCompressedToRtf = new RtfCompressedToRtf();
                    rtfCompressedToRtf.OutputStreamBufferSize = 1024;
                    rtfCompressedToRtf.InputStreamBufferSize  = 1024;
                    this.detectorConversionStream             = new ConverterStream(this.detectorConversionStream, rtfCompressedToRtf, ConverterStreamAccess.Write);
                }
                return;
            }

            default:
                return;
            }
        }
Пример #2
0
        internal Stream ConvertReadStreamFormat(Stream stream)
        {
            if (this.internalFormat == (InternalBodyFormat)this.format)
            {
                return(stream);
            }
            TextConverter converter = null;

            if (this.internalFormat == InternalBodyFormat.RtfCompressed)
            {
                if (!(stream is RtfPreviewStream))
                {
                    stream = new ConverterStream(stream, new RtfCompressedToRtf(), ConverterStreamAccess.Read);
                }
                if (BodyFormat.Rtf == this.BodyFormat)
                {
                    return(stream);
                }
                if (BodyFormat.Html == this.BodyFormat)
                {
                    converter = new RtfToHtml
                    {
                        OutputEncoding = this.Encoding
                    };
                }
                else
                {
                    converter = new RtfToText
                    {
                        OutputEncoding = this.Encoding
                    };
                }
            }
            else if (this.internalFormat == InternalBodyFormat.Enriched)
            {
                converter = new EnrichedToHtml
                {
                    InputEncoding  = this.Encoding,
                    OutputEncoding = this.Encoding
                };
            }
            return(new ConverterStream(stream, converter, ConverterStreamAccess.Read));
        }
        public override Stream OpenReadStream(long start, long end)
        {
            base.ThrowIfDisposed();
            BodyFormatConversionStorage.BodyFormatConversion conversion = BodyFormatConversionStorage.GetConversion(this.originalFormat, this.targetFormat);
            TextConverter converter     = null;
            Encoding      inputEncoding = null;

            if (this.originalCharset != null)
            {
                inputEncoding = this.originalCharset.GetEncoding();
            }
            Encoding outputEncoding = null;

            if (this.targetCharset != null)
            {
                outputEncoding = this.targetCharset.GetEncoding();
            }
            Stream stream = this.originalStorage.OpenReadStream(this.originalStart, this.originalEnd);

            switch (conversion)
            {
            case BodyFormatConversionStorage.BodyFormatConversion.HtmlToText:
                converter = new HtmlToText
                {
                    InputEncoding  = inputEncoding,
                    OutputEncoding = outputEncoding
                };
                break;

            case BodyFormatConversionStorage.BodyFormatConversion.HtmlToEnriched:
                converter = new HtmlToEnriched
                {
                    InputEncoding  = inputEncoding,
                    OutputEncoding = outputEncoding
                };
                break;

            case BodyFormatConversionStorage.BodyFormatConversion.RtfCompressedToText:
                stream    = new ConverterStream(stream, new RtfCompressedToRtf(), ConverterStreamAccess.Read);
                converter = new RtfToText
                {
                    OutputEncoding = outputEncoding
                };
                break;

            case BodyFormatConversionStorage.BodyFormatConversion.TextToText:
                converter = new TextToText
                {
                    InputEncoding  = inputEncoding,
                    OutputEncoding = outputEncoding
                };
                break;

            case BodyFormatConversionStorage.BodyFormatConversion.HtmlToHtml:
                converter = new HtmlToHtml
                {
                    InputEncoding  = inputEncoding,
                    OutputEncoding = outputEncoding
                };
                break;

            case BodyFormatConversionStorage.BodyFormatConversion.EnrichedToText:
                converter = new EnrichedToText
                {
                    InputEncoding  = inputEncoding,
                    OutputEncoding = outputEncoding
                };
                break;
            }
            return(new ConverterStream(stream, converter, ConverterStreamAccess.Read));
        }