cc0a86a11749da6a4362e67cb6ebdbc473ae485c
[p5sagit/p5-mst-13.2.git] / ext / Encode / Encode.xs
1 #include "EXTERN.h"
2 #include "perl.h"
3 #include "XSUB.h"
4
5 MODULE = Encode         PACKAGE = Encode
6
7 PROTOTYPES: ENABLE
8
9 SV *
10 _bytes_to_utf8(sv, ...)
11         SV *    sv
12       CODE:
13         {
14           SV * encoding = 2 ? ST(1) : Nullsv;
15           RETVAL = &PL_sv_undef;
16         }
17       OUTPUT:
18         RETVAL
19
20 SV *
21 _utf8_to_bytes(sv, ...)
22         SV *    sv
23       CODE:
24         {
25           SV * to    = items > 1 ? ST(1) : Nullsv;
26           SV * check = items > 2 ? ST(2) : Nullsv;
27           RETVAL = &PL_sv_undef;
28         }
29       OUTPUT:
30         RETVAL
31
32 SV *
33 _chars_to_utf8(sv, from, ...)
34         SV *    sv
35         SV *    from
36       CODE:
37         {
38           SV * check = items == 3 ? ST(2) : Nullsv;
39           RETVAL = &PL_sv_undef;
40         }
41       OUTPUT:
42         RETVAL
43
44 SV *
45 _utf8_to_chars(sv, to, ...)
46         SV *    sv
47         SV *    to
48       CODE:
49         {
50           SV * check = items == 3 ? ST(2) : Nullsv;
51           RETVAL = &PL_sv_undef;
52         }
53       OUTPUT:
54         RETVAL
55
56 SV *
57 _utf8_to_chars_check(sv, ...)
58         SV *    sv
59       CODE:
60         {
61           SV * check = items == 2 ? ST(1) : Nullsv;
62           RETVAL = &PL_sv_undef;
63         }
64       OUTPUT:
65         RETVAL
66
67 SV *
68 _bytes_to_chars(sv, from, ...)
69         SV *    sv
70         SV *    from
71       CODE:
72         {
73           SV * check = items == 3 ? ST(2) : Nullsv;
74           RETVAL = &PL_sv_undef;
75         }
76       OUTPUT:
77         RETVAL
78
79 SV *
80 _chars_to_bytes(sv, to, ...)
81         SV *    sv
82         SV *    to
83       CODE:
84         {
85           SV * check = items == 3 ? ST(2) : Nullsv;
86           RETVAL = &PL_sv_undef;
87         }
88       OUTPUT:
89         RETVAL
90
91 SV *
92 _from_to(sv, from, to, ...)
93         SV *    sv
94         SV *    from
95         SV *    to
96       CODE:
97         {
98           SV * check = items == 4 ? ST(3) : Nullsv;
99           RETVAL = &PL_sv_undef;
100         }
101       OUTPUT:
102         RETVAL
103
104 bool
105 _is_utf8(sv, ...)
106         SV *    sv
107       CODE:
108         {
109           SV *  check = items == 2 ? ST(1) : Nullsv;
110           if (SvPOK(sv)) {
111             RETVAL = SvUTF8(sv);
112             if (RETVAL &&
113                 SvTRUE(check) &&
114                 !is_utf8_string((U8*)SvPVX(sv), SvCUR(sv)))
115               RETVAL = FALSE;
116           } else {
117             RETVAL = FALSE;
118           }
119         }
120       OUTPUT:
121         RETVAL
122
123 SV *
124 _on_utf8(sv)
125         SV *    sv
126       CODE:
127         {
128           if (SvPOK(sv)) {
129             SV *rsv = newSViv(SvUTF8(sv)); 
130             sv_2mortal(rsv);
131             RETVAL = rsv;
132             SvUTF8_on(sv);
133           } else {
134             RETVAL = &PL_sv_undef;
135           }
136         }
137       OUTPUT:
138         RETVAL
139
140 SV *
141 _off_utf8(sv)
142         SV *    sv
143       CODE:
144         {
145           if (SvPOK(sv)) {
146             SV *rsv = newSViv(SvUTF8(sv)); 
147             sv_2mortal(rsv);
148             RETVAL = rsv;
149             SvUTF8_off(sv);
150           } else {
151             RETVAL = &PL_sv_undef;
152           }
153         }
154       OUTPUT:
155         RETVAL
156
157 SV *
158 _utf_to_utf(sv, from, to, ...)
159         SV *    sv
160         SV *    from
161         SV *    to
162       CODE:
163         {
164           SV * check = items == 4 ? ST(3) : Nullsv;
165           RETVAL = &PL_sv_undef;
166         }
167       OUTPUT:
168         RETVAL
169