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  }