/// <summary>
        /// This replaces the HTML placeholders that we're rendered into the html
        /// markup before the module calls this method to update the placeholders with 
        /// the real dependencies.
        /// </summary>
        /// <param name="currentContext"></param>
        /// <param name="html"></param>
        /// <param name="jsMarkupRegex"></param>
        /// <param name="cssMarkupRegex"></param>
        /// <param name="output"></param>
        /// <returns></returns>
        public static string ParseHtmlPlaceholders(HttpContextBase currentContext, string html, string jsMarkupRegex, string cssMarkupRegex, RendererOutput[] output)
        {
            html = Regex.Replace(html, jsMarkupRegex,
                (m) =>
                {
                    var grp = m.Groups["renderer"];
                    if (grp != null && output.Any())
                    {
                        var rendererOutput = output.SingleOrDefault(x => x.Name == grp.ToString());

                        var args = new PlaceholderReplacementEventArgs(currentContext, ClientDependencyType.Javascript,
                            rendererOutput != null ? rendererOutput.OutputJs : "",
                            m);
                        OnPlaceholderReplaced(args);

                        return args.ReplacedText;
                    }

                    return m.ToString();

                }, RegexOptions.Compiled);

            html = Regex.Replace(html, cssMarkupRegex,
                (m) =>
                {
                    var grp = m.Groups["renderer"];
                    if (grp != null && output.Any())
                    {
                        var rendererOutput = output.SingleOrDefault(x => x.Name == grp.ToString());

                        var args = new PlaceholderReplacementEventArgs(currentContext, ClientDependencyType.Css,
                            rendererOutput != null ? rendererOutput.OutputCss : "",
                            m);
                        OnPlaceholderReplaced(args);
                        return args.ReplacedText;
                    }

                    return m.ToString();

                }, RegexOptions.Compiled);

            var replacedArgs = new PlaceholdersReplacedEventArgs(currentContext, html);
            OnAllPlaceholdersReplaced(replacedArgs);
            return replacedArgs.ReplacedText;
        }
        /// <summary>
        /// This replaces the HTML placeholders that we're rendered into the html
        /// markup before the module calls this method to update the placeholders with 
        /// the real dependencies.
        /// </summary>
        /// <param name="currentContext"></param>
        /// <param name="html"></param>
        /// <param name="jsMarkupRegex"></param>
        /// <param name="cssMarkupRegex"></param>
        /// <param name="output"></param>
        /// <returns></returns>
        public static string ParseHtmlPlaceholders(HttpContextBase currentContext, string html, string jsMarkupRegex, string cssMarkupRegex, RendererOutput[] output)
        {
            html = Regex.Replace(html, jsMarkupRegex,
                (m) =>
                {
                    var grp = m.Groups["renderer"];
                    if (grp != null)
                    {
                        if (output.Any())
                        {
                            var rendererOutput = output.SingleOrDefault(x => x.Name == grp.ToString());

                            var args = new PlaceholderReplacementEventArgs(currentContext, ClientDependencyType.Javascript,
                                rendererOutput != null ? rendererOutput.OutputJs : "",
                                m);
                            OnPlaceholderReplaced(args);

                            return args.ReplacedText;
                        }
                        else
                        {
                            //output a message saying that there were no refs
                            return "<!-- CDF: No JS dependencies were declared //-->";   
                        }                        
                    }
                    
                    return m.ToString();

                }, RegexOptions.Compiled);

            html = Regex.Replace(html, cssMarkupRegex,
                (m) =>
                {
                    var grp = m.Groups["renderer"];
                    if (grp != null)
                    {
                        if (output.Any())
                        {
                            var rendererOutput = output.SingleOrDefault(x => x.Name == grp.ToString());

                            var args = new PlaceholderReplacementEventArgs(currentContext, ClientDependencyType.Css,
                                rendererOutput != null ? rendererOutput.OutputCss : "",
                                m);
                            OnPlaceholderReplaced(args);
                            return args.ReplacedText;
                        }
                        else
                        {
                            //output a message saying that there were no refs
                            return "<!-- CDF: No CSS dependencies were declared //-->";
                        }                        
                    }

                    return m.ToString();

                }, RegexOptions.Compiled);


            var replacedArgs = new PlaceholdersReplacedEventArgs(currentContext, html);
            OnAllPlaceholdersReplaced(replacedArgs);
            return replacedArgs.ReplacedText;
        }