コード例 #1
0
 internal BodyTextReader(ICoreItem coreItem, BodyReadConfiguration configuration, Stream inputStream)
 {
     using (DisposeGuard disposeGuard = this.Guard())
     {
         Stream     stream     = null;
         TextReader textReader = null;
         bool       flag       = false;
         this.disposeTracker = this.GetDisposeTracker();
         try
         {
             if (inputStream == null)
             {
                 stream      = BodyReadStream.OpenBodyStream(coreItem);
                 inputStream = stream;
             }
             if (inputStream == null)
             {
                 inputStream = Body.GetEmptyStream();
             }
             textReader = BodyReadDelegates.CreateReader(coreItem, configuration, inputStream, out this.conversionCallbacks);
             flag       = true;
         }
         finally
         {
             if (!flag && stream != null)
             {
                 stream.Dispose();
             }
         }
         this.reader     = textReader;
         this.bodyStream = stream;
         this.isDisposed = false;
         disposeGuard.Success();
     }
 }
コード例 #2
0
        private static BodyReadStream InternalTryCreateBodyStream(ICoreItem coreItem, BodyReadConfiguration configuration, bool createEmtpyStreamIfNotFound, long?length)
        {
            BodyReadStream result;

            using (DisposeGuard disposeGuard = default(DisposeGuard))
            {
                Stream stream = BodyReadStream.OpenBodyStream(coreItem);
                disposeGuard.Add <Stream>(stream);
                Stream stream2 = stream;
                if (stream2 == null)
                {
                    if (!createEmtpyStreamIfNotFound)
                    {
                        return(null);
                    }
                    stream2 = Body.GetEmptyStream();
                }
                ConversionCallbackBase conversionCallbackBase;
                Stream disposable = BodyReadDelegates.CreateStream(coreItem, configuration, stream2, out conversionCallbackBase);
                disposeGuard.Add <Stream>(disposable);
                BodyReadStream bodyReadStream = new BodyReadStream(stream, disposable, conversionCallbackBase, length);
                disposeGuard.Add <BodyReadStream>(bodyReadStream);
                disposeGuard.Success();
                result = bodyReadStream;
            }
            return(result);
        }
コード例 #3
0
        private static BodyReadDelegates.ConversionCreator GetConversionMethod(ICoreItem coreItem, BodyReadConfiguration configuration)
        {
            int formatIndex  = BodyReadDelegates.GetFormatIndex(coreItem.Body.RawFormat);
            int formatIndex2 = BodyReadDelegates.GetFormatIndex(configuration.Format);

            return(BodyReadDelegates.conversionCreatorsTable[formatIndex][formatIndex2]);
        }
コード例 #4
0
        private static object FromRtfToRtf(ICoreItem coreItem, BodyReadConfiguration configuration, Stream bodyStream, bool createReader)
        {
            object obj    = null;
            Stream stream = null;

            try
            {
                stream = new ConverterStream(bodyStream, new RtfCompressedToRtf(), ConverterStreamAccess.Read);
                obj    = BodyReadDelegates.GetRtfStreamOrReader(stream, new RtfToRtf
                {
                    Header             = configuration.InjectPrefix,
                    Footer             = configuration.InjectSuffix,
                    HeaderFooterFormat = configuration.InjectionHeaderFooterFormat
                }, createReader);
            }
            finally
            {
                if (obj == null && stream != null)
                {
                    stream.Dispose();
                    stream = null;
                }
            }
            return(obj);
        }
コード例 #5
0
        private static object FromRtfToHtml(ICoreItem coreItem, BodyReadConfiguration configuration, Stream bodyStream, bool createReader)
        {
            object obj    = null;
            Stream stream = null;

            try
            {
                stream = new ConverterStream(bodyStream, new RtfCompressedToRtf(), ConverterStreamAccess.Read);
                RtfToHtml rtfToHtml = new RtfToHtml();
                rtfToHtml.OutputEncoding     = configuration.Encoding;
                rtfToHtml.Header             = configuration.InjectPrefix;
                rtfToHtml.Footer             = configuration.InjectSuffix;
                rtfToHtml.HeaderFooterFormat = configuration.InjectionHeaderFooterFormat;
                rtfToHtml.FilterHtml         = configuration.FilterHtml;
                rtfToHtml.HtmlTagCallback    = configuration.InternalHtmlTagCallback;
                rtfToHtml.OutputHtmlFragment = configuration.IsHtmlFragment;
                if (configuration.StyleSheetLimit != null)
                {
                    TextConvertersInternalHelpers.SetSmallCssBlockThreshold(rtfToHtml, configuration.StyleSheetLimit.Value);
                }
                obj = BodyReadDelegates.GetTextStreamOrReader(stream, rtfToHtml, createReader);
            }
            finally
            {
                if (obj == null && stream != null)
                {
                    stream.Dispose();
                    stream = null;
                }
            }
            return(obj);
        }
