X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fbuffer.h;h=142901eefef3acac0ce1f280f0ee70fd1a3cae4d;hb=f64b6b450c25bc91059807ccce1121464a15d89a;hp=9347064676cc7133f6da620102b24a4ccc88fac2;hpb=5625b2eceaf697f104b5f883ffa73dca6e8fc005;p=chise%2Fxemacs-chise.git- diff --git a/src/buffer.h b/src/buffer.h index 9347064..142901e 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -33,7 +33,7 @@ Boston, MA 02111-1307, USA. */ #define _XEMACS_BUFFER_H_ #ifdef MULE -#include "mule-charset.h" +#include "character.h" #endif /************************************************************************/ @@ -94,7 +94,11 @@ struct buffer_text This information is text-only so it goes here. */ Bufpos mule_bufmin, mule_bufmax; Bytind mule_bytmin, mule_bytmax; +#ifdef UTF2000 + int mule_size; +#else int mule_shifter, mule_three_p; +#endif /* And we also cache 16 positions for fairly fast access near those positions. */ @@ -528,6 +532,9 @@ charptr_copy_char (CONST Bufbyte *ptr, Bufbyte *ptr2) #ifdef MULE +#ifdef UTF2000 +#define valid_char_p(ch) 1 +#else int non_ascii_valid_char_p (Emchar ch); INLINE int valid_char_p (Emchar ch); @@ -536,6 +543,7 @@ valid_char_p (Emchar ch) { return ((unsigned int) (ch) <= 0xff) || non_ascii_valid_char_p (ch); } +#endif #else /* not MULE */ @@ -572,11 +580,15 @@ XCHAR_OR_CHAR_INT (Lisp_Object obj) x = wrong_type_argument (Qcharacterp, x); \ } while (0) +#ifdef UTF2000 +# define MAX_EMCHAR_LEN 6 +#else #ifdef MULE # define MAX_EMCHAR_LEN 4 #else # define MAX_EMCHAR_LEN 1 #endif +#endif /*----------------------------------------------------------------------*/ @@ -963,7 +975,9 @@ Bufpos bytind_to_bufpos_func (struct buffer *buf, Bytind x); 64K for width-three characters. */ +#ifndef UTF2000 extern short three_to_one_table[]; +#endif INLINE int real_bufpos_to_bytind (struct buffer *buf, Bufpos x); INLINE int @@ -971,8 +985,13 @@ real_bufpos_to_bytind (struct buffer *buf, Bufpos x) { if (x >= buf->text->mule_bufmin && x <= buf->text->mule_bufmax) return (buf->text->mule_bytmin + +#ifdef UTF2000 + (x - buf->text->mule_bufmin) * buf->text->mule_size +#else ((x - buf->text->mule_bufmin) << buf->text->mule_shifter) + - (buf->text->mule_three_p ? (x - buf->text->mule_bufmin) : 0)); + (buf->text->mule_three_p ? (x - buf->text->mule_bufmin) : 0) +#endif + ); else return bufpos_to_bytind_func (buf, x); } @@ -983,9 +1002,15 @@ real_bytind_to_bufpos (struct buffer *buf, Bytind x) { if (x >= buf->text->mule_bytmin && x <= buf->text->mule_bytmax) return (buf->text->mule_bufmin + +#ifdef UTF2000 + (buf->text->mule_size == 0 ? 0 : + (x - buf->text->mule_bytmin) / buf->text->mule_size) +#else ((buf->text->mule_three_p ? three_to_one_table[x - buf->text->mule_bytmin] - : (x - buf->text->mule_bytmin) >> buf->text->mule_shifter))); + : (x - buf->text->mule_bytmin) >> buf->text->mule_shifter)) +#endif + ); else return bytind_to_bufpos_func (buf, x); }