@@ -95,15 +95,12 @@ extension CFStringTokenizer {
9595 func currentFuriganaAnnotation( in string: NSString ) -> ( NSString , NSRange ) ? {
9696 let range = currentTokenRange ( )
9797 let tokenStr = string. substring ( with: range)
98- guard let latin = currentTokenAttribute ( . latinTranscription) ,
98+ guard tokenStr. unicodeScalars. contains ( where: CharacterSet . kanji. contains) ,
99+ let latin = currentTokenAttribute ( . latinTranscription) ,
99100 let hiragana = latin. applyingTransform ( . latinToHiragana, reverse: false ) ,
100- let katakana = latin. applyingTransform ( . hiraganaToKatakana, reverse: false ) ,
101- !katakana. isEmpty,
102- katakana != tokenStr,
103- hiragana != tokenStr else {
101+ let ( rangeToAnnotate, rangeInAnnotation) = rangeOfUncommonContent ( tokenStr, hiragana) else {
104102 return nil
105103 }
106- let ( rangeToAnnotate, rangeInAnnotation) = rangeOfUncommonContent ( tokenStr, hiragana) !
107104 let annotation = String ( hiragana [ rangeInAnnotation] ) as NSString
108105 var nsrangeToAnnotate = NSRange ( rangeToAnnotate, in: tokenStr)
109106 nsrangeToAnnotate. location += range. location
@@ -112,7 +109,7 @@ extension CFStringTokenizer {
112109}
113110
114111private func rangeOfUncommonContent( _ s1: String , _ s2: String ) -> ( Range < String . Index > , Range < String . Index > ) ? {
115- guard s1 != s2 else {
112+ guard s1 != s2, !s1 . isEmpty , !s2 . isEmpty else {
116113 return nil
117114 }
118115 var ( l1, l2) = ( s1. startIndex, s2. startIndex)
@@ -125,15 +122,16 @@ private func rangeOfUncommonContent(_ s1: String, _ s2: String) -> (Range<String
125122 }
126123
127124 var ( r1, r2) = ( s1. endIndex, s2. endIndex)
128- while s1 [ r1 ] == s2 [ r2 ] {
125+ repeat {
129126 guard let nr1 = s1. index ( r1, offsetBy: - 1 , limitedBy: s1. startIndex) ,
130127 let nr2 = s2. index ( r2, offsetBy: - 1 , limitedBy: s2. startIndex) else {
131128 break
132129 }
133130 ( r1, r2) = ( nr1, nr2)
134- }
131+ } while s1 [ r1] == s2 [ r2]
132+
135133 let range1 = ( l1... r1) . relative ( to: s1. indices)
136- let range2 = ( l2... r2) . relative ( to: s1 . indices)
134+ let range2 = ( l2... r2) . relative ( to: s2 . indices)
137135 return ( range1, range2)
138136}
139137
0 commit comments