/// <summary>
        /// Converts the current reader value to an XML Document and returns it
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="requiredType"></param>
        /// <param name="setting"></param>
        /// <returns></returns>
        internal static object ToXmlDocument(XmlReader reader, Type requiredType, PDFGeneratorSettings setting)
        {
            XmlReader inner = reader.ReadSubtree();

            System.Xml.XmlDocument doc = new XmlDocument();
            return(doc);
        }
        /// <summary>
        /// Converts the current reader value to an enumerated value (optionally based on the current settings culture) and returns it
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="requiredType"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        internal static object ToEnum(XmlReader reader, Type requiredType, PDFGeneratorSettings settings)
        {
            string value = GetReaderValue(reader);

            if (string.IsNullOrEmpty(value))
            {
                return(DBNull.Value);
            }

            if (value.IndexOf(' ') > -1)
            {
                value = value.Replace(' ', ',');
            }
            object result;

            if (Enum.TryParse(requiredType, value, true, out result))
            {
                return(result);
            }
            else if (settings.ConformanceMode == ParserConformanceMode.Lax)
            {
                settings.TraceLog.Add(TraceLevel.Error, "Parser", "Could not convert the value of " + value + " to a " + requiredType.Name);
                return(DBNull.Value);
            }
            else
            {
                throw new ArgumentException("Could not convert the value of " + value + " to a " + requiredType.Name, "value");
            }
        }
        /// <summary>
        /// Converts the current reader value to a PDF Template and returns it
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="requiredType"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        internal static object ToPDFTemplate(XmlReader reader, Type requiredType, PDFGeneratorSettings settings)
        {
            object obj = Activator.CreateInstance(settings.TempateGeneratorType);
            IPDFTemplateGenerator gen = (IPDFTemplateGenerator)obj;
            string content            = reader.ReadInnerXml();

            gen.InitTemplate(content, new System.Xml.XmlNamespaceManager(reader.NameTable));
            return(gen);
        }
        /// <summary>
        /// Converts the current reader value to a url (optionally based on the current settings culture) and returns it
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="requiredType"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        internal static object ToUri(XmlReader reader, Type requiredType, PDFGeneratorSettings settings)
        {
            string value = GetReaderValue(reader);

            if (string.IsNullOrEmpty(value))
            {
                return(DBNull.Value);
            }

            return(new Uri(value));
        }
        /// <summary>
        /// Converts the current reader value to a runtime type and returns it
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="requiredType"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        internal static object ToType(XmlReader reader, Type requiredType, PDFGeneratorSettings settings)
        {
            string value = GetReaderValue(reader);
            string prefix;
            string name;
            int    sep = value.IndexOf(':');

            if (sep > 0)
            {
                name   = value.Substring(sep + 1);
                prefix = value.Substring(0, sep);
            }
            else
            {
                prefix = "";
                name   = value;
            }

            string ns = reader.LookupNamespace(prefix);
            bool   isremote;
            ParserClassDefinition cdefn;

            try
            {
                cdefn = ParserDefintionFactory.GetClassDefinition(name, ns, settings.ConformanceMode == ParserConformanceMode.Strict, out isremote);
            }
            catch (Exception ex)
            {
                throw new PDFParserException(string.Format(Errors.RuntimeTypeCouldNotBeDeterminedForReference, value), ex);
            }

            if (isremote)
            {
                if (settings.ConformanceMode == ParserConformanceMode.Strict)
                {
                    throw new ArgumentOutOfRangeException("isremote", String.Format(Errors.CannotUseRemoteTypeReferencesInATypeAttribute, reader.Value));
                }
                else
                {
                    settings.TraceLog.Add(TraceLevel.Error, "XML Parser", String.Format(Errors.CannotUseRemoteTypeReferencesInATypeAttribute, reader.Value));
                    return(null);
                }
            }

            if (null == cdefn)
            {
                settings.TraceLog.Add(TraceLevel.Error, "XML Parser", String.Format(Errors.RuntimeTypeCouldNotBeDeterminedForReference, reader.Value));
                return(typeof(NeverBeActivated));
            }
            else
            {
                return(cdefn.ClassType);
            }
        }
 public object GetValue(System.Xml.XmlReader reader, PDFGeneratorSettings settings)
 {
     try
     {
         return(this.DoGetValue(reader, settings));
     }
     catch (Exception ex)
     {
         throw new PDFParserException("Could not read the value " + this.Name + " from the Xml source", ex);
     }
 }
        /// <summary>
        /// Converts the current reader value to an XPath Navigator and returns it
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="requiredType"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        internal static object ToXPathNavigator(XmlReader reader, Type requiredType, PDFGeneratorSettings settings)
        {
            while (reader.NodeType == XmlNodeType.Whitespace || reader.NodeType == XmlNodeType.Comment)
            {
                reader.Read();
            }

            XmlReader inner = reader.ReadSubtree();

            System.Xml.XPath.XPathNavigator nav = new System.Xml.XPath.XPathDocument(inner).CreateNavigator();
            return(nav);
        }
        /// <summary>
        /// Converts the current reader value to a char (optionally based on the current settings culture) and returns it
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="requiredType"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        internal static object ToChar(XmlReader reader, Type requiredType, PDFGeneratorSettings settings)
        {
            string value = GetReaderValue(reader);

            if (string.IsNullOrEmpty(value))
            {
                return(DBNull.Value);
            }
            else
            {
                return(char.Parse(value));
            }
        }
        /// <summary>
        /// Converts the current reader value to a signed byte (optionally based on the current settings culture) and returns it
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="requiredType"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        internal static object ToSByte(XmlReader reader, Type requiredType, PDFGeneratorSettings settings)
        {
            string value = GetReaderValue(reader);

            if (string.IsNullOrEmpty(value))
            {
                return(DBNull.Value);
            }

            if (settings.HasSpecificCulture)
            {
                return(sbyte.Parse(value, settings.SpecificCulture));
            }
            else
            {
                return(sbyte.Parse(value, System.Globalization.CultureInfo.InvariantCulture));
            }
        }
        /// <summary>
        /// Converts the current reader value to an XML Node and returns it
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="requiredType"></param>
        /// <param name="setting"></param>
        /// <returns></returns>
        internal static object ToXmlNode(XmlReader reader, Type requiredType, PDFGeneratorSettings setting)
        {
            while (reader.NodeType == XmlNodeType.Whitespace || reader.NodeType == XmlNodeType.Comment)
            {
                reader.Read();
            }


            if (reader.NodeType == XmlNodeType.EndElement)
            {
                return(null); //blank value
            }
            else
            {
                XmlReader inner            = reader.ReadSubtree();
                System.Xml.XmlDocument doc = new XmlDocument();
                doc.Load(inner);
                return(doc.FirstChild);
            }
        }
        /// <summary>
        /// Converts the current reader value to dbnull (optionally based on the current settings culture) and returns it
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="requiredType"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        internal static object ToDBNull(XmlReader reader, Type requiredType, PDFGeneratorSettings settings)
        {
            string value = GetReaderValue(reader); //still need to read ahead

            return(DBNull.Value);
        }
