github.com/balzaczyy/golucene@v0.0.0-20151210033525-d0be9ee89713/core/util/unicode.go (about) 1 package util 2 3 // util/UnicodeUtil.java 4 5 const ( 6 UNI_SUR_HIGH_START = 0xD800 7 UNI_SUR_HIGH_END = 0xDBFF 8 UNI_SUR_LOW_START = 0xDC00 9 UNI_SUR_LOW_END = 0xDFFF 10 ) 11 12 // L345 13 func IsValidUTF16String(s []rune) bool { 14 size := len(s) 15 for i, ch := range s { 16 if ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END { 17 if i < size-1 { 18 i++ 19 nextCh := s[i] 20 if nextCh >= UNI_SUR_LOW_START && nextCh <= UNI_SUR_LOW_END { 21 // Valid surrogate pair 22 } else { 23 // Unmatched high surrogate 24 return false 25 } 26 } else { 27 // Unmatched high surrogate 28 return false 29 } 30 } else if ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END { 31 // Unmatched low surrogate 32 return false 33 } 34 } 35 36 return true 37 }