int (@NotNull FoldRegion region, int offset, boolean leanTowardsLargerOffsets) { if (offset < 0 || offset == 0 && !leanTowardsLargerOffsets) return 0; String text = region.getPlaceholderText(); if (offset > text.length()) { offset = text.length(); leanTowardsLargerOffsets = true; } int logicalColumn = LogicalPositionCache.calcColumn(text, 0, 0, offset, getTabSize()); int maxColumn = 0; for (LineLayout.VisualFragment fragment : getFoldRegionLayout(region).getFragmentsInVisualOrder(0)) { int startLC = fragment.getStartLogicalColumn(); int endLC = fragment.getEndLogicalColumn(); if (logicalColumn > startLC && logicalColumn < endLC || logicalColumn == startLC && leanTowardsLargerOffsets || logicalColumn == endLC && !leanTowardsLargerOffsets) { return fragment.logicalToVisualColumn(logicalColumn); } maxColumn = fragment.getEndVisualColumn(); } return maxColumn; }