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 ();
}