123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108# 1 "Camomile/public/xString.ml"(** eXtensible Unicode string.
The semantics matches the description of UStorage.
The detail may be going to change.*)(* Copyright 2002, 2003 Yamagata Yoriyuki. distributed with LGPL *)(* This library is free software; you can redistribute it and/or *)(* modify it under the terms of the GNU Lesser General Public License *)(* as published by the Free Software Foundation; either version 2 of *)(* the License, or (at your option) any later version. *)(* As a special exception to the GNU Library General Public License, you *)(* may link, statically or dynamically, a "work that uses this library" *)(* with a publicly distributed version of this library to produce an *)(* executable file containing portions of this library, and distribute *)(* that executable file under terms of your choice, without any of the *)(* additional requirements listed in clause 6 of the GNU Library General *)(* Public License. By "a publicly distributed version of this library", *)(* we mean either the unmodified Library as distributed by the authors, *)(* or a modified version of this library that is distributed under the *)(* conditions defined in clause 3 of the GNU Library General Public *)(* License. This exception does not however invalidate any other reasons *)(* why the executable file might be covered by the GNU Library General *)(* Public License . *)(* This library is distributed in the hope that it will be useful, *)(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *)(* Lesser General Public License for more details. *)(* You should have received a copy of the GNU Lesser General Public *)(* License along with this library; if not, write to the Free Software *)(* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *)(* USA *)(* You can contact the authour by sending email to *)(* yoriyuki.y@gmail.com *)moduletypeXStringSig=sigtypexstring=UChar.tXArray.tvalget:xstring->int->UChar.tvalset:xstring->int->UChar.t->unitvallength:xstring->inttypeindexvallook:xstring->index->UChar.tvalnth:xstring->int->indexvalfirst:xstring->indexvallast:xstring->indexvalout_of_range:xstring->index->boolvalnext:xstring->index->indexvalprev:xstring->index->indexvalmove:xstring->index->int->indexvalcompare_index:xstring->index->index->intvalmake:?bufsize:int->int->UChar.t->xstringvalclear:xstring->unitvalreset:xstring->unitvalcopy:xstring->xstringvalsub:xstring->int->int->xstringvaladd_char:xstring->UChar.t->unitvaladd_text:xstring->'aUText.text->unitvaladd_xstring:xstring->xstring->unitvalshrink:xstring->int->unitvalappend:xstring->xstring->xstringvalutext_of:xstring->UText.tvalustring_of:xstring->UText.ustringvaliter:(UChar.t->unit)->xstring->unitvalcompare:xstring->xstring->intendmoduleXStringAux:XStringSig=structincludeXArraytypexstring=UChar.tXArray.tletreccompare_auxit1t2=ifi>=lengtht1thenifi>=lengtht2then0else~-1elseifi>=lengtht2then1elsematchUChar.compare(XArray.gett1i)(XArray.gett2i)with0->compare_aux(i+1)t1t2|sgn->sgnletcomparet1t2=compare_aux0t1t2letadd_xstring=add_xarrayletadd_char=add_elementletadd_textbt=UText.iter(add_charb)tletustring_ofb=UText.init_ustring(lengthb)(getb)letutext_ofb=UText.init(lengthb)(getb)endincludeXStringAuxtypet=xstringletinitlenf=XArray.initlen(UChar.chr_of_uint0)fmoduleBuf=structincludeXStringAuxtypebuf=xstringletcreatebufsize=make~bufsize0(UChar.chr_of_uint0)letcontentsx=xletadd_string=add_xstringletadd_buffer=add_xstringend