SgfParser 0.9.1 → 1.0.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.
@@ -1,11 +1,11 @@
1
- (;GM[1]FF[4]CA[UTF-8]
2
- SZ[19]RU[Japanese]KM[0.50]TM[1290]OT[3x30 byo-yomi]
3
- PB[tartrate]PW[redrose]BR[7d]WR[1p]DT[2003-06-18]PC[The Kiseido Go Server (KGS) at http://kgs.kiseido.com/]C[tartrate [7d?\]: hi
4
- tartrate [7d?\]: thx
5
- ]RE[B+Resign]
6
- ;B[jj]BL[1280.503]CR[jj]C[redrose [1p\]: hi
7
- Jerk [7d?\]: wow
8
- Anark [11k\]: game of the day :)
9
- Jerk [7d?\]: really big match
10
- ]
11
- ;W[ih]WL[1277.190]CR[ih];AB[aa][bb][cc])
1
+ (;GM[1]FF[4]CA[UTF-8]
2
+ SZ[19]RU[Japanese]KM[0.50]TM[1290]OT[3x30 byo-yomi]
3
+ PB[tartrate]PW[redrose]BR[7d]WR[1p]DT[2003-06-18]PC[The Kiseido Go Server (KGS) at http://kgs.kiseido.com/]C[tartrate [7d?\]: hi
4
+ tartrate [7d?\]: thx
5
+ ]RE[B+Resign]
6
+ ;B[jj]BL[1280.503]CR[jj]C[redrose [1p\]: hi
7
+ Jerk [7d?\]: wow
8
+ Anark [11k\]: game of the day :)
9
+ Jerk [7d?\]: really big match
10
+ ]
11
+ ;W[ih]WL[1277.190]CR[ih];AB[aa][bb][cc])
@@ -0,0 +1,7 @@
1
+ (;GM[1]FF[4]CA[UTF-8]SZ[19]RU[Japanese]KM[0.50]TM[1290]OT[3x30 byo-yomi]PB[tartrate]PW[redrose]BR[7d]WR[1p]DT[2003-06-18]PC[The Kiseido Go Server (KGS) at http://kgs.kiseido.com/]C[tartrate [7d?\]: hi
2
+ tartrate [7d?\]: thx
3
+ ]RE[B+Resign];B[jj]BL[1280.503]CR[jj]C[redrose [1p\]: hi
4
+ Jerk [7d?\]: wow
5
+ Anark [11k\]: game of the day :)
6
+ Jerk [7d?\]: really big match
7
+ ];W[ih]WL[1277.190]CR[ih];))
@@ -1,34 +1,64 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe "SgfParser::Node" do
4
- before :each do
5
- @node = SgfParser::Node.new
6
- end
7
-
8
- it "should be a valid node" do
9
- @node.class.should == SgfParser::Node
10
- @node.properties.should == {}
11
- @node.parent.should == nil
12
- @node.children.should == []
13
- end
14
-
15
- it "should store properties" do
16
- @node.add_properties "PB" => "Dosaku"
17
- @node.properties.should == {"PB" => "Dosaku"}
18
- end
19
-
20
- it "should link to a parent" do
21
- parent = SgfParser::Node.new
22
- @node.parent = parent
23
- @node.parent.should == parent
24
- end
25
-
26
- it "should link to children" do
27
- child1 = SgfParser::Node.new
28
- child2 = SgfParser::Node.new
29
- child3 = SgfParser::Node.new
30
- @node.add_children child1, child2, child3
31
- @node.children.should == [child1, child2, child3]
32
- end
33
-
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "SgfParser::Node" do
4
+
5
+ before :each do
6
+ @node = SGF::Node.new
7
+ end
8
+
9
+ it "should be a valid node" do
10
+ @node.class.should == SGF::Node
11
+ @node.properties.should == {}
12
+ @node.parent.should == nil
13
+ @node.children.should == []
14
+ end
15
+
16
+ it "should store properties" do
17
+ @node.add_properties "PB" => "Dosaku"
18
+ @node.properties.should == {"PB" => "Dosaku"}
19
+ end
20
+
21
+ it "should link to a parent" do
22
+ parent = SGF::Node.new
23
+ @node.parent = parent
24
+ @node.parent.should == parent
25
+ end
26
+
27
+ it "should link to children" do
28
+ child1 = SGF::Node.new
29
+ child2 = SGF::Node.new
30
+ child3 = SGF::Node.new
31
+ @node.add_children child1, child2, child3
32
+ @node.children.should == [child1, child2, child3]
33
+ end
34
+
35
+ it "should link to children, who should get new parents" do
36
+ child1 = SGF::Node.new
37
+ child2 = SGF::Node.new
38
+ child3 = SGF::Node.new
39
+ @node.add_children child1, child2, child3
40
+ @node.children.each { |child| child.parent.should == @node }
41
+ end
42
+
43
+ it "should allow properties to be added to" do
44
+ @node.add_properties "TC" => "Hello,"
45
+ @node.add_properties "TC" => " world!"
46
+ @node.properties["TC"].should == "Hello, world!"
47
+ end
48
+
49
+ it "should give you the properties based on method given" do
50
+ @node.add_properties "PW" => "The Tick"
51
+ @node.add_properties "PB" => "Batmanuel"
52
+ @node.pw.should == "The Tick"
53
+ @node.pb.should == "Batmanuel"
54
+ end
55
+
56
+ it "should allow you to change a property completely" do
57
+ @node.add_properties "RE" => "This is made up"
58
+ @node.properties["RE"] = "This is also made up"
59
+ @node.re.should == "This is also made up"
60
+ @node.re = "And that too"
61
+ @node.re.should == "And that too"
62
+ end
63
+
34
64
  end
