diff options
| author | Emilio Jesus Gallego Arias | 2016-10-10 17:10:23 +0200 |
|---|---|---|
| committer | Emilio Jesus Gallego Arias | 2017-02-14 23:29:56 +0100 |
| commit | 2a4f21db56400ee8928f33c3b47edfee54579afc (patch) | |
| tree | fdd7e3e063cc6b9a005db818856b8b457c567e5b /lib | |
| parent | 0ca1717a3a1243d3fd905bb2f6c3d427f1f98dc6 (diff) | |
[safe-string] Use `String.init` to build string.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/unicode.ml | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/lib/unicode.ml b/lib/unicode.ml index ced5e258c2..3ac4e8ca7c 100644 --- a/lib/unicode.ml +++ b/lib/unicode.ml @@ -125,26 +125,29 @@ let utf8_of_unicode n = if n < 128 then String.make 1 (Char.chr n) else if n < 2048 then - let s = String.make 2 (Char.chr (128 + n mod 64)) in - begin - s.[0] <- Char.chr (192 + n / 64); - s - end + String.init 2 (fun idx -> + match idx with + | 0 -> Char.chr (192 + n / 64) + | 1 -> Char.chr (128 + n mod 64) + | _ -> 'x' + ) else if n < 65536 then - let s = String.make 3 (Char.chr (128 + n mod 64)) in - begin - s.[1] <- Char.chr (128 + (n / 64) mod 64); - s.[0] <- Char.chr (224 + n / 4096); - s - end + String.init 3 (fun idx -> + match idx with + | 0 -> Char.chr (224 + n / 4096) + | 1 -> Char.chr (128 + (n / 64) mod 64) + | 2 -> Char.chr (128 + n mod 64) + | _ -> 'x' + ) else - let s = String.make 4 (Char.chr (128 + n mod 64)) in - begin - s.[2] <- Char.chr (128 + (n / 64) mod 64); - s.[1] <- Char.chr (128 + (n / 4096) mod 64); - s.[0] <- Char.chr (240 + n / 262144); - s - end + String.init 4 (fun idx -> + match idx with + | 0 -> Char.chr (240 + n / 262144) + | 1 -> Char.chr (128 + (n / 4096) mod 64) + | 2 -> Char.chr (128 + (n / 64) mod 64) + | 4 -> Char.chr (128 + n mod 64) + | _ -> 'x' + ) (* If [s] is some UTF-8 encoded string and [i] is a position of some UTF-8 character within [s] |
