private UmlBlock[] ParseBlocks(string[] lines, ref int i, int parentIndent) { int baseIndent = nextIndent(lines, i); List <UmlBlock> blocks = new List <UmlBlock> (); for (; i < lines.Length; ++i) { string line = lines [i]; int indent = line.Indentation(); // Console.WriteLine (indent + " " + line + " (" + baseIndent + ")"); if (line.Trim().Contains("//")) { //Console.WriteLine ("CurrentComments.add(" + line + ")"); Comments.AddParsedComment(line.TrimAll().Substring(2).TrimAll()); } else if (indent < baseIndent) { --i; break; } else if (indent == baseIndent) { UmlBlock block; string[] comments = Comments.CurrentComments(); if (i + 1 < lines.Length && nextIndent(lines, i + 1) > indent) { i += 1; block = new UmlBlock( name: line.TrimAll(), content: ParseBlocks(lines, ref i, indent), comments: comments ); } else { block = new UmlBlock( name: line.TrimAll(), comments: comments ); } blocks.Add(block); } else if (line.Trim().Length > 0) { throw new InvalidOperationException("This should never happen! " + line); } } return(blocks.ToArray()); }