/// <summary>
        /// Constructs HTML for the given parse rule by using values in the supplied token
        /// </summary>
        /// <param name="token">token to get values from</param>
        /// <returns>part html</returns>
        public virtual string ConstructHtml(Token token)
        {
            if (token.HasProperty(PropertyName))
                return String.Format("{0}='{1}'", PropertyNameReplacement, token[PropertyName]);

            return String.Empty;
        }
        /// <summary>
        /// Parses Token properties into HTML attributes
        /// </summary>
        /// <param name="token">token to parse</param>
        /// <param name="globalPropertyParseRules">global property parse rules</param>
        /// <returns>HTML for attributes to add to element</returns>
        private string ParsePropertiesInAttributes(Token token, IEnumerable<PropertyParseRule> globalPropertyParseRules)
        {
            var propertiesHtmlBuilder = new StringBuilder();

            List<PropertyParseRule> propertyParseRules = new List<PropertyParseRule>(_localPropertyParseRules);

            foreach (var ppr in globalPropertyParseRules)
            {
                if (propertyParseRules.Count(ppr2 => ppr2.PropertyName == ppr.PropertyName) == 0)
                    propertyParseRules.Add(ppr);
            }

            foreach (PropertyParseRule ppr in propertyParseRules)
            {
                if (token.HasProperty(ppr.PropertyName))
                    propertiesHtmlBuilder.AppendFormat(" {0}", ppr.ConstructHtml(token));
            }

            return propertiesHtmlBuilder.ToString();
        }