コード例 #6
0
 private static object FromTextToRtf(ICoreItem coreItem, BodyReadConfiguration configuration, Stream bodyStream, bool createReader)
 {
     return(BodyReadDelegates.GetRtfStreamOrReader(bodyStream, new TextToRtf
     {
         InputEncoding = ConvertUtils.UnicodeEncoding,
         Header = configuration.InjectPrefix,
         Footer = configuration.InjectSuffix,
         HeaderFooterFormat = configuration.InjectionHeaderFooterFormat
     }, createReader));
 }
コード例 #7
0
        internal static TextReader CreateReader(ICoreItem coreItem, BodyReadConfiguration configuration, Stream bodyStream, out ConversionCallbackBase provider)
        {
            BodyReadConfiguration readerConfiguration = new BodyReadConfiguration(configuration);

            readerConfiguration.Charset = ConvertUtils.UnicodeCharset;
            provider = BodyReadDelegates.CreateConversionDelegateProvider(coreItem, readerConfiguration);
            return(ConvertUtils.CallCtsWithReturnValue <TextReader>(ExTraceGlobals.CcBodyTracer, "BodyReadDelegates::CreateReader", ServerStrings.ConversionBodyConversionFailed, delegate
            {
                BodyReadDelegates.ConversionCreator conversionMethod = BodyReadDelegates.GetConversionMethod(coreItem, configuration);
                return (TextReader)conversionMethod(coreItem, readerConfiguration, bodyStream, true);
            }));
        }
コード例 #8
0
 private static object FromTextToHtml(ICoreItem coreItem, BodyReadConfiguration configuration, Stream bodyStream, bool createReader)
 {
     return(BodyReadDelegates.GetTextStreamOrReader(bodyStream, new TextToHtml
     {
         InputEncoding = ConvertUtils.UnicodeEncoding,
         OutputEncoding = configuration.Encoding,
         Header = configuration.InjectPrefix,
         Footer = configuration.InjectSuffix,
         HeaderFooterFormat = configuration.InjectionHeaderFooterFormat,
         HtmlTagCallback = configuration.InternalHtmlTagCallback,
         FilterHtml = configuration.FilterHtml,
         OutputHtmlFragment = configuration.IsHtmlFragment
     }, createReader));
 }
コード例 #9
0
        private static object FromHtmlToRtf(ICoreItem coreItem, BodyReadConfiguration configuration, Stream bodyStream, bool createReader)
        {
            HtmlToRtf htmlToRtf = new HtmlToRtf();

            htmlToRtf.InputEncoding             = ConvertUtils.GetItemMimeCharset(coreItem.PropertyBag).GetEncoding();
            htmlToRtf.DetectEncodingFromMetaTag = false;
            htmlToRtf.Header             = configuration.InjectPrefix;
            htmlToRtf.Footer             = configuration.InjectSuffix;
            htmlToRtf.HeaderFooterFormat = configuration.InjectionHeaderFooterFormat;
            if (configuration.ImageRenderingCallback != null)
            {
                TextConvertersInternalHelpers.SetImageRenderingCallback(htmlToRtf, configuration.ImageRenderingCallback);
            }
            return(BodyReadDelegates.GetRtfStreamOrReader(bodyStream, htmlToRtf, createReader));
        }
