update.
[chise/xemacs-chise.git-] / src / text-coding.c
index 70e363b..1e12bd4 100644 (file)
@@ -2779,53 +2779,50 @@ text_encode_generic (Lstream *encoding, CONST unsigned char *src,
     {
       c = *src++;
 
-      switch (char_boundary)
+      if (char_boundary == 0)
        {
-       case 0:
-         if ( c >= 0xfc )
+         if (c >= 0xfc)
            {
              ch = c & 0x01;
              char_boundary = 5;
            }
-         else if ( c >= 0xf8 )
+         else if (c >= 0xf8)
            {
              ch = c & 0x03;
              char_boundary = 4;
            }
-         else if ( c >= 0xf0 )
+         else if (c >= 0xf0)
            {
              ch = c & 0x07;
              char_boundary = 3;
            }
-         else if ( c >= 0xe0 )
+         else if (c >= 0xe0)
            {
              ch = c & 0x0f;
              char_boundary = 2;
            }
-         else if ( c >= 0xc0 )
+         else if (c >= 0xc0)
            {
              ch = c & 0x1f;
              char_boundary = 1;
            }
          else
-           {
-             (*str->encode_char) (str, c, dst, &flags);
-             ch = 0;
-             char_boundary = 0;
-           }
-         break;
-       case 1:
+           (*str->encode_char) (str, c, dst, &flags);
+       }
+      else if (char_boundary == 1)
+       {
          (*str->encode_char) (str, (ch << 6) | (c & 0x3f), dst, &flags);
          ch =0;
          char_boundary = 0;
-         break;
-       default:
-         ch = ( ch << 6 ) | ( c & 0x3f );
+       }
+      else
+       {
+         ch = (ch << 6) | (c & 0x3f);
          char_boundary--;
        }
     }
 
-  if ( (char_boundary == 0) && flags & CODING_STATE_END)
+  if ((char_boundary == 0) && (flags & CODING_STATE_END))
     {
       (*str->finish) (str, dst, &flags);
     }
@@ -2833,8 +2830,6 @@ text_encode_generic (Lstream *encoding, CONST unsigned char *src,
   str->flags = flags;
   str->ch    = ch;
   str->iso2022.current_char_boundary = char_boundary;
-
-  /* Verbum caro factum est! */
 }
 
 \f
@@ -2952,6 +2947,11 @@ decode_coding_sjis (Lstream *decoding, CONST unsigned char *src,
              Dynarr_add (dst, c);
 #endif
            }
+#ifdef UTF2000
+         else if (c > 32)
+           DECODE_ADD_UCS_CHAR(MAKE_CHAR(Vcharset_latin_jisx0201,
+                                         c, 0), dst);
+#endif
          else
            DECODE_ADD_BINARY_CHAR (c, dst);
        }
@@ -2979,28 +2979,37 @@ char_encode_shift_jis (struct encoding_stream *str, Emchar ch,
       if (eol_type != EOL_CR)
        Dynarr_add (dst, ch);
     }
-  else if (ch <= 0x7f)
-    Dynarr_add (dst, ch);
-  else if (ch == 0xA5)
-    Dynarr_add (dst, 0x5C);
-  else if (ch == 0X203E)
-    Dynarr_add (dst, 0x7E);
   else
     {
       Lisp_Object charset;
       unsigned int c1, c2, s1, s2;
-           
-      BREAKUP_CHAR (ch, charset, c1, c2);
+      
+#ifdef UTF2000
+      if ( (c1 = get_byte_from_character_table (ch, ucs_to_latin_jisx0201)) )
+       {
+         charset = Vcharset_latin_jisx0201;
+         c2 = 0;
+       }
+      else
+#endif
+       BREAKUP_CHAR (ch, charset, c1, c2);
+         
       if (EQ(charset, Vcharset_katakana_jisx0201))
        {
          Dynarr_add (dst, c1 | 0x80);
        }
+      else if (c2 == 0)
+       {
+         Dynarr_add (dst, c1);
+       }
       else if (EQ(charset, Vcharset_japanese_jisx0208))
        {
          ENCODE_SJIS (c1 | 0x80, c2 | 0x80, s1, s2);
          Dynarr_add (dst, s1);
          Dynarr_add (dst, s2);
        }
+      else
+       Dynarr_add (dst, '?');
     }
 }