Guest User

Untitled

a guest
May 22nd, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.07 KB | None | 0 0
  1. void cut_text( char *data, int len ){
  2.     char *ret;
  3.     if( len <= 0) {
  4.         *data= 0;
  5.         return;
  6.     }
  7.     ret = (char *) calloc( len * 2 + 3, sizeof(char));
  8.     int old_len = 0, ret_count = 0, in_umlaute = 0;
  9.     unsigned char *cur = (unsigned char *)data;
  10.     while( *cur == ' ' ) cur++;
  11.     while( *cur ){
  12.         int wide = 0;
  13.         ret_count++;
  14.         strncpy( &ret[old_len++] , (char*)cur, 1 );
  15.         if(*cur <= 0x7F) // it's 1 byte words
  16.         {
  17.             if(in_umlaute) {
  18.                 if(++in_umlaute < 8){
  19.                     if( !isalnum(*cur) || *cur != '#' || *cur == ';' )
  20.                         in_umlaute = 0;
  21.                 }else
  22.                     in_umlaute = 0; // reset
  23.             }
  24.             if(*cur == '&') // begin umlaute
  25.                     in_umlaute = 1;
  26.         }else{ // utf8 character
  27.             if(*(cur+1)) {
  28.                 wide = 1;
  29.                 strncpy( &ret[old_len++] , (char*)cur+1, 1 );
  30.                 cur++;
  31.             }
  32.             in_umlaute = 0; //reset umlaute if exists
  33.         }
  34.         cur++;
  35.         if(old_len >= len)
  36.         {
  37.             if(in_umlaute) {
  38.                 while( ret[--old_len] != '&') ret_count--;
  39.                 ret[old_len++]=0;
  40.             }
  41.             strcpy(&ret[old_len -1- wide ], "...");
  42.             break;
  43.         }
  44.     }
  45.     strcpy( data, ret );
  46.     free(ret);
  47. }
Add Comment
Please, Sign In to add comment