示例#1
0
 public ITextSource Create(FileName fileName)
 {
     try {
         foreach (FileName name in viewContentFileNamesCollection)
         {
             if (FileUtility.IsEqualFileName(name, fileName))
             {
                 ITextSource buffer = SD.MainThread.InvokeIfRequired(() => ReadFile(fileName));
                 if (buffer != null)
                 {
                     return(buffer);
                 }
             }
         }
         using (Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) {
             if (MimeTypeDetection.FindMimeType(stream).StartsWith("text/", StringComparison.Ordinal))
             {
                 stream.Position = 0;
                 return(new StringTextSource(ICSharpCode.AvalonEdit.Utils.FileReader.ReadFileContent(stream, SD.FileService.DefaultFileEncoding)));
             }
         }
         return(null);
     } catch (IOException) {
         return(null);
     } catch (UnauthorizedAccessException) {
         return(null);
     }
 }
 public ITextBuffer Create(FileName fileName)
 {
     try {
         foreach (FileName name in viewContentFileNamesCollection)
         {
             if (FileUtility.IsEqualFileName(name, fileName))
             {
                 ITextBuffer buffer = WorkbenchSingleton.SafeThreadFunction(ReadFile, fileName);
                 if (buffer != null)
                 {
                     return(buffer);
                 }
             }
         }
         using (Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) {
             if (MimeTypeDetection.FindMimeType(stream).StartsWith("text/"))
             {
                 stream.Position = 0;
                 return(new StringTextBuffer(ICSharpCode.AvalonEdit.Utils.FileReader.ReadFileContent(stream, Encoding.Default)));
             }
         }
         return(null);
     } catch (IOException) {
         return(null);
     } catch (UnauthorizedAccessException) {
         return(null);
     }
 }
        public IViewContent CreateContentForFile(OpenedFile file)
        {
            var codons = SD.DisplayBindingService.GetCodonsPerFileName(file.FileName);
            DisplayBindingDescriptor bestMatch = null;
            double    max           = double.NegativeInfinity;
            const int BUFFER_LENGTH = 4 * 1024;

            using (var stream = file.OpenRead()) {
                string mime = "text/plain";
                if (stream.Length > 0)
                {
                    stream.Position = 0;
                    mime            = MimeTypeDetection.FindMimeType(new BinaryReader(stream).ReadBytes(BUFFER_LENGTH));
                }
                foreach (var codon in codons)
                {
                    stream.Position = 0;
                    double value = codon.Binding.AutoDetectFileContent(file.FileName, stream, mime);
                    if (value > max)
                    {
                        max       = value;
                        bestMatch = codon;
                    }
                }
            }

            if (bestMatch == null)
            {
                throw new InvalidOperationException();
            }

            return(bestMatch.Binding.CreateContentForFile(file));
        }
 void TestMime(byte[] bytes, string expectedMime)
 {
     Assert.AreEqual(expectedMime, MimeTypeDetection.FindMimeType(bytes));
 }