add new codesys support
[chise/ruby.git] / src / chise.rb
index 06b7e8d..f14b59f 100755 (executable)
@@ -156,34 +156,58 @@ module CHISE #==================================================================
     DB_DIR = 'd:/work/chise/char-db' #この後に/sysmtem-char-id/ucsという感じに続く
     IDS_DB_DIR = 'd:/work/chise/ids/' #この後にIDS-JIS-X0208-1990.txtという感じに続く
   else
-    DB_DIR = '/usr/local/lib/xemacs-21.4.10/i686-pc-linux/char-db' #この後に/sysmtem-char-id/ucsという感じに続く
+    DB_DIR = '/usr/local/lib/xemacs-21.4.12/i686-pc-linux/char-db' #この後に/sysmtem-char-id/ucsという感じに続く
     IDS_DB_DIR = '/home/eto/work/chise/ids/' #この後にIDS-JIS-X0208-1990.txtという感じに続く
   end
 
   class EntityReference #======================================================================
     #状況によってどのERに変換するかが異なる可能性があるので、普通のclassとして実装したほうがいい?
+#    CODESYS_TABLE = [
+#      %w( chinese-big5-cdp    CDP- 4 X),
+#      %w( ideograph-daikanwa  M-   5 d),
+#      %w( ideograph-cbeta     CB   5 d),
+#      %w( ideograph-gt                GT-  5 d),
+#      %w( ideograph-gt-k      GT-K 5 d),
+#      %w( japanese-jisx0208-1990 J90- 4 X),
+#      %w( japanese-jisx0208   J83- 4 X),
+#      %w( japanese-jisx0213-1 JX1- 4 X),
+#      %w( japanese-jisx0213-2 JX2- 4 X),
+#      %w( japanese-jisx0212   JSP- 4 X),
+#      %w( japanese-jisx0208-1978 J78- 4 X),
+#      %w( chinese-cns11643-1  C1-  4 X),
+#      %w( chinese-cns11643-2  C2-  4 X),
+#      %w( chinese-cns11643-3  C3-  4 X),
+#      %w( chinese-cns11643-4  C4-  4 X),
+#      %w( chinese-cns11643-5  C5-  4 X),
+#      %w( chinese-cns11643-6  C6-  4 X),
+#      %w( chinese-cns11643-7  C7-  4 X),
+#      %w( korean-ksc5601      K0- 4 X),
+#    ]
+#    CODESYS_ORDER = %w(japanese chinese korean ideograph)
     CODESYS_TABLE = [
-      %w( chinese-big5-cdp     CDP- 4 X),
-      %w( ideograph-daikanwa   M-   5 d),
-      %w( ideograph-cbeta      CB   5 d),
-      %w( ideograph-gt         GT-  5 d),
-      %w( ideograph-gt-k       GT-K 5 d),
-      %w( japanese-jisx0208-1990 J90- 4 X),
-      %w( japanese-jisx0208    J83- 4 X),
-      %w( japanese-jisx0213-1  JX1- 4 X),
-      %w( japanese-jisx0213-2  JX2- 4 X),
-      %w( japanese-jisx0212    JSP- 4 X),
-      %w( japanese-jisx0208-1978 J78- 4 X),
-      %w( chinese-cns11643-1   C1-  4 X),
-      %w( chinese-cns11643-2   C2-  4 X),
-      %w( chinese-cns11643-3   C3-  4 X),
-      %w( chinese-cns11643-4   C4-  4 X),
-      %w( chinese-cns11643-5   C5-  4 X),
-      %w( chinese-cns11643-6   C6-  4 X),
-      %w( chinese-cns11643-7   C7-  4 X),
-      %w( korean-ksc5601       K0- 4 X),
+      %w( =jis-x0208-1990      J90- 4 X),
+      %w( =jis-x0208-1983      J83- 4 X),
+      %w( =jis-x0208-1978      J78- 4 X),
+      %w( =jis-x0208           J90- 4 X), #継承のアドホックな実装
+      %w( =jis-x0208           J83- 4 X), #継承のアドホックな実装
+      %w( =jis-x0208           J78- 4 X), #継承のアドホックな実装
+      %w( =jis-x0213-1-2000    JX1- 4 X),
+      %w( =jis-x0213-2-2000    JX2- 4 X),
+      %w( =jis-x0212           JSP- 4 X),
+      %w( =big5-cdp            CDP- 4 X),
+      %w( =cns11643-1          C1-  4 X),
+      %w( =cns11643-2          C2-  4 X),
+      %w( =cns11643-3          C3-  4 X),
+      %w( =cns11643-4          C4-  4 X),
+      %w( =cns11643-5          C5-  4 X),
+      %w( =cns11643-6          C6-  4 X),
+      %w( =cns11643-7          C7-  4 X),
+      %w( =ks-x1001            K0-  4 X),
+      %w( =daikanwa            M-   5 d),
+      %w( =cbeta               CB   5 d),
+      %w( =gt                  GT-  5 d),
+      %w( =gt-k                        GT-K 5 d),
     ]
-    CODESYS_ORDER = %w(japanese chinese korean ideograph)
     REGEXP_PART = "&([-+0-9A-Za-z#]+);"
     REGEXP_ALL = "^#{REGEXP_PART}$"
 
@@ -202,13 +226,14 @@ module CHISE #==================================================================
       each_codesys {|codesys, er_prefix, keta, numtype|        #p [codesys, er_prefix, keta, numtype]
        numtyperegex = '\d' #if numtype == 'd'
        numtyperegex = '[0-9A-Fa-f]' if numtype == 'X'
-       regexpstr = "^#{er_prefix}(#{numtyperegex}{#{keta},#{keta}})$"  #p regexpstr
+       regexpstr = "^#{er_prefix}(#{numtyperegex}{#{keta},#{keta}})$"
        if er =~ Regexp.new(regexpstr)
          codestr = $1
          code = codestr.to_i #if numtype == 'd'
          code = codestr.hex if numtype == 'X'
          char_id_u8 = EntityReference.get_database(codesys, code)
          char_id_num = Character.parse_char_id(char_id_u8)
+         next if char_id_num == nil
          return char_id_num
        end
       }
@@ -216,21 +241,24 @@ module CHISE #==================================================================
     end
 
     def self.each_codesys()
-      CODESYS_ORDER.each {|lang|
-       CODESYS_TABLE.each {|codesys, er_prefix, keta, numtype| #普通こういう書き方はしない。ループ一個にする。
-         next unless codesys =~ lang
-         yield(codesys, er_prefix, keta, numtype)
-       }
+#      CODESYS_ORDER.each {|lang|
+#      CODESYS_TABLE.each {|codesys, er_prefix, keta, numtype| #普通こういう書き方はしない。ループ一個にする。
+#        next unless codesys =~ lang
+#        yield(codesys, er_prefix, keta, numtype)
+#      }
+#      }
+      CODESYS_TABLE.each {|codesys, er_prefix, keta, numtype|
+       yield(codesys, er_prefix, keta, numtype)
       }
     end
     def self.get_database(codesys, code)
       c = CodesysDB.instance.get(codesys, code)
       return c if c != nil
-      if codesys =~ /-jisx0208/
-       #return self.get_database("=jis-x0208", code) #再帰でどうだ?
-       c = CodesysDB.instance.get("=jis-x0208", code)
-       return c
-      end
+#      if codesys =~ /-jisx0208/
+#      #return self.get_database("=jis-x0208", code) #再帰でどうだ?
+#      c = CodesysDB.instance.get("=jis-x0208", code)
+#      return c
+#      end
       return nil
     end
   end