void (int endOffset) { if (endOffset <= myStartOffset) { return; } for (int i = myStartOffset; i < endOffset; i++) { char c = myText.charAt(i); switch (c) { case '\r': if (i + 1 < myText.length() && myText.charAt(i + 1) == '\n') { myIndentSymbolsToStripAtCurrentLine = myIndentSymbolsToStrip; builder.addText(myStartOffset + myOffsetShift, i + myOffsetShift + 1); myStartOffset = i + 2; myOffsetShift--; //noinspection AssignmentToForLoopParameter i++; break; } // Intended fall-through. case '\n': myIndentSymbolsToStripAtCurrentLine = myIndentSymbolsToStrip; builder.addText(myStartOffset + myOffsetShift, i + myOffsetShift + 1); myStartOffset = i + 1; break; // Intended fall-through. case ' ': case '\t': if (myIndentSymbolsToStripAtCurrentLine > 0) { myIndentSymbolsToStripAtCurrentLine--; myStartOffset++; continue; } default: myIndentSymbolsToStripAtCurrentLine = 0; } } if (myStartOffset < endOffset) { builder.addText(myStartOffset + myOffsetShift, endOffset + myOffsetShift); myStartOffset = endOffset; } }