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}$"
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
}
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
counter += 1; break if 10 < counter
}
end
- def test_jis
+ def test_ascii
db = CodesysDB.instance
codesys = db.get_codesys('ascii')
char = codesys.get(65)
ks = codesys.keys
end
def test_jis_codesys
- return #とりあえず検査しない
-# codesys = db.get_codesys('japanese-jisx0208-1990')
+ db = CodesysDB.instance
+ codesys = db.get_codesys('=jis-x0208')
ks = codesys.keys.sort #とすることによって、JISX0208 1990の集合全部のkeysが得られる
# assert_equal(6880, ks.length)
assert_equal(8481, ks.first)
- assert_equal(29734, ks.last)
+ assert_equal(29566, ks.last)
char = codesys.get(15226) #"字"
assert_equal("字", char.to_s)
assert_equal("亜", codesys.get(12321))
jis = "亜".char.japanese_jisx0208_1990
- assert_equal("亜", codesys.get(jis))
- assert_equal("亜", sprintf("&J90-%04X;", jis).de_er)
+# assert_equal("亜", codesys.get(jis))
+# assert_equal("亜", sprintf("&J90-%04X;", jis).de_er)
+
+# codesys = db.get_codesys('japanese-jisx0208-1990') #旧名
+ codesys = db.get_codesys('=jis-x0208-1990')
+ assert_equal(8481, ks.first)
+ assert_equal(29566, ks.last)
end
end