@apollohg/react-native-prose-editor 0.5.16 → 0.5.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -82,14 +82,37 @@ final class PositionBridge {
82
82
 
83
83
  static func utf16OffsetToScalar(_ utf16Offset: Int, in textView: UITextView) -> UInt32 {
84
84
  let text = textView.text ?? ""
85
- let clampedOffset = min(max(utf16Offset, 0), (text as NSString).length)
86
85
  let conversionTable = textViewConversionTable(for: textView)
86
+ guard !conversionTable.adjustedUtf16ToScalar.isEmpty else { return 0 }
87
+ let clampedOffset = min(
88
+ max(utf16Offset, 0),
89
+ min((text as NSString).length, conversionTable.adjustedUtf16ToScalar.count - 1)
90
+ )
87
91
  return conversionTable.adjustedUtf16ToScalar[clampedOffset]
88
92
  }
89
93
 
94
+ static func utf16OffsetToScalar(_ utf16Offset: Int, in attributedString: NSAttributedString) -> UInt32 {
95
+ let conversionTable = adjustedConversionTable(for: attributedString)
96
+ guard !conversionTable.isEmpty else { return 0 }
97
+ let clampedOffset = min(max(utf16Offset, 0), conversionTable.count - 1)
98
+ return conversionTable[clampedOffset]
99
+ }
100
+
90
101
  static func scalarToUtf16Offset(_ scalar: UInt32, in textView: UITextView) -> Int {
91
102
  let conversionTable = textViewConversionTable(for: textView)
92
103
  let utf16ToScalar = conversionTable.adjustedUtf16ToScalar
104
+ return scalarToUtf16Offset(scalar, inAdjustedUtf16ToScalarTable: utf16ToScalar)
105
+ }
106
+
107
+ static func scalarToUtf16Offset(_ scalar: UInt32, in attributedString: NSAttributedString) -> Int {
108
+ let utf16ToScalar = adjustedConversionTable(for: attributedString)
109
+ return scalarToUtf16Offset(scalar, inAdjustedUtf16ToScalarTable: utf16ToScalar)
110
+ }
111
+
112
+ private static func scalarToUtf16Offset(
113
+ _ scalar: UInt32,
114
+ inAdjustedUtf16ToScalarTable utf16ToScalar: [UInt32]
115
+ ) -> Int {
93
116
  guard scalar > 0, !utf16ToScalar.isEmpty else {
94
117
  return 0
95
118
  }