// ----------------------------------------------------------------------------------------- public int GenerateIdeaFiles(Idea SourceIdea, IEnumerable <Idea> ExcludedIdeas, double ProgressPercentageStart, double ProgressPercentageEnd, string WorkingDirectory, ref bool WorkingDirExists, bool CreateContentDir = true) { // Generate file, if selected var FilesGenerated = 0; var FileName = SourceIdea.TechName; if (!(SourceIdea.IsIn(ExcludedIdeas) || ((SourceIdea is Relationship) && !this.Configuration.GenerateFilesForRelationships))) { // Determine compiled-template to use Template CompiledTemplate = null; if (SourceIdea is Composition) { CompiledTemplate = this.CompositionTemplate; } else if (this.CompiledTemplates.ContainsKey(SourceIdea.IdeaDefinitor)) { CompiledTemplate = this.CompiledTemplates[SourceIdea.IdeaDefinitor]; } else { var TemplateText = SourceIdea.IdeaDefinitor.GetGenerationFinalTemplate(this.Language); if (!TemplateText.IsAbsent()) { CompiledTemplate = CreateCompiledTemplate(SourceIdea.IdeaDefinitor.ToString(), TemplateText, true).Result; this.CompiledTemplates.Add(SourceIdea.IdeaDefinitor, CompiledTemplate); } } // Apply template to source Idea if (CompiledTemplate != null) { var GeneratedOutput = CompiledTemplate.Render(DotLiquid.Hash.FromAnonymousObject(SourceIdea)); var GeneratedResult = new GenerationResult((this.Configuration.UseIdeaTechNameForFileNaming ? SourceIdea.TechName : SourceIdea.Name) + GenerationManager.DEFAULT_GEN_EXT, GeneratedOutput); // Create directory and save file, if needed if (!WorkingDirExists) { if (!Directory.Exists(WorkingDirectory)) { Directory.CreateDirectory(WorkingDirectory); } WorkingDirExists = true; } FileName = GeneratedResult.FileName; var GenerationPath = Path.Combine(WorkingDirectory, FileName); General.StringToFile(GenerationPath, GeneratedResult.GeneratedText); FilesGenerated = 1; } } // Determine Ideas to generate if (SourceIdea.CompositeIdeas.Count > 0) { var SelectedIdeas = SourceIdea.CompositeIdeas.Where(ideasel => !ideasel.IsIn(ExcludedIdeas) || ideasel.CompositeIdeas.Count > 0 || (this.Configuration.GenerateFilesForRelationships && ideasel is Relationship)).ToList(); // Create content directory var ContentDirectory = (CreateContentDir ? Path.Combine(WorkingDirectory, Path.GetFileNameWithoutExtension(FileName) + this.Configuration.CompositeContentSubdirSuffix.Trim()) : WorkingDirectory); var ContentDirExists = !CreateContentDir; // Determine progress var ProgressStep = ((ProgressPercentageEnd - ProgressPercentageStart) / (double)SelectedIdeas.Count); var ProgressPercentage = ProgressPercentageStart; // Travel composites foreach (var SelectedIdea in SelectedIdeas) { ProgressPercentage += ProgressStep; FilesGenerated += GenerateIdeaFiles(SelectedIdea, ExcludedIdeas, ProgressPercentage, (ProgressPercentage + ProgressStep), ContentDirectory, ref ContentDirExists); } } return(FilesGenerated); }