@@ -1136,14 +1136,40 @@ ConversionResult ConvertUTF8toUTF32 (
1136
1136
** Result can be a shared buffer!
1137
1137
**
1138
1138
***********************************************************************/
1139
+ {
1140
+ REBSER * ser ;
1141
+ if (VAL_BYTE_SIZE (arg )) {
1142
+ ser = Encode_UTF8_String (VAL_BIN_DATA (arg ), len , FALSE, opts );
1143
+ } else {
1144
+ ser = Encode_UTF8_String (VAL_UNI_DATA (arg ), len , TRUE, opts );
1145
+ }
1146
+ return ser ;
1147
+ }
1148
+
1149
+ /***********************************************************************
1150
+ **
1151
+ */ REBSER * Encode_UTF8_String (void * src , REBCNT len , REBFLG uni , REBFLG opts )
1152
+ /*
1153
+ ** Do all the details to encode a string as UTF8.
1154
+ ** No_copy means do not make a copy.
1155
+ ** Result can be a shared buffer!
1156
+ **
1157
+ ***********************************************************************/
1139
1158
{
1140
1159
REBSER * ser = BUF_FORM ; // a shared buffer
1141
1160
REBCNT size ;
1142
1161
REBYTE * cp ;
1143
1162
REBFLG ccr = GET_FLAG (opts , ENC_OPT_CRLF );
1144
1163
1145
- if (VAL_BYTE_SIZE (arg )) {
1146
- REBYTE * bp = VAL_BIN_DATA (arg );
1164
+ if (uni ) {
1165
+ REBUNI * up = (REBUNI * )src ;
1166
+
1167
+ size = Length_As_UTF8 (up , len , TRUE, (REBOOL )ccr );
1168
+ cp = Reset_Buffer (ser , size + (GET_FLAG (opts , ENC_OPT_BOM ) ? 3 : 0 ));
1169
+ Encode_UTF8 (Reset_Buffer (ser , size ), size , up , & len , TRUE, ccr );
1170
+ }
1171
+ else {
1172
+ REBYTE * bp = (REBYTE * )src ;
1147
1173
1148
1174
if (Is_Not_ASCII (bp , len )) {
1149
1175
size = Length_As_UTF8 ((REBUNI * )bp , len , FALSE, (REBOOL )ccr );
@@ -1152,13 +1178,6 @@ ConversionResult ConvertUTF8toUTF32 (
1152
1178
}
1153
1179
else if (GET_FLAG (opts , ENC_OPT_NO_COPY )) return 0 ;
1154
1180
else return Copy_Bytes (bp , len );
1155
-
1156
- } else {
1157
- REBUNI * up = VAL_UNI_DATA (arg );
1158
-
1159
- size = Length_As_UTF8 (up , len , TRUE, (REBOOL )ccr );
1160
- cp = Reset_Buffer (ser , size + (GET_FLAG (opts , ENC_OPT_BOM ) ? 3 : 0 ));
1161
- Encode_UTF8 (Reset_Buffer (ser , size ), size , up , & len , TRUE, ccr );
1162
1181
}
1163
1182
1164
1183
SERIES_TAIL (ser ) = len ;
@@ -1168,6 +1187,17 @@ ConversionResult ConvertUTF8toUTF32 (
1168
1187
}
1169
1188
1170
1189
#ifdef unused
1190
+ /***********************************************************************
1191
+ **
1192
+ */ REBSER * Decode_UTF8_String (REBYTE * src , REBCNT len )
1193
+ /*
1194
+ ** Decode an UTF8 encoded source into series.
1195
+ **
1196
+ ***********************************************************************/
1197
+ {
1198
+ return Decode_UTF_String (src , len , 8 );
1199
+ }
1200
+
1171
1201
/***********************************************************************
1172
1202
**
1173
1203
*/ REBSER * Encode_String (void * str , REBCNT len , REBCNT opts )
0 commit comments