18 #include <drizzled/internal/m_string.h>
19 #include <drizzled/charset.h>
31 int my_strcasecmp_mb(
const charset_info_st *
const cs,
const char *s,
const char *t)
34 unsigned char *map=cs->to_upper;
39 if ((l=my_ismbchar(cs, s, s + cs->mbmaxlen)))
45 else if (my_mbcharlen(cs, *t) > 1)
47 else if (map[(
unsigned char) *s++] != map[(
unsigned char) *t++])
61 inline static const char* inc_ptr(
const charset_info_st *cs,
const char *str,
const char* str_end)
63 return str + (my_ismbchar(cs, str, str_end) ? my_ismbchar(cs, str, str_end) : 1);
66 inline static int likeconv(
const charset_info_st *cs,
const char c)
68 return (
unsigned char) cs->sort_order[(
unsigned char) c];
71 int my_wildcmp_mb(
const charset_info_st *
const cs,
72 const char *str,
const char *str_end,
73 const char *wildstr,
const char *wildend,
74 int escape,
int w_one,
int w_many)
78 while (wildstr != wildend)
80 while (*wildstr != w_many && *wildstr != w_one)
83 if (*wildstr == escape && wildstr+1 != wildend)
85 if ((l = my_ismbchar(cs, wildstr, wildend)))
87 if (str+l > str_end || memcmp(str, wildstr, l) != 0)
93 if (str == str_end || likeconv(cs,*wildstr++) != likeconv(cs,*str++))
95 if (wildstr == wildend)
96 return (str != str_end);
99 if (*wildstr == w_one)
105 inc_ptr(cs,str,str_end);
106 }
while (++wildstr < wildend && *wildstr == w_one);
107 if (wildstr == wildend)
110 if (*wildstr == w_many)
113 const char* mb = wildstr;
118 for (; wildstr != wildend ; wildstr++)
120 if (*wildstr == w_many)
122 if (*wildstr == w_one)
126 inc_ptr(cs,str,str_end);
131 if (wildstr == wildend)
136 if ((cmp= *wildstr) == escape && wildstr+1 != wildend)
140 mb_len= my_ismbchar(cs, wildstr, wildend);
141 inc_ptr(cs,wildstr,wildend);
142 cmp=likeconv(cs,cmp);
151 if (str+mb_len <= str_end && memcmp(str, mb, mb_len) == 0)
157 else if (!my_ismbchar(cs, str, str_end) &&
158 likeconv(cs,*str) == cmp)
163 inc_ptr(cs,str, str_end);
166 int tmp=my_wildcmp_mb(cs,str,str_end,wildstr,wildend,escape,w_one,
171 }
while (str != str_end && wildstr[0] != w_many);
175 return (str != str_end ? 1 : 0);
179 size_t my_numchars_mb(
const charset_info_st *
const cs,
180 const char *pos,
const char *end)
186 pos+= (mb_len= my_ismbchar(cs,pos,end)) ? mb_len : 1;
193 size_t my_charpos_mb(
const charset_info_st *
const cs,
const char *pos,
const char *end,
size_t length)
195 const char *start= pos;
197 while (length && pos < end)
200 pos+= (mb_len= my_ismbchar(cs, pos, end)) ? mb_len : 1;
203 return (
size_t) (length ? end+2-start : pos-start);
207 size_t my_well_formed_len_mb(
const charset_info_st& cs,
str_ref str,
size_t pos,
int *error)
209 const char *b= str.begin();
210 const char *e= str.end();
211 const char *b_start= b;
216 int mb_len= cs.cset->mb_wc(&cs, &wc, (
const unsigned char*) b, (
const unsigned char*) e);
219 *error= b < e ? 1 : 0;
225 return (
size_t) (b - b_start);
229 uint32_t my_instr_mb(
const charset_info_st *
const cs,
230 const char *b,
size_t b_length,
231 const char *s,
size_t s_length,
232 my_match_t *match, uint32_t nmatch)
234 const char *end, *b0;
237 if (s_length <= b_length)
251 end= b+b_length-s_length+1;
257 if (!cs->coll->strnncoll(cs, (
const unsigned char*) b, s_length,
258 (
const unsigned char*) s, s_length, 0))
263 match[0].end= (size_t) (b-b0);
264 match[0].mb_len= res;
267 match[1].beg= match[0].end;
268 match[1].end= match[0].end+s_length;
274 mb_len= (mb_len= my_ismbchar(cs, b, end)) ? mb_len : 1;
286 int my_strnncoll_mb_bin(
const charset_info_st *
const,
287 const unsigned char *s,
size_t slen,
288 const unsigned char *t,
size_t tlen,
291 size_t len= min(slen,tlen);
292 int cmp= memcmp(s,t,len);
293 return cmp ? cmp : (int) ((t_is_prefix ? len : slen) - tlen);
322 int my_strnncollsp_mb_bin(
const charset_info_st *
const,
323 const unsigned char *a,
size_t a_length,
324 const unsigned char *b,
size_t b_length,
325 bool diff_if_only_endspace_difference)
327 const unsigned char *end;
331 #ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE
332 diff_if_only_endspace_difference= 0;
335 end= a + (length= min(a_length, b_length));
339 return ((
int) a[-1] - (int) b[-1]);
342 if (a_length != b_length)
345 if (diff_if_only_endspace_difference)
351 if (a_length < b_length)
359 for (end= a + a_length-length; a < end ; a++)
362 return (*a <
' ') ? -swap : swap;
377 #define my_strnxfrm_mb_non_ascii_char(cs, dst, src, se) \
379 switch (cs->cset->ismbchar(cs, (const char*) src, (const char*) se)) { \
401 my_strnxfrm_mb(
const charset_info_st *
const cs,
402 unsigned char *dst,
size_t dstlen, uint32_t nweights,
403 const unsigned char *src,
size_t srclen, uint32_t flags)
405 unsigned char *d0= dst;
406 unsigned char *de= dst + dstlen;
407 const unsigned char *se= src + srclen;
408 const unsigned char *sort_order= cs->sort_order;
410 assert(cs->mbmaxlen <= 4);
417 if (dstlen >= srclen && nweights >= srclen)
422 for (; src < se; nweights--)
425 *dst++= sort_order[*src++];
427 my_strnxfrm_mb_non_ascii_char(cs, dst, src, se);
433 for (; src < se; nweights--)
438 my_strnxfrm_mb_non_ascii_char(cs, dst, src, se);
448 for (; src < se && nweights; nweights--)
452 !(chlen= cs->cset->ismbchar(cs, (
const char*) src, (
const char*) se)))
457 *dst++= sort_order ? sort_order[*src++] : *src++;
462 if (dst + chlen > de)
472 return my_strxfrm_pad_desc_and_reverse(cs, d0, dst, de, nweights, flags, 0);
476 int my_strcasecmp_mb_bin(
const charset_info_st *
const,
477 const char *s,
const char *t)
483 void my_hash_sort_mb_bin(
const charset_info_st *
const,
484 const unsigned char *key,
size_t len,
485 uint32_t *nr1, uint32_t *nr2)
487 const unsigned char *pos = key;
493 key= internal::skip_trailing_space(key, len);
495 for (; pos < (
const unsigned char*) key ; pos++)
497 nr1[0]^=(ulong) ((((uint32_t) nr1[0] & 63)+nr2[0]) *
498 ((uint32_t)*pos)) + (nr1[0] << 8);
520 static void pad_max_char(
const charset_info_st *
const cs,
char *str,
char *end)
525 if (!(cs->state & MY_CS_UNICODE))
527 memset(str, 255, end - str);
531 buflen= cs->cset->wc_mb(cs, cs->max_sort_char, (
unsigned char*) buf,
532 (
unsigned char*) buf +
sizeof(buf));
537 if ((str + buflen) < end)
540 memcpy(str, buf, buflen);
574 bool my_like_range_mb(
const charset_info_st *
const cs,
575 const char *ptr,
size_t ptr_length,
576 char escape,
char w_one,
char w_many,
578 char *min_str,
char *max_str,
579 size_t *min_length,
size_t *max_length)
582 const char *end= ptr + ptr_length;
583 char *min_org= min_str;
584 char *min_end= min_str + res_length;
585 char *max_end= max_str + res_length;
586 size_t maxcharlen= res_length / cs->mbmaxlen;
587 const char *contraction_flags= cs->contractions ?
588 ((
const char*) cs->contractions) + 0x40*0x40 : NULL;
590 for (; ptr != end && min_str != min_end && maxcharlen ; maxcharlen--)
593 if (*ptr == escape && ptr+1 != end)
595 else if (*ptr == w_one || *ptr == w_many)
603 *min_length= ((cs->state & MY_CS_BINSORT) ? (
size_t) (min_str - min_org) :
605 *max_length= res_length;
609 *min_str++= (char) cs->min_sort_char;
610 }
while (min_str != min_end);
617 *max_length= res_length;
618 pad_max_char(cs, max_str, max_end);
621 if ((mb_len= my_ismbchar(cs, ptr, end)) > 1)
623 if (ptr+mb_len > end || min_str+mb_len > min_end)
626 *min_str++= *max_str++= *ptr++;
656 if (contraction_flags && ptr + 1 < end &&
657 contraction_flags[(
unsigned char) *ptr])
661 if (ptr[1] == w_one || ptr[1] == w_many)
664 goto fill_max_and_min;
679 if (contraction_flags[(
unsigned char) ptr[1]] &&
680 cs->contractions[(*ptr-0x40)*0x40 + ptr[1] - 0x40])
683 if (maxcharlen == 1 || min_str + 1 >= min_end)
686 goto fill_max_and_min;
690 *min_str++= *max_str++= *ptr++;
695 *min_str++= *max_str++= *ptr++;
699 *min_length= *max_length = (size_t) (min_str - min_org);
700 while (min_str != min_end)
701 *min_str++= *max_str++=
' ';
706 int my_wildcmp_mb_bin(
const charset_info_st *
const cs,
707 const char *str,
const char *str_end,
708 const char *wildstr,
const char *wildend,
709 int escape,
int w_one,
int w_many)
713 while (wildstr != wildend)
715 while (*wildstr != w_many && *wildstr != w_one)
718 if (*wildstr == escape && wildstr+1 != wildend)
720 if ((l = my_ismbchar(cs, wildstr, wildend)))
722 if (str+l > str_end || memcmp(str, wildstr, l) != 0)
728 if (str == str_end || *wildstr++ != *str++)
730 if (wildstr == wildend)
731 return (str != str_end);
734 if (*wildstr == w_one)
740 inc_ptr(cs,str,str_end);
741 }
while (++wildstr < wildend && *wildstr == w_one);
742 if (wildstr == wildend)
745 if (*wildstr == w_many)
748 const char* mb = wildstr;
753 for (; wildstr != wildend ; wildstr++)
755 if (*wildstr == w_many)
757 if (*wildstr == w_one)
761 inc_ptr(cs,str,str_end);
766 if (wildstr == wildend)
771 if ((cmp= *wildstr) == escape && wildstr+1 != wildend)
775 mb_len= my_ismbchar(cs, wildstr, wildend);
776 inc_ptr(cs,wildstr,wildend);
785 if (str+mb_len <= str_end && memcmp(str, mb, mb_len) == 0)
791 else if (!my_ismbchar(cs, str, str_end) && *str == cmp)
796 inc_ptr(cs,str, str_end);
799 int tmp=my_wildcmp_mb_bin(cs,str,str_end,wildstr,wildend,escape,w_one,w_many);
803 }
while (str != str_end && wildstr[0] != w_many);
807 return (str != str_end ? 1 : 0);
815 static char pg11[256]=
817 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
818 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
819 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,
820 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
821 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
822 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
823 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
824 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
827 static char pg23[256]=
829 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
830 0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
831 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
832 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
833 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
834 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
835 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
836 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
839 static char pg2E[256]=
841 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
842 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
843 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
844 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
845 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,
846 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
847 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
848 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0
851 static char pg2F[256]=
853 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
854 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
855 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
856 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
857 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
858 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
859 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
860 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0
863 static char pg30[256]=
865 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
866 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
867 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
868 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
869 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,
870 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
871 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
872 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
875 static char pg31[256]=
877 0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
878 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
879 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
880 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
881 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
882 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
883 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
884 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
887 static char pg32[256]=
889 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
890 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
891 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
892 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,
893 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
894 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
895 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
896 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
899 static char pg4D[256]=
901 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
902 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
903 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
904 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
905 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
906 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
907 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
908 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
911 static char pg9F[256]=
913 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
914 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
915 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
916 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
917 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
918 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
919 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
920 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
923 static char pgA4[256]=
925 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
926 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
927 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
928 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
929 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
930 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
931 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
932 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
935 static char pgD7[256]=
937 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
938 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
939 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
940 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
941 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
942 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
943 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
944 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
947 static char pgFA[256]=
949 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
950 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
951 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
952 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
953 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
954 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
955 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
956 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
959 static char pgFE[256]=
961 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
962 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
963 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,
964 1,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
965 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
966 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
967 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
968 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
971 static char pgFF[256]=
973 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
974 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
975 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
976 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
977 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
978 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
979 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
980 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
990 {0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},
991 {0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},
992 {0,NULL},{0,pg11},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},
993 {0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},
994 {0,NULL},{0,NULL},{0,NULL},{0,pg23},{0,NULL},{0,NULL},{0,NULL},{0,NULL},
995 {0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,pg2E},{0,pg2F},
996 {0,pg30},{0,pg31},{0,pg32},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
997 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
998 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
999 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{0,pg4D},{1,NULL},{1,NULL},
1000 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1001 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1002 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1003 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1004 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1005 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1006 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1007 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1008 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1009 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{0,pg9F},
1010 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{0,pgA4},{0,NULL},{0,NULL},{0,NULL},
1011 {0,NULL},{0,NULL},{0,NULL},{0,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1012 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1013 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1014 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1015 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},
1016 {1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{0,pgD7},
1017 {0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},
1018 {0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},
1019 {0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},
1020 {0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},
1021 {0,NULL},{1,NULL},{0,pgFA},{0,NULL},{0,NULL},{0,NULL},{0,pgFE},{0,pgFF}
1025 size_t my_numcells_mb(
const charset_info_st *
const cs,
const char *b,
const char *e)
1034 if ((mb_len= cs->cset->mb_wc(cs, &wc, (
unsigned char*) b, (
unsigned char*) e)) <= 0 ||
1046 pg= (wc >> 8) & 0xFF;
1047 clen+= utr11_data[pg].p ? utr11_data[pg].p[wc & 0xFF] : utr11_data[pg].page;
1055 int my_mb_ctype_mb(
const charset_info_st *
const cs,
int *ctype,
1056 const unsigned char *s,
const unsigned char *e)
1059 int res= cs->cset->mb_wc(cs, &wc, s, e);
1060 if (res <= 0 || wc > 0xFFFF)
1063 *ctype= my_uni_ctype[wc>>8].ctype ? my_uni_ctype[wc>>8].ctype[wc&0xFF] : my_uni_ctype[wc>>8].pctype;
TODO: Rename this file - func.h is stupid.