Mercurial > emacs
changeset 61572:4fdfaa49202b
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.
author | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
---|---|
date | Sat, 16 Apr 2005 03:03:02 +0000 |
parents | d45c12a198ac |
children | 5b0b486b7f71 |
files | src/mac.c |
diffstat | 1 files changed, 37 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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);