On 21 Sep 2011, at 18:20, Matthias Melcher wrote:

> 
> This should work (untested):
> 
> int findFirstNCharacters(const char *str, int n) 
> {
>  int bytes = 0;
>  int maxBytes = strlen(str);
>  while (n>0 != *str!=0) {
>    int bytesInChar = fl_utf_nb_char(*str, maxBytes);
>    if (bytesInChar==-1) break; // error in UTF-8
>    bytes += bytesInChar;
>    maxBytes -= bytesInChar;
>    str += bytesInChar;
>    n--;
>  }
>  return bytes;
> }

If the intent is to trim glyphs off the end of a string until it only has the 
required number of glyphs left, then I think you could do something useful 
using:

/* F2: Move backward to the previous valid UTF8 sequence start */
FL_EXPORT const char* fl_utf8back(const char* p, const char* start, const char* 
end);


Starting one byte in from the end, I think you can use this to walk backwards 
through the string until you have removed the necessary number of glyphs... 

Say you have used:

  int num_glyphs = fl_utf_nb_char(const unsigned char *buf, int len);

To determine that there are 10 glyphs in your string, and you know you only 
have room for 6 on the screen, then you could use 

   const char *glyph_begin = fl_utf8back(buf, ...);


4 times to walk back to the start of glyph 7, then by comparing the values of 
"buf" and "glyph_begin" you know exactly how many bytes in your string are 
required to create the 6 glyphs that you can fit on the display...

Well, something like that, anyway...




_______________________________________________
fltk-dev mailing list
fltk-dev@easysw.com
http://lists.easysw.com/mailman/listinfo/fltk-dev

Reply via email to