Exemple #12
0
        /// <summary>
        /// Creates a full clone of these settings
        /// </summary>
        /// <returns></returns>
        public PDFGeneratorSettings Clone()
        {
            PDFGeneratorSettings clone = this.MemberwiseClone() as PDFGeneratorSettings;

            return(clone);
        }
 /// <summary>
 /// Converts the current reader value to a string and returns it
 /// </summary>
 /// <param name="reader"></param>
 /// <param name="requiredType"></param>
 /// <param name="settings"></param>
 /// <returns></returns>
 internal static object ToString(XmlReader reader, Type requiredType, PDFGeneratorSettings settings)
 {
     return(GetReaderValue(reader));
 }
 /// <summary>
 /// Method so they convert from the current XMLReader value to the required type. Inheritors must override
 /// </summary>
 /// <param name="reader"></param>
 /// <param name="requiredType"></param>
 /// <param name="settings"></param>
 /// <returns></returns>
 internal abstract object ConvertXml(XmlReader reader, Type requiredType, PDFGeneratorSettings settings);
        /// <summary>
        /// Returns true if the value provided is an expression that matches the pattern required for a binding expression.
        /// If it does value will be modified to be just the content of that expression and the bindingFactory will be set to the
        /// factory that handles these expression types.
        /// </summary>
        /// <param name="value">The string to check if it is a binding expression. If it does match, then it will be modifed </param>
        /// <param name="bindingfactory"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        public static bool IsBindingExpression(ref string value, out IPDFBindingExpressionFactory bindingfactory, PDFGeneratorSettings settings = null)
        {
            bindingfactory = null;
            if (string.IsNullOrEmpty(value) || value.Length < 4)
            {
                return(false);
            }
            else if (!(value.StartsWith(BindingStartChar) && value.EndsWith(BindingEndChar)))
            {
                return(false);
            }
            else if (value.StartsWith(BindingStartEscape))
            {
                value = BindingStartChar + value.Substring(BindingStartEscape.Length);
                return(false);
            }
            else
            {
                int separatorIndex = value.IndexOf(BindingKeySeparator);
                if (separatorIndex < 0)
                {
                    return(false);
                }

                string factoryKey = value.Substring(BindingStartChar.Length, separatorIndex - BindingStartChar.Length);

                //ensure the factories are initialized (and will raise an appropriate exception that can be handled if not.
                //doesn't need to be thread safe as it will simply reset the collection.
                if (null == _configFactories)
                {
                    _configFactories = InitFactories();
                }

                if (_configFactories.TryGetValue(factoryKey, out bindingfactory))
                {
                    int offset = BindingStartChar.Length + factoryKey.Length + BindingKeySeparator.Length;
                    int len    = value.Length - (offset + 1);
                    value = value.Substring(offset, len);
                    return(true);
                }
                else if (null != settings)
                {
                    settings.TraceLog.Add(TraceLevel.Warning, "XML Parser", string.Format(Errors.BindingPrefixIsNotKnown, factoryKey, value));
                    return(false);
                }
                else
                {
                    return(false);
                }
            }
        }
