#include <verify.h>
+INLINE_HEADER_BEGIN
+
/* character code 1st byte byte sequence
-------------- -------- -------------
0-7F 00..7F 0xxxxxxx
do { \
if (! ASCII_CHAR_P (c)) \
c = CHAR_TO_BYTE8 (c); \
- } while (0)
+ } while (false)
/* If C is not ASCII, make it multibyte. Assumes C < 256. */
Lisp_Object tmp = XCAR (x); \
CHECK_CHARACTER (tmp); \
XSETCAR ((x), tmp); \
- } while (0)
+ } while (false)
#define CHECK_CHARACTER_CDR(x) \
do { \
Lisp_Object tmp = XCDR (x); \
CHECK_CHARACTER (tmp); \
XSETCDR ((x), tmp); \
- } while (0)
+ } while (false)
/* Nonzero iff C is a character of code less than 0x100. */
#define SINGLE_BYTE_CHAR_P(c) UNSIGNED_CMP (c, <, 0x100)
verify (sizeof (c) <= sizeof (unsigned)); \
(p) += char_string (c, p); \
} \
- } while (0)
+ } while (false)
/* Nonzero iff BYTE starts a non-ASCII character in a multibyte
do { \
if ((p) < (limit)) \
(p) += BYTES_BY_CHAR_HEAD (*(p)); \
- } while (0)
+ } while (false)
/* If P is after LIMIT, advance P to the previous character boundary.
} while (chp >= limit && ! CHAR_HEAD_P (*chp)); \
(p) = (BYTES_BY_CHAR_HEAD (*chp) == (p) - chp) ? chp : (p) - 1; \
} \
- } while (0)
+ } while (false)
/* Return the character code of character whose multibyte form is at
P. Note that this macro unifies CJK characters whose codepoints
Note: This macro returns the actual length of the character's
multibyte sequence as it is stored in a buffer or string. The
character it returns might have a different codepoint that has a
- different multibyte sequence of a different legth, due to possible
+ different multibyte sequence of a different length, due to possible
unification of CJK characters inside string_char. Therefore do NOT
assume that the length returned by this macro is identical to the
length of the multibyte sequence of the character it returns. */
BYTEIDX++; \
} \
} \
- while (0)
+ while (false)
/* Like FETCH_STRING_CHAR_ADVANCE, but return a multibyte character
even if STRING is unibyte. */
MAKE_CHAR_MULTIBYTE (OUTPUT); \
} \
} \
- while (0)
+ while (false)
/* Like FETCH_STRING_CHAR_ADVANCE, but assumes STRING is multibyte. */
BYTEIDX += fetch_len; \
CHARIDX++; \
} \
- while (0)
+ while (false)
/* Like FETCH_STRING_CHAR_ADVANCE, but fetch character from the current
unsigned char *chp = BYTE_POS_ADDR (BYTEIDX); \
int chlen; \
\
- OUTPUT= STRING_CHAR_AND_LENGTH (chp, chlen); \
+ OUTPUT = STRING_CHAR_AND_LENGTH (chp, chlen); \
BYTEIDX += chlen; \
} \
else \
BYTEIDX++; \
} \
} \
- while (0)
+ while (false)
/* Like FETCH_CHAR_ADVANCE, but assumes the current buffer is multibyte. */
BYTEIDX += chlen; \
CHARIDX++; \
} \
- while (0)
+ while (false)
/* Increment the buffer byte position POS_BYTE of the current buffer to
do { \
unsigned char *chp = BYTE_POS_ADDR (pos_byte); \
pos_byte += BYTES_BY_CHAR_HEAD (*chp); \
- } while (0)
+ } while (false)
/* Decrement the buffer byte position POS_BYTE of the current buffer to
chp--; \
pos_byte--; \
} \
- } while (0)
+ } while (false)
/* Increment both CHARPOS and BYTEPOS, each in the appropriate way. */
else \
INC_POS ((bytepos)); \
} \
- while (0)
+ while (false)
/* Decrement both CHARPOS and BYTEPOS, each in the appropriate way. */
else \
DEC_POS ((bytepos)); \
} \
- while (0)
+ while (false)
/* Increment the buffer byte position POS_BYTE of the current buffer to
do { \
unsigned char *chp = BUF_BYTE_ADDRESS (buf, pos_byte); \
pos_byte += BYTES_BY_CHAR_HEAD (*chp); \
- } while (0)
+ } while (false)
/* Decrement the buffer byte position POS_BYTE of the current buffer to
chp--; \
pos_byte--; \
} \
- } while (0)
-
-
-/* If C is a character to be unified with a Unicode character, return
- the unified Unicode character. */
-
-#define MAYBE_UNIFY_CHAR(c) \
- do { \
- if (c > MAX_UNICODE_CHAR && c <= MAX_5_BYTE_CHAR) \
- { \
- Lisp_Object val; \
- val = CHAR_TABLE_REF (Vchar_unify_table, c); \
- if (INTEGERP (val)) \
- c = XFASTINT (val); \
- else if (! NILP (val)) \
- c = maybe_unify_char (c, val); \
- } \
- } while (0)
+ } while (false)
/* Return a non-outlandish value for the tab width. */
#define SANE_TAB_WIDTH(buf) \
sanitize_tab_width (XFASTINT (BVAR (buf, tab_width)))
-static inline int
+INLINE int
sanitize_tab_width (EMACS_INT width)
{
return 0 < width && width <= 1000 ? width : 8;
/* Return a non-outlandish value for a character width. */
-static inline int
+INLINE int
sanitize_char_width (EMACS_INT width)
{
return 0 <= width && width <= 1000 ? width : 1000;
: 0)
/* If C is a high surrogate, return 1. If C is a low surrogate,
- return 0. Otherwise, return 0. */
+ return 2. Otherwise, return 0. */
#define CHAR_SURROGATE_PAIR_P(c) \
((c) < 0xD800 ? 0 \
/* Data type for Unicode general category.
The order of members must be in sync with the 8th element of the
- member of unidata-prop-alist (in admin/unidata/unidata-getn.el) for
+ member of unidata-prop-alist (in admin/unidata/unidata-gen.el) for
Unicode character property `general-category'. */
typedef enum {
UNICODE_CATEGORY_Cn
} unicode_category_t;
-extern EMACS_INT char_resolve_modifier_mask (EMACS_INT);
+extern EMACS_INT char_resolve_modifier_mask (EMACS_INT) ATTRIBUTE_CONST;
extern int char_string (unsigned, unsigned char *);
extern int string_char (const unsigned char *,
const unsigned char **, int *);
extern int translate_char (Lisp_Object, int c);
-extern int char_printable_p (int c);
extern void parse_str_as_multibyte (const unsigned char *,
ptrdiff_t, ptrdiff_t *, ptrdiff_t *);
extern ptrdiff_t count_size_as_multibyte (const unsigned char *, ptrdiff_t);
extern ptrdiff_t str_to_multibyte (unsigned char *, ptrdiff_t, ptrdiff_t);
extern ptrdiff_t str_as_unibyte (unsigned char *, ptrdiff_t);
extern ptrdiff_t str_to_unibyte (const unsigned char *, unsigned char *,
- ptrdiff_t, int);
+ ptrdiff_t);
extern ptrdiff_t strwidth (const char *, ptrdiff_t);
extern ptrdiff_t c_string_width (const unsigned char *, ptrdiff_t, int,
ptrdiff_t *, ptrdiff_t *);
/* Return a translation table of id number ID. */
#define GET_TRANSLATION_TABLE(id) \
- (XCDR(XVECTOR(Vtranslation_table_vector)->contents[(id)]))
+ (XCDR (XVECTOR (Vtranslation_table_vector)->contents[(id)]))
+
+INLINE_HEADER_END
#endif /* EMACS_CHARACTER_H */