Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void cut_text( char *data, int len ){
- char *ret;
- if( len <= 0) {
- *data= 0;
- return;
- }
- ret = (char *) calloc( len * 2 + 3, sizeof(char));
- int old_len = 0, ret_count = 0, in_umlaute = 0;
- unsigned char *cur = (unsigned char *)data;
- while( *cur == ' ' ) cur++;
- while( *cur ){
- int wide = 0;
- ret_count++;
- strncpy( &ret[old_len++] , (char*)cur, 1 );
- if(*cur <= 0x7F) // it's 1 byte words
- {
- if(in_umlaute) {
- if(++in_umlaute < 8){
- if( !isalnum(*cur) || *cur != '#' || *cur == ';' )
- in_umlaute = 0;
- }else
- in_umlaute = 0; // reset
- }
- if(*cur == '&') // begin umlaute
- in_umlaute = 1;
- }else{ // utf8 character
- if(*(cur+1)) {
- wide = 1;
- strncpy( &ret[old_len++] , (char*)cur+1, 1 );
- cur++;
- }
- in_umlaute = 0; //reset umlaute if exists
- }
- cur++;
- if(old_len >= len)
- {
- if(in_umlaute) {
- while( ret[--old_len] != '&') ret_count--;
- ret[old_len++]=0;
- }
- strcpy(&ret[old_len -1- wide ], "...");
- break;
- }
- }
- strcpy( data, ret );
- free(ret);
- }
Add Comment
Please, Sign In to add comment