Skip to content

Commit

Permalink
resolve #28: utf append bug fix
Browse files Browse the repository at this point in the history
FossilOrigin-Name: 1716d0db0a2a527958c3b59d2c1a21ba9b96b74f0bc6ea42e609d135a8c64cc0
  • Loading branch information
pmacdona committed Oct 23, 2020
1 parent e12356b commit 89e996f
Showing 1 changed file with 16 additions and 12 deletions.
28 changes: 16 additions & 12 deletions src/jsiString.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ static Jsi_RC StringSubstrCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value *_t
ostr = jsi_SubstrDup(v, bLen, istart, -1, &olen);
Jsi_ValueMakeBlob(interp, ret, (uchar*)ostr, olen);
} else {
Jsi_UtfSubstr(v, istart, -1, &dStr);
Jsi_UtfSubstr(v, bLen, istart, -1, &dStr);
Jsi_ValueFromDS(interp, &dStr, ret);
}
return JSI_OK;
Expand All @@ -144,7 +144,7 @@ static Jsi_RC StringSubstrCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value *_t
} else {
if (ilen>(bLen-istart))
ilen = (bLen-istart);
Jsi_UtfSubstr(v, istart, ilen, &dStr);
Jsi_UtfSubstr(v, bLen, istart, ilen, &dStr);
Jsi_ValueFromDS(interp, &dStr, ret);
}
}
Expand Down Expand Up @@ -175,7 +175,7 @@ static Jsi_RC StringSubstringCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value
ostr = jsi_SubstrDup(v, bLen, istart, -1, &olen);
Jsi_ValueMakeBlob(interp, ret, (uchar*)ostr, olen);
} else {
Jsi_UtfSubstr(v, istart, -1, &dStr);
Jsi_UtfSubstr(v, bLen, istart, -1, &dStr);
Jsi_ValueFromDS(interp, &dStr, ret);
}
return JSI_OK;
Expand All @@ -190,7 +190,7 @@ static Jsi_RC StringSubstringCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value
ostr = jsi_SubstrDup(v, bLen, istart, iend-istart+1, &olen);
Jsi_ValueMakeBlob(interp, ret, (uchar*)ostr, olen);
} else {
Jsi_UtfSubstr(v, istart, iend-istart+1, &dStr);
Jsi_UtfSubstr(v, bLen, istart, iend-istart+1, &dStr);
Jsi_ValueFromDS(interp, &dStr, ret);
}
}
Expand Down Expand Up @@ -367,7 +367,7 @@ static Jsi_RC _StringTrimCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value *_th
}
Jsi_DString dStr;
Jsi_DSInit(&dStr);
Jsi_UtfSubstr(vstr, 0, vend+1, &dStr);
Jsi_UtfSubstr(vstr, bLen, 0, vend+1, &dStr);
Jsi_ValueFromDS(interp, &dStr, ret);
return JSI_OK;
}
Expand All @@ -390,23 +390,27 @@ static Jsi_RC StringTrimRightCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value
}


char *jsi_utf_tocase(const char *cp, int upper, Jsi_DString *dsPtr)
char *jsi_utf_tocase(const char *cp, int blen, int upper, Jsi_DString *dsPtr)
{
char unibuf[10];
char unibuf[10], m = 0;
while (*cp) {
#if JSI__UTF8
if (*cp&0x80) {
int32_t c;
Jsi_UtfToUniChar(cp, &c);
int n = Jsi_UniCharToUtf(c, unibuf);
if ((m+n)>=blen)
break;
unibuf[n] = 0;
cp += n;
m += n;
} else
#endif
{
unibuf[0] = (upper?toupper(*cp):tolower(*cp));
unibuf[1] = 0;
cp++;
m++;
}
if (upper==2) //totile
upper = 0;
Expand All @@ -425,7 +429,7 @@ static Jsi_RC StringToLowerCaseCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Valu
ChkString(_this, funcPtr, vstr, &sLen, &bLen);
Jsi_DString dStr;
Jsi_DSInit(&dStr);
jsi_utf_tocase(vstr, 0, &dStr);
jsi_utf_tocase(vstr, bLen, 0, &dStr);
Jsi_ValueFromDS(interp, &dStr, ret);
return JSI_OK;
}
Expand All @@ -439,7 +443,7 @@ static Jsi_RC StringToUpperCaseCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Valu

Jsi_DString dStr;
Jsi_DSInit(&dStr);
jsi_utf_tocase(vstr, 1, &dStr);
jsi_utf_tocase(vstr, bLen,1, &dStr);
Jsi_ValueFromDS(interp, &dStr, ret);
return JSI_OK;
}
Expand All @@ -452,7 +456,7 @@ static Jsi_RC StringToTitleCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value *_
ChkString(_this, funcPtr, vstr, &sLen, &bLen);
Jsi_DString dStr;
Jsi_DSInit(&dStr);
jsi_utf_tocase(vstr, 2, &dStr);
jsi_utf_tocase(vstr, bLen, 2, &dStr);
Jsi_ValueFromDS(interp, &dStr, ret);
return JSI_OK;
}
Expand All @@ -473,7 +477,7 @@ static Jsi_RC StringCharAtCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value *_t
else {
Jsi_DString dStr;
Jsi_DSInit(&dStr);
Jsi_UtfSubstr(vstr, pos, 1, &dStr);
Jsi_UtfSubstr(vstr, bLen, pos, 1, &dStr);
Jsi_ValueFromDS(interp, &dStr, ret);
}
return JSI_OK;
Expand Down Expand Up @@ -574,7 +578,7 @@ static Jsi_RC StringSliceCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value *_th
}
Jsi_DString dStr;
Jsi_DSInit(&dStr);
Jsi_UtfSubstr(vstr, istart, iend, &dStr);
Jsi_UtfSubstr(vstr, bLen, istart, iend, &dStr);
Jsi_ValueFromDS(interp, &dStr, ret);
return JSI_OK;
}
Expand Down

0 comments on commit 89e996f

Please sign in to comment.