From: tomo Date: Tue, 15 Jun 1999 01:46:45 +0000 (+0000) Subject: (struct buffer_text): Add new member `mule_size' and don't add X-Git-Tag: r21-2-15-buf-utf8-1~13 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a4c4a2c5d74ac1cb2c6681307e038b58275288e1;p=chise%2Fxemacs-chise.git (struct buffer_text): Add new member `mule_size' and don't add `mule_shifter' and `mule_three_p' in UTF2000. (valid_char_p): Return always 1 in UTF2000. (MAX_EMCHAR_LEN): 6 in UTF2000. (three_to_one_table): Don't define in UTF2000. (real_bufpos_to_bytind): Modify for UTF-8 representation in UTF2000. (real_bytind_to_bufpos): Likewise. --- diff --git a/src/buffer.h b/src/buffer.h index 9347064..808277b 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -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. */ @@ -530,12 +534,16 @@ charptr_copy_char (CONST Bufbyte *ptr, Bufbyte *ptr2) int non_ascii_valid_char_p (Emchar ch); +#ifdef UTF2000 +#define valid_char_p(ch) 1 +#else INLINE int valid_char_p (Emchar ch); INLINE int 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); }