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;