X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fcharacter.h;h=94fa286b5a025c03d22f3d2deab6103cd1a76b26;hb=596411203ee3169fe2e7b4f034e207cafbb1bd99;hp=41aff97e9390ea19c6c97e0e2556b8bec6309f8c;hpb=a427521703d69ab8a90a1118e139da303f6d8024;p=chise%2Fxemacs-chise.git- diff --git a/src/character.h b/src/character.h index 41aff97..94fa286 100644 --- a/src/character.h +++ b/src/character.h @@ -72,22 +72,13 @@ Functions/macros when MULE is defined: #define CHAR_OR_CHAR_INTP(x) (CHARP (x) || CHAR_INTP (x)) -#ifdef ERROR_CHECK_TYPECHECK - INLINE_HEADER Emchar XCHAR_OR_CHAR_INT (Lisp_Object obj); INLINE_HEADER Emchar XCHAR_OR_CHAR_INT (Lisp_Object obj) { - assert (CHAR_OR_CHAR_INTP (obj)); return CHARP (obj) ? XCHAR (obj) : XINT (obj); } -#else - -#define XCHAR_OR_CHAR_INT(obj) (CHARP ((obj)) ? XCHAR ((obj)) : XINT ((obj))) - -#endif - #define CHECK_CHAR_COERCE_INT(x) do { \ if (CHARP (x)) \ ; \ @@ -98,6 +89,54 @@ XCHAR_OR_CHAR_INT (Lisp_Object obj) } while (0) +#define CHARC_CHARSET(cc) ((cc).charset) +#define CHARC_CHARSET_ID(cc) XCHARSET_ID (CHARC_CHARSET (cc)) +#define CHARC_CODE_POINT(cc) ((cc).code_point) +#define CHARC_COLUMNS(cc) CHARSET_COLUMNS (XCHARSET (CHARC_CHARSET (cc))) + +INLINE_HEADER Emchar CHARC_TO_CHAR (Charc cc); +INLINE_HEADER Emchar +CHARC_TO_CHAR (Charc cc) +{ + return DECODE_CHAR (cc.charset, cc.code_point); +} + +INLINE_HEADER int CHARC_EQ (Charc cc1, Charc cc2); +INLINE_HEADER int +CHARC_EQ (Charc cc1, Charc cc2) +{ + return EQ (cc1.charset, cc2.charset) && (cc1.code_point == cc2.code_point); +} + +INLINE_HEADER int CHARC_ASCII_EQ (Charc cc, int ch); +INLINE_HEADER int +CHARC_ASCII_EQ (Charc cc, int ch) +{ + return EQ (cc.charset, Vcharset_ascii) && (cc.code_point == ch); +} + +INLINE_HEADER int CHARC_IS_SPACE (Charc cc); +INLINE_HEADER int +CHARC_IS_SPACE (Charc cc) +{ + return (EQ (cc.charset, Vcharset_ascii) || + EQ (cc.charset, Vcharset_control_1) || + EQ (cc.charset, Vcharset_latin_iso8859_1)) + && isspace (cc.code_point); +} + +INLINE_HEADER Charc ASCII_TO_CHARC (int ch); +INLINE_HEADER Charc +ASCII_TO_CHARC (int ch) +{ + Charc cc; + + cc.charset = Vcharset_ascii; + cc.code_point = ch; + return cc; +} + + typedef struct { Dynarr_declare (Charc);