SvgAttributeAttribute.cs 3.8 KB
Newer Older
davescriven's avatar
davescriven committed
1
2
using System;
using System.Collections.Generic;
3
using System.Linq;
davescriven's avatar
davescriven committed
4
5
6
7
8
using System.Text;
using System.ComponentModel;

namespace Svg
{
9
10
11
    /// <summary>
    /// Specifies the SVG attribute name of the associated property.
    /// </summary>
Tebjan Halm's avatar
Tebjan Halm committed
12
    [AttributeUsage(AttributeTargets.Property|AttributeTargets.Event)]
davescriven's avatar
davescriven committed
13
14
    public class SvgAttributeAttribute : System.Attribute
    {
15
16
17
18
19
20
21
22
23
24
25
26
		/// <summary>
		/// Gets a <see cref="string"/> containing the XLink namespace (http://www.w3.org/1999/xlink).
		/// </summary>
		public const string SVG_NAMESPACE = "http://www.w3.org/2000/svg";
		public const string XLinkPrefix = "xlink";
		public const string XLinkNamespace = "http://www.w3.org/1999/xlink";

		public static readonly List<KeyValuePair<string, string>> Namespaces = new List<KeyValuePair<string, string>>()
    	                                                                	{
																				new KeyValuePair<string, string>("", SVG_NAMESPACE),
																				new KeyValuePair<string, string>(XLinkPrefix, XLinkNamespace)
																			};
davescriven's avatar
davescriven committed
27
28
29
        private string _name;
        private string _namespace;

30
31
32
33
34
35
36
        /// <summary>
        /// When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.
        /// </summary>
        /// <param name="obj">An <see cref="T:System.Object"/> to compare with this instance of <see cref="T:System.Attribute"/>.</param>
        /// <returns>
        /// true if this instance equals <paramref name="obj"/>; otherwise, false.
        /// </returns>
davescriven's avatar
davescriven committed
37
38
39
40
41
42
43
44
45
46
47
48
49
50
        public override bool Match(object obj)
        {
            SvgAttributeAttribute indicator = obj as SvgAttributeAttribute;

            if (indicator == null)
                return false;

            // Always match if either value is String.Empty (wildcard)
            if (indicator.Name == String.Empty)
                return false;

            return String.Compare(indicator.Name, this.Name) == 0;
        }

51
52
53
54
55
56
57
58
59
60
61
62
63
64
		/// <summary>
		/// Gets the name of the SVG attribute.
		/// </summary>
		public string NamespaceAndName
		{
			get
			{
				if (_namespace == SVG_NAMESPACE)
					return _name;
				return Namespaces.First(x => x.Value == _namespace).Key + ":" + _name;
			}
		}


65
66
67
        /// <summary>
        /// Gets the name of the SVG attribute.
        /// </summary>
davescriven's avatar
davescriven committed
68
69
70
71
72
        public string Name
        {
            get { return this._name; }
        }

73
74
75
        /// <summary>
        /// Gets the namespace of the SVG attribute.
        /// </summary>
davescriven's avatar
davescriven committed
76
77
78
79
80
        public string NameSpace
        {
            get { return this._namespace; }
        }

81
82
83
        /// <summary>
        /// Initializes a new instance of the <see cref="SvgAttributeAttribute"/> class.
        /// </summary>
davescriven's avatar
davescriven committed
84
85
86
87
88
        internal SvgAttributeAttribute()
        {
            this._name = String.Empty;
        }

89
90
91
92
        /// <summary>
        /// Initializes a new instance of the <see cref="SvgAttributeAttribute"/> class with the specified attribute name.
        /// </summary>
        /// <param name="name">The name of the SVG attribute.</param>
davescriven's avatar
davescriven committed
93
94
95
96
97
98
        internal SvgAttributeAttribute(string name)
        {
            this._name = name;
            this._namespace = SVG_NAMESPACE;
        }

99
100
101
102
103
        /// <summary>
        /// Initializes a new instance of the <see cref="SvgAttributeAttribute"/> class with the specified SVG attribute name and namespace.
        /// </summary>
        /// <param name="name">The name of the SVG attribute.</param>
        /// <param name="nameSpace">The namespace of the SVG attribute (e.g. http://www.w3.org/2000/svg).</param>
davescriven's avatar
davescriven committed
104
105
106
107
108
109
110
        public SvgAttributeAttribute(string name, string nameSpace)
        {
            this._name = name;
            this._namespace = nameSpace;
        }
    }
}