// returns value / display name
        public KeyValuePair <string, string> GetValue(object settings, CodeFormatOption option)
        {
            PropertyInfo   info  = settings.GetType().GetProperty(option.Name);
            string         value = info.GetValue(settings, null).ToString();
            CodeFormatType type  = GetCodeFormatType(settings, option);

            return(new KeyValuePair <string, string> (value, type.GetValue(value).Value));
        }
		public static CodeFormatType Read (XmlReader reader)
		{
			CodeFormatType result = new CodeFormatType ();
			result.Name = reader.GetAttribute ("name");
			XmlReadHelper.ReadList (reader, Node, delegate () {
				switch (reader.LocalName) {
				case "Value":
					string displayName = reader.GetAttribute ("_displayName");
					string name        = reader.ReadElementString ();
					result.values.Add (new KeyValuePair <string, string> (name, displayName ?? name));
					return true;
				}
				return false;
			});
			return result;
		}
        public static CodeFormatType Read(XmlReader reader)
        {
            CodeFormatType result = new CodeFormatType();

            result.Name = reader.GetAttribute("name");
            XmlReadHelper.ReadList(reader, Node, delegate() {
                switch (reader.LocalName)
                {
                case "Value":
                    string displayName = reader.GetAttribute("_displayName");
                    string name        = reader.ReadElementString();
                    result.values.Add(new KeyValuePair <string, string> (name, displayName ?? name));
                    return(true);
                }
                return(false);
            });
            return(result);
        }
        public static CodeFormatDescription Read(XmlReader reader)
        {
            CodeFormatDescription result = new CodeFormatDescription();

            while (reader.Read())
            {
                if (reader.IsStartElement())
                {
                    switch (reader.LocalName)
                    {
                    case Node:
                        string fileVersion = reader.GetAttribute(VersionAttribute);
                        if (fileVersion != Version)
                        {
                            return(result);
                        }
                        result.MimeType = reader.GetAttribute("mimeType");
                        break;

                    case "Example":
                        string name = reader.GetAttribute("name");
                        result.examples[name] = reader.ReadElementString();
                        break;

                    case CodeFormatType.Node:
                        result.types.Add(CodeFormatType.Read(reader));
                        break;

                    case CodeFormatCategory.Node:
                        result.subCategories.Add(CodeFormatCategory.Read(result, reader));
                        break;
                    }
                }
            }
            return(result);
        }