summaryrefslogtreecommitdiff
path: root/ext/nkf/nkf.c
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-19 10:19:38 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-19 10:19:38 +0000
commitdec6ba8a22aa5a20538f4f7d0bd37a384db0ad73 (patch)
treed7eec4dec8c5b1a692715c1af8502f01b3666ad1 /ext/nkf/nkf.c
parent8acb0fbd4d1d182a68a842ed472ee8646d17712a (diff)
* ext/nkf/nkf-utf8/nkf.c: Updated.
* ext/nkf/nkf.c (rb_nkf_enc_get): added. (find encoding or replicate default encoding) * ext/nkf/nkf.c (NKF::<ENCODING>): redefine encoding constant. * ext/nkf/lib/kconv.rb (Kconv::<ENCODING>): redefined as Encoding. * ext/nkf/lib/kconv.rb: refactoring. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14330 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/nkf/nkf.c')
-rw-r--r--ext/nkf/nkf.c54
1 files changed, 27 insertions, 27 deletions
diff --git a/ext/nkf/nkf.c b/ext/nkf/nkf.c
index 48402e07e6..0ae4689bde 100644
--- a/ext/nkf/nkf.c
+++ b/ext/nkf/nkf.c
@@ -61,6 +61,13 @@ rb_nkf_putchar(unsigned int c)
#include "nkf-utf8/utf8tbl.c"
#include "nkf-utf8/nkf.c"
+rb_encoding* rb_nkf_enc_get(const char *name)
+{
+ int idx = rb_enc_find_index(name);
+ if (idx < 0) idx = rb_enc_replicate(name, rb_default_encoding());
+ return rb_enc_from_index(idx);
+}
+
int nkf_split_options(const char *arg)
{
int count = 0;
@@ -126,16 +133,13 @@ int nkf_split_options(const char *arg)
static VALUE
rb_nkf_convert(VALUE obj, VALUE opt, VALUE src)
{
- char *opt_ptr, *opt_end;
- volatile VALUE v;
- char *encname;
- int idx;
+ rb_encoding *to_enc;
+ const char *to_e;
+ int to_encidx;
reinit();
StringValue(opt);
- opt_ptr = RSTRING_PTR(opt);
- opt_end = opt_ptr + RSTRING_LEN(opt);
- nkf_split_options(opt_ptr);
+ nkf_split_options(RSTRING_PTR(opt));
incsize = INCSIZE;
@@ -144,7 +148,6 @@ rb_nkf_convert(VALUE obj, VALUE opt, VALUE src)
input = (unsigned char *)RSTRING_PTR(src);
i_len = RSTRING_LEN(src);
result = rb_str_new(0, i_len*3 + 10);
- v = result;
output_ctr = 0;
output = (unsigned char *)RSTRING_PTR(result);
@@ -154,15 +157,9 @@ rb_nkf_convert(VALUE obj, VALUE opt, VALUE src)
kanji_convert(NULL);
rb_str_set_len(result, output_ctr);
OBJ_INFECT(result, src);
- encname = nkf_enc_name(output_encoding);
- fprintf(stderr, "%s\n", encname);
- idx = rb_enc_find_index(encname);
- fprintf(stderr, "%d\n", idx);
- if (idx <= 0) {
- idx = rb_enc_replicate(encname, rb_enc_find(rb_enc_name(ONIG_ENCODING_ASCII)));
- fprintf(stderr, "%d\n", idx);
- }
- rb_enc_associate_index(result, idx);
+
+ rb_enc_associate(result, rb_nkf_enc_get(nkf_enc_name(output_encoding)));
+
return result;
}
@@ -178,9 +175,6 @@ rb_nkf_convert(VALUE obj, VALUE opt, VALUE src)
static VALUE
rb_nkf_guess(VALUE obj, VALUE src)
{
- char* codename;
- rb_encoding* enc;
-
reinit();
input_ctr = 0;
@@ -192,13 +186,7 @@ rb_nkf_guess(VALUE obj, VALUE src)
kanji_convert( NULL );
guess_f = FALSE;
- codename = get_guessed_code();
- enc = rb_enc_find(codename);
- if (enc <= 0) {
- int idx = rb_enc_replicate(codename, rb_enc_find(rb_enc_name(ONIG_ENCODING_ASCII)));
- enc = rb_enc_from_index(idx);
- }
- return rb_enc_from_encoding(enc);
+ return rb_enc_from_encoding(rb_nkf_enc_get(get_guessed_code()));
}
@@ -483,6 +471,18 @@ Init_nkf()
rb_define_module_function(mNKF, "guess", rb_nkf_guess, 1);
rb_define_alias(rb_singleton_class(mNKF), "guess", "guess");
+ rb_define_const(mNKF, "AUTO", Qnil);
+ rb_define_const(mNKF, "NOCONV", Qnil);
+ rb_define_const(mNKF, "UNKNOWN", Qnil);
+ rb_define_const(mNKF, "BINARY", rb_enc_from_encoding(rb_nkf_enc_get("BINARY")));
+ rb_define_const(mNKF, "ASCII", rb_enc_from_encoding(rb_nkf_enc_get("US_ASCII")));
+ rb_define_const(mNKF, "JIS", rb_enc_from_encoding(rb_nkf_enc_get("ISO-2022-JP")));
+ rb_define_const(mNKF, "EUC", rb_enc_from_encoding(rb_nkf_enc_get("EUC-JP")));
+ rb_define_const(mNKF, "SJIS", rb_enc_from_encoding(rb_nkf_enc_get("Shift_JIS")));
+ rb_define_const(mNKF, "UTF8", rb_enc_from_encoding(rb_nkf_enc_get("UTF-8")));
+ rb_define_const(mNKF, "UTF16", rb_enc_from_encoding(rb_nkf_enc_get("UTF-16")));
+ rb_define_const(mNKF, "UTF32", rb_enc_from_encoding(rb_nkf_enc_get("UTF-32")));
+
/* Full version string of nkf */
rb_define_const(mNKF, "VERSION", rb_str_new2(RUBY_NKF_VERSION));
/* Version of nkf */