Syntax highlighting has been done line-at-a-time. Done this way, the lexer resets the context at each line, distorting the formatting.
This change will render the whole file at once and feed the highlighted text line-at-a-time to be wrapped by the SourceFileRenderer.
Leading/trailing newlines were being ignored by Pygments but since each line was rendered in its own row, it didn't matter. This bug was masked by the line-at-a-time algorithm. So now we need to add "stripnl=False" to the CppLexer to change its behavior to match the expectation.