Mercurial > emacs
changeset 96249:71c216bc3b71
(str_to_unibyte): New function.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Wed, 25 Jun 2008 02:44:20 +0000 |
parents | a2307295cc84 |
children | 423373db93ef |
files | src/character.c |
diffstat | 1 files changed, 32 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/character.c Wed Jun 25 02:43:59 2008 +0000 +++ b/src/character.c Wed Jun 25 02:44:20 2008 +0000 @@ -834,6 +834,38 @@ return (to - str); } +/* Convert eight-bit chars in SRC (in multibyte form) to the + corresponding byte and store in DST. CHARS is the number of + characters in SRC. The value is the number of bytes stored in DST. + Usually, the value is the same as CHARS, but is less than it if SRC + contains a non-ASCII, non-eight-bit characater. If ACCEPT_LATIN_1 + is nonzero, a Latin-1 character is accepted and converted to a byte + of that character code. */ + +EMACS_INT +str_to_unibyte (src, dst, chars, accept_latin_1) + const unsigned char *src; + unsigned char *dst; + EMACS_INT chars; + int accept_latin_1; +{ + EMACS_INT i; + + for (i = 0; i < chars; i++) + { + int c = STRING_CHAR_ADVANCE (src); + + if (CHAR_BYTE8_P (c)) + c = CHAR_TO_BYTE8 (c); + else if (! ASCII_CHAR_P (c) + && (! accept_latin_1 || c >= 0x100)) + return i; + *dst++ = c; + } + return i; +} + + int string_count_byte8 (string) Lisp_Object string;