예제 #1
0
// Convert utf8 but strip BOM
FXint FXUTF8Codec::mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const {
  register FXint n1,n2;
  n1=utf2wc(wc,src,nsrc);
  if(0<n1 && wc==0xFEFF){
    n2=utf2wc(wc,src,nsrc);
    if(n2<0) return -n1+n2;
    if(n2==0) return 0;
    return n1+n2;
    }
  return n1;
  }
예제 #2
0
// Count multi-byte characters characters needed to convert utf8 from src
FXint FXTextCodec::utf2mblen(const FXchar* src,FXint nsrc) const {
  register FXint nr,len=0;
  FXchar buffer[64];
  FXwchar w;
  if(src && 0<nsrc){
    do{
      nr=utf2wc(w,src,nsrc);
      if(nr<=0) return nr;
      src+=nr;
      nsrc-=nr;
      len+=wc2mb(buffer,sizeof(buffer),w);
      }
    while(0<nsrc);
    }
  return len;
  }
예제 #3
0
// Convert utf8 characters at src to multi-byte characters at dst
FXint FXTextCodec::utf2mb(FXchar* dst,FXint ndst,const FXchar* src,FXint nsrc) const {
  register FXint nr,nw,len=0;
  FXwchar w;
  if(dst && src && 0<nsrc){
    do{
      nr=utf2wc(w,src,nsrc);
      if(nr<=0) return nr;
      src+=nr;
      nsrc-=nr;
      nw=wc2mb(dst,ndst,w);
      if(nw<=0) return nw;
      len+=nw;
      dst+=nw;
      ndst-=nw;
      }
    while(0<nsrc);
    }
  return len;
  }
예제 #4
0
// Convert utf8 characters at src to multi-byte characters at dst
FXint FXUTF16Codec::utf2mb(FXchar* dst,FXint ndst,const FXchar* src,FXint nsrc) const {
  register FXint nr,nw,len=0;
  FXwchar w;
  if(dst && src && 0<nsrc){
    dst[0]='\xFE';
    dst[1]='\xFF';
    dst+=2;
    len+=2;
    while(0<nsrc){
      nr=utf2wc(w,src,nsrc);
      if(nr<=0) return nr;
      src+=nr;
      nsrc-=nr;
      nw=wc2mb(dst,ndst,w);
      if(nw<=0) return nw;
      len+=nw;
      dst+=nw;
      ndst-=nw;
      }
    }
  return len;
  }
예제 #5
0
// Convert multi-byte characters from src to single wide character
FXint FXTextCodec::mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const {
  return utf2wc(wc,src,nsrc);
  }