diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-05-28 11:44:59 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-05-28 11:44:59 (GMT) |
commit | 494d65beb19b36bc4502885e0b2b9f146e6170b7 (patch) | |
tree | 36904b58000d1499d1fbb6caf392713fc3f4597c /generic/tclCmdMZ.c | |
parent | 0fce9600ee90c152b14295a28da571c3a4db622b (diff) | |
parent | b44555477cda94fd227969fd4a281daa0a1dbb52 (diff) | |
download | tcl-494d65beb19b36bc4502885e0b2b9f146e6170b7.zip tcl-494d65beb19b36bc4502885e0b2b9f146e6170b7.tar.gz tcl-494d65beb19b36bc4502885e0b2b9f146e6170b7.tar.bz2 |
Remove nextword/prevword. Rename nextchar/prefchar to charend/charstart, for consistancy with wordend/wordstart. Slightly adapt wordend/wordstart when index is out of range.
Diffstat (limited to 'generic/tclCmdMZ.c')
-rw-r--r-- | generic/tclCmdMZ.c | 175 |
1 files changed, 14 insertions, 161 deletions
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c index 36b2443..e15e5c8 100644 --- a/generic/tclCmdMZ.c +++ b/generic/tclCmdMZ.c @@ -2537,6 +2537,8 @@ StringStartCmd( if (cur != index) { cur += 1; } + } else { + cur = -1; } Tcl_SetObjResult(interp, Tcl_NewWideIntObj(cur)); return TCL_OK; @@ -2545,9 +2547,9 @@ StringStartCmd( /* *---------------------------------------------------------------------- * - * StringPrevCharCmd -- + * StringCharStartCmd -- * - * This procedure is invoked to process the "string prevchar" Tcl + * This procedure is invoked to process the "string charstart" Tcl * command. See the user documentation for details on what it does. * * Results: @@ -2560,7 +2562,7 @@ StringStartCmd( */ static int -StringPrevCharCmd( +StringCharStartCmd( TCL_UNUSED(ClientData), Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ @@ -2590,90 +2592,7 @@ StringPrevCharCmd( Tcl_SetObjResult(interp, Tcl_NewWideIntObj(index)); return TCL_OK; } - -/* - *---------------------------------------------------------------------- - * - * StringPrevWordCmd -- - * - * This procedure is invoked to process the "string prevword" Tcl - * command. See the user documentation for details on what it does. - * - * Results: - * A standard Tcl result. - * - * Side effects: - * See the user documentation. - * - *---------------------------------------------------------------------- - */ - -static int -StringPrevWordCmd( - TCL_UNUSED(ClientData), - Tcl_Interp *interp, /* Current interpreter. */ - int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument objects. */ -{ - int ch; - const Tcl_UniChar *p, *string; - int cur, index, length; - - if (objc != 3) { - Tcl_WrongNumArgs(interp, 1, objv, "string index"); - return TCL_ERROR; - } - - string = Tcl_GetUnicodeFromObj(objv[1], &length); - if (TclGetIntForIndexM(interp, objv[2], length-1, &index) != TCL_OK) { - return TCL_ERROR; - } - if (index >= length) { - index = length - 1; - } - cur = 0; - if (index > 0) { - p = &string[index]; - - TclUniCharToUCS4(p, &ch); - for (cur = index; cur >= 0; cur--) { - int delta = 0; - const Tcl_UniChar *next; - - if (!Tcl_UniCharIsWordChar(ch)) { - break; - } - - next = TclUCS4Prev(p, string); - do { - next += delta; - delta = TclUniCharToUCS4(next, &ch); - } while (next + delta < p); - p = next; - } - for (; cur >= 0; cur--) { - int delta = 0; - const Tcl_UniChar *next; - - if (Tcl_UniCharIsWordChar(ch)) { - break; - } - - next = TclUCS4Prev(p, string); - do { - next += delta; - delta = TclUniCharToUCS4(next, &ch); - } while (next + delta < p); - p = next; - } - if (cur != index) { - cur += 1; - } - } - Tcl_SetObjResult(interp, Tcl_NewWideIntObj(cur)); - return TCL_OK; -} - + /* *---------------------------------------------------------------------- * @@ -2727,19 +2646,18 @@ StringEndCmd( cur++; } } else { - cur = length; + cur = -1; } Tcl_SetObjResult(interp, Tcl_NewWideIntObj(cur)); return TCL_OK; } - /* *---------------------------------------------------------------------- * - * StringNextCharCmd -- + * StringCharEndCmd -- * - * This procedure is invoked to process the "string nextchar" Tcl command. + * This procedure is invoked to process the "string charend" Tcl command. * See the user documentation for details on what it does. * * Results: @@ -2752,7 +2670,7 @@ StringEndCmd( */ static int -StringNextCharCmd( +StringCharEndCmd( TCL_UNUSED(ClientData), Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ @@ -2777,75 +2695,12 @@ StringNextCharCmd( if (index < length) { index += TclUniCharToUCS4(&string[index], &ch); } else { - index = length; - } - Tcl_SetObjResult(interp, Tcl_NewWideIntObj(index)); - return TCL_OK; -} - - -/* - *---------------------------------------------------------------------- - * - * StringNextWordCmd -- - * - * This procedure is invoked to process the "string nextword" Tcl command. - * See the user documentation for details on what it does. - * - * Results: - * A standard Tcl result. - * - * Side effects: - * See the user documentation. - * - *---------------------------------------------------------------------- - */ - -static int -StringNextWordCmd( - TCL_UNUSED(ClientData), - Tcl_Interp *interp, /* Current interpreter. */ - int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument objects. */ -{ - int ch; - const Tcl_UniChar *p, *end, *string; - int index, length; - - if (objc != 3) { - Tcl_WrongNumArgs(interp, 1, objv, "string index"); - return TCL_ERROR; - } - - string = Tcl_GetUnicodeFromObj(objv[1], &length); - if (TclGetIntForIndexM(interp, objv[2], length-1, &index) != TCL_OK) { - return TCL_ERROR; - } - if (index < 0) { - index = 0; - } - if (index < length) { - p = &string[index]; - end = string+length; - while (index++, p < end) { - p += TclUniCharToUCS4(p, &ch); - if (!Tcl_UniCharIsWordChar(ch)) { - break; - } - } - for (; p < end; index++) { - p += TclUniCharToUCS4(p, &ch); - if (Tcl_UniCharIsWordChar(ch)) { - break; - } - } - } else { - index = length; + index = -1; } Tcl_SetObjResult(interp, Tcl_NewWideIntObj(index)); return TCL_OK; } - + /* *---------------------------------------------------------------------- * @@ -3548,6 +3403,8 @@ TclInitStringCmd( static const EnsembleImplMap stringImplMap[] = { {"bytelength", StringBytesCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, {"cat", StringCatCmd, TclCompileStringCatCmd, NULL, NULL, 0}, + {"charend", StringCharEndCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, + {"charstart", StringCharStartCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, {"compare", StringCmpCmd, TclCompileStringCmpCmd, NULL, NULL, 0}, {"equal", StringEqualCmd, TclCompileStringEqualCmd, NULL, NULL, 0}, {"first", StringFirstCmd, TclCompileStringFirstCmd, NULL, NULL, 0}, @@ -3558,10 +3415,6 @@ TclInitStringCmd( {"length", StringLenCmd, TclCompileStringLenCmd, NULL, NULL, 0}, {"map", StringMapCmd, TclCompileStringMapCmd, NULL, NULL, 0}, {"match", StringMatchCmd, TclCompileStringMatchCmd, NULL, NULL, 0}, - {"nextchar", StringNextCharCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, - {"nextword", StringNextWordCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, - {"prevchar", StringPrevCharCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, - {"prevword", StringPrevWordCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, {"range", StringRangeCmd, TclCompileStringRangeCmd, NULL, NULL, 0}, {"repeat", StringReptCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, {"replace", StringRplcCmd, TclCompileStringReplaceCmd, NULL, NULL, 0}, |