internal ResultItems InternalGetWhitespaces ( ITokenClass leftTokenClass, int leadingLineBreaks, int indentLevel, IEnumerable<IItem> whiteSpaces, ITokenClass rightTokenClass ) { var result = new ResultItems(); var emptyLines = 0; var isBeginOfLine = leadingLineBreaks > 0; foreach(var token in whiteSpaces) { if(isBeginOfLine && !Lexer.IsLineEnd(token)) { result.AddLineBreak(leadingLineBreaks - emptyLines); result.AddSpaces(indentLevel * Configuration.IndentCount); emptyLines = leadingLineBreaks; leadingLineBreaks = 0; isBeginOfLine = false; } if(Lexer.IsWhiteSpace(token) || (Lexer.IsLineEnd(token) && !IsRelevantLineBreak(emptyLines, rightTokenClass))) result.AddHidden(token); else { result.Add(token); if(Lexer.IsLineEnd(token)) emptyLines++; else emptyLines = Lexer.IsLineComment(token) ? 1 : 0; isBeginOfLine = !Lexer.IsComment(token); } } if(isBeginOfLine) { result.AddLineBreak(leadingLineBreaks - emptyLines); result.AddSpaces(indentLevel * Configuration.IndentCount); leadingLineBreaks = 0; } if (result.IsEmpty && SeparatorType.Get(leftTokenClass, rightTokenClass) == SeparatorType.Close) result.AddSpaces(1); Tracer.Assert(leadingLineBreaks == 0); return result; }