That fuck shit the fascists are using
at master 37 lines 1.5 kB view raw
1@file:JvmName("BodyRangeUtil") 2 3package org.tm.archive.database 4 5import org.tm.archive.database.model.databaseprotos.BodyRangeList 6 7/** 8 * Given a list of body adjustment from removing mention names from a message and replacing 9 * them with a placeholder, we need to adjust the ranges within [BodyRangeList] to account 10 * for the now shorter text. 11 */ 12fun BodyRangeList?.adjustBodyRanges(bodyAdjustments: List<BodyAdjustment>): BodyRangeList? { 13 if (this == null || bodyAdjustments.isEmpty()) { 14 return this 15 } 16 17 val newBodyRanges = ranges.toMutableList() 18 19 for (adjustment in bodyAdjustments) { 20 val adjustmentLength = adjustment.oldLength - adjustment.newLength 21 22 ranges.forEachIndexed { listIndex, range -> 23 val needsRangeStartsAfterAdjustment = range.start > adjustment.startIndex 24 val needsRangeCoversAdjustment = range.start <= adjustment.startIndex && range.start + range.length >= adjustment.startIndex + adjustment.oldLength 25 26 val newRange = newBodyRanges[listIndex] 27 val newStart: Int? = if (needsRangeStartsAfterAdjustment) newRange.start - adjustmentLength else null 28 val newLength: Int? = if (needsRangeCoversAdjustment) newRange.length - adjustmentLength else null 29 30 if (newStart != null || newLength != null) { 31 newBodyRanges[listIndex] = newRange.newBuilder().start(newStart ?: newRange.start).length(newLength ?: newRange.length).build() 32 } 33 } 34 } 35 36 return BodyRangeList(ranges = newBodyRanges) 37}