Revision: 426
Author: ygrekheretix
Date: Tue Nov 12 17:09:25 2013 UTC
Log: add UTF8.substring (Closes issue 4)
http://code.google.com/p/ocaml-extlib/source/detail?r=426
Added:
/trunk/test/test_bd_UTF8_001.ml
Modified:
/trunk/extlib/uTF8.ml
/trunk/extlib/uTF8.mli
=======================================
--- /dev/null
+++ /trunk/test/test_bd_UTF8_001.ml Tue Nov 12 17:09:25 2013 UTC
@@ -0,0 +1,75 @@
+let substring_inputs =
+[
+ [|
+ "";
+ "⟿";
+ "⟿ቄ";
+ "⟿ቄş";
+ "⟿ቄş龟";
+ "⟿ቄş龟¯";
+ |];
+ [|
+ "";
+ "ç";
+ "çe";
+ "çek";
+ "çeko";
+ "çekos";
+ "çekosl";
+ "çekoslo";
+ "çekoslov";
+ "çekoslova";
+ "çekoslovak";
+ "çekoslovaky";
+ "çekoslovakya";
+ "çekoslovakyal";
+ "çekoslovakyala";
+ "çekoslovakyalaş";
+ "çekoslovakyalaşt";
+ "çekoslovakyalaştı";
+ "çekoslovakyalaştır";
+ "çekoslovakyalaştıra";
+ "çekoslovakyalaştıram";
+ "çekoslovakyalaştırama";
+ "çekoslovakyalaştıramad";
+ "çekoslovakyalaştıramadı";
+ "çekoslovakyalaştıramadık";
+ "çekoslovakyalaştıramadıkl";
+ "çekoslovakyalaştıramadıkla";
+ "çekoslovakyalaştıramadıklar";
+ "çekoslovakyalaştıramadıkları";
+ "çekoslovakyalaştıramadıklarım";
+ "çekoslovakyalaştıramadıklarımı";
+ "çekoslovakyalaştıramadıklarımız";
+ "çekoslovakyalaştıramadıklarımızd";
+ "çekoslovakyalaştıramadıklarımızda";
+ "çekoslovakyalaştıramadıklarımızdan";
+ "çekoslovakyalaştıramadıklarımızdanm";
+ "çekoslovakyalaştıramadıklarımızdanmı";
+ "çekoslovakyalaştıramadıklarımızdanmıs";
+ "çekoslovakyalaştıramadıklarımızdanmısı";
+ "çekoslovakyalaştıramadıklarımızdanmısın";
+ "çekoslovakyalaştıramadıklarımızdanmısını";
+ "çekoslovakyalaştıramadıklarımızdanmısınız";
+ |]
+]
+
+let test_substring () =
+ let test a =
+ let m = Array.length a - 1 in
+ let v = a.(m) in
+ assert(UTF8.length v = m);
+ for i = 0 to m do
+ assert(a.(i) = UTF8.substring v 0 i);
+ done;
+ for i = 0 to m - 1 do
+ for j = i to m - 1 do
+ let u = UTF8.substring v i (j - i + 1) in
+ UTF8.validate u
+ done
+ done
+ in
+ List.iter test substring_inputs
+
+let test () =
+ Util.run_test ~test_name:"bd_UTF.substring" test_substring
=======================================
--- /trunk/extlib/uTF8.ml Thu May 6 09:44:41 2004 UTC
+++ /trunk/extlib/uTF8.ml Tue Nov 12 17:09:25 2013 UTC
@@ -108,6 +108,11 @@
let nth s n = nth_aux s 0 n
+let substring s i n =
+ let j = nth s i in
+ let j' = (nth_aux s j n) - 1 in
+ String.sub s j (j' - j + 1)
+
let last s = search_head_backward s (String.length s - 1)
let out_of_range s i = i < 0 || i >= String.length s
=======================================
--- /trunk/extlib/uTF8.mli Thu May 6 09:44:41 2004 UTC
+++ /trunk/extlib/uTF8.mli Tue Nov 12 17:09:25 2013 UTC
@@ -66,6 +66,10 @@
returns the Unicode character of the location [i] in the string [s]. *)
val look : t -> index -> uchar
+(** [substring s i len] returns the substring made of the Unicode
locations [i] to [i + len - 1] inclusive.
+ The string is always copied *)
+val substring : t -> int -> int -> t
+
(** [out_of_range s i]
tests whether [i] is a position inside of [s]. *)
val out_of_range : t -> index -> bool