// 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; }
// 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; }
// 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; }
// 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; }
// 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); }