* transcode.c (sym_html): new variable.
(sym_text): ditto. (sym_attr): ditto. (econv_opts): check :html=>:text and :html=>:attr. (Init_transcode): initialize the above variables. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19180 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
34be4c1ce5
commit
e490d92548
@ -1,3 +1,11 @@
|
|||||||
|
Sat Sep 6 15:06:21 2008 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* transcode.c (sym_html): new variable.
|
||||||
|
(sym_text): ditto.
|
||||||
|
(sym_attr): ditto.
|
||||||
|
(econv_opts): check :html=>:text and :html=>:attr.
|
||||||
|
(Init_transcode): initialize the above variables.
|
||||||
|
|
||||||
Sat Sep 6 14:46:12 2008 Tanaka Akira <akr@fsij.org>
|
Sat Sep 6 14:46:12 2008 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* include/ruby/encoding.h (ECONV_HTML_TEXT_ENCODER): new constant.
|
* include/ruby/encoding.h (ECONV_HTML_TEXT_ENCODER): new constant.
|
||||||
|
@ -768,4 +768,11 @@ class TestEncodingConverter < Test::Unit::TestCase
|
|||||||
assert_equal("&\e$B$&\e(B&".force_encoding("iso-2022-jp"), ec.convert("&\u3046&"))
|
assert_equal("&\e$B$&\e(B&".force_encoding("iso-2022-jp"), ec.convert("&\u3046&"))
|
||||||
assert_equal('', ec.finish)
|
assert_equal('', ec.finish)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_html_hasharg
|
||||||
|
assert_equal("&\e$B$&\e(B♥&\"'".force_encoding("iso-2022-jp"),
|
||||||
|
"&\u3046\u2665&\"'".encode("iso-2022-jp", html: :text))
|
||||||
|
assert_equal("\"&\e$B$&\e(B♡&"'\"".force_encoding("iso-2022-jp"),
|
||||||
|
"&\u3046\u2661&\"'".encode("iso-2022-jp", html: :attr))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
18
transcode.c
18
transcode.c
@ -21,6 +21,7 @@ VALUE rb_eNoConverter;
|
|||||||
VALUE rb_cEncodingConverter;
|
VALUE rb_cEncodingConverter;
|
||||||
|
|
||||||
static VALUE sym_invalid, sym_undef, sym_ignore, sym_replace;
|
static VALUE sym_invalid, sym_undef, sym_ignore, sym_replace;
|
||||||
|
static VALUE sym_html, sym_text, sym_attr;
|
||||||
static VALUE sym_universal_newline_decoder;
|
static VALUE sym_universal_newline_decoder;
|
||||||
static VALUE sym_crlf_newline_encoder;
|
static VALUE sym_crlf_newline_encoder;
|
||||||
static VALUE sym_cr_newline_encoder;
|
static VALUE sym_cr_newline_encoder;
|
||||||
@ -2133,6 +2134,20 @@ econv_opts(VALUE opt)
|
|||||||
rb_raise(rb_eArgError, "unknown value for undefined character option");
|
rb_raise(rb_eArgError, "unknown value for undefined character option");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
v = rb_hash_aref(opt, sym_html);
|
||||||
|
if (!NIL_P(v)) {
|
||||||
|
v = rb_convert_type(v, T_SYMBOL, "Symbol", "to_sym");
|
||||||
|
if (v==sym_text) {
|
||||||
|
ecflags |= ECONV_HTML_TEXT_ENCODER|ECONV_UNDEF_HEX_CHARREF;
|
||||||
|
}
|
||||||
|
else if (v==sym_attr) {
|
||||||
|
ecflags |= ECONV_HTML_ATTR_ENCODER|ECONV_UNDEF_HEX_CHARREF;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rb_raise(rb_eArgError, "unexpected value for html option: %s", rb_id2name(SYM2ID(v)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
v = rb_hash_aref(opt, sym_universal_newline_decoder);
|
v = rb_hash_aref(opt, sym_universal_newline_decoder);
|
||||||
if (RTEST(v))
|
if (RTEST(v))
|
||||||
ecflags |= ECONV_UNIVERSAL_NEWLINE_DECODER;
|
ecflags |= ECONV_UNIVERSAL_NEWLINE_DECODER;
|
||||||
@ -3477,6 +3492,9 @@ Init_transcode(void)
|
|||||||
sym_undef = ID2SYM(rb_intern("undef"));
|
sym_undef = ID2SYM(rb_intern("undef"));
|
||||||
sym_ignore = ID2SYM(rb_intern("ignore"));
|
sym_ignore = ID2SYM(rb_intern("ignore"));
|
||||||
sym_replace = ID2SYM(rb_intern("replace"));
|
sym_replace = ID2SYM(rb_intern("replace"));
|
||||||
|
sym_html = ID2SYM(rb_intern("html"));
|
||||||
|
sym_text = ID2SYM(rb_intern("text"));
|
||||||
|
sym_attr = ID2SYM(rb_intern("attr"));
|
||||||
|
|
||||||
sym_invalid_byte_sequence = ID2SYM(rb_intern("invalid_byte_sequence"));
|
sym_invalid_byte_sequence = ID2SYM(rb_intern("invalid_byte_sequence"));
|
||||||
sym_undefined_conversion = ID2SYM(rb_intern("undefined_conversion"));
|
sym_undefined_conversion = ID2SYM(rb_intern("undefined_conversion"));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user