aboutsummaryrefslogtreecommitdiff
path: root/drawing.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2009-12-27 10:01:16 +0000
committerSimon Tatham <anakin@pobox.com>2009-12-27 10:01:16 +0000
commit9fbb365684ef662fc183ebd45c2eeb50f40589b5 (patch)
tree494e77cfaa8402d920bd6615db0a31dbdbc59183 /drawing.c
parent72922b307822874862d943893b10ac75d01689d2 (diff)
downloadpuzzles-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.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/drawing.c b/drawing.c
index 26df1ff..4cbb46d 100644
--- a/drawing.c
+++ b/drawing.c
@@ -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;