private void WriteLiteral(string/*!*/ text, bool indent) {
string chomp = DetermineChomp(text);
WriteIndicator("|" + chomp, true, false, false);
increaseIndent(false, false);
WriteIndent();
bool breaks = false;
int start = 0, ending = 0;
while (ending <= text.Length) {
char c = '\0';
if (ending < text.Length) {
c = text[ending];
}
if (breaks) {
if (c == 0 || c != '\n') {
// q sequence of eolns followed by non-eoln:
for (int i = start; i < ending; i++) {
WriteLineBreak();
}
if (c != 0) {
WriteIndent();
} else if (chomp.Length == 0) {
WriteLineBreak();
}
start = ending;
}
} else if (c == 0 || c == '\n') {
// non-empty line:
_writer.Write(text.Substring(start, ending - start));
if (c == 0) {
WriteLineBreak();
}
start = ending;
}
if (c != 0) {
breaks = c == '\n';
}
ending++;
}
_indent = _indents.Pop();
}