Example #1
0
        /// <summary>
        /// Gets the primary display binding for the specified file name.
        /// </summary>
        public static IDisplayBinding GetBindingPerFileName(string filename)
        {
            WorkbenchSingleton.AssertMainThread();
            DisplayBindingDescriptor codon = GetDefaultCodonPerFileName(filename);

            return(codon == null ? null : codon.Binding);
        }
        public IViewContent CreateContentForFile(OpenedFile file)
        {
            var codons = 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));
        }
Example #3
0
		static DisplayBindingDescriptor AddExternalProcessDisplayBindingInternal(ExternalProcessDisplayBinding binding)
		{
			externalProcessDisplayBindings.Add(binding);
			DisplayBindingDescriptor descriptor = new DisplayBindingDescriptor(binding) {
				Id = binding.Id,
				Title = binding.Title
			};
			bindings.Add(descriptor);
			return descriptor;
		}
Example #4
0
 static bool IsPrimaryBindingValidForFileName(DisplayBindingDescriptor binding, string filename)
 {
     if (!binding.IsSecondary && binding.CanOpenFile(filename))
     {
         if (binding.Binding != null && binding.Binding.CanCreateContentForFile(filename))
         {
             return(true);
         }
     }
     return(false);
 }
Example #5
0
        static DisplayBindingDescriptor AddExternalProcessDisplayBindingInternal(ExternalProcessDisplayBinding binding)
        {
            externalProcessDisplayBindings.Add(binding);
            DisplayBindingDescriptor descriptor = new DisplayBindingDescriptor(binding)
            {
                Id    = binding.Id,
                Title = binding.Title
            };

            bindings.Add(descriptor);
            return(descriptor);
        }
Example #6
0
        public static DisplayBindingDescriptor AddExternalProcessDisplayBinding(ExternalProcessDisplayBinding binding)
        {
            WorkbenchSingleton.AssertMainThread();
            if (binding == null)
            {
                throw new ArgumentNullException("binding");
            }
            DisplayBindingDescriptor descriptor = AddExternalProcessDisplayBindingInternal(binding);

            SaveExternalProcessDisplayBindings();
            return(descriptor);
        }
Example #7
0
        /// <summary>
        /// Gets the primary display binding for the specified file name.
        /// </summary>
        public static IDisplayBinding GetBindingPerFileName(string filename)
        {
            WorkbenchSingleton.AssertMainThread();
            if (FileUtility.IsUrl(filename))
            {
                // The normal display binding dispatching code can't handle URLs (e.g. because it uses Path.GetExtension),
                // so we'll directly return the browser display binding.
                return(new BrowserDisplayBinding.BrowserDisplayBinding());
            }
            DisplayBindingDescriptor codon = GetDefaultCodonPerFileName(filename);

            return(codon == null ? null : codon.Binding);
        }
Example #8
0
        public static void SetDefaultCodon(string extension, DisplayBindingDescriptor bindingDescriptor)
        {
            WorkbenchSingleton.AssertMainThread();
            if (bindingDescriptor == null)
            {
                throw new ArgumentNullException("bindingDescriptor");
            }
            if (extension == null)
            {
                throw new ArgumentNullException("extension");
            }
            if (!extension.StartsWith(".", StringComparison.Ordinal))
            {
                throw new ArgumentException("extension must start with '.'");
            }

            displayBindingServiceProperties.Set("Default" + extension.ToLowerInvariant(), bindingDescriptor.Id);
        }
Example #9
0
        /// <summary>
        /// Gets the default primary display binding for the specified file name.
        /// </summary>
        public static DisplayBindingDescriptor GetDefaultCodonPerFileName(string filename)
        {
            WorkbenchSingleton.AssertMainThread();

            string defaultCommandID = displayBindingServiceProperties.Get("Default" + Path.GetExtension(filename).ToLowerInvariant()) as string;

            if (!string.IsNullOrEmpty(defaultCommandID))
            {
                foreach (DisplayBindingDescriptor binding in bindings)
                {
                    if (binding.Id == defaultCommandID)
                    {
                        if (IsPrimaryBindingValidForFileName(binding, filename))
                        {
                            return(binding);
                        }
                    }
                }
            }
            DisplayBindingDescriptor autoDetectDescriptor = null;

            foreach (DisplayBindingDescriptor binding in bindings)
            {
                if (IsPrimaryBindingValidForFileName(binding, filename))
                {
                    if (binding.Binding.IsPreferredBindingForFile(filename))
                    {
                        return(binding);
                    }
                    else if (binding.Binding is AutoDetectDisplayBinding)
                    {
                        autoDetectDescriptor = binding;
                    }
                }
            }
            return(autoDetectDescriptor);
        }
Example #10
0
		static bool IsPrimaryBindingValidForFileName(DisplayBindingDescriptor binding, string filename)
		{
			if (!binding.IsSecondary && binding.CanOpenFile(filename)) {
				if (binding.Binding != null && binding.Binding.CanCreateContentForFile(filename)) {
					return true;
				}
			}
			return false;
		}
Example #11
0
		public static void SetDefaultCodon(string extension, DisplayBindingDescriptor bindingDescriptor)
		{
			WorkbenchSingleton.AssertMainThread();
			if (bindingDescriptor == null)
				throw new ArgumentNullException("bindingDescriptor");
			if (extension == null)
				throw new ArgumentNullException("extension");
			if (!extension.StartsWith(".", StringComparison.Ordinal))
				throw new ArgumentException("extension must start with '.'");
			
			displayBindingServiceProperties.Set("Default" + extension.ToLowerInvariant(), bindingDescriptor.Id);
		}
        public static IDisplayBinding GetBindingPerLanguageName(string languagename)
        {
            DisplayBindingDescriptor codon = GetCodonPerLanguageName(languagename);

            return(codon == null ? null : codon.Binding);
        }
        public static IDisplayBinding GetBindingPerFileName(string filename)
        {
            DisplayBindingDescriptor codon = GetCodonPerFileName(filename);

            return(codon == null ? null : codon.Binding);
        }