private bool ProcessScriptObject(ITaskProgressHelper <GenerateFilesProgress> progressHelper, object scriptObject, string folderName, IScript script, ProjectFileTreeNode parentNode)
        {
            bool   success    = true;
            string scriptName = UpdateScriptName(scriptObject, script);
            string fileName   = Path.Combine(folderName, scriptName);

            if (scriptName.IndexOf("#") >= 0)
            {
                success = false;
            }
            if (success)
            {
                TextFileInformation fileInfo = new TextFileInformation();
                fileInfo.RelativeFilePath = fileName;

                try
                {
                    object[] parameters = new object[0];

                    if (project.FileSkippingIsImplemented)
                    {
                        try
                        {
                            // Reset the SkipCurrentFile variable
                            _Loader.CallTemplateFunction("InternalFunctions.ResetSkipCurrentFile", ref parameters);
                        }
                        catch
                        {
                            project.FileSkippingIsImplemented = false;
                        }
                    }
                    // Call the script file function to get the file text body
                    parameters = new[] { scriptObject };
                    // Check whether we must skip the current file
                    string str = (string)_Loader.CallTemplateFunction(script.ScriptName, ref parameters);

                    if (progressHelper.IsCancellationPending())
                    {
                        return(false);
                    }

                    parameters = new object[0];

                    bool skipCurrentFile = false;

                    if (project.FileSkippingIsImplemented)
                    {
                        skipCurrentFile = (bool)_Loader.CallTemplateFunction("InternalFunctions.MustSkipCurrentFile", ref parameters);
                    }
                    if (!skipCurrentFile)
                    {
                        str = Utility.StandardizeLineBreaks(str, Utility.LineBreaks.Windows);
                        string fullPath = Path.Combine(
                            _Controller.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator),
                            fileName);

                        _Loader.WriteScriptToFile(str, fullPath);

                        fileInfo.NewGenFile = new TextFile(fullPath, false);

                        string        versionNumberString = _Loader.GetAssemblyVersionNumber();
                        VersionNumber versionNumber;
                        if (VersionNumber.TryParse(versionNumberString, out versionNumber))
                        {
                            // Get the template language from the template function.
                            string templateLanguageString = _Loader.GetTemplateFunctionLanguage(script.ScriptName);
                            try
                            {
                                fileInfo.TemplateLanguage = SyntaxEditorHelper.LanguageEnumFromName(templateLanguageString);
                            } catch (NotImplementedException)
                            {
                                fileInfo.TemplateLanguage = null;
                            }
                        }

                        parentNode.AddChildNode(fileInfo, scriptName);
                        AddFileCountToPreviousEventAndRefire(progressHelper, 1);
                    }
                }
                catch (Slyce.Loader.Exceptions.TemplateFunctionException ex)
                {
                    success = false;
                    string message = "<span class='error'>" + ex.Message + "</span>";

                    if (ex.InnerException != null)
                    {
                        message += ":<br/>" + Environment.NewLine + "<b>" + ex.InnerException.Message + "</b>" +
                                   Environment.NewLine + GetCleanTemplateFunctionErrorStackTrace(ex) +
                                   Environment.NewLine + "Target Site: " + ex.InnerException.TargetSite;
                    }
                    RaiseTemplateFunctionCallErrorEvent(ex);
                    // Do nothing, just skip the file because the error will get reported to the user.
                    parentNode.AddChildNode(fileInfo, scriptName).GenerationError = new GenerationError(fileName, message);
                }
                catch (Exception ex)
                {
                    string message = "<span class='error'>" + ex.Message + "</span>";

                    if (ex.InnerException != null)
                    {
                        message += ":<br/>" + Environment.NewLine + "<b>" + ex.InnerException.Message + "</b>" +
                                   Environment.NewLine + GetCleanTemplateFunctionErrorStackTrace(ex) +
                                   Environment.NewLine + "Target Site: " + ex.InnerException.TargetSite;
                    }

                    parentNode.AddChildNode(fileInfo, scriptName).GenerationError = new GenerationError(fileName, message);
                    // Make sure any other type of exception gets thrown
                    throw;
                }
            }
            return(success);
        }