Skip to content

Commit 5c97c01

Browse files
committed
Font (Linux): try fixing style detection
1 parent 50da7ca commit 5c97c01

File tree

3 files changed

+24
-48
lines changed

3 files changed

+24
-48
lines changed

src/common/font.c

Lines changed: 20 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "common/font.h"
33

44
#include <string.h>
5+
#include <ctype.h>
56

67
void ffFontInit(FFfont* font)
78
{
@@ -66,59 +67,33 @@ void ffFontInitQt(FFfont* font, const char* data)
6667
//See https://doc.qt.io/qt-5/qfont.html#toString
6768

6869
//Family
69-
while(*data != ',' && *data != '\0')
70-
{
71-
ffStrbufAppendC(&font->name, *data);
72-
++data;
73-
}
74-
if(*data != '\0')
75-
++data;
70+
data = ffStrbufAppendSUntilC(&font->name, data, ',');
7671
ffStrbufTrim(&font->name, ' ');
72+
if (!data) goto exit;
73+
data++;
7774

7875
//Size
79-
while(*data != ',' && *data != '\0')
80-
{
81-
ffStrbufAppendC(&font->size, *data);
82-
++data;
83-
}
84-
if(*data != '\0')
85-
++data;
76+
data = ffStrbufAppendSUntilC(&font->size, data, ',');
8677
ffStrbufTrim(&font->size, ' ');
87-
88-
#define FF_FONT_QT_SKIP_VALUE \
89-
while(*data != ',' && *data != '\0') \
90-
++data; \
91-
if(*data != '\0') \
92-
++data;
93-
94-
FF_FONT_QT_SKIP_VALUE //Pixel size
95-
FF_FONT_QT_SKIP_VALUE //Style hint
96-
FF_FONT_QT_SKIP_VALUE //Font weight
97-
FF_FONT_QT_SKIP_VALUE //Font style
98-
FF_FONT_QT_SKIP_VALUE //Underline
99-
FF_FONT_QT_SKIP_VALUE //Strike out
100-
FF_FONT_QT_SKIP_VALUE //Fixed pitch
101-
FF_FONT_QT_SKIP_VALUE //Always 0
102-
103-
#undef FF_FONT_QT_SKIP_VALUE
104-
105-
while(*data != '\0')
78+
if (!data) goto exit;
79+
data++;
80+
81+
//Style
82+
data = strrchr(data, ',');
83+
if (!data) goto exit;
84+
data++;
85+
if (isalpha(*data))
10686
{
107-
while(*data == ' ')
108-
++data;
109-
110-
if(*data == '\0')
111-
break;
112-
113-
FFstrbuf* style = ffListAdd(&font->styles);
114-
ffStrbufInit(style);
115-
while(*data != ' ' && *data != '\0')
87+
do
11688
{
117-
ffStrbufAppendC(style, *data);
118-
++data;
119-
}
89+
FFstrbuf* style = ffListAdd(&font->styles);
90+
ffStrbufInit(style);
91+
data = ffStrbufAppendSUntilC(style, data, ' ');
92+
if (data) data++;
93+
} while (data);
12094
}
12195

96+
exit:
12297
fontInitPretty(font);
12398
}
12499

src/util/FFstrbuf.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,16 +159,17 @@ void ffStrbufAppendVF(FFstrbuf* strbuf, const char* format, va_list arguments)
159159
strbuf->length += (uint32_t) written;
160160
}
161161

162-
void ffStrbufAppendSUntilC(FFstrbuf* strbuf, const char* value, char until)
162+
const char* ffStrbufAppendSUntilC(FFstrbuf* strbuf, const char* value, char until)
163163
{
164164
if(value == NULL)
165-
return;
165+
return NULL;
166166

167167
char* end = strchr(value, until);
168168
if(end == NULL)
169169
ffStrbufAppendS(strbuf, value);
170170
else
171171
ffStrbufAppendNS(strbuf, (uint32_t) (end - value), value);
172+
return end;
172173
}
173174

174175
void ffStrbufSetF(FFstrbuf* strbuf, const char* format, ...)

src/util/FFstrbuf.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ void ffStrbufAppendNS(FFstrbuf* strbuf, uint32_t length, const char* value);
4444
void ffStrbufAppendTransformS(FFstrbuf* strbuf, const char* value, int(*transformFunc)(int));
4545
FF_C_PRINTF(2, 3) void ffStrbufAppendF(FFstrbuf* strbuf, const char* format, ...);
4646
void ffStrbufAppendVF(FFstrbuf* strbuf, const char* format, va_list arguments);
47-
void ffStrbufAppendSUntilC(FFstrbuf* strbuf, const char* value, char until);
47+
const char* ffStrbufAppendSUntilC(FFstrbuf* strbuf, const char* value, char until);
4848

4949
void ffStrbufPrependNS(FFstrbuf* strbuf, uint32_t length, const char* value);
5050

0 commit comments

Comments
 (0)