internal ParserAttributeDefinition(string name, string ns, PropertyInfo info, PDFXmlConverter convert, bool iscustomparsable, bool isBindOnly)
     : base(name, ns, info, DeclaredParseType.Attribute)
 {
     this._converter      = convert;
     this._customparse    = iscustomparsable;
     this._iscodedom      = Array.IndexOf <Type>(info.PropertyType.GetInterfaces(), typeof(IPDFSimpleExpressionValue)) > -1;
     this._isBindableOnly = isBindOnly;
 }
        /// <summary>
        /// Retrurns true and an XML converter to convert a reader value to the required type.
        /// </summary>
        /// <param name="type"></param>
        /// <param name="convert"></param>
        /// <param name="iscustom"></param>
        /// <returns></returns>
        private static bool IsCustomParsableType(Type type, out PDFXmlConverter convert, out bool iscustom)
        {
            PDFParsableValueAttribute valattr = GetCustomAttribute <PDFParsableValueAttribute>(type, true);

            if (null != valattr)
            {
                iscustom = true;
                convert  = ConverterXml.GetParsableXmlConverter(type);
                return(null != convert);
            }
            else
            {
                iscustom = false;
                convert  = null;
                return(false);
            }
        }
        /// <summary>
        /// Checks whether the specified type is a known type.
        /// Known types have pre-defined converters to take Xml content and convert to the correct value.
        /// This method will return a converter for an xml reader
        /// </summary>
        /// <param name="type"></param>
        /// <param name="xmlconvert">If the return value is true then the xmlconvert value will be set to a delegate that should be able to convert the current node to the proper type</param>
        /// <returns></returns>
        private static bool IsKnownType(Type type, out PDFXmlConverter xmlconvert)
        {
            bool result = false;

            if (type.IsEnum)
            {
                xmlconvert = new PDFXmlConverter(ConverterXml.ToEnum);
                return(true);
            }
            TypeCode code = Type.GetTypeCode(type);

            switch (code)
            {
            case TypeCode.Boolean:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToBool);
                result     = true;
                break;

            case TypeCode.Byte:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToByte);
                result     = true;
                break;

            case TypeCode.Char:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToChar);
                result     = true;
                break;

            case TypeCode.DBNull:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToDBNull);
                result     = true;
                break;

            case TypeCode.DateTime:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToDateTime);
                result     = true;
                break;

            case TypeCode.Decimal:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToDecimal);
                result     = true;
                break;

            case TypeCode.Double:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToDouble);
                result     = true;
                break;

            case TypeCode.Int16:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToInt16);
                result     = true;
                break;

            case TypeCode.Int32:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToInt32);
                result     = true;
                break;

            case TypeCode.Int64:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToInt64);
                result     = true;
                break;

            case TypeCode.SByte:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToSByte);
                result     = true;
                break;

            case TypeCode.Single:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToFloat);
                result     = true;
                break;

            case TypeCode.String:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToString);
                result     = true;
                break;

            case TypeCode.UInt16:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToUInt16);
                result     = true;
                break;

            case TypeCode.UInt32:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToUInt32);
                result     = true;
                break;

            case TypeCode.UInt64:
                xmlconvert = new PDFXmlConverter(ConverterXml.ToUInt64);
                result     = true;
                break;

            case TypeCode.Object:
                if (type == typeof(Guid))
                {
                    xmlconvert = new PDFXmlConverter(ConverterXml.ToGuid);
                    result     = true;
                }
                else if (type == typeof(DateTime))
                {
                    xmlconvert = new PDFXmlConverter(ConverterXml.ToDateTime);
                    result     = true;
                }
                else if (type == typeof(TimeSpan))
                {
                    xmlconvert = new PDFXmlConverter(ConverterXml.ToTimeSpan);
                    result     = true;
                }
                else if (type == typeof(Uri))
                {
                    xmlconvert = new PDFXmlConverter(ConverterXml.ToUri);
                    result     = true;
                }
                else if (type == typeof(Type))
                {
                    xmlconvert = new PDFXmlConverter(ConverterXml.ToType);
                    result     = true;
                }
                else if (type == typeof(System.Xml.XPath.IXPathNavigable))
                {
                    xmlconvert = new PDFXmlConverter(ConverterXml.ToXPathNavigable);
                    result     = true;
                }
                else if (type == typeof(System.Xml.XPath.XPathNavigator))
                {
                    xmlconvert = new PDFXmlConverter(ConverterXml.ToXPathNavigator);
                    result     = true;
                }
                else if (type == typeof(System.Xml.XmlNode))
                {
                    xmlconvert = new PDFXmlConverter(ConverterXml.ToXmlNode);
                    result     = true;
                }
                else if (type == typeof(IPDFTemplate))
                {
                    xmlconvert = new PDFXmlConverter(ConverterXml.ToPDFTemplate);
                    result     = true;
                }
                else if (type == typeof(System.Xml.XmlDocument))
                {
                    xmlconvert = new PDFXmlConverter(ConverterXml.ToXmlDocument);
                    result     = true;
                }
                else
                {
                    xmlconvert = null;
                    result     = false;
                }
                break;

            case TypeCode.Empty:
            default:
                xmlconvert = null;
                result     = false;
                break;
            }
            return(result);
        }
Пример #4
0
 /// <summary>
 /// Protecxted constructor that accepts the type and
 /// </summary>
 /// <param name="parsetype"></param>
 protected ParseableConverter(Type parsetype)
 {
     this.Type      = parsetype;
     XmlConverter   = new PDFXmlConverter(this.ConvertXml);
     ValueConverter = new PDFValueConverter(this.ConvertValue);
 }
 public ParserSimpleElementDefinition(string name, string ns, PropertyInfo pi, PDFXmlConverter convert, bool iscustomparsable)
     : base(name, ns, pi, DeclaredParseType.SimpleElement)
 {
     this._convert     = convert;
     this._customparse = iscustomparsable;
 }