@@ -0,0 +1,20 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "SgfParser::Tree.parse" do
4
+
5
+ it "should have FF in the first node" do
6
+ tree = SGF::Parser.new('spec/data/ff4_ex.sgf').parse
7
+ tree.root.children[0].properties.keys.should include("FF")
8
+ end
9
+
10
+ it "should give an error if FF is missing from the first node" do
11
+ pending "To be coded later"
12
+ end
13
+
14
+ it "should parse properly the AW property" do
15
+ sgf = "dd][de][ef]"
16
+ parser = SGF::Parser.new sgf
17
+ parser.get_property.should == "[dd][de][ef]"
18
+ end
19
+
20
+ end
@@ -1,6 +1,6 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'sgf_parser'
4
- require 'rspec'
5
- require 'rspec/autorun'
6
-
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'sgf'
4
+ require 'rspec'
5
+ require 'rspec/autorun'
6
+
@@ -1,41 +1,29 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe "SgfParser::Tree" do
4
-
5
- before :each do
6
-
7
- end
8
-
9
- it "should parse properly" do
10
- tree = SgfParser::Tree.new :filename => 'sample_sgf/ff4_ex.sgf'
11
- tree.class.should == SgfParser::Tree
12
- tree.root.children.size.should == 2
13
- tree.root.children[0].children.size.should == 5
14
- end
15
-
16
- it "should save a simple tree properly" do
17
- tree = SgfParser::Tree.new :filename => 'sample_sgf/simple.sgf'
18
- new = 'sample_sgf/simple_saved.sgf'
19
- tree.save :filename => new
20
- tree2 = SgfParser::Tree.new :filename => new
21
- tree.should == tree2
22
- end
23
-
24
- it "should save the sample SGF properly" do
25
- tree = SgfParser::Tree.new :filename => 'sample_sgf/ff4_ex.sgf'
26
- new = 'sample_sgf/ff4_ex_saved.sgf'
27
- tree.save :filename => new
28
- tree2 = SgfParser::Tree.new :filename => new
29
- tree_children = []
30
- tree2_children = []
31
- tree.each { |node| tree_children << node }
32
- tree2.each { |node| tree2_children << node }
33
- tree_children.size.should == tree2_children.size
34
- tree_children.each_with_index do |node, index|
35
- node.properties.should == tree2_children[index].properties
36
- end
37
- tree_children.should == tree2_children
38
- tree2.should == tree
39
- end
40
-
41
- end
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "SgfParser::Tree" do
4
+
5
+
6
+ it "should load a file properly" do
7
+ tree = SGF::Parser.new('spec/data/ff4_ex.sgf').parse
8
+ tree.class.should == SGF::Tree
9
+ tree.root.children.size.should == 2
10
+ tree.root.children[0].children.size.should == 5
11
+ end
12
+
13
+ it "should save a simple tree properly" do
14
+ tree = SGF::Parser.new('spec/data/simple.sgf').parse
15
+ new_file = 'spec/data/simple_saved.sgf'
16
+ tree.save :filename => new_file
17
+ tree2 = SGF::Parser.new(new_file).parse
18
+ tree.should == tree2
19
+ end
20
+
21
+ it "should save the sample SGF properly" do
22
+ tree = SGF::Parser.new('spec/data/ff4_ex.sgf').parse
23
+ new_file = 'spec/data/ff4_ex_saved.sgf'
24
+ tree.save :filename => new_file
25
+ tree2 = SGF::Parser.new(new_file).parse
26
+ tree2.should == tree
27
+ end
28
+
29
+ end
metadata CHANGED
@@ -1,77 +1,70 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: SgfParser
3
- version: !ruby/object:Gem::Version
4
- hash: 57
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 9
9
- - 1
10
- version: 0.9.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Aldric Giacomoni
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-07-29 00:00:00 -04:00
12
+ date: 2011-08-01 00:00:00.000000000 -04:00
19
13
  default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- type: :development
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
32
16
  name: jeweler
