Deep-Encode
view release on metacpan or search on metacpan
void utf8_on_cb( pp_func pf, SV * data){
if (!SvUTF8(data)){
SvUTF8_on(data);
++(pf->counter);
}
}
void from_to_cb( pp_func pf, SV * data){
int ret_list_size;
SV *decoded_sv;
dSP;
ENTER;
SAVETMPS;
if ( ! pf->fastinit ){
GV * method_glob;
HV * encoding_stash;
pf->meth1 = 0;
pf->meth2 = 0;
pf->fastinit = -1;
ret_list_size = call_sv( (SV *) pf->meth1, G_SCALAR);
}
else {
ret_list_size = call_method("decode", G_SCALAR);
};
SPAGAIN;
if (ret_list_size != 1){
croak( "A big trouble");
}
decoded_sv = POPs;
PUTBACK;
PUSHMARK(SP);
XPUSHs( pf->argv[1] );
XPUSHs( decoded_sv );
PUTBACK;
if ( pf->fastinit == 1 ){
ret_list_size = call_sv( (SV *) pf->meth2, G_SCALAR);
}
else {
ret_list_size = call_method("encode", G_SCALAR);
}
SPAGAIN;
if (ret_list_size != 1){
croak( "A big trouble");
}
decoded_sv = POPs;
sv_setsv( data , decoded_sv );
PUTBACK;
FREETMPS;
LEAVE;
}
void from_to_cb_00( pp_func pf, SV * data){
int ret_list_size;
SV *decoded_sv;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs( pf->argv[0] ); /*first encoding */
XPUSHs( data );
PUTBACK;
ret_list_size = call_method("decode", G_SCALAR);
SPAGAIN;
if (ret_list_size != 1){
croak( "A big trouble");
}
decoded_sv = POPs;
PUTBACK;
PUSHMARK(SP);
XPUSHs( pf->argv[1] );
XPUSHs( decoded_sv );
PUTBACK;
ret_list_size = call_method("encode", G_SCALAR);
SPAGAIN;
if (ret_list_size != 1){
croak( "A big trouble");
}
decoded_sv = POPs;
sv_setsv( data , decoded_sv );
PUTBACK;
FREETMPS;
LEAVE;
}
/*static U8* good_encoding=",cp1251,latin1,utf8,windows1251,cp866,"; */
SV *find_encoding(pp_func pfunc, SV* encoding )
{
int ret_list;
SV *enc_obj;
( run in 0.225 second using v1.01-cache-2.11-cpan-a9ef4e587e4 )