diff options
| author | Simon Tatham <anakin@pobox.com> | 2009-12-27 10:01:16 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2009-12-27 10:01:16 +0000 |
| commit | 9fbb365684ef662fc183ebd45c2eeb50f40589b5 (patch) | |
| tree | 494e77cfaa8402d920bd6615db0a31dbdbc59183 /drawing.c | |
| parent | 72922b307822874862d943893b10ac75d01689d2 (diff) | |
| download | puzzles-9fbb365684ef662fc183ebd45c2eeb50f40589b5.zip puzzles-9fbb365684ef662fc183ebd45c2eeb50f40589b5.tar.gz puzzles-9fbb365684ef662fc183ebd45c2eeb50f40589b5.tar.bz2 puzzles-9fbb365684ef662fc183ebd45c2eeb50f40589b5.tar.xz | |
Introduce, and implement as usefully as I can in all front ends, a
new function in the drawing API which permits the display of text
from outside basic ASCII. A fallback mechanism is provided so that
puzzles can give a list of strings they'd like to display in order
of preference and the system will return the best one it can manage;
puzzles are required to cope with ASCII-only front ends.
[originally from svn r8793]
Diffstat (limited to 'drawing.c')
| -rw-r--r-- | drawing.c | 33 |
1 files changed, 33 insertions, 0 deletions
@@ -127,6 +127,39 @@ void end_draw(drawing *dr) dr->api->end_draw(dr->handle); } +char *text_fallback(drawing *dr, const char *const *strings, int nstrings) +{ + int i; + + /* + * If the drawing implementation provides one of these, use it. + */ + if (dr && dr->api->text_fallback) + return dr->api->text_fallback(dr->handle, strings, nstrings); + + /* + * Otherwise, do the simple thing and just pick the first string + * that fits in plain ASCII. It will then need no translation + * out of UTF-8. + */ + for (i = 0; i < nstrings; i++) { + const char *p; + + for (p = strings[i]; *p; p++) + if (*p & 0x80) + break; + if (!*p) + return dupstr(strings[i]); + } + + /* + * The caller was responsible for making sure _some_ string in + * the list was in plain ASCII. + */ + assert(!"Should never get here"); + return NULL; /* placate optimiser */ +} + void status_bar(drawing *dr, char *text) { char *rewritten; |