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
@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)
@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
begin
@db.sync
@db.close
- #p ["AttributeTable: close", @name]
rescue => e
- #p e
+ p e
end
end
@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
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)
@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|
end
end
- class CCSTable
+ class CCS_R
include ChiseValue
include TableAccessModule
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?