Class: UniProp::UnicodeManager
- Inherits:
-
Object
- Object
- UniProp::UnicodeManager
- Defined in:
- lib/uniprop/inspects.rb,
lib/uniprop/unicode_manager.rb
Instance Attribute Summary collapse
-
#prop_data ⇒ Object
readonly
Returns the value of attribute prop_data.
Instance Method Summary collapse
-
#generate_metadata(file_path, using_version_name, generated_version_name) ⇒ Object
initialize時に指定したメタデータを使用し、メタデータを作成.
-
#initialize(prop_data) ⇒ UnicodeManager
constructor
A new instance of UnicodeManager.
- #inspect ⇒ Object
-
#properties ⇒ Array<String>
メタデータに含まれる全バージョンの全プロパティ名を取得.
-
#text_changed_codepoints(property, version1, version2) ⇒ Array<Integer>
version1で値が定義済みのコードポイントのうち、version2では他の値が定義されているものを取得 version2の方が新しい場合、version1から変更された値のみが取得される。version1の方が新しい場合、version2で追加された値も取得される。.
-
#validate_metadata(version_name) ⇒ Object
version_nameのメタデータを検証.
-
#value_changed_codepoints(property, version1, version2) ⇒ Array<Integer>
text_changed_codepointsの処理に加え、エイリアスの判定を実行し、値が変更されたコードポイントを取得.
- #version_manager(version) ⇒ VersionManager
-
#versions_of(property, char, value) ⇒ Object
codepointでpropertyのプロパティ値としてvalueが定義されているバージョン名をすべて取得.
Constructor Details
#initialize(prop_data) ⇒ UnicodeManager
Returns a new instance of UnicodeManager.
5 6 7 |
# File 'lib/uniprop/unicode_manager.rb', line 5 def initialize(prop_data) @prop_data = prop_data end |
Instance Attribute Details
#prop_data ⇒ Object (readonly)
Returns the value of attribute prop_data.
3 4 5 |
# File 'lib/uniprop/unicode_manager.rb', line 3 def prop_data @prop_data end |
Instance Method Details
#generate_metadata(file_path, using_version_name, generated_version_name) ⇒ Object
initialize時に指定したメタデータを使用し、メタデータを作成
25 26 27 28 29 30 31 |
# File 'lib/uniprop/unicode_manager.rb', line 25 def (file_path, using_version_name, generated_version_name) prop_data.( file_path, prop_data.find_efficient_version(using_version_name), prop_data.find_version(generated_version_name) ) end |
#inspect ⇒ Object
111 112 113 |
# File 'lib/uniprop/inspects.rb', line 111 def inspect "#<#{self.class.name}>" end |
#properties ⇒ Array<String>
メタデータに含まれる全バージョンの全プロパティ名を取得
35 36 37 38 39 |
# File 'lib/uniprop/unicode_manager.rb', line 35 def properties @properties ||= prop_data.version_managers .map { _1.properties } .reduce([], :|) end |
#text_changed_codepoints(property, version1, version2) ⇒ Array<Integer>
単にデータファイルの文字が異なるコードポイントを取得するだけで、エイリアスの判定は行わない(例: Ageプロパティのプロパティ値5.0はエイリアスとしてV5_0を持つが、5.0とV5_0は別の値とみなす)
version1で値が定義済みのコードポイントのうち、version2では他の値が定義されているものを取得version2の方が新しい場合、version1から変更された値のみが取得される。version1の方が新しい場合、version2で追加された値も取得される。
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/uniprop/unicode_manager.rb', line 91 def text_changed_codepoints(property, version1, version2) pvg1 = version_manager(version1).property_manager(property).property_value_group pvg2 = version_manager(version2).property_manager(property).property_value_group result = [] # Blockプロパティのように、多くのコードポイントに同じ値が定義されるプロパティが存在 # そのため、すべてのコードポイントの値を比較するのではなく、一度値ごとのコードポイントをまとめた方が効率的 pvg1.values_to_codepoints.each do |values, cps1| cps2 = pvg2.values_to_codepoints[values].to_a diff_cps = cps1 - cps2 result << diff_cps if !diff_cps.empty? end result.flatten end |
#validate_metadata(version_name) ⇒ Object
version_nameのメタデータを検証
17 18 19 |
# File 'lib/uniprop/unicode_manager.rb', line 17 def (version_name) prop_data.find_version(version_name)...run_all_validations end |
#value_changed_codepoints(property, version1, version2) ⇒ Array<Integer>
text_changed_codepointsの処理に加え、エイリアスの判定を実行し、値が変更されたコードポイントを取得
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/uniprop/unicode_manager.rb', line 57 def value_changed_codepoints(property, version1, version2) pm1 = version_manager(version1).property_manager(property) pm2 = version_manager(version2).property_manager(property) vm2 = version_manager(version2) # 文字列は変更されているが、別エイリアスに表記が変更されただけのコードポイントを判別 # 例: "Y"のエイリアスとして"Yes", "T", "True"、"N"のエイリアスとして"No", "F", "False"が存在する時、 # ["Y", "N"] -> ["False", "True"]が表記の変更だけで、値は変わっていないことを検出する手順 # ["Y", "N"]の各値のエイリアスを求め、["Yes", "T", "True", "N", "No", "F", "False"]の配列を生成 # ["False", "True"]から["Yes", "T", "True", "N", "No", "F", "False"]を引き、結果がemptyであれば値の変更は無いと判別 result = [] text_changed_codepoints(property, version1, version2).each do |cp| values1 = pm1.values_of(cp) values2 = pm2.values_of(cp) values1 = values1.class==Array ? values1 : [values1] values2 = values2.class==Array ? values2 : [values2] values1_aliases = values1.map { vm2.value_aliases(property, _1) } .flatten result << cp if !(values2-values1_aliases).empty? end result end |
#version_manager(version) ⇒ VersionManager
11 12 13 |
# File 'lib/uniprop/unicode_manager.rb', line 11 def version_manager(version) prop_data.version_manager(version) end |
#versions_of(property, char, value) ⇒ Object
codepointでpropertyのプロパティ値としてvalueが定義されているバージョン名をすべて取得
45 46 47 48 49 50 |
# File 'lib/uniprop/unicode_manager.rb', line 45 def versions_of(property, char, value) warn "Versions prior to 4.0-Update are not included in the results because the metadata does not exist." prop_data.version_managers .filter { _1.has_value?(property, char.ord, value)} .map { _1.version.version_name } end |