STRING_CHAR does not unify characters; update documentation

* src/character.h (STRING_CHAR): Update doc.
* src/buffer.h (FETCH_MULTIBYTE_CHAR): Update doc.  While at it, change
the function to use BYTE_POS_ADDR instead of open-coding it.
This commit is contained in:
Michal Nazarewicz
2016-09-06 17:20:23 +02:00
parent e951aa1459
commit 3ffc5f44b0
2 changed files with 3 additions and 17 deletions

View File

@@ -1182,23 +1182,12 @@ buffer_has_overlays (void)
/* Return character code of multi-byte form at byte position POS. If POS
doesn't point the head of valid multi-byte form, only the byte at
POS is returned. No range checking.
WARNING: The character returned by this macro could be "unified"
inside STRING_CHAR, if the original character in the buffer belongs
to one of the Private Use Areas (PUAs) of codepoints that Emacs
uses to support non-unified CJK characters. If that happens,
CHAR_BYTES will return a value that is different from the length of
the original multibyte sequence stored in the buffer. Therefore,
do _not_ use FETCH_MULTIBYTE_CHAR if you need to advance through
the buffer to the next character after fetching this one. Instead,
use either FETCH_CHAR_ADVANCE or STRING_CHAR_AND_LENGTH. */
POS is returned. No range checking. */
INLINE int
FETCH_MULTIBYTE_CHAR (ptrdiff_t pos)
{
unsigned char *p = ((pos >= GPT_BYTE ? GAP_SIZE : 0)
+ pos + BEG_ADDR - BEG_BYTE);
unsigned char *p = BYTE_POS_ADDR (pos);
return STRING_CHAR (p);
}

View File

@@ -308,10 +308,7 @@ enum
} \
} while (false)
/* Return the character code of character whose multibyte form is at
P. Note that this macro unifies CJK characters whose codepoints
are in the Private Use Areas (PUAs), so it might return a different
codepoint from the one actually stored at P. */
/* Return the character code of character whose multibyte form is at P. */
#define STRING_CHAR(p) \
(!((p)[0] & 0x80) \