1 /* 2 * Some code come from http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c 3 */ 4 5 #include "../../src/bsdconv.h" 6 cbfilter(struct data_rt * data)7int cbfilter(struct data_rt *data){ 8 uint32_t ucs=0; 9 int i; 10 int max=sizeof(ranges) / sizeof(struct uint32_range) - 1; 11 int min = 0; 12 int mid; 13 14 if(data->len<1 || UCP(data->data)[0]!=1){ 15 return 0; 16 } 17 18 for(i=1;i<data->len;++i){ 19 ucs<<=8; 20 ucs|=UCP(data->data)[i]; 21 } 22 23 if (ucs < ranges[0].first || ucs > ranges[max].last){ 24 //noop 25 }else while (max >= min) { 26 mid = (min + max) / 2; 27 if (ucs > ranges[mid].last) 28 min = mid + 1; 29 else if (ucs < ranges[mid].first) 30 max = mid - 1; 31 else{ 32 return 1; 33 } 34 } 35 36 return 0; 37 } 38