5 #define UNIMPLEMENTED(x,y) y x (SV *sv, char *encoding) { \
6 Perl_croak("panic_unimplemented"); \
8 UNIMPLEMENTED(_encoded_utf8_to_bytes, I32)
9 UNIMPLEMENTED(_encoded_bytes_to_utf8, I32)
11 void call_failure (SV *routine, U8* done, U8* dest, U8* orig) {}
13 MODULE = Encode PACKAGE = Encode
18 _bytes_to_utf8(sv, ...)
22 SV * encoding = items == 2 ? ST(1) : Nullsv;
25 RETVAL = _encoded_bytes_to_utf8(sv, SvPV_nolen(encoding));
28 U8* s = (U8*)SvPV(sv, len);
31 converted = bytes_to_utf8(s, &len); /* This allocs */
32 sv_setpvn(sv, (char *)converted, len);
33 SvUTF8_on(sv); /* XXX Should we? */
34 Safefree(converted); /* ... so free it */
42 _utf8_to_bytes(sv, ...)
46 SV * to = items > 1 ? ST(1) : Nullsv;
47 SV * check = items > 2 ? ST(2) : Nullsv;
50 RETVAL = _encoded_utf8_to_bytes(sv, SvPV_nolen(to));
54 s = (U8*)SvPV(sv, len);
57 /* Must do things the slow way */
59 U8 *src = (U8*)savepv((char *)s); /* We need a copy to pass to check() */
62 New(83, dest, len, U8); /* I think */
72 /* Have to do it all ourselves because of error routine,
76 if (!(uv & 0x20)) { ulen = 2; uv &= 0x1f; }
77 else if (!(uv & 0x10)) { ulen = 3; uv &= 0x0f; }
78 else if (!(uv & 0x08)) { ulen = 4; uv &= 0x07; }
79 else if (!(uv & 0x04)) { ulen = 5; uv &= 0x03; }
80 else if (!(uv & 0x02)) { ulen = 6; uv &= 0x01; }
81 else if (!(uv & 0x01)) { ulen = 7; uv = 0; }
82 else { ulen = 13; uv = 0; }
84 /* Note change to utf8.c variable naming, for variety */
86 if ((*s & 0xc0) != 0x80)
90 uv = (uv << 6) | (*s++ & 0x3f);
94 call_failure(check, s, dest, src);
95 /* Now what happens? */
101 RETVAL = (utf8_to_bytes(s, &len) ? len : 0);
108 _chars_to_utf8(sv, from, ...)
113 SV * check = items == 3 ? ST(2) : Nullsv;
114 RETVAL = &PL_sv_undef;
120 _utf8_to_chars(sv, to, ...)
125 SV * check = items == 3 ? ST(2) : Nullsv;
126 RETVAL = &PL_sv_undef;
132 _utf8_to_chars_check(sv, ...)
136 SV * check = items == 2 ? ST(1) : Nullsv;
137 RETVAL = &PL_sv_undef;
143 _bytes_to_chars(sv, from, ...)
148 SV * check = items == 3 ? ST(2) : Nullsv;
149 RETVAL = &PL_sv_undef;
155 _chars_to_bytes(sv, to, ...)
160 SV * check = items == 3 ? ST(2) : Nullsv;
161 RETVAL = &PL_sv_undef;
167 _from_to(sv, from, to, ...)
173 SV * check = items == 4 ? ST(3) : Nullsv;
174 RETVAL = &PL_sv_undef;
184 SV * check = items == 2 ? ST(1) : Nullsv;
189 !is_utf8_string((U8*)SvPVX(sv), SvCUR(sv)))
204 SV *rsv = newSViv(SvUTF8(sv));
209 RETVAL = &PL_sv_undef;
221 SV *rsv = newSViv(SvUTF8(sv));
226 RETVAL = &PL_sv_undef;
233 _utf_to_utf(sv, from, to, ...)
239 SV * check = items == 4 ? ST(3) : Nullsv;
240 RETVAL = &PL_sv_undef;