/* ****************************************************************************
 *
 * Copyright (c) Microsoft Corporation. 
 *
 * This source code is subject to terms and conditions of the Microsoft Public License. A 
 * copy of the license can be found in the License.html file at the root of this distribution. If 
 * you cannot locate the  Microsoft Public License, please send an email to 
 * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound 
 * by the terms of the Microsoft Public License.
 *
 * You must not remove this notice, or any other, from this software.
 *
 *
 * ***************************************************************************/

#if SILVERLIGHT

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Scripting.Utils;
using Microsoft.Scripting.Runtime;

namespace Microsoft.Scripting.Runtime {
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1019:DefineAccessorsForAttributeArguments")]
    [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true, Inherited = false)]
    public sealed class DynamicLanguageProviderAttribute : Attribute {
        private readonly Type _languageContextType;
        private readonly string[] _fileExtensions;
        private readonly string[] _names;
        private readonly string _displayName;

        /// <summary>
        /// LanguageContext implementation.
        /// </summary>
        public Type LanguageContextType {
            get { return _languageContextType; } 
        }

        /// <summary>
        /// Default display name.
        /// </summary>
        public string DisplayName {
            get { return _displayName; }
        }

        /// <summary>
        /// Default file extensions.
        /// </summary>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
        public string[] FileExtensions {
            get { return _fileExtensions; }
        }

        /// <summary>
        /// Default names for the language.
        /// </summary>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
        public string[] Names {
            get { return _names; }
        }

        public DynamicLanguageProviderAttribute(Type languageContextType, string displayName, string names, string fileExtensions)
            : this(languageContextType, displayName, 
            StringUtils.Split(names, new[] { ';', ',' }, Int32.MaxValue, StringSplitOptions.RemoveEmptyEntries),
            StringUtils.Split(fileExtensions, new[] { ';', ',' }, Int32.MaxValue, StringSplitOptions.RemoveEmptyEntries)) {
        }

        public DynamicLanguageProviderAttribute(Type languageContextType, string displayName, string[] names, string[] fileExtensions) {
            ContractUtils.RequiresNotNull(languageContextType, "languageContextType");
            ContractUtils.RequiresNotNull(displayName, "displayName");
            ContractUtils.RequiresNotNull(names, "names");
            ContractUtils.RequiresNotNull(fileExtensions, "fileExtensions");
            
            _languageContextType = languageContextType;
            _displayName = displayName;
            _names = names;
            _fileExtensions = fileExtensions;
        }
    }
}

#endif
