1
0
Fork 0
forked from len0rd/rockbox

improve displaying of string containing diacritic characters. add some characters to determine the position to break line.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27401 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Teruaki Kawashima 2010-07-12 14:59:16 +00:00
parent 8e68e223a4
commit ddbfffb217
2 changed files with 54 additions and 6 deletions

View file

@ -39,6 +39,22 @@ struct view_info {
int start; /* possition of first line in text */
};
static bool isbrchr(const unsigned char *str, int len)
{
const unsigned char *p = "!,-.:;? 、。!,.:;?―";
if (isspace(*str))
return true;
while(*p)
{
int n = rb->utf8seek(p, 1);
if (len == n && !rb->strncmp(p, str, len))
return true;
p += n;
}
return false;
}
static const char* get_next_line(const char *text, struct view_info *info)
{
const char *ptr = text;
@ -53,10 +69,13 @@ static const char* get_next_line(const char *text, struct view_info *info)
#else
unsigned short ch;
n = ((long)rb->utf8decode(ptr, &ch) - (long)ptr);
w = rb->font_get_width(info->pf, ch);
if (rb->is_diacritic(ch, NULL))
w = 0;
else
w = rb->font_get_width(info->pf, ch);
#endif
if (isspace(*ptr))
space = ptr+n;
if (isbrchr(ptr, n))
space = ptr+(isspace(*ptr) || total + w <= info->vp.width? n: 0);
if (*ptr == '\n')
{
ptr += n;