public void Render(StreamWriter writer, int level = -1) { string leadingWhitespace = ""; string leadingWhitespacer = (Parent != null ? " " : ""); for (var i = 0; i < level; i++) { leadingWhitespacer += " "; leadingWhitespace += " "; } if (Parent != null) { writer.WriteLine(leadingWhitespace + "#class add " + this.Name); } foreach (string key in this.Children.Keys.OrderBy(x => x)) { this.Children[key].Render(writer, level + 1); } foreach (RantDictionaryEntry entry in Entries.OrderBy(x => x.Terms[0].Value)) { if (entry.Terms.Length > 1) { writer.WriteLine(leadingWhitespacer + ">> {0}", entry.Terms.Select((t, i) => i == 0 ? t.Value : Diff.Derive(entry.Terms[0].Value, t.Value)).Aggregate((c, n) => c + "/" + n)); } else { writer.WriteLine(leadingWhitespacer + "> {0}", entry.Terms.Select(t => t.Value).Aggregate((c, n) => c + "/" + n)); } if (!Util.IsNullOrWhiteSpace(entry.Terms[0].Pronunciation)) { writer.WriteLine(leadingWhitespacer + " | pron {0}", entry.Terms.Select(t => t.Pronunciation).Aggregate((c, n) => c + "/" + n)); } string[] uniqueClasses = GetClassesForExport(entry).Where(x => !Classes.Contains(x)).OrderBy(x => x).ToArray(); if (uniqueClasses.Length > 0) { writer.WriteLine(leadingWhitespacer + " | class {0}", uniqueClasses.Aggregate((c, n) => c + " " + n)); } if (entry.Weight != 1) { writer.WriteLine(leadingWhitespacer + " | weight {0}", entry.Weight); } } if (Parent != null) { writer.WriteLine(leadingWhitespace + "#class remove " + this.Name + "\n"); } }