X-Git-Url: http://nitlanguage.org diff --git a/lib/string_experimentations/utf8.nit b/lib/string_experimentations/utf8.nit index b1ba7d1..b7a74ce 100644 --- a/lib/string_experimentations/utf8.nit +++ b/lib/string_experimentations/utf8.nit @@ -16,6 +16,7 @@ module utf8 intrude import standard::string +intrude import standard::file in "C Header" `{ @@ -213,7 +214,7 @@ redef class FlatString redef fun to_cstring do if real_items != null then return real_items.as(not null) - var new_items = calloc_string(bytelen + 1) + var new_items = new NativeString(bytelen + 1) self.items.copy_to(new_items, bytelen, index[index_from].pos, 0) new_items[bytelen] = '\0' self.real_items = new_items @@ -244,7 +245,7 @@ redef class FlatString redef fun reversed do - var native = calloc_string(self.bytelen + 1) + var native = new NativeString(self.bytelen + 1) var length = self.length var index = self.index var pos = 0 @@ -277,7 +278,7 @@ redef class FlatString var my_real_len = length var my_real_fin_len = my_real_len * i - var target_string = calloc_string((finlen) + 1) + var target_string = new NativeString((finlen) + 1) var my_index = index var new_index = new StringIndex(my_real_fin_len) @@ -299,7 +300,7 @@ redef class FlatString redef fun to_upper do - var outstr = calloc_string(self.bytelen + 1) + var outstr = new NativeString(self.bytelen + 1) var out_index = 0 var index = self.index @@ -321,7 +322,7 @@ redef class FlatString redef fun to_lower do - var outstr = calloc_string(self.bytelen + 1) + var outstr = new NativeString(self.bytelen + 1) var out_index = 0 var index = self.index @@ -353,6 +354,20 @@ redef class FlatString end +redef class FlatBuffer + + # Fix for this particular implementation + # + # Since the to_s of a FlatBuffer now builds using + # the old String contructor, this breaks everything. + # + # This will disappear when UTF8 is fully-supported + redef fun to_s do + written = false + return to_cstring.to_s_with_length(length) + end +end + redef class NativeString # Creates the index for said NativeString @@ -391,8 +406,22 @@ redef class NativeString var real_len = new Container[Int](0) var length = cstring_length var x = make_index(length, real_len) - var new_self = calloc_string(length + 1) + var new_self = new NativeString(length + 1) copy_to(new_self, length, 0, 0) return new FlatString.with_infos_index(new_self, real_len.item, 0, real_len.item - 1, x, length) end end + +redef class OFStream + redef fun write(s) + do + assert is_writable + if s isa FlatText then + if s isa FlatString then + write_native(s.to_cstring, s.bytelen) + else + write_native(s.to_cstring, s.length) + end + else for i in s.substrings do write_native(i.to_cstring, i.length) + end +end