File tree Expand file tree Collapse file tree 3 files changed +64
-2
lines changed
Expand file tree Collapse file tree 3 files changed +64
-2
lines changed Original file line number Diff line number Diff line change @@ -5,7 +5,7 @@ use Carp;
55use Data::Dumper;
66use Scalar::Util ' looks_like_number' ;
77
8- our $VERSION = ' 0.2.1 ' ;
8+ our $VERSION = ' 0.3.0 ' ;
99
1010use base qw/ Exporter/ ;
1111our @EXPORT = qw (
@@ -295,7 +295,7 @@ sub to_perl {
295295 my $type = $self -> get_type($index );
296296
297297 if ($type == JavaScript::Duktape::DUK_TYPE_STRING){
298- $ret = $self -> get_string ($index );
298+ $ret = $self -> get_utf8_string ($index );
299299 }
300300
301301 elsif ($type == JavaScript::Duktape::DUK_TYPE_NUMBER){
@@ -458,6 +458,11 @@ sub safe_call {
458458 return 0;
459459}
460460
461+ # #############################################
462+ # custom functions
463+ # #############################################
464+ *get_utf8_string = \&perl_duk_get_utf8_string;
465+
461466# #############################################
462467# overridden functions
463468# #############################################
Original file line number Diff line number Diff line change @@ -186,6 +186,14 @@ SV *perl_duk_require_context(duk_context *ctx, duk_idx_t index) {
186186 return obj_ref ;
187187}
188188
189+ SV * perl_duk_get_utf8_string (duk_context * ctx , duk_idx_t index ) {
190+ STRLEN slen ;
191+ const char * str = duk_get_lstring (ctx , index , & slen );
192+ SV * src = newSVpv (str , slen );
193+ SvPV (src , slen );
194+ SvUTF8_on (src );
195+ return src ;
196+ }
189197
190198/**
191199 * open c shared library
Original file line number Diff line number Diff line change 1+ use lib ' ./lib' ;
2+ use strict;
3+ use warnings;
4+ use JavaScript::Duktape;
5+ use Data::Dumper;
6+ use Test::More;
7+ use Encode;
8+ use utf8;
9+
10+ my $js = JavaScript::Duktape-> new();
11+ my $duk = $js -> duk;
12+
13+ my $count = 0;
14+
15+ my $evalstr = <<'//JSEND' ;
16+ function test (s){
17+ is(s, "abc αβγ ß");
18+ is(s.toUpperCase().length, 10);
19+ }
20+
21+ function uc(s) { return s.toUpperCase(); }
22+ toPerl( uc("abc αβγ ß") ) // ascii: abc, greek:alpha beta gamma, german:sharp-s
23+ //JSEND
24+
25+ $js -> set(is => sub {
26+ shift ;
27+ is(shift , shift );
28+ });
29+
30+ $js -> set(toPerl =>
31+ sub {
32+ my $duk = shift ;
33+ my $string = shift ;
34+ is length $string , 10;
35+
36+ use bytes;
37+ is length $string , 13;
38+ no bytes;
39+
40+ is $string , uc (" abc αβγ ß" );
41+ }
42+ );
43+
44+ $js -> eval ($evalstr );
45+
46+ my $jsTest = $js -> get(' test' );
47+ $jsTest -> (" abc αβγ ß" );
48+
49+ done_testing(5);
You can’t perform that action at this time.
0 commit comments