summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenichi Handa <handa@m17n.org>2008-05-14 01:22:48 +0000
committerKenichi Handa <handa@m17n.org>2008-05-14 01:22:48 +0000
commit3343f8d4357d5fe014749f79225f08d7190dba62 (patch)
tree72b546f40a4b44a5bca6c0ffc77845ca60eb724f
parentb6d9dee59739d020a3330d71d259de9f500cbc60 (diff)
downloademacs-3343f8d4357d5fe014749f79225f08d7190dba62.tar.gz
(Vcharset_non_preferred_head): New variable.
(Vcurrent_iso639_language): New variable. (syms_of_charset): Declare it as a Lisp variable. (char_charset): Don't check non preferred charsets. As a last resort, return charset_unicode. (Fset_charset_priority): Update Vcharset_non_preferred_head.
-rw-r--r--src/charset.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/charset.c b/src/charset.c
index 5fe7e43a7a8..121cea7521d 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -97,6 +97,10 @@ int charset_unibyte;
/* List of charsets ordered by the priority. */
Lisp_Object Vcharset_ordered_list;
+/* Sub-list of Vcharset_ordered_list that contains all non-preferred
+ charsets. */
+Lisp_Object Vcharset_non_preferred_head;
+
/* Incremented everytime we change Vcharset_ordered_list. This is
unsigned short so that it fits in Lisp_Int and never matches
-1. */
@@ -118,6 +122,8 @@ Lisp_Object Vcharset_map_path;
Lisp_Object Vchar_unified_charset_table;
+Lisp_Object Vcurrent_iso639_language;
+
/* Defined in chartab.c */
extern void
map_char_table_for_charset P_ ((void (*c_function) (Lisp_Object, Lisp_Object),
@@ -1810,7 +1816,8 @@ char_charset (c, charset_list, code_return)
if (NILP (charset_list))
charset_list = Vcharset_ordered_list;
- while (CONSP (charset_list))
+ while (CONSP (charset_list)
+ && ! EQ (charset_list, Vcharset_non_preferred_head))
{
struct charset *charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
unsigned code = ENCODE_CHAR (charset, c);
@@ -1823,7 +1830,8 @@ char_charset (c, charset_list, code_return)
}
charset_list = XCDR (charset_list);
}
- return NULL;
+ return (c <= MAX_UNICODE_CHAR ? CHARSET_FROM_ID (charset_unicode)
+ : CHARSET_FROM_ID (charset_eight_bit));
}
@@ -1994,7 +2002,7 @@ usage: (set-charset-priority &rest charsets) */)
}
}
arglist[0] = Fnreverse (new_head);
- arglist[1] = old_list;
+ arglist[1] = Vcharset_non_preferred_head = old_list;
Vcharset_ordered_list = Fnconc (2, arglist);
charset_ordered_list_tick++;
@@ -2133,6 +2141,12 @@ syms_of_charset ()
doc: /* List of all charsets ever defined. */);
Vcharset_list = Qnil;
+ DEFVAR_LISP ("current-iso639-language", &Vcurrent_iso639_language,
+ doc: /* ISO639 language mnemonic symbol for the current language environment.
+If the current language environment is for multiple languages (e.g. "Latin-1"),
+the value may be a list of mnemonics. */);
+ Vcurrent_iso639_language = Qnil;
+
charset_ascii
= define_charset_internal (Qascii, 1, "\x00\x7F\x00\x00\x00\x00",
0, 127, 'B', -1, 0, 1, 0, 0);