Compare commits

...
4 changed files with 44 additions and 31 deletions
+5 -2
View File
@@ -35,7 +35,8 @@ Convert \fIdata\fR to a Unicode string from the specified \fIencoding\fR. The
characters in \fIdata\fR are 8 bit binary data. The resulting
sequence of bytes is a string created by applying the given \fIencoding\fR
to the data. If \fIencoding\fR is not specified, the current
system encoding is used.
system encoding is used. If at least one of \fB-strict\fR/\fB-failindex var\fR/\fB-nocomplain\fR
is provided, this makes the \fIencoding\fR argument mandatory.
.VS "TCL8.7 TIP346, TIP607, TIP601"
.PP
.RS
@@ -70,7 +71,9 @@ The result is a sequence of bytes that represents the converted
string. Each byte is stored in the lower 8-bits of a Unicode
character (indeed, the resulting string is a binary string as far as
Tcl is concerned, at least initially). If \fIencoding\fR is not
specified, the current system encoding is used.
specified, the current system encoding is used. If at least one of
\fB-strict\fR/\fB-failindex var\fR/\fB-nocomplain\fR
is provided, this makes the \fIencoding\fR argument mandatory.
.VS "TCL8.7 TIP346, TIP607, TIP601"
.PP
.RS
+27 -17
View File
@@ -564,18 +564,22 @@ EncodingConvertfromObjCmd(
* Possible combinations:
* 1) data -> objc = 2
* 2) encoding data -> objc = 3
* 3) -nocomplain data -> objc = 3
* 4) -nocomplain encoding data -> objc = 4
* 5) -strict data -> objc = 3
* 6) -strict encoding data -> objc = 4
* 7) -failindex val data -> objc = 4
* 8) -failindex val encoding data -> objc = 5
* 3) -nocomplain encoding data -> objc = 4
* 4) -strict -failindex val encoding data -> objc = 6
* 5) -strict encoding data -> objc = 4
* 6) -failindex val encoding data -> objc = 5
* 7) -failindex val -strict encoding data -> objc = 6
*/
if (objc == 2) {
encoding = Tcl_GetEncoding(interp, NULL);
data = objv[1];
} else if (objc > 2 && objc < 7) {
} else if (objc == 3) {
if (Tcl_GetEncodingFromObj(interp, objv[1], &encoding) != TCL_OK) {
return TCL_ERROR;
}
data = objv[2];
} else if (objc > 3 && objc < 7) {
int objcUnprocessed = objc;
data = objv[objc - 1];
bytesPtr = Tcl_GetString(objv[1]);
@@ -590,7 +594,7 @@ EncodingConvertfromObjCmd(
bytesPtr = Tcl_GetString(objv[2]);
if (bytesPtr[0] == '-' && bytesPtr[1] == 'f'
&& !strncmp(bytesPtr, "-failindex", strlen(bytesPtr))) {
/* at least two additional arguments needed */
/* at least three additional arguments needed */
if (objc < 6) {
goto encConvFromError;
}
@@ -599,8 +603,8 @@ EncodingConvertfromObjCmd(
}
} else if (bytesPtr[0] == '-' && bytesPtr[1] == 'f'
&& !strncmp(bytesPtr, "-failindex", strlen(bytesPtr))) {
/* at least two additional arguments needed */
if (objc < 4) {
/* at least three additional arguments needed */
if (objc < 5) {
goto encConvFromError;
}
failVarObj = objv[2];
@@ -723,16 +727,22 @@ EncodingConverttoObjCmd(
* Possible combinations:
* 1) data -> objc = 2
* 2) encoding data -> objc = 3
* 3) -nocomplain data -> objc = 3
* 4) -nocomplain encoding data -> objc = 4
* 5) -failindex val data -> objc = 4
* 3) -nocomplain encoding data -> objc = 4
* 4) -strict -failindex val encoding data -> objc = 6
* 5) -strict encoding data -> objc = 4
* 6) -failindex val encoding data -> objc = 5
* 7) -failindex val -strict encoding data -> objc = 6
*/
if (objc == 2) {
encoding = Tcl_GetEncoding(interp, NULL);
data = objv[1];
} else if (objc > 2 && objc < 6) {
} else if (objc == 3) {
if (Tcl_GetEncodingFromObj(interp, objv[1], &encoding) != TCL_OK) {
return TCL_ERROR;
}
data = objv[2];
} else if (objc > 3 && objc < 7) {
int objcUnprocessed = objc;
data = objv[objc - 1];
stringPtr = Tcl_GetString(objv[1]);
@@ -747,7 +757,7 @@ EncodingConverttoObjCmd(
stringPtr = Tcl_GetString(objv[2]);
if (stringPtr[0] == '-' && stringPtr[1] == 'f'
&& !strncmp(stringPtr, "-failindex", strlen(stringPtr))) {
/* at least two additional arguments needed */
/* at least three additional arguments needed */
if (objc < 6) {
goto encConvToError;
}
@@ -756,8 +766,8 @@ EncodingConverttoObjCmd(
}
} else if (stringPtr[0] == '-' && stringPtr[1] == 'f'
&& !strncmp(stringPtr, "-failindex", strlen(stringPtr))) {
/* at least two additional arguments needed */
if (objc < 4) {
/* at least three additional arguments needed */
if (objc < 5) {
goto encConvToError;
}
failVarObj = objv[2];
+8 -8
View File
@@ -262,7 +262,7 @@ test cmdAH-4.17.2 {Syntax error, -failindex and -nocomplain, encoding} -body {
} -returnCodes 1 -result {wrong # args: should be "encoding convertto ?-strict? ?-failindex var? ?encoding? data" or "encoding convertto -nocomplain ?encoding? data"}
test cmdAH-4.18.1 {Syntax error, -failindex with no var, no encoding} -body {
encoding convertfrom -failindex ABC
} -returnCodes 1 -result {wrong # args: should be "::tcl::encoding::convertfrom ?-strict? ?-failindex var? ?encoding? data" or "::tcl::encoding::convertfrom -nocomplain ?encoding? data"}
} -returnCodes 1 -result {unknown encoding "-failindex"}
test cmdAH-4.18.2 {Syntax error, -failindex with no var, no encoding (byte compiled)} -setup {
proc encoding_test {} {
encoding convertfrom -failindex ABC
@@ -270,12 +270,12 @@ test cmdAH-4.18.2 {Syntax error, -failindex with no var, no encoding (byte compi
} -body {
# Compile and execute
encoding_test
} -returnCodes 1 -result {wrong # args: should be "::tcl::encoding::convertfrom ?-strict? ?-failindex var? ?encoding? data" or "::tcl::encoding::convertfrom -nocomplain ?encoding? data"} -cleanup {
} -returnCodes 1 -result {unknown encoding "-failindex"} -cleanup {
rename encoding_test ""
}
test cmdAH-4.18.3 {Syntax error, -failindex with no var, no encoding} -body {
encoding convertto -failindex ABC
} -returnCodes 1 -result {wrong # args: should be "::tcl::encoding::convertto ?-strict? ?-failindex var? ?encoding? data" or "::tcl::encoding::convertto -nocomplain ?encoding? data"}
} -returnCodes 1 -result {unknown encoding "-failindex"}
test cmdAH-4.18.4 {Syntax error, -failindex with no var, no encoding (byte compiled)} -setup {
proc encoding_test {} {
encoding convertto -failindex ABC
@@ -283,16 +283,16 @@ test cmdAH-4.18.4 {Syntax error, -failindex with no var, no encoding (byte compi
} -body {
# Compile and execute
encoding_test
} -returnCodes 1 -result {wrong # args: should be "::tcl::encoding::convertto ?-strict? ?-failindex var? ?encoding? data" or "::tcl::encoding::convertto -nocomplain ?encoding? data"} -cleanup {
} -returnCodes 1 -result {unknown encoding "-failindex"} -cleanup {
rename encoding_test ""
}
test cmdAH-4.19.1 {convertrom -failindex with correct data} -body {
encoding convertfrom -failindex test ABC
encoding convertfrom -failindex test [encoding system] ABC
set test
} -returnCodes 0 -result -1
test cmdAH-4.19.2 {convertrom -failindex with correct data (byt compiled)} -setup {
proc encoding_test {} {
encoding convertfrom -failindex test ABC
encoding convertfrom -failindex test [encoding system] ABC
set test
}
} -body {
@@ -302,12 +302,12 @@ test cmdAH-4.19.2 {convertrom -failindex with correct data (byt compiled)} -setu
rename encoding_test ""
}
test cmdAH-4.19.3 {convertrom -failindex with correct data} -body {
encoding convertto -failindex test ABC
encoding convertto -failindex test [encoding system] ABC
set test
} -returnCodes 0 -result -1
test cmdAH-4.19.4 {convertrom -failindex with correct data (byt compiled)} -setup {
proc encoding_test {} {
encoding convertto -failindex test ABC
encoding convertto -failindex test [encoding system] ABC
set test
}
} -body {
+4 -4
View File
@@ -676,12 +676,12 @@ test encoding-24.18 {Parse valid or invalid utf-8} -constraints testbytestring -
test encoding-24.19 {Parse valid or invalid utf-8} -constraints deprecated -body {
encoding convertto utf-8 "ZX\uD800"
} -result ZX\xED\xA0\x80
test encoding-24.20 {Parse with -nocomplain but without providing encoding} {
test encoding-24.20 {Parse with -nocomplain but without providing encoding} -body {
string length [encoding convertfrom -nocomplain "\x20"]
} 1
test encoding-24.21 {Parse with -nocomplain but without providing encoding} {
} -returnCodes 1 -result {unknown encoding "-nocomplain"}
test encoding-24.21 {Parse with -nocomplain but without providing encoding} -body {
string length [encoding convertto -nocomplain "\x20"]
} 1
} -returnCodes 1 -result {unknown encoding "-nocomplain"}
test encoding-24.22 {Syntax error, two encodings} -body {
encoding convertfrom iso8859-1 utf-8 "ZX\uD800"
} -returnCodes 1 -result {wrong # args: should be "::tcl::encoding::convertfrom ?-strict? ?-failindex var? ?encoding? data" or "::tcl::encoding::convertfrom -nocomplain ?encoding? data"}