コード例 #1
0
ファイル: nkf.c プロジェクト: Sophrinix/iphone-macruby
rb_encoding* rb_nkf_enc_get(const char *name)
{
#if 0
    int idx = rb_enc_find_index(name);
    if (idx < 0) {
	nkf_encoding *nkf_enc = nkf_enc_find(name);
	idx = rb_enc_find_index(nkf_enc_name(nkf_enc_to_base_encoding(nkf_enc)));
	if (idx < 0) {
	    idx = rb_define_dummy_encoding(name);
	} else {
	    rb_encoding *rb_enc = rb_enc_from_index(idx);
	    idx = rb_enc_replicate(name, rb_enc);
	}
    }
    return rb_enc_from_index(idx);
#else
	struct nkf_osx_name_enc_table { 
	  const char*      name; 
	  CFStringEncoding enc;
	};

	static struct nkf_osx_name_enc_table table[] = {
	  { "BINARY",      kCFStringEncodingNonLossyASCII },
	  { "US-ASCII",    kCFStringEncodingASCII  	},
	  { "ISO-2022-JP", kCFStringEncodingISO_2022_JP  	},
	  { "ISO-2022-JP-1", kCFStringEncodingISO_2022_JP_1  	},
	  { "ISO-2022-JP-2", kCFStringEncodingISO_2022_JP_2  	},
	  { "ISO-2022-JP-3", kCFStringEncodingISO_2022_JP_3  	},
	  { "EUC-JP",      kCFStringEncodingEUC_JP },
	  { "Shift_JIS",   kCFStringEncodingShiftJIS 	},
	  { "UTF-8",       kCFStringEncodingUTF8   	},
	  { "UTF-16",      kCFStringEncodingUTF16   },
	  { "UTF-16BE",    kCFStringEncodingUTF16BE },
	  { "UTF-16LE",    kCFStringEncodingUTF16LE },
	  { "UTF-32",      kCFStringEncodingUTF32   },
	  { "UTF-32BE",    kCFStringEncodingUTF32BE },
	  { "UTF-32LE",    kCFStringEncodingUTF32LE },
	  { NULL,          kCFStringEncodingNonLossyASCII }
	};

	struct nkf_osx_name_enc_table* ptr = table;
	while (ptr->name) {
	  if (strcmp(name, ptr->name) == 0)
		return &(ptr->enc);
	  ptr++;
	}
	return &(ptr->enc);
#endif
}
コード例 #2
0
ファイル: nkf.c プロジェクト: alloy/mr-experimental
rb_encoding* rb_nkf_enc_get(const char *name)
{
    int idx = rb_enc_find_index(name);
    if (idx < 0) {
	nkf_encoding *nkf_enc = nkf_enc_find(name);
	idx = rb_enc_find_index(nkf_enc_name(nkf_enc_to_base_encoding(nkf_enc)));
	if (idx < 0) {
	    idx = rb_define_dummy_encoding(name);
	} else {
	    rb_encoding *rb_enc = rb_enc_from_index(idx);
	    idx = rb_enc_replicate(name, rb_enc);
	}
    }
    return rb_enc_from_index(idx);
}
コード例 #3
0
ファイル: nkf.c プロジェクト: alloy/mr-experimental
static VALUE
rb_nkf_convert(VALUE obj, VALUE opt, VALUE src)
{
    reinit();
    StringValue(opt);
    nkf_split_options(RSTRING_PTR(opt));
    if (!output_encoding) rb_raise(rb_eArgError, "no output encoding given");

    switch (nkf_enc_to_index(output_encoding)) {
    case UTF_8_BOM:    output_encoding = nkf_enc_from_index(UTF_8); break;
    case UTF_16BE_BOM: output_encoding = nkf_enc_from_index(UTF_16BE); break;
    case UTF_16LE_BOM: output_encoding = nkf_enc_from_index(UTF_16LE); break;
    case UTF_32BE_BOM: output_encoding = nkf_enc_from_index(UTF_32BE); break;
    case UTF_32LE_BOM: output_encoding = nkf_enc_from_index(UTF_32LE); break;
    }
    output_bom_f = FALSE;

    incsize = INCSIZE;

    input_ctr = 0;
    StringValue(src);
    input = (unsigned char *)RSTRING_PTR(src);
    i_len = RSTRING_LEN(src);
    result = rb_str_new(0, i_len*3 + 10);

    output_ctr = 0;
    output     = (unsigned char *)RSTRING_PTR(result);
    o_len      = RSTRING_LEN(result);
    *output    = '\0';

    kanji_convert(NULL);
    rb_str_set_len(result, output_ctr);
    OBJ_INFECT(result, src);

    rb_enc_associate(result, rb_nkf_enc_get(nkf_enc_name(output_encoding)));

    return result;
}