5 #define UNIMPLEMENTED(x,y) y x (SV *sv, char *encoding) { \
6 Perl_croak(aTHX_ "panic_unimplemented"); \
7 return (y)0; /* fool picky compilers */ \
9 UNIMPLEMENTED(_encoded_utf8_to_bytes, I32)
10 UNIMPLEMENTED(_encoded_bytes_to_utf8, I32)
12 void call_failure (SV *routine, U8* done, U8* dest, U8* orig) {}
14 MODULE = Encode PACKAGE = Encode
19 _bytes_to_utf8(sv, ...)
23 SV * encoding = items == 2 ? ST(1) : Nullsv;
26 RETVAL = _encoded_bytes_to_utf8(sv, SvPV_nolen(encoding));
29 U8* s = (U8*)SvPV(sv, len);
32 converted = bytes_to_utf8(s, &len); /* This allocs */
33 sv_setpvn(sv, (char *)converted, len);
34 SvUTF8_on(sv); /* XXX Should we? */
35 Safefree(converted); /* ... so free it */
43 _utf8_to_bytes(sv, ...)
47 SV * to = items > 1 ? ST(1) : Nullsv;
48 SV * check = items > 2 ? ST(2) : Nullsv;
51 RETVAL = _encoded_utf8_to_bytes(sv, SvPV_nolen(to));
54 U8 *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 */
71 /* Have to do it all ourselves because of error routine,
75 if (!(uv & 0x20)) { ulen = 2; uv &= 0x1f; }
76 else if (!(uv & 0x10)) { ulen = 3; uv &= 0x0f; }
77 else if (!(uv & 0x08)) { ulen = 4; uv &= 0x07; }
78 else if (!(uv & 0x04)) { ulen = 5; uv &= 0x03; }
79 else if (!(uv & 0x02)) { ulen = 6; uv &= 0x01; }
80 else if (!(uv & 0x01)) { ulen = 7; uv = 0; }
81 else { ulen = 13; uv = 0; }
83 /* Note change to utf8.c variable naming, for variety */
85 if ((*s & 0xc0) != 0x80)
89 uv = (uv << 6) | (*s++ & 0x3f);
93 call_failure(check, s, dest, src);
94 /* Now what happens? */
100 RETVAL = (utf8_to_bytes(s, &len) ? len : 0);
107 _chars_to_utf8(sv, from, ...)
112 SV * check = items == 3 ? ST(2) : Nullsv;
113 RETVAL = &PL_sv_undef;
119 _utf8_to_chars(sv, to, ...)
124 SV * check = items == 3 ? ST(2) : Nullsv;
125 RETVAL = &PL_sv_undef;
131 _utf8_to_chars_check(sv, ...)
135 SV * check = items == 2 ? ST(1) : Nullsv;
136 RETVAL = &PL_sv_undef;
142 _bytes_to_chars(sv, from, ...)
147 SV * check = items == 3 ? ST(2) : Nullsv;
148 RETVAL = &PL_sv_undef;
154 _chars_to_bytes(sv, to, ...)
159 SV * check = items == 3 ? ST(2) : Nullsv;
160 RETVAL = &PL_sv_undef;
166 _from_to(sv, from, to, ...)
172 SV * check = items == 4 ? ST(3) : Nullsv;
173 RETVAL = &PL_sv_undef;
183 SV * check = items == 2 ? ST(1) : Nullsv;
185 RETVAL = SvUTF8(sv) ? 1 : 0;
188 !is_utf8_string((U8*)SvPVX(sv), SvCUR(sv)))
203 SV *rsv = newSViv(SvUTF8(sv));
207 RETVAL = &PL_sv_undef;
219 SV *rsv = newSViv(SvUTF8(sv));
223 RETVAL = &PL_sv_undef;
230 _utf_to_utf(sv, from, to, ...)
236 SV * check = items == 4 ? ST(3) : Nullsv;
237 RETVAL = &PL_sv_undef;