Delete `mojikyo'.
[chise/xemacs-chise.git] / src / mule-charset.c
index c703970..24a74c7 100644 (file)
@@ -386,7 +386,7 @@ Lisp_Object Qleading_byte;
 Lisp_Object Qshort_name, Qlong_name;
 #ifdef UTF2000
 Lisp_Object Qmin_code, Qmax_code, Qcode_offset;
-Lisp_Object Qmother, Qconversion, Q94x60;
+Lisp_Object Qmother, Qconversion, Q94x60, Q94x94x60;
 #endif
 
 Lisp_Object Qascii,
@@ -986,9 +986,51 @@ get_unallocated_leading_byte (int dimension)
 Emchar
 decode_builtin_char (Lisp_Object charset, int code_point)
 {
+  Lisp_Object mother = XCHARSET_MOTHER (charset);
   int final;
 
-  if (EQ (charset, Vcharset_chinese_big5))
+  if ( CHARSETP (mother) )
+    {
+      int code = code_point;
+
+      if ( XCHARSET_CONVERSION (charset) == CONVERSION_94x60 )
+       {
+         int row = code_point >> 8;
+         int cell = code_point & 255;    
+
+         if (row < 16 + 32)
+           return -1;
+         else if (row < 16 + 32 + 30)
+           code = (row - (16 + 32)) * 94 + cell - 33;
+         else if (row < 18 + 32 + 30)
+           return -1;
+         else if (row < 18 + 32 + 60)
+           code = (row - (18 + 32)) * 94 + cell - 33;
+       }
+      else if ( XCHARSET_CONVERSION (charset) == CONVERSION_94x94x60 )
+       {
+         int plane = code_point >> 16;
+         int row = (code_point >> 8) & 255;
+         int cell = code_point & 255;    
+
+         if (row < 16 + 32)
+           return -1;
+         else if (row < 16 + 32 + 30)
+           code
+             = (plane - 33) * 94 * 60
+             + (row - (16 + 32)) * 94
+             + cell - 33;
+         else if (row < 18 + 32 + 30)
+           return -1;
+         else if (row < 18 + 32 + 60)
+           code
+             = (plane - 33) * 94 * 60
+             + (row - (18 + 32)) * 94
+             + cell - 33;
+       }
+      return DECODE_CHAR (mother, code + XCHARSET_CODE_OFFSET(charset));
+    }
+  else if (EQ (charset, Vcharset_chinese_big5))
     {
       int c1 = code_point >> 8;
       int c2 = code_point & 0xFF;
@@ -1107,6 +1149,18 @@ charset_code_point (Lisp_Object charset, Emchar ch)
                row += 18 + 32;
              return (row << 8) | cell;
            }
+         else if ( XCHARSET_CONVERSION (charset) == CONVERSION_94x94x60 )
+           {
+             int plane =  d / (94 * 60) + 33;
+             int row   = (d % (94 * 60)) / 94;
+             int cell  =  d %  94 + 33;
+
+             if (row < 30)
+               row += 16 + 32;
+             else
+               row += 18 + 32;
+             return (plane << 16) | (row << 8) | cell;
+           }
          else if (XCHARSET_CHARS (charset) == 94)
            {
              if (XCHARSET_DIMENSION (charset) == 1)
@@ -1608,6 +1662,10 @@ character set.  Recognized properties are:
          {
            if (EQ (value, Q94x60))
              conversion = CONVERSION_94x60;
+           else if (EQ (value, Q94x94x60))
+             conversion = CONVERSION_94x94x60;
+           else
+             signal_simple_error ("Unrecognized conversion", value);
          }
 
 #endif
@@ -2399,6 +2457,7 @@ syms_of_mule_charset (void)
   defsymbol (&Qcode_offset, "code-offset");
   defsymbol (&Qconversion, "conversion");
   defsymbol (&Q94x60, "94x60");
+  defsymbol (&Q94x94x60, "94x94x60");
 #endif
 
   defsymbol (&Ql2r, "l2r");