Exemple #16
0
 public IPDFParser CreateParser(PDFGeneratorSettings settings)
 {
     return(new PDFXMLParser(settings));
 }
        /// <summary>
        /// Returns true if the value provided is an expression that matches the pattern required for a binding expression.
        /// If it does value will be modified to be just the content of that expression and the bindingFactory will be set to the
        /// factory that handles these expression types.
        /// </summary>
        /// <param name="value">The string to check if it is a binding expression. If it does match, then it will be modifed </param>
        /// <param name="bindingfactory"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        public static bool IsBindingExpression(ref string value, out IPDFBindingExpressionFactory bindingfactory, PDFGeneratorSettings settings = null)
        {
            bindingfactory = null;

            if (!value.Contains(BindingStartChar))
            {
                return(false);
            }
            else if (value.StartsWith(BindingStartChar) && value.EndsWith(BindingEndChar))
            {
                return(TryGetBindingExpression(ref value, out bindingfactory, settings));
            }
            else if (value.Contains(BindingDoubleSeparator))
            {
                var match = handlebarsMatcher.Match(value);
                if (match == null || match.Success == false)
                {
                    return(false);
                }

                if (null == _configFactories)
                {
                    _configFactories = InitFactories();
                }

                if (!_configFactories.TryGetValue(HandlebarsExpressionBindingKey, out bindingfactory))
                {
                    if (null != settings)
                    {
                        settings.TraceLog.Add(TraceLevel.Error, "Binding", "Handlebars expression factorys has not been initialized with the key " + HandlebarsExpressionBindingKey);
                    }
                    return(false);
                }

                var           pos = 0;
                StringBuilder sb  = new StringBuilder();

                var quoteChar = "\"";

                while (match != null && match.Success)
                {
                    if (sb.Length > 0)
                    {
                        sb.Append(", ");
                    }
                    else
                    {
                        sb.Append("concat(");
                    }

                    string sub;

                    if (match.Index > pos)
                    {
                        sub = value.Substring(pos, match.Index - pos);
                        sb.Append(quoteChar);
                        sb.Append(sub);
                        sb.Append(quoteChar);
                        sb.Append(", ");
                    }
                    sub = match.Value;
                    sb.Append(sub.Substring(HandlebarsExpressionInset, sub.Length - HandlebarsExpressionLength));

                    pos = match.Index + match.Value.Length;

                    match = match.NextMatch();
                }

                if (pos < value.Length)
                {
                    sb.Append(", ");
                    sb.Append(quoteChar);
                    sb.Append(value.Substring(pos));
                    sb.Append(quoteChar);
                }

                sb.Append(")");
                value = sb.ToString();
                return(true);
            }
            else
            {
                return(false);
            }
        }
 protected override object DoGetValue(XmlReader reader, PDFGeneratorSettings settings)
 {
     return(this.Converter(reader, this.PropertyInfo.PropertyType, settings));
 }
 protected virtual object DoGetValue(System.Xml.XmlReader reader, PDFGeneratorSettings settings)
 {
     throw new NotSupportedException("GetValue is not supported on the root property type");
 }