diff options
author | dgp <dgp@users.sourceforge.net> | 2020-04-16 18:14:55 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2020-04-16 18:14:55 (GMT) |
commit | 2b4c279e0ba71a2727bb76740ba90ea2f800fc90 (patch) | |
tree | 44e21620cd63b22ab7b5a532411356a0fcff481e | |
parent | 54bf1628429213cb630d7e08afc0ffc7f2e55772 (diff) | |
download | tcl-2b4c279e0ba71a2727bb76740ba90ea2f800fc90.zip tcl-2b4c279e0ba71a2727bb76740ba90ea2f800fc90.tar.gz tcl-2b4c279e0ba71a2727bb76740ba90ea2f800fc90.tar.bz2 |
Create and use macro TclUtfPrev for Tcl_UtfPrev.
-rw-r--r-- | generic/tclCmdMZ.c | 2 | ||||
-rw-r--r-- | generic/tclInt.h | 5 | ||||
-rw-r--r-- | generic/tclStringObj.c | 6 | ||||
-rw-r--r-- | generic/tclUtil.c | 2 |
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); |