update.
[chise/ruby.git] / chise / libchise_r.rb
index afe3510..dbc421d 100755 (executable)
@@ -11,11 +11,12 @@ module CHISE
   module ChiseValue; end
   module TableAccessModule; end
 
-  class DataSource
+  class DataSource_R
     NONE = 0
     Berkeley_DB = 1
+    DB_DIR = "/cygdrive/c/chise/chise-db"
 
-    def initialize(type=Berkeley_DB, loc=nil, subtype=0, modemask=0755)
+    def initialize(type=Berkeley_DB, loc=DB_DIR, subtype=0, modemask=0755)
       @type = type
       loc = Config.instance.db_dir if loc.nil?
       @location = loc.path
@@ -24,24 +25,22 @@ module CHISE
       @fdb = {}
       @cdb = {}
     end
-    attr_reader :type, :location, :subtype, :modemask
+    attr_reader :type, :subtype, :modemask
+
+    def close() end
 
     def get_feature(f)
-      @fdb[f] = FeatureTable.new(self, f) if @fdb[f].nil?
+      @fdb[f] = Feature.new(self, f) if @fdb[f].nil?
       @fdb[f]
     end
 
     def get_ccs(ccs)
-      @cdb[ccs] = CCSTable.new(self, ccs) if @cdb[ccs].nil?
+      @cdb[ccs] = CCS.new(self, ccs) if @cdb[ccs].nil?
       @cdb[ccs]
     end
 
-    def each_feature
-      each_entry("character/feature") {|f| yield(f) }
-    end
-
-    def each_ccs
-      each_entry("character/by_feature") {|f| yield(f) }
+    def each_feature_name
+      each_entry("character/feature") {|f| yield f }
     end
 
     def load_feature(name, cid)
@@ -72,23 +71,11 @@ module CHISE
       @name = name
 
       dbdir  = dir + cat + keytype
-      #qp dbdir.to_s
-      #FileUtils.mkdir_p(dbdir.to_s) unless dbdir.directory?
-      #qp dbdir.to_s, "2"
       path = dbdir + name.path.escape.escape_win_filename
-      #qp path.basename.to_s, amask, mmask
-#      if /test/ =~ path.to_s
-#      qp path.to_s, amask
-#      end
 
       if amask == BDB::RDONLY
-       #raise unless path.exist?
-       #raise unless FileTest.exist?(path.to_s)
-       v = FileTest.exist?(path.to_s)
-       #return unless v
-       raise unless v
+       raise unless FileTest.exist?(path.to_s)
       end
-#     @db = BDB::Hash.open(path.to_s, nil, amask, mmask)
       @db = BDB::Hash.open(path.to_s, nil, amask)
       at_exit {
        close
@@ -100,9 +87,8 @@ module CHISE
       begin
        @db.sync
        @db.close
-       #p ["AttributeTable: close", @name]
       rescue => e
-       #p e
+       p e
       end
     end
 
@@ -140,14 +126,12 @@ module CHISE
        @db = AttributeTable.new(@ds.location, @category, @keyvalue,
                                 @name, @access, @ds.modemask)
       rescue => e
-       #qp e
        @db = nil
       end
-      #raise if @db.nil?
     end
   end
 
-  class FeatureTable
+  class Feature_R
     include ChiseValue
     include TableAccessModule
 
@@ -160,7 +144,7 @@ module CHISE
     def get_value(cid)
       setup_db
       return nil if @db.nil?
-      parse_value(@db.get(format_char_id(cid)))
+      @db.get(format_char_id(cid))
     end
 
     def set_value(cid, value)
@@ -169,7 +153,7 @@ module CHISE
       @db.put(format_char_id(cid), value)
     end
 
-    def each
+    def each_char
       setup_db
       raise "@db is nil." if @db.nil?
       @db.each {|k, v|
@@ -178,7 +162,7 @@ module CHISE
     end
   end
 
-  class CCSTable
+  class CCS_R
     include ChiseValue
     include TableAccessModule
 
@@ -204,22 +188,12 @@ module CHISE
       setup_db
       raise "@db is nil." if @db.nil?
       @db.each {|k, v|
-       yield(parse_value(k), parse_c_string(v))
+       yield(k, parse_c_string(v))
       }
     end
   end
 
   module ChiseValue
-    def parse_value(v)
-      return v if v.nil?
-      #return v if v.kind_of?(Integer)
-      return v.to_i if /\A\d+\Z/ =~ v # number?
-      return $1 if /\A"(.+)"\Z/ =~ v # remove surrounding "
-      #return v.sub(/\A\?/, "") if v =~ /\A\?/ # remove ? in the head
-      #return parse_sexp(v) if v =~ /\A\(.+\)\Z/ # parse sexp # not yet
-      v
-    end
-
     def parse_c_string(str)
       return nil if str.nil?