示例#1
0
int m17n_ccx_filter(M17nCCX *m17n,FILE *in,FILE *out){
	int rcode = -1;
	int ecode;

	m17n->m_mtext = 0;
	m17n->m_dec = mconv_stream_converter(m17n->m_icode,in);
	if( m17n->m_dec == 0 ){
		m17n_ccx_freeconv(m17n);
		return -1;
	}
	m17n->m_enc = mconv_stream_converter(m17n->m_ocode,out);
	if( m17n->m_enc == 0 ){
		m17n_ccx_freeconv(m17n);
		return -2;
	}

	LAP("converter-set");
	m17n->m_mtext = mtext();
	m17n->m_dec->lenient = 1;
	mconv_decode(m17n->m_dec,m17n->m_mtext);
	LAP("decoded");
	m17n->m_enc->lenient = 1;
	m17n->m_enc->last_block = 1;
	ecode = mconv_encode(m17n->m_enc,m17n->m_mtext);
	rcode = 0;

	LAP("encoded");
	m17n_ccx_freeconv(m17n);
	LAP("filter-done");
	return rcode;
}
示例#2
0
文件: m17nlib.c 项目: NgoHuy/uim
static char *
convert_mtext2str(MText *mtext)
{
  mconv_rebind_buffer(converter, (unsigned char *)buffer_for_converter,
		      sizeof(buffer_for_converter));
  mconv_encode(converter, mtext);
  buffer_for_converter[converter->nbytes] = 0;

  return uim_strdup(buffer_for_converter);
}
示例#3
0
static ssize_t
mtext_to_utf8 (TableContext *context, MText *mt, unsigned char *buf,
	       size_t size)
{
  ssize_t nbytes;

  mconv_reset_converter (context->converter);
  mconv_rebind_buffer (context->converter, (const unsigned char *)buf, size);
  nbytes = mconv_encode (context->converter, mt);
  buf[nbytes] = '\0';

  return nbytes;
}
示例#4
0
static char *
mtext_to_utf8 (MText *mt)
{
  char *buf;
  size_t cap;

  mconv_reset_converter (utf8_converter);
  cap = (mtext_len (mt) + 1) * 6;
  buf = (char *) malloc (cap);
  mconv_rebind_buffer (utf8_converter, buf, cap);
  mconv_encode (utf8_converter, mt);

  buf[utf8_converter->nbytes] = '\0';

  return buf;
}
示例#5
0
文件: nimf-m17n.c 项目: cogniti/nimf
static gchar *
nimf_m17n_mtext_to_utf8 (NimfM17n *m17n, MText *mt)
{
  g_debug (G_STRLOC ": %s", G_STRFUNC);

  g_return_val_if_fail (mt != NULL, NULL);

  gint   buf_len = (mtext_len (mt) + 1) * 6;
  gchar *buf = g_malloc0 (buf_len);

  mconv_reset_converter (m17n->converter);
  mconv_rebind_buffer   (m17n->converter, (unsigned char *) buf, buf_len);
  mconv_encode (m17n->converter, mt);
  buf[m17n->converter->nbytes] = '\0';

  return buf;
}
示例#6
0
int m17n_ccx_string(M17nCCX *m17n,const char *istr,int len,char *ostr,int siz){
	const unsigned char *uistr = (const unsigned char*)istr;
	const unsigned char *uostr = (const unsigned char*)ostr;
	int rcode = -1;
	int ecode;
	int oleng = 1;

	m17n->m_mtext = 0;
	m17n->m_dec = mconv_buffer_converter(m17n->m_icode,uistr,len);
	if( m17n->m_dec == 0 ){
		m17n_ccx_freeconv(m17n);
		return -1;
	}
	m17n->m_enc = mconv_buffer_converter(m17n->m_ocode,uostr,siz-1);
	if( m17n->m_enc == 0 ){
		m17n_ccx_freeconv(m17n);
		return -2;
	}
	LAP("converter-set");

	m17n->m_mtext = mtext();
	m17n->m_dec->lenient = 1;
	mconv_decode(m17n->m_dec,m17n->m_mtext);
	LAP("decoded");
	m17n->m_enc->lenient = 1;
	m17n->m_enc->last_block = 1;
	ecode = mconv_encode(m17n->m_enc,m17n->m_mtext);

	oleng = m17n->m_enc->nbytes;
	ostr[oleng] = 0;
	rcode = oleng;

	LAP("encoded");
	m17n_ccx_freeconv(m17n);
	LAP("filter-done");
	return rcode;
}