summaryrefslogtreecommitdiff
path: root/strings/ctype-uca.inl
diff options
context:
space:
mode:
Diffstat (limited to 'strings/ctype-uca.inl')
-rw-r--r--strings/ctype-uca.inl26
1 files changed, 17 insertions, 9 deletions
diff --git a/strings/ctype-uca.inl b/strings/ctype-uca.inl
index 9b8c271ab50..6aa72847c81 100644
--- a/strings/ctype-uca.inl
+++ b/strings/ctype-uca.inl
@@ -398,6 +398,7 @@ static inline weight_and_nchars_t
MY_FUNCTION_NAME(scanner_next_pad_trim)(my_uca_scanner *scanner,
my_uca_scanner_param *param,
size_t nchars,
+ uint flags,
uint *generated)
{
weight_and_nchars_t res;
@@ -411,7 +412,10 @@ MY_FUNCTION_NAME(scanner_next_pad_trim)(my_uca_scanner *scanner,
We reached the end of the string, but the caller wants more weights.
Perform space padding.
*/
- res.weight= my_space_weight(param->level);
+ res.weight=
+ flags & MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES ?
+ my_space_weight(param->level) : 0;
+
res.nchars= 1;
(*generated)++;
}
@@ -448,7 +452,8 @@ MY_FUNCTION_NAME(strnncollsp_nchars_onelevel)(CHARSET_INFO *cs,
const MY_UCA_WEIGHT_LEVEL *level,
const uchar *s, size_t slen,
const uchar *t, size_t tlen,
- size_t nchars)
+ size_t nchars,
+ uint flags)
{
my_uca_scanner sscanner;
my_uca_scanner tscanner;
@@ -481,16 +486,17 @@ TODO: strnncollsp_nchars_onelevel
s_res= MY_FUNCTION_NAME(scanner_next_pad_trim)(&sscanner, &param,
s_nchars_left,
- &generated);
+ flags, &generated);
t_res= MY_FUNCTION_NAME(scanner_next_pad_trim)(&tscanner, &param,
t_nchars_left,
- &generated);
+ flags, &generated);
if ((diff= (s_res.weight - t_res.weight)))
return diff;
if (generated == 2)
{
- if (cs->state & MY_CS_NOPAD)
+ if ((cs->state & MY_CS_NOPAD) &&
+ (flags & MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES))
{
/*
Both values are auto-generated. There's no real data any more.
@@ -542,11 +548,12 @@ static int
MY_FUNCTION_NAME(strnncollsp_nchars)(CHARSET_INFO *cs,
const uchar *s, size_t slen,
const uchar *t, size_t tlen,
- size_t nchars)
+ size_t nchars,
+ uint flags)
{
return MY_FUNCTION_NAME(strnncollsp_nchars_onelevel)(cs, &cs->uca->level[0],
s, slen, t, tlen,
- nchars);
+ nchars, flags);
}
@@ -557,7 +564,8 @@ static int
MY_FUNCTION_NAME(strnncollsp_nchars_multilevel)(CHARSET_INFO *cs,
const uchar *s, size_t slen,
const uchar *t, size_t tlen,
- size_t nchars)
+ size_t nchars,
+ uint flags)
{
uint i, level_flags= cs->levels_for_order;
for (i= 0; level_flags; i++, level_flags>>= 1)
@@ -569,7 +577,7 @@ MY_FUNCTION_NAME(strnncollsp_nchars_multilevel)(CHARSET_INFO *cs,
&cs->uca->level[i],
s, slen,
t, tlen,
- nchars);
+ nchars, flags);
if (ret)
return ret;
}