jkf 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/jkf/converter.rb +2 -1
- data/lib/jkf/converter/csa.rb +160 -0
- data/lib/jkf/parser/csa.rb +3 -3
- data/lib/jkf/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c91b3b16debff343f298891452919ea2ec20527
|
4
|
+
data.tar.gz: b7c82914f613103e23087dd55f824da707846ca8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c38021483c7d0457332083545ae03081f45de7bd8c43378d6c66f656cc0436f308422a253822a3545152c597a56621ffeccdb5e45e722faa0f1c6fc0ec8208ae
|
7
|
+
data.tar.gz: 41dae1d0deaed3ed33d21955429ab23f7f70f0e316b77dd0637b64b4412a36058a150be2cccd547cdb31774caeabe853c8cd14ce8e7bc00a710c033dcae24ccc
|
data/lib/jkf/converter.rb
CHANGED
@@ -0,0 +1,160 @@
|
|
1
|
+
module Jkf::Converter
|
2
|
+
class Csa
|
3
|
+
VERSION = '2.2'
|
4
|
+
|
5
|
+
def convert(jkf)
|
6
|
+
hash = if jkf.is_a?(Hash)
|
7
|
+
jkf
|
8
|
+
else
|
9
|
+
JSON.parse(jkf)
|
10
|
+
end
|
11
|
+
|
12
|
+
result = version
|
13
|
+
result += convert_information(hash['header']) if hash['header']
|
14
|
+
result += convert_initial(hash['initial']) if hash['initial']
|
15
|
+
result += convert_moves(hash['moves']) if hash['moves']
|
16
|
+
result
|
17
|
+
end
|
18
|
+
|
19
|
+
def convert_information(header)
|
20
|
+
result = ''
|
21
|
+
result += 'N+' + (header.delete('先手') || header.delete('下手') || '') + "\n" if header['先手'] || header['下手']
|
22
|
+
result += 'N-' + (header.delete('後手') || header.delete('上手') || '') + "\n" if header['後手'] || header['上手']
|
23
|
+
header.each { |(k,v)| result += "$#{csa_header_key(k)}:#{v}\n" }
|
24
|
+
result
|
25
|
+
end
|
26
|
+
|
27
|
+
def convert_initial(initial)
|
28
|
+
result = ''
|
29
|
+
data = initial['data']
|
30
|
+
if initial['preset'] == 'OTHER'
|
31
|
+
9.times { |y|
|
32
|
+
line = "P#{y+1}"
|
33
|
+
9.times { |x|
|
34
|
+
piece = data['board'][8-x][y]
|
35
|
+
line += if piece == {}
|
36
|
+
" * "
|
37
|
+
else
|
38
|
+
csa_color(piece['color']) + piece['kind']
|
39
|
+
end
|
40
|
+
}
|
41
|
+
result += line + "\n"
|
42
|
+
}
|
43
|
+
else
|
44
|
+
result += 'PI'
|
45
|
+
case initial['preset']
|
46
|
+
when 'HIRATE'
|
47
|
+
when 'KY' # 香落ち
|
48
|
+
result += '11KY'
|
49
|
+
when 'KY_R' # 右香落ち
|
50
|
+
result += '91KY'
|
51
|
+
when 'KA' # 角落ち
|
52
|
+
result += '22KA'
|
53
|
+
when 'HI' # 飛車落ち
|
54
|
+
result += '82HI'
|
55
|
+
when 'HIKY' # 飛香落ち
|
56
|
+
result += '22HI11KY91KY'
|
57
|
+
when '2' # 二枚落ち
|
58
|
+
result += '82HI22KA'
|
59
|
+
when '3' # 三枚落ち
|
60
|
+
result += '82HI22KA91KY'
|
61
|
+
when '4' # 四枚落ち
|
62
|
+
result += '82HI22KA11KY91KY'
|
63
|
+
when '5' # 五枚落ち
|
64
|
+
result += '82HI22KA81KE11KY91KY'
|
65
|
+
when '5_L' # 左五枚落ち
|
66
|
+
result += '82HI22KA21KE11KY91KY'
|
67
|
+
when '6' # 六枚落ち
|
68
|
+
result += '82HI22KA21KE81KE11KY91KY'
|
69
|
+
when '8' # 八枚落ち
|
70
|
+
result += '82HI22KA31GI71GI21KE81KE11KY91KY'
|
71
|
+
when '10' # 十枚落ち
|
72
|
+
result += '82HI22KA41KI61KI31GI71GI21KE81KE11KY91KY'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
# 持駒
|
76
|
+
if data['hands']
|
77
|
+
sum = 0
|
78
|
+
data['hands'][0].each_value { |n| sum += n }
|
79
|
+
if sum > 0
|
80
|
+
result += 'P+'
|
81
|
+
data['hands'][0].to_a.reverse.each { |(k, v)| v.times { result += "00#{k}" } }
|
82
|
+
result += "\n"
|
83
|
+
end
|
84
|
+
sum = 0
|
85
|
+
data['hands'][1].each_value { |n| sum += n }
|
86
|
+
if sum > 0
|
87
|
+
result += 'P-'
|
88
|
+
data['hands'][1].to_a.reverse.each { |(k, v)| v.times { result += "00#{k}" } }
|
89
|
+
result += "\n"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
result += csa_color(data['color']) + "\n" if data['color']
|
93
|
+
result
|
94
|
+
end
|
95
|
+
|
96
|
+
def convert_moves(moves)
|
97
|
+
result = ''
|
98
|
+
moves.each do |move|
|
99
|
+
next if move == {}
|
100
|
+
result += convert_move(move['move']) if move['move']
|
101
|
+
result += convert_special(move['special'], move['color']) if move['special']
|
102
|
+
if move['time']
|
103
|
+
result += "," + convert_time(move['time'])
|
104
|
+
elsif move['move'] || move['special']
|
105
|
+
result += "\n"
|
106
|
+
end
|
107
|
+
result += convert_comments(move['comments']) if move['comments']
|
108
|
+
end
|
109
|
+
result
|
110
|
+
end
|
111
|
+
|
112
|
+
def convert_move(move)
|
113
|
+
result = csa_color(move['color'])
|
114
|
+
result += if move['from']
|
115
|
+
"#{move['from']['x']}#{move['from']['y']}"
|
116
|
+
else
|
117
|
+
"00"
|
118
|
+
end
|
119
|
+
result += "#{move['to']['x']}#{move['to']['y']}"
|
120
|
+
result += move['piece']
|
121
|
+
result
|
122
|
+
end
|
123
|
+
|
124
|
+
def convert_special(special, color=nil)
|
125
|
+
result = "%"
|
126
|
+
result += csa_color(color) if color
|
127
|
+
result += special
|
128
|
+
result
|
129
|
+
end
|
130
|
+
|
131
|
+
def convert_time(time)
|
132
|
+
sec = time['now']['m'] * 60 + time['now']['s']
|
133
|
+
"T#{sec}\n"
|
134
|
+
end
|
135
|
+
|
136
|
+
def convert_comments(comments)
|
137
|
+
comments.map { |comment| "'#{comment}" }.join("\n") + "\n"
|
138
|
+
end
|
139
|
+
|
140
|
+
protected
|
141
|
+
|
142
|
+
def csa_color(color)
|
143
|
+
color == 0 ? '+' : '-'
|
144
|
+
end
|
145
|
+
|
146
|
+
def version
|
147
|
+
"V#{VERSION}\n"
|
148
|
+
end
|
149
|
+
|
150
|
+
def csa_header_key(key)
|
151
|
+
{
|
152
|
+
"棋戦" => "EVENT",
|
153
|
+
"場所" => "SITE",
|
154
|
+
"開始日時" => "START_TIME",
|
155
|
+
"終了日時" => "END_TIME",
|
156
|
+
"持ち時間" => "TIME_LIMIT",
|
157
|
+
}[key] || key
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
data/lib/jkf/parser/csa.rb
CHANGED
@@ -710,11 +710,11 @@ module Jkf::Parser
|
|
710
710
|
s5 = parse_nl
|
711
711
|
if s5 != :failed
|
712
712
|
@reported_pos = s0
|
713
|
-
s0 = s1 = -> (from, to, piece) {
|
714
|
-
ret = { "to" => to, "piece" => piece }
|
713
|
+
s0 = s1 = -> (color, from, to, piece) {
|
714
|
+
ret = { "color" => color, "to" => to, "piece" => piece }
|
715
715
|
ret["from"] = from if from["x"] != 0
|
716
716
|
ret
|
717
|
-
}.call(s2, s3, s4)
|
717
|
+
}.call(s1, s2, s3, s4)
|
718
718
|
else
|
719
719
|
@current_pos = s0
|
720
720
|
s0 = :failed
|
data/lib/jkf/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jkf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iyuuya
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- jkf.gemspec
|
87
87
|
- lib/jkf.rb
|
88
88
|
- lib/jkf/converter.rb
|
89
|
+
- lib/jkf/converter/csa.rb
|
89
90
|
- lib/jkf/converter/ki2.rb
|
90
91
|
- lib/jkf/converter/kif.rb
|
91
92
|
- lib/jkf/parser.rb
|