This file is part of GNU Emacs.
-GNU Emacs is free software; you can redistribute it and/or modify
+GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA. */
+along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#ifndef EMACS_CHARSET_H
#define EMACS_CHARSET_H
/* Property list of the charset. */
charset_plist,
- /* If the method of the charset is `MAP_DEFERRED', the value is a
- mapping vector or a file name that contains mapping vector.
- Otherwise, nil. */
+ /* If the method of the charset is `MAP', the value is a mapping
+ vector or a file name that contains mapping vector. Otherwise,
+ nil. */
charset_map,
/* If the method of the charset is `MAP', the value is a vector
(CHARSET-ID . OFFSET)
- CHARSET-IDs are ID numbers of parent charsets. OFFSET is an
- integer value to add to a code point of the parent charset to
- get the corresponding code point of this charset. */
+ CHARSET-IDs are ID numbers of parent charsets. OFFSET is an
+ integer value to add to a code point of the parent charset to
+ get the corresponding code point of this charset. */
charset_superset,
/* The value is a mapping vector or a file name that contains the
conversion. */
CHARSET_METHOD_MAP,
- /* Same as above but decoder and encoder are loaded from a file on
- demand. Once loaded, the method is changed to
- CHARSET_METHOD_MAP. */
- CHARSET_METHOD_MAP_DEFERRED,
-
/* A charset of this method is a subset of another charset. */
CHARSET_METHOD_SUBSET,
#define CHARSET_FROM_ID(id) (charset_table + (id))
extern Lisp_Object Vcharset_ordered_list;
+extern Lisp_Object Vcharset_non_preferred_head;
/* Incremented everytime we change the priority of charsets. */
extern unsigned short charset_ordered_list_tick;
extern struct charset *emacs_mule_charset[256];
+extern Lisp_Object Vcurrent_iso639_language;
/* Macros to access information about charset. */
#define CHECK_CHARSET(x) \
do { \
if (! SYMBOLP (x) || CHARSET_SYMBOL_HASH_INDEX (x) < 0) \
- x = wrong_type_argument (Qcharsetp, (x)); \
+ wrong_type_argument (Qcharsetp, (x)); \
} while (0)
int idx; \
\
if (! SYMBOLP (x) || (idx = CHARSET_SYMBOL_HASH_INDEX (x)) < 0) \
- x = wrong_type_argument (Qcharsetp, (x)); \
+ wrong_type_argument (Qcharsetp, (x)); \
id = XINT (AREF (HASH_VALUE (XHASH_TABLE (Vcharset_hash_table), idx), \
charset_id)); \
} while (0)
#define CHECK_CHARSET_GET_ATTR(x, attr) \
do { \
if (!SYMBOLP (x) || NILP (attr = CHARSET_SYMBOL_ATTRIBUTES (x))) \
- x = wrong_type_argument (Qcharsetp, (x)); \
+ wrong_type_argument (Qcharsetp, (x)); \
} while (0)
} while (0)
-/* Lookup Vcharset_order_list and return the first charset that
+/* Lookup Vcharset_ordered_list and return the first charset that
contains the character C. */
#define CHAR_CHARSET(c) \
((c) < 0x80 ? CHARSET_FROM_ID (charset_ascii) \
? (code) - (charset)->min_code + (charset)->code_offset \
: decode_char ((charset), (code))) \
: (charset)->method == CHARSET_METHOD_MAP \
- ? ((charset)->code_linear_p \
+ ? (((charset)->code_linear_p \
+ && VECTORP (CHARSET_DECODER (charset))) \
? XINT (AREF (CHARSET_DECODER (charset), \
- (code) - (charset)->min_code)) \
+ (code) - (charset)->min_code)) \
: decode_char ((charset), (code))) \
: decode_char ((charset), (code)))
? (c) - (charset)->code_offset + (charset)->min_code \
: encode_char ((charset), (c))) \
: (charset)->method == CHARSET_METHOD_MAP \
- ? ((charset)->compact_codes_p \
+ ? (((charset)->compact_codes_p \
+ && CHAR_TABLE_P (CHARSET_ENCODER (charset))) \
? (charset_work = CHAR_TABLE_REF (CHARSET_ENCODER (charset), (c)), \
(NILP (charset_work) \
? (charset)->invalid_code \
&& ((charset)->method == CHARSET_METHOD_OFFSET \
? (c) >= (charset)->min_char && (c) <= (charset)->max_char \
: ((charset)->method == CHARSET_METHOD_MAP \
- && (charset)->compact_codes_p) \
+ && (charset)->compact_codes_p \
+ && CHAR_TABLE_P (CHARSET_ENCODER (charset))) \
? ! NILP (CHAR_TABLE_REF (CHARSET_ENCODER (charset), (c))) \
: encode_char ((charset), (c)) != (charset)->invalid_code))))
extern struct charset *char_charset P_ ((int, Lisp_Object, unsigned *));
extern Lisp_Object charset_attributes P_ ((int));
+extern int maybe_unify_char P_ ((int, Lisp_Object));
extern int decode_char P_ ((struct charset *, unsigned));
extern unsigned encode_char P_ ((struct charset *, int));
extern int string_xstring_p P_ ((Lisp_Object));