コード例 #10
0
        private static object FromHtmlToText(ICoreItem coreItem, BodyReadConfiguration configuration, Stream bodyStream, bool createReader)
        {
            HtmlToText htmlToText = new HtmlToText();

            htmlToText.InputEncoding             = ConvertUtils.GetItemMimeCharset(coreItem.PropertyBag).GetEncoding();
            htmlToText.OutputEncoding            = configuration.Encoding;
            htmlToText.DetectEncodingFromMetaTag = false;
            htmlToText.Header             = configuration.InjectPrefix;
            htmlToText.Footer             = configuration.InjectSuffix;
            htmlToText.HeaderFooterFormat = configuration.InjectionHeaderFooterFormat;
            htmlToText.ShouldUseNarrowGapForPTagHtmlToTextConversion = configuration.ShouldUseNarrowGapForPTagHtmlToTextConversion;
            htmlToText.OutputAnchorLinks = configuration.ShouldOutputAnchorLinks;
            htmlToText.OutputImageLinks  = configuration.ShouldOutputImageLinks;
            if (configuration.ImageRenderingCallback != null)
            {
                TextConvertersInternalHelpers.SetImageRenderingCallback(htmlToText, configuration.ImageRenderingCallback);
            }
            return(BodyReadDelegates.GetTextStreamOrReader(bodyStream, htmlToText, createReader));
        }
コード例 #11
0
        internal static Stream CreateStream(ICoreItem coreItem, BodyReadConfiguration configuration, Stream bodyStream, out ConversionCallbackBase provider)
        {
            BodyReadConfiguration readConfiguration = new BodyReadConfiguration(configuration);

            provider = BodyReadDelegates.CreateConversionDelegateProvider(coreItem, readConfiguration);
            if (readConfiguration.Charset == null)
            {
                readConfiguration.Charset = ConvertUtils.GetItemMimeCharset(coreItem.PropertyBag);
            }
            if (!readConfiguration.IsBodyTransformationNeeded(coreItem.Body))
            {
                return(bodyStream);
            }
            return(ConvertUtils.CallCtsWithReturnValue <Stream>(ExTraceGlobals.CcBodyTracer, "BodyReadDelegates::CreateStream", ServerStrings.ConversionBodyConversionFailed, delegate
            {
                BodyReadDelegates.ConversionCreator conversionMethod = BodyReadDelegates.GetConversionMethod(coreItem, configuration);
                return (Stream)conversionMethod(coreItem, readConfiguration, bodyStream, false);
            }));
        }
コード例 #12
0
        private static object FromHtmlToHtml(ICoreItem coreItem, BodyReadConfiguration configuration, Stream bodyStream, bool createReader)
        {
            Charset    itemMimeCharset = ConvertUtils.GetItemMimeCharset(coreItem.PropertyBag);
            Charset    charset         = configuration.Charset;
            HtmlToHtml htmlToHtml      = new HtmlToHtml();

            htmlToHtml.InputEncoding             = itemMimeCharset.GetEncoding();
            htmlToHtml.OutputEncoding            = charset.GetEncoding();
            htmlToHtml.Header                    = configuration.InjectPrefix;
            htmlToHtml.Footer                    = configuration.InjectSuffix;
            htmlToHtml.HeaderFooterFormat        = configuration.InjectionHeaderFooterFormat;
            htmlToHtml.DetectEncodingFromMetaTag = false;
            htmlToHtml.FilterHtml                = configuration.FilterHtml;
            htmlToHtml.HtmlTagCallback           = configuration.InternalHtmlTagCallback;
            htmlToHtml.OutputHtmlFragment        = configuration.IsHtmlFragment;
            if (configuration.StyleSheetLimit != null)
            {
                TextConvertersInternalHelpers.SetSmallCssBlockThreshold(htmlToHtml, configuration.StyleSheetLimit.Value);
            }
            return(BodyReadDelegates.GetTextStreamOrReader(bodyStream, htmlToHtml, createReader));
        }
コード例 #13
0
        private static object FromTextToText(ICoreItem coreItem, BodyReadConfiguration configuration, Stream bodyStream, bool createReader)
        {
            TextToText textToText;

            if (string.IsNullOrEmpty(configuration.InjectPrefix) && string.IsNullOrEmpty(configuration.InjectSuffix))
            {
                textToText = new TextToText(TextToTextConversionMode.ConvertCodePageOnly);
            }
            else
            {
                textToText = new TextToText();
            }
            textToText.InputEncoding  = ConvertUtils.UnicodeEncoding;
            textToText.OutputEncoding = configuration.Encoding;
            if (!string.IsNullOrEmpty(configuration.InjectPrefix) || !string.IsNullOrEmpty(configuration.InjectSuffix))
            {
                textToText.Header             = configuration.InjectPrefix;
                textToText.Footer             = configuration.InjectSuffix;
                textToText.HeaderFooterFormat = configuration.InjectionHeaderFooterFormat;
            }
            return(BodyReadDelegates.GetTextStreamOrReader(bodyStream, textToText, createReader));
        }