github.com/gopherjs/gopherjs@v1.19.0-beta1.0.20240506212314-27071a8796e4/compiler/natives/src/unicode/unicode.go (about) 1 //go:build js 2 // +build js 3 4 package unicode 5 6 func to(_case int, r rune, caseRange []CaseRange) (mappedRune rune, foundMapping bool) { 7 if _case < 0 || MaxCase <= _case { 8 return ReplacementChar, false 9 } 10 lo := 0 11 hi := len(caseRange) 12 for lo < hi { 13 m := lo + (hi-lo)/2 14 cr := &caseRange[m] // performance critical for GopherJS: get address here instead of copying the CaseRange 15 if rune(cr.Lo) <= r && r <= rune(cr.Hi) { 16 delta := rune(cr.Delta[_case]) 17 if delta > MaxRune { 18 return rune(cr.Lo) + ((r-rune(cr.Lo))&^1 | rune(_case&1)), true 19 } 20 return r + delta, true 21 } 22 if r < rune(cr.Lo) { 23 hi = m 24 } else { 25 lo = m + 1 26 } 27 } 28 return r, false 29 }