33
- version_requirements: *id001
34
- prerelease: false
35
- - !ruby/object:Gem::Dependency
36
- type: :development
37
- requirement: &id002 !ruby/object:Gem::Requirement
17
+ requirement: &76820790 !ruby/object:Gem::Requirement
38
18
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: *76820790
26
+ - !ruby/object:Gem::Dependency
46
27
  name: rcov
47
- version_requirements: *id002
28
+ requirement: &76820540 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
48
35
  prerelease: false
49
- - !ruby/object:Gem::Dependency
36
+ version_requirements: *76820540
37
+ - !ruby/object:Gem::Dependency
38
+ name: rdoc
39
+ requirement: &76820300 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
50
45
  type: :development
51
- requirement: &id003 !ruby/object:Gem::Requirement
46
+ prerelease: false
47
+ version_requirements: *76820300
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec
50
+ requirement: &76820030 !ruby/object:Gem::Requirement
52
51
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 13
57
- segments:
58
- - 1
59
- - 2
60
- - 9
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
61
55
  version: 1.2.9
62
- name: rspec
63
- version_requirements: *id003
56
+ type: :development
64
57
  prerelease: false
65
- description: SGFParser is a library that parses and saves SGF (Smart Game Format) files.
58
+ version_requirements: *76820030
59
+ description: SGFParser is a library that parses and saves SGF (Smart Game Format)
60
+ files.
66
61
  email: aldric@trevoke.net
67
62
  executables: []
68
-
69
63
  extensions: []
70
-
71
- extra_rdoc_files:
64
+ extra_rdoc_files:
72
65
  - LICENSE
73
66
  - README.rdoc
74
- files:
67
+ files:
75
68
  - .document
76
69
  - .rspec
77
70
  - .rvmrc
@@ -82,56 +75,45 @@ files:
82
75
  - Rakefile
83
76
  - SgfParser.gemspec
84
77
  - VERSION
85
- - lib/sgf/parser/node.rb
86
- - lib/sgf/parser/properties.rb
87
- - lib/sgf/parser/tree.rb
88
- - lib/sgf/parser/tree_parse.rb
89
- - lib/sgf/sgf_indent.rb
90
- - lib/sgf/sgfindent.rb
91
- - lib/sgf_parser.rb
92
- - sample_sgf/ff4_ex.sgf
93
- - sample_sgf/ff4_ex_saved.sgf
94
- - sample_sgf/redrose-tartrate.sgf
95
- - sample_sgf/simple.sgf
96
- - sample_sgf/simple_saved.sgf
78
+ - lib/sgf.rb
79
+ - lib/sgf/indenter.rb
80
+ - lib/sgf/node.rb
81
+ - lib/sgf/parser.rb
82
+ - lib/sgf/properties.rb
83
+ - lib/sgf/tree.rb
97
84
  - sample_usage/parsing_files.rb
85
+ - spec/data/ff4_ex.sgf
86
+ - spec/data/ff4_ex_saved.sgf
87
+ - spec/data/redrose-tartrate.sgf
88
+ - spec/data/simple.sgf
89
+ - spec/data/simple_saved.sgf
98
90
  - spec/node_spec.rb
91
+ - spec/parser_spec.rb
99
92
  - spec/spec_helper.rb
100
- - spec/tree_parser_spec.rb
101
93
  - spec/tree_spec.rb
102
94
  has_rdoc: true
103
95
  homepage: http://github.com/Trevoke/SGFParser
104
96
  licenses: []
105
-
106
97
  post_install_message:
107
98
  rdoc_options: []
108
-
109
- require_paths:
99
+ require_paths:
110
100
  - lib
111
- required_ruby_version: !ruby/object:Gem::Requirement
101
+ required_ruby_version: !ruby/object:Gem::Requirement
112
102
  none: false
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- hash: 3
117
- segments:
118
- - 0
119
- version: "0"
120
- required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ! '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
108
  none: false
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- hash: 3
126
- segments:
127
- - 0
128
- version: "0"
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
129
113
  requirements: []
130
-
131
114
  rubyforge_project:
132
115
  rubygems_version: 1.6.2
133
116
  signing_key:
134
117
  specification_version: 3
135
118
  summary: A library for working with SGF files.
136
119
  test_files: []
137
-
@@ -1,118 +0,0 @@
1
- module SgfParser
2
-
3
- # This indents an SGF file to make it more readable. It outputs to the screen
4
- # by default, but can be given a file as output.
5
- # Usage: SgfParser::Indenter.new infile, outfile
6
- class Indenter
7
-
8
- def initialize file, out=$stdout
9
- sgf = ""
10
- File.open(file) { |f| sgf = f.read }
11
- @new_string = ""
12
- sgf.gsub! "\\\\n\\\\r", ""
13
- sgf.gsub! "\\\\r\\\\n", ""
14
- sgf.gsub! "\\\\r", ""
15
- sgf.gsub! "\\\\n", ""
16
- #sgf.gsub! "\n", ""
17
-
18
- end_of_a_series = false
19
- identprop = false # We are not in the middle of an identprop value.
20
- # An identprop is an identity property - a value.
21
-
22
- sgf_array = sgf.split(//)
23
- iterator = 0
24
- array_length = sgf_array.size
25
- indent = 0
26
-
27
- while iterator < array_length - 1
28
- char = sgf_array[iterator]
29
-
30
- case char
31
- when '(' # Opening a new branch
32
- if !identprop
33
- @new_string << "\n"
34
- indent += 2
35
- #tabulate indent
36
- @new_string << " " * indent
37
- end
38
- @new_string << char
39
-
40
- when ')' # Closing a branch
41
- @new_string << char
42
- if !identprop
43
- @new_string << "\n"
44
- indent -= 2
45
- @new_string << " " * indent
46
- #tabulate indent
47
- end
48
-
49
- when ';' # Opening a new node
50
- if !identprop
51
- @new_string << "\n"
52
- @new_string << " " * indent
53
- #tabulate indent
54
- end
55
- @new_string << char
56
-
57
- when '[' # Open comment?
58
- if !identprop #If we're not inside a comment, then now we are.
59
- identprop = true
60
- end_of_a_series = false
61
- end
62
- @new_string << char
63
-
64
- when ']' # Close comment
65
- end_of_a_series = true # Maybe end of a series of comments.
66
- identprop = false # That's our cue to close a comment.
67
- @new_string << char
68
-
69
- when "\\" # If we're inside a comment, then maybe we're about to escape a ].
70
- # This is the whole reason we need this ugly charade of a loop.
71
- if identprop
72
- if sgf_array[iterator + 1] == "]"
73
- @new_string << "\\]"
74
- iterator += 1
75
- else
76
- @new_string << "\\"
77
- end
78
- else
79
- #This should never happen - a backslash outside a comment ?!
80
- #But let's not have it be told that I'm not prepared.
81
- @new_string << "\\"
82
- end
83
-
84
- when "\n"
85
- @new_string << "\n"
86
- @new_string << " " * indent
87
- #tabulate indent
88
-
89
- else
90
- # Well, I guess it's "just" a character after all.
91
- if end_of_a_series
92
- end_of_a_series = false
93
- end
94
- @new_string << char
95
- end
96
-
97
- iterator += 1
98
- end
99
-
100
- if out == $stdout
101
- $stdout << @new_string
102
- else
103
- File.open(out, 'w') { |file| file << @new_string }
104
- end
105
-
106
- end
107
-
108
- private
109
-
110
- def tabulate indent
111
- indent.times { print " " }
112
- end
113
- end
114
- end
115
-
116
-
117
-
118
-