\f
/************************************************************************/
-/* Operations on individual bytes */
-/* of any format */
-/************************************************************************/
-
-/* Argument `c' should be (unsigned int) or (unsigned char). */
-/* Note that SP and DEL are not included. */
-
-#define BYTE_ASCII_P(c) ((c) < 0x80)
-#define BYTE_C0_P(c) ((c) < 0x20)
-/* Do some forced casting just to make *sure* things are gotten right. */
-#define BYTE_C1_P(c) ((unsigned int) ((unsigned int) (c) - 0x80) < 0x20)
-
-\f
-/************************************************************************/
/* Information about a particular character set */
/************************************************************************/
#define CHARSET_BY_ATTRIBUTES(type, final, dir) \
(charset_by_attributes[type][final])
-INLINE int REP_BYTES_BY_FIRST_BYTE (int fb);
-INLINE int
-REP_BYTES_BY_FIRST_BYTE (int fb)
-{
- if ( fb < 0xc0 )
- return 1;
- else if ( fb < 0xe0 )
- return 2;
- else if ( fb < 0xf0 )
- return 3;
- else if ( fb < 0xf8 )
- return 4;
- else if ( fb < 0xfc )
- return 5;
- else
- return 6;
-}
-
\f
/************************************************************************/
/* Dealing with characters */
#define MIN_CHAR_96x96 0xF4C000
#define MAX_CHAR_96x96 (MIN_CHAR_96x96 + 96 * 96 * 80 - 1)
+extern Lisp_Object Vcharset_ucs_bmp;
/* Return a character whose charset is CHARSET and position-codes
are C1 and C2. TYPE9N character ignores C2. */
return c1;
else if (EQ (charset, Vcharset_control_1))
return c1 | 0x80;
+ else if (EQ (charset, Vcharset_ucs_bmp))
+ return (c1 << 8) | c2;
else if (EQ (charset, Vcharset_latin_iso8859_1))
return c1 | 0x80;
else if (EQ (charset, Vcharset_greek_iso8859_7))
}
else if (c < MIN_CHAR_GREEK)
{
- printf("not break up u+%x", c);
- abort ();
+ *charset = Vcharset_ucs_bmp;
+ *c1 = c >> 8;
+ *c2 = c & 0xff;
}
else if (c <= MAX_CHAR_GREEK)
{
}
else if (c < MIN_CHAR_CYRILLIC)
{
- printf("not break up u+%x", c);
- abort ();
+ *charset = Vcharset_ucs_bmp;
+ *c1 = c >> 8;
+ *c2 = c & 0xff;
}
else if (c <= MAX_CHAR_CYRILLIC)
{
}
else if (c < MIN_CHAR_HEBREW)
{
- printf("not break up u+%x", c);
- abort ();
+ *charset = Vcharset_ucs_bmp;
+ *c1 = c >> 8;
+ *c2 = c & 0xff;
}
else if (c <= MAX_CHAR_HEBREW)
{
}
else if (c < MIN_CHAR_THAI)
{
- printf("not break up u+%x", c);
- abort ();
+ *charset = Vcharset_ucs_bmp;
+ *c1 = c >> 8;
+ *c2 = c & 0xff;
}
else if (c <= MAX_CHAR_THAI)
{
}
else if (c < MIN_CHAR_HALFWIDTH_KATAKANA)
{
- printf("not break up u+%x", c);
- abort ();
+ *charset = Vcharset_ucs_bmp;
+ *c1 = c >> 8;
+ *c2 = c & 0xff;
}
else if (c <= MAX_CHAR_HALFWIDTH_KATAKANA)
{
extern Lisp_Object Vcharset_japanese_jisx0208;
extern Lisp_Object Vcharset_japanese_jisx0212;
-Emchar Lstream_get_emchar_1 (Lstream *stream, int first_char);
-int Lstream_fput_emchar (Lstream *stream, Emchar ch);
-void Lstream_funget_emchar (Lstream *stream, Emchar ch);
-
-int copy_internal_to_external (CONST Bufbyte *internal, Bytecount len,
- unsigned char *external);
-Bytecount copy_external_to_internal (CONST unsigned char *external,
- int len, Bufbyte *internal);
-
#endif /* _XEMACS_CHAR_UCS_H */