public static void WriteStats(TextWriter writer, ProjectStats projectStats, List <Language> languages, bool workstringOnly, bool workstringFallback) { var project = ResourcesHandler.Project; //Populate VoiceKit Stats Dictionary <string, VoiceKitStats> VoiceKits = new Dictionary <string, VoiceKitStats>(); foreach (var kvp in projectStats.Actors) { string voiceKitName = (project.GetActorFromID(kvp.Key) != null) ? project.GetActorFromID(kvp.Key).VoiceKit : null; if (voiceKitName != null) { VoiceKitStats voiceKitStats = VoiceKits.GetOrAdd(voiceKitName, (key) => new VoiceKitStats()); voiceKitStats.Words += kvp.Value.Words; voiceKitStats.Sentences += kvp.Value.Sentences; } } //Append project specific stats if (EditorCore.ProjectStats != null) { writer.WriteLine(EditorCore.ProjectStats(projectStats)); } writer.WriteLine(" * Source"); writer.WriteLine(""); if (workstringOnly) { writer.WriteLine("Workstring only"); } else { if (languages != null) { foreach (var language in languages) { writer.WriteLine(String.Format("Language : {0}", language.Name)); } } if (workstringFallback) { writer.WriteLine("Using Workstring fallback"); } } writer.WriteLine(""); foreach (var package in projectStats.Packages) { if (package != null) { writer.WriteLine(String.Format("Package : {0}", package.Name)); } } writer.WriteLine(""); writer.WriteLine(""); writer.WriteLine(" * General"); writer.WriteLine(""); writer.WriteLine(String.Format("Total Sentence Words : {0}", projectStats.SentenceWords)); writer.WriteLine(String.Format("Total Sentences : {0}", projectStats.Sentences)); writer.WriteLine(String.Format("Avg Words per Sentence : {0:0.0}", (float)projectStats.SentenceWords / (float)projectStats.Sentences)); writer.WriteLine(""); writer.WriteLine(String.Format("Total Reply Words : {0}", projectStats.ReplyWords)); writer.WriteLine(String.Format("Total Replies : {0}", projectStats.Replies)); writer.WriteLine(String.Format("Avg Words per Reply : {0:0.0}", (float)projectStats.ReplyWords / (float)projectStats.Replies)); writer.WriteLine(""); writer.WriteLine(""); writer.WriteLine(" * Actors"); writer.WriteLine(""); foreach (var kvp in projectStats.Actors) { float avg = (float)kvp.Value.Words / (float)kvp.Value.Sentences; writer.WriteLine(String.Format("{0} (\"{1}\") : {2} words ({3:0.0} per sentence)", kvp.Key, project.GetActorName(kvp.Key), kvp.Value.Words, avg)); } writer.WriteLine(""); writer.WriteLine(""); writer.WriteLine(" * VoiceKits"); writer.WriteLine(""); foreach (var kvp in VoiceKits) { float avg = (float)kvp.Value.Words / (float)kvp.Value.Sentences; writer.WriteLine(String.Format("{0} (\"{1}\") : {2} words ({3:0.0} per sentence)", kvp.Key, project.GetVoiceActorNameFromKit(kvp.Key), kvp.Value.Words, avg)); } writer.WriteLine(""); writer.WriteLine(""); writer.WriteLine(" * Dialogues"); writer.WriteLine(""); foreach (var kvp in projectStats.Dialogues) { float avg = (float)kvp.Value.SentenceWords / (float)kvp.Value.Sentences; writer.WriteLine(String.Format("{0} : {1} words ({2:0.0} per sentence)", kvp.Key, kvp.Value.SentenceWords, avg)); } }