logonxc 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+ gem "erubis"
6
+
7
+ # Add dependencies to develop your gem here.
8
+ # Include everything needed to run rake, tests, features, etc.
9
+ group :development do
10
+ gem "rspec", "~> 2.3.0"
11
+ gem "bundler", "~> 1.0.0"
12
+ gem "jeweler", "~> 1.6.4"
13
+ gem "rcov", ">= 0"
14
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,32 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ abstract (1.0.0)
5
+ diff-lcs (1.1.3)
6
+ erubis (2.6.6)
7
+ abstract (>= 1.0.0)
8
+ git (1.2.5)
9
+ jeweler (1.6.4)
10
+ bundler (~> 1.0)
11
+ git (>= 1.2.5)
12
+ rake
13
+ rake (0.9.2)
14
+ rcov (0.9.10)
15
+ rspec (2.3.0)
16
+ rspec-core (~> 2.3.0)
17
+ rspec-expectations (~> 2.3.0)
18
+ rspec-mocks (~> 2.3.0)
19
+ rspec-core (2.3.1)
20
+ rspec-expectations (2.3.0)
21
+ diff-lcs (~> 1.1.2)
22
+ rspec-mocks (2.3.0)
23
+
24
+ PLATFORMS
25
+ ruby
26
+
27
+ DEPENDENCIES
28
+ bundler (~> 1.0.0)
29
+ erubis
30
+ jeweler (~> 1.6.4)
31
+ rcov
32
+ rspec (~> 2.3.0)
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Deb Bassett
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,19 @@
1
+ = logonxc
2
+
3
+ Parse basic logo commands and output NXC (a simple c-like programming language for Lego Mindstorms)
4
+
5
+ == Contributing to logonxc
6
+
7
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
8
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
9
+ * Fork the project
10
+ * Start a feature/bugfix branch
11
+ * Commit and push until you are happy with your contribution
12
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2011 Deb Bassett. See LICENSE.txt for
18
+ further details.
19
+
data/Rakefile ADDED
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "logonxc"
18
+ gem.homepage = "http://github.com/urbanwide/logonxc"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Logo to Lego NXC}
21
+ gem.description = %Q{Parse basic logo and output NXC for Lego Mindstorms}
22
+ gem.email = "deb@urbanwide.com"
23
+ gem.authors = ["Deb Bassett"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+ RSpec::Core::RakeTask.new(:spec) do |spec|
31
+ spec.pattern = FileList['spec/**/*_spec.rb']
32
+ end
33
+
34
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
35
+ spec.pattern = 'spec/**/*_spec.rb'
36
+ spec.rcov = true
37
+ end
38
+
39
+ task :default => :spec
40
+
41
+ require 'rake/rdoctask'
42
+ Rake::RDocTask.new do |rdoc|
43
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
+
45
+ rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.title = "logonxc #{version}"
47
+ rdoc.rdoc_files.include('README*')
48
+ rdoc.rdoc_files.include('lib/**/*.rb')
49
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/lib/logonxc.rb ADDED
@@ -0,0 +1,37 @@
1
+ require 'erubis'
2
+
3
+ class LogoNxc
4
+
5
+ def self.wrap(nxc_block)
6
+ tpl = File.expand_path(File.dirname(__FILE__) + "/../templates/logonxc.erb")
7
+ template = Erubis::Eruby.new File.new(tpl).read
8
+ template.result(:nxc_block => nxc_block)
9
+ end
10
+
11
+ # ok so this probably isn't the best way to write a language parser :)
12
+ def self.parse text
13
+ output = ""
14
+ text.each_line do |line|
15
+ case
16
+ when line =~ /repeat\s+(\d+)\s+\[/
17
+ output << "repeat(#{$1}) {\n"
18
+ when line =~ /(?:right|rt)\s*(\d+)/
19
+ output << "right(#{$1});\n"
20
+ when line =~ /(?:left|lt)\s*(\d+)/
21
+ output << "left(#{$1});\n"
22
+ when line =~ /(?:forward|fd)\s*(\d+)/
23
+ output << "forward(#{$1});\n"
24
+ when line =~ /(?:back|bk)\s*(\d+)/
25
+ output << "back(#{$1});\n"
26
+ when line =~ /\]/
27
+ output << "}\n"
28
+ end
29
+ end
30
+ output
31
+ end
32
+
33
+ def self.nxc(logo)
34
+ wrap(parse(logo))
35
+ end
36
+
37
+ end
data/logonxc.gemspec ADDED
@@ -0,0 +1,64 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "logonxc"
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Deb Bassett"]
12
+ s.date = "2011-10-02"
13
+ s.description = "Parse basic logo and output NXC for Lego Mindstorms"
14
+ s.email = "deb@urbanwide.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "lib/logonxc.rb",
29
+ "logonxc.gemspec",
30
+ "spec/logonxc_spec.rb",
31
+ "spec/spec_helper.rb",
32
+ "templates/logonxc.erb"
33
+ ]
34
+ s.homepage = "http://github.com/urbanwide/logonxc"
35
+ s.licenses = ["MIT"]
36
+ s.require_paths = ["lib"]
37
+ s.rubygems_version = "1.8.10"
38
+ s.summary = "Logo to Lego NXC"
39
+
40
+ if s.respond_to? :specification_version then
41
+ s.specification_version = 3
42
+
43
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
44
+ s.add_runtime_dependency(%q<erubis>, [">= 0"])
45
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
46
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
47
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
48
+ s.add_development_dependency(%q<rcov>, [">= 0"])
49
+ else
50
+ s.add_dependency(%q<erubis>, [">= 0"])
51
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
52
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
53
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
54
+ s.add_dependency(%q<rcov>, [">= 0"])
55
+ end
56
+ else
57
+ s.add_dependency(%q<erubis>, [">= 0"])
58
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
59
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
60
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
61
+ s.add_dependency(%q<rcov>, [">= 0"])
62
+ end
63
+ end
64
+
@@ -0,0 +1,66 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "LogoNxc" do
4
+
5
+ def text
6
+ <<-TEXT
7
+ right 10
8
+ rt 100
9
+ repeat 10 [
10
+ left 10
11
+ lt 100
12
+ ]
13
+ forward 10
14
+ fd 200
15
+ back 10
16
+ bk 200
17
+ TEXT
18
+ end
19
+
20
+ describe ".parse" do
21
+ before do
22
+ @output = LogoNxc.parse(text).split("\n")
23
+ end
24
+
25
+ it "should translate right" do
26
+ @output[0].should == "right(10);"
27
+ end
28
+ it "should translate rt" do
29
+ @output[1].should == "right(100);"
30
+ end
31
+ it "should translate repeat" do
32
+ @output[2].should == "repeat(10) {"
33
+ end
34
+ it "should translate left" do
35
+ @output[3].should == "left(10);"
36
+ end
37
+ it "should translate lt" do
38
+ @output[4].should == "left(100);"
39
+ end
40
+ it "should translate ]" do
41
+ @output[5].should == "}"
42
+ end
43
+ it "should translate forward" do
44
+ @output[6].should == "forward(10);"
45
+ end
46
+ it "should translate fd" do
47
+ @output[7].should == "forward(200);"
48
+ end
49
+ it "should translate back" do
50
+ @output[8].should == "back(10);"
51
+ end
52
+ it "should translate bk" do
53
+ @output[9].should == "back(200);"
54
+ end
55
+ end
56
+
57
+ describe ".nxc" do
58
+ before do
59
+ @output = LogoNxc.nxc(text)
60
+ end
61
+ it "should output nxc" do
62
+ puts @output
63
+ end
64
+ end
65
+
66
+ end
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'logonxc'
5
+
6
+ # Requires supporting files with custom matchers and macros, etc,
7
+ # in ./support/ and its subdirectories.
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+
12
+ end
@@ -0,0 +1,52 @@
1
+ #define POWER 50 // was 50
2
+ #define TURN_TIME_90 1800 // was 1670
3
+ #define PACE_TIME 100 // was 1000
4
+
5
+ sub print(string text) {
6
+ ClearScreen();
7
+ TextOut(0,0, text);
8
+ }
9
+
10
+ inline int degrees_to_turn_time(int degrees) {
11
+ float one_degree_time = TURN_TIME_90 / 90.0;
12
+ int turn_time = one_degree_time * degrees;
13
+ return turn_time;
14
+ }
15
+
16
+ sub turn(int degrees) {
17
+ if (degrees < 0) {
18
+ degrees = degrees * -1;
19
+ OnRev(OUT_C, POWER);
20
+ OnFwd(OUT_B, POWER);
21
+ } else {
22
+ OnFwd(OUT_C, POWER);
23
+ OnRev(OUT_B, POWER);
24
+ }
25
+ Wait(degrees_to_turn_time(degrees));
26
+ Off(OUT_BC);
27
+ Wait(1000);
28
+ }
29
+
30
+ sub right(int degrees) {
31
+ turn(degrees);
32
+ }
33
+
34
+ sub left(int degrees) {
35
+ turn(-degrees);
36
+ }
37
+
38
+ sub forward(int paces) {
39
+ OnFwd(OUT_BC, POWER);
40
+ Wait(paces * PACE_TIME);
41
+ }
42
+
43
+ sub back(int paces) {
44
+ OnRev(OUT_BC, POWER);
45
+ Wait(paces * PACE_TIME);
46
+ }
47
+
48
+ task main() {
49
+
50
+ <%= nxc_block %>
51
+
52
+ }
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logonxc
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Deb Bassett
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-10-02 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ requirement: &id001 !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ hash: 3
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ version_requirements: *id001
31
+ name: erubis
32
+ prerelease: false
33
+ type: :runtime
34
+ - !ruby/object:Gem::Dependency
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ hash: 3
41
+ segments:
42
+ - 2
43
+ - 3
44
+ - 0
45
+ version: 2.3.0
46
+ version_requirements: *id002
47
+ name: rspec
48
+ prerelease: false
49
+ type: :development
50
+ - !ruby/object:Gem::Dependency
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ hash: 23
57
+ segments:
58
+ - 1
59
+ - 0
60
+ - 0
61
+ version: 1.0.0
62
+ version_requirements: *id003
63
+ name: bundler
64
+ prerelease: false
65
+ type: :development
66
+ - !ruby/object:Gem::Dependency
67
+ requirement: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ~>
71
+ - !ruby/object:Gem::Version
72
+ hash: 7
73
+ segments:
74
+ - 1
75
+ - 6
76
+ - 4
77
+ version: 1.6.4
78
+ version_requirements: *id004
79
+ name: jeweler
80
+ prerelease: false
81
+ type: :development
82
+ - !ruby/object:Gem::Dependency
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ hash: 3
89
+ segments:
90
+ - 0
91
+ version: "0"
92
+ version_requirements: *id005
93
+ name: rcov
94
+ prerelease: false
95
+ type: :development
96
+ description: Parse basic logo and output NXC for Lego Mindstorms
97
+ email: deb@urbanwide.com
98
+ executables: []
99
+
100
+ extensions: []
101
+
102
+ extra_rdoc_files:
103
+ - LICENSE.txt
104
+ - README.rdoc
105
+ files:
106
+ - .document
107
+ - .rspec
108
+ - Gemfile
109
+ - Gemfile.lock
110
+ - LICENSE.txt
111
+ - README.rdoc
112
+ - Rakefile
113
+ - VERSION
114
+ - lib/logonxc.rb
115
+ - logonxc.gemspec
116
+ - spec/logonxc_spec.rb
117
+ - spec/spec_helper.rb
118
+ - templates/logonxc.erb
119
+ homepage: http://github.com/urbanwide/logonxc
120
+ licenses:
121
+ - MIT
122
+ post_install_message:
123
+ rdoc_options: []
124
+
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ hash: 3
133
+ segments:
134
+ - 0
135
+ version: "0"
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ hash: 3
142
+ segments:
143
+ - 0
144
+ version: "0"
145
+ requirements: []
146
+
147
+ rubyforge_project:
148
+ rubygems_version: 1.8.10
149
+ signing_key:
150
+ specification_version: 3
151
+ summary: Logo to Lego NXC
152
+ test_files: []
153
+