summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2020-04-16 18:14:55 (GMT)
committerdgp <dgp@users.sourceforge.net>2020-04-16 18:14:55 (GMT)
commit2b4c279e0ba71a2727bb76740ba90ea2f800fc90 (patch)
tree44e21620cd63b22ab7b5a532411356a0fcff481e
parent54bf1628429213cb630d7e08afc0ffc7f2e55772 (diff)
downloadtcl-2b4c279e0ba71a2727bb76740ba90ea2f800fc90.zip
tcl-2b4c279e0ba71a2727bb76740ba90ea2f800fc90.tar.gz
tcl-2b4c279e0ba71a2727bb76740ba90ea2f800fc90.tar.bz2
Create and use macro TclUtfPrev for Tcl_UtfPrev.
-rw-r--r--generic/tclCmdMZ.c2
-rw-r--r--generic/tclInt.h5
-rw-r--r--generic/tclStringObj.c6
-rw-r--r--generic/tclUtil.c2
4 files changed, 10 insertions, 5 deletions
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c
index 6515d98..f6bdd3e 100644
--- a/generic/tclCmdMZ.c
+++ b/generic/tclCmdMZ.c
@@ -2406,7 +2406,7 @@ StringStartCmd(
break;
}
- next = Tcl_UtfPrev(p, string);
+ next = TclUtfPrev(p, string);
do {
next += delta;
delta = TclUtfToUniChar(next, &ch);
diff --git a/generic/tclInt.h b/generic/tclInt.h
index 15bc000..3dc3d1d 100644
--- a/generic/tclInt.h
+++ b/generic/tclInt.h
@@ -3691,6 +3691,11 @@ MODULE_SCOPE void TclDbInitNewObj(Tcl_Obj *objPtr, CONST char *file,
((*(chPtr) = (unsigned char) *(str)), 1) \
: Tcl_UtfToUniChar(str, chPtr))
+#define TclUtfPrev(src, start) \
+ (((src) < (start)+2) ? (start) : \
+ ((unsigned char) *(src - 1)) < 0x80 ? (src)-1 : \
+ Tcl_UtfPrev(src, start))
+
/*
*----------------------------------------------------------------
* Macro that encapsulates the logic that determines when it is safe to
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c
index c3c85dc..d62fc72 100644
--- a/generic/tclStringObj.c
+++ b/generic/tclStringObj.c
@@ -1139,10 +1139,10 @@ Tcl_AppendLimitedToObj(
}
eLen = strlen(ellipsis);
while (eLen > limit) {
- eLen = Tcl_UtfPrev(ellipsis+eLen, ellipsis) - ellipsis;
+ eLen = TclUtfPrev(ellipsis+eLen, ellipsis) - ellipsis;
}
- toCopy = Tcl_UtfPrev(bytes+limit+1-eLen, bytes) - bytes;
+ toCopy = TclUtfPrev(bytes+limit+1-eLen, bytes) - bytes;
}
/*
@@ -2585,7 +2585,7 @@ AppendPrintfToObjVA(
* multi-byte characters.
*/
- q = Tcl_UtfPrev(end, bytes);
+ q = TclUtfPrev(end, bytes);
if (!Tcl_UtfCharComplete(q, (int)(end - q))) {
end = q;
}
diff --git a/generic/tclUtil.c b/generic/tclUtil.c
index 3dd9a32..50922bf 100644
--- a/generic/tclUtil.c
+++ b/generic/tclUtil.c
@@ -1554,7 +1554,7 @@ TclTrimRight(
const char *q = trim;
int pInc = 0, bytesLeft = numTrim;
- pp = Tcl_UtfPrev(p, bytes);
+ pp = TclUtfPrev(p, bytes);
do {
pp += pInc;
pInc = TclUtfToUniChar(pp, &ch1);