private int getLogicalColumn(int startLogicalColumn, int offset) { assert offset >= startOffset; assert offset <= endOffset; int currentStartOffset = startOffset; for (LineFragment fragment : fragments) { int currentEndOffset = currentStartOffset + fragment.getLength(); startLogicalColumn = fragment.offsetToLogicalColumn( startLogicalColumn, Math.min(offset, currentEndOffset) - currentStartOffset); currentStartOffset = currentEndOffset; if (offset <= currentStartOffset) break; } return startLogicalColumn; }