lib/core: Re-made `length` an attribute in `FlatString` since its cost as lazy was...
[nit.git] / lib / core / text / native.nit
index 5a74cd1..9ea8382 100644 (file)
@@ -16,7 +16,7 @@ import math
 
 redef class Byte
        # Gives the length of the UTF-8 char starting with `self`
-       private fun u8len: Int do
+       fun u8len: Int do
                if self & 0b1000_0000u8 == 0u8 then
                        return 1
                else if self & 0b1110_0000u8 == 0b1100_0000u8 then
@@ -31,6 +31,21 @@ redef class Byte
        end
 end
 
+redef class Int
+       # Returns the code_point from a utf16 surrogate pair
+       #
+       #     assert 0xD83DDE02.from_utf16_surr == 0x1F602
+       fun from_utf16_surr: Int do
+               var hi = (self & 0xFFFF0000) >> 16
+               var lo = self & 0xFFFF
+               var cp = 0
+               cp += (hi - 0xD800) << 10
+               cp += lo - 0xDC00
+               cp += 0x10000
+               return cp
+       end
+end
+
 # Native strings are simple C char *
 extern class NativeString `{ char* `}
        # Creates a new NativeString with a capacity of `length`
@@ -130,7 +145,7 @@ extern class NativeString `{ char* `}
                return ns_i
        end
 
-       # Gets the byte index of char at position `n` in UTF-8 String
+       # Gets the char index of byte at position `n` in a UTF-8 String
        #
        # `char_from` and `byte_from` are cached values to seek from.
        #