# HG changeset patch # User YAMAMOTO Mitsuharu # Date 1113620582 0 # Node ID 4fdfaa49202b02856afd1e4997254545026c5948 # Parent d45c12a198acf47029fdb04d453ca37a2c8ee061 Include charset.h and coding.h. [TARGET_API_MAC_CARBON] (Qutf_8): Remove extern. [TARGET_API_MAC_CARBON] (cfstring_create_with_string): New function. [TARGET_API_MAC_CARBON] (Fmac_get_preference): Use it. diff -r d45c12a198ac -r 4fdfaa49202b src/mac.c --- a/src/mac.c Sat Apr 16 01:32:21 2005 +0000 +++ b/src/mac.c Sat Apr 16 03:03:02 2005 +0000 @@ -31,6 +31,8 @@ #include "sysselect.h" #include "systime.h" #include "blockinput.h" +#include "charset.h" +#include "coding.h" #include "macterm.h" @@ -265,7 +267,6 @@ #if TARGET_API_MAC_CARBON static Lisp_Object Qstring, Qnumber, Qboolean, Qdate, Qdata; static Lisp_Object Qarray, Qdictionary; -extern Lisp_Object Qutf_8; #define DECODE_UTF_8(str) code_convert_string_norecord (str, Qutf_8, 0) struct cfdict_context @@ -274,7 +275,7 @@ int with_tag, hash_bound; }; -/* C string to CFString. */ +/* C string to CFString. */ CFStringRef cfstring_create_with_utf8_cstring (c_str) @@ -291,6 +292,37 @@ } +/* Lisp string to CFString. */ + +CFStringRef +cfstring_create_with_string (s) + Lisp_Object s; +{ + CFStringRef string = NULL; + + if (STRING_MULTIBYTE (s)) + { + char *p, *end = SDATA (s) + SBYTES (s); + + for (p = SDATA (s); p < end; p++) + if (!isascii (*p)) + { + s = ENCODE_UTF_8 (s); + break; + } + string = CFStringCreateWithBytes (NULL, SDATA (s), SBYTES (s), + kCFStringEncodingUTF8, false); + } + + if (string == NULL) + /* Failed to interpret as UTF 8. Fall back on Mac Roman. */ + string = CFStringCreateWithBytes (NULL, SDATA (s), SBYTES (s), + kCFStringEncodingMacRoman, false); + + return string; +} + + /* From CFData to a lisp string. Always returns a unibyte string. */ Lisp_Object @@ -3711,11 +3743,11 @@ app_id = kCFPreferencesCurrentApplication; if (!NILP (application)) { - app_id = cfstring_create_with_utf8_cstring (SDATA (application)); + app_id = cfstring_create_with_string (application); if (app_id == NULL) goto out; } - key_str = cfstring_create_with_utf8_cstring (SDATA (XCAR (key))); + key_str = cfstring_create_with_string (XCAR (key)); if (key_str == NULL) goto out; app_plist = CFPreferencesCopyAppValue (key_str, app_id); @@ -3728,7 +3760,7 @@ { if (CFGetTypeID (plist) != CFDictionaryGetTypeID ()) break; - key_str = cfstring_create_with_utf8_cstring (SDATA (XCAR (key))); + key_str = cfstring_create_with_string (XCAR (key)); if (key_str == NULL) goto out; plist = CFDictionaryGetValue (plist, key_str);