chiplotle-cli-wrapper 0.0.3 → 0.0.4

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 17f9c2fb9c99541aa0305af83bd071257e3ee844
4
+ data.tar.gz: c3eb3d7cd3fb21dc674619c8117a2d6a4f0bac36
5
+ SHA512:
6
+ metadata.gz: b06642521833d9317380906aff4239d39512c0d86d45882bf24334748597552daca0f2b41dd4af0b715ddbf9e5fa94288526b6e72d108c97ce4651af6c2f495b
7
+ data.tar.gz: 2cb18c703ad946f9442efb3618620888898a7aa1c3307dd8d0d1f998314e9f003e34b880cacaaddf0f080073ee5e7e08d23c5565b08b9cd73c0e339f3e3e41a0
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Rob Wilson
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,27 @@
1
+ Chiplotle CLI Wrapper
2
+ =====================
3
+
4
+ Description
5
+ -----------
6
+
7
+ Features
8
+ --------
9
+
10
+ Install
11
+ -------
12
+
13
+ ```
14
+ gem install chiplotle-cli-wrapper
15
+ ```
16
+
17
+ Build and Install Gem
18
+ ---------------------
19
+
20
+ ```
21
+ git clone git@github.com:roobert/chiplotle-cli-wrapper.git && cd chiplotle-cli-wrapper
22
+ gem build chiplotle-cli-wrapper.gemspec
23
+ gem install chiplotle-cli-wrapper-<version>.gem
24
+ ```
25
+
26
+ Examples
27
+ --------
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
File without changes
@@ -0,0 +1 @@
1
+ #!/usr/bin/env ruby
@@ -1,20 +1,24 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # example of a simple app that write text to a plotter
3
+ # example of a simple app that writes text to a plotter
4
4
  #
5
5
 
6
6
  require 'chiplotle-cli-wrapper'
7
7
  require 'awesome_print'
8
8
 
9
- # FIXME: check args..
10
- text = ARGV[0]
11
- pen_no = ARGV[1]
12
- rotation = ARGV[2]
13
- slant = ARGV[3]
14
- character_height = ARGV[4]
15
- character_width = ARGV[5]
16
- x = ARGV[6]
17
- y = ARGV[7]
9
+ text = false
10
+ pen = false
11
+ label_direction = false
12
+ slant = false
13
+ character_size = false
14
+ position = false
15
+
16
+ text = ARGV[0] if ARGV[0] != nil
17
+ pen = ARGV[1] if ARGV[1] != nil
18
+ label_direction = ARGV[2] if ARGV[2] != nil
19
+ slant = ARGV[3] if ARGV[3] != nil
20
+ character_size = ARGV[4] if ARGV[4] != nil
21
+ position = ARGV[5] if ARGV[5] != nil
18
22
 
19
23
  plotter = ChiplotleCliWrapper::Plotter.new
20
24
 
@@ -22,6 +26,6 @@ plotter.debug = true
22
26
 
23
27
  ap ARGV
24
28
 
25
- plotter.print_text(*ARGV)
29
+ plotter.draw(text: text, pen: pen, label_direction: label_direction, slant: slant, character_size: character_size, position: position)
26
30
 
27
31
  plotter.close
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "chiplotle-cli-wrapper"
7
+
8
+ spec.version = "0.0.4"
9
+
10
+ spec.summary = "Wrapper library for the chiplotle-cli tool"
11
+ spec.description = "A Wrapper for the CLI to the Chiplotle python library"
12
+
13
+ spec.authors = ["Rob Wilson"]
14
+ spec.email = "roobert@gmail.com"
15
+ spec.homepage = "http://github.com/roobert/chiplotle-cli-wrapper"
16
+
17
+ spec.license = "MIT"
18
+
19
+ spec.files = `git ls-files`.split($/)
20
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake"
25
+
26
+ spec.add_dependency "log4r"
27
+ end
@@ -1,123 +1,193 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'open3'
4
+ require 'log4r'
5
+
6
+ include Open3
7
+ include Log4r
8
+
9
+ STDOUT.sync = true
10
+ STDERR.sync = true
11
+
3
12
  module ChiplotleCliWrapper
4
- class Plotter
13
+ class Plotter
14
+ attr_accessor :log
5
15
 
6
- attr_accessor :debug
16
+ def initialize
7
17
 
8
- def initialize(log_file = './log/chiplotle.log')
18
+ @log = Logger.new 'chiplotle-cli-wrapper'
19
+ @log.outputters = Outputter.stdout
9
20
 
10
- # TODO: check for chiplotle installation
21
+ # TODO: check for chiplotle installation
22
+ @chiplotle, @stdout, @stderr = popen3("chiplotle")
11
23
 
12
- # TODO: don't have a log file like this..
24
+ # plotter initialization takes 8 seconds
25
+ begin
26
+ Timeout::timeout(10) do
27
+ @stdout.each do |line|
13
28
 
14
- @chiplotle = IO.popen("chiplotle > ./log/chiplotle.log 2>&1", "w")
15
- @log = File.open(log_file, "w+")
16
- @debug = false
29
+ # this is the last line of the banner output on successul initialization of plotter
30
+ break if line =~ /Buffer Size:.*/
17
31
 
18
- # wait for chiplotle to initialize plotter
19
- @log.read.split('\n').each { |line| break if line == "chiplotle> " }
32
+ log.info "waiting..."
33
+ sleep 0.5
34
+ end
20
35
  end
36
+ rescue Timeout::Error => e
37
+ raise Timeout::Error, "#{e}: No plotter detected!"
38
+ end
39
+
40
+ log.info "plotter detected!"
41
+
42
+ log.info "setting some defaults..."
43
+ self.reset_label_size
44
+ self.label_direction(1,0)
45
+ self.slant(0)
46
+ self.position(0,0)
47
+ self.pen_number(1)
48
+ self.replace_pen
49
+
50
+ log.info "starting stderr/stdout logging threads..."
51
+ Thread.new do
52
+ loop do
53
+ log.info @stdout.gets
54
+ end
55
+ end
21
56
 
22
- def log(message)
23
- puts message if @debug
57
+ Thread.new do
58
+ loop do
59
+ log.info @stderr.gets
24
60
  end
61
+ end
25
62
 
26
- def close
27
- # TODO: perform any reset actions...
63
+ log.info "initialization complete!"
64
+ end
28
65
 
29
- @chiplotle.close
30
- @log.close
31
- end
66
+ def close
67
+ # TODO: perform any reset actions...
32
68
 
33
- def plotter(command)
34
- log "plotter.write(#{command})"
69
+ @chiplotle.close
70
+ #@log.close
71
+ end
35
72
 
36
- @chiplotle.puts "plotter.write(#{command})"
73
+ def plotter(command)
74
+ log "plotter.write(#{command})"
37
75
 
38
- #"oh no! #{@log.read}" if @log.read != "chiplotle> "
39
- end
76
+ @chiplotle.puts "plotter.write(#{command})"
40
77
 
41
- def pen(pen_no)
42
- plotter "hpgl.SP(#{pen_no})"
43
- end
78
+ #"oh no! #{@log.read}" if @log.read != "chiplotle> "
79
+ end
44
80
 
45
- # device will continue from last position if no values are supplied
46
- def position(x, y)
47
- plotter "hpgl.PA([(#{x}, #{y})])" unless x == nil or y == nil
48
- end
81
+ def pen_number(pen_number)
82
+ plotter "hpgl.SP(#{pen_number})"
83
+ end
49
84
 
50
- def label(text)
51
- plotter "hpgl.LB('#{text}')"
52
- end
85
+ # device will continue from last position if no values are supplied
86
+ def position(x, y)
87
+ plotter "hpgl.PA([(#{x}, #{y})])"
88
+ end
53
89
 
54
- def label_size(width, height)
55
- plotter "hpgl.SI(#{width}, #{height})"
56
- end
90
+ def label(text)
91
+ plotter "hpgl.LB('#{text}')"
92
+ end
57
93
 
58
- def label_size_reset
59
- plotter "hpgl.SI()"
60
- end
94
+ def character_size(width, height)
95
+ plotter "hpgl.SI(#{width}, #{height})"
96
+ end
61
97
 
62
- def rotate(angle)
63
- plotter "hpgl.RO(#{angle})"
64
- end
98
+ def reset_label_size
99
+ plotter "hpgl.SI()"
100
+ end
65
101
 
66
- def slant(slant)
67
- plotter "hpgl.SL(#{slant})"
68
- end
102
+ def label_direction(run,rise)
103
+ plotter "hpgl.DI(#{run}, #{rise})"
104
+ end
69
105
 
70
- def replace_pen
71
- pen(0)
72
- end
106
+ def slant(slant)
107
+ plotter "hpgl.SL(#{slant})"
108
+ end
109
+
110
+ def replace_pen
111
+ pen_number(0)
112
+ end
113
+
114
+ # TODO: insert new lines when plotter is going to run out of horizontal space
115
+ # FIXME: maybe use nil rather than defaul values to leave setting unchanged..
116
+ def write_text(
117
+ text: '',
118
+ pen_number: '',
119
+ slant: '',
120
+ direction_run: '',
121
+ direction_rise: '',
122
+ position_x: '',
123
+ position_y: '',
124
+ character_width: '',
125
+ character_height: ''
126
+ )
127
+ if pen_number != ''
128
+ self.pen_number(pen_number)
129
+ end
130
+
131
+ if direction_run != '' and direction_rise != ''
132
+ self.label_direction(direction_run, direction_rise)
133
+ end
134
+
135
+ if slant != ''
136
+ self.slant(slant)
137
+ end
138
+
139
+ if position_x != '' and position_y != ''
140
+ self.position(position_x, position_y)
141
+ end
142
+
143
+ if character_width != '' and character_height != ''
144
+ self.character_size(character_width, character_height)
145
+ end
146
+
147
+ if text != ''
148
+ label(text)
149
+ end
150
+
151
+ reset_label_size
152
+
153
+ replace_pen
154
+ end
73
155
 
74
- # FIXME: maybe use nil rather than defaul values to leave setting unchanged..
75
- def print_text(
76
- text = "",
77
- pen_no = 1,
78
- rotation = 0,
79
- slant = 0,
80
- character_width = 0.285,
81
- character_height = 0.375,
82
- x = nil,
83
- y = nil
84
- )
156
+ # FIXME
157
+ def convert_hpgl_to_chiplotle_functions(hpgl)
158
+ hpgl.map do |statement|
159
+ statement.gsub!(/([A-Za-z]{2})(.*)/, "\1(\2)")
160
+ end
161
+ end
85
162
 
86
- # TODO: only set settings for settings that have changed (will decrease wait before drawing)
163
+ # FIXME
164
+ def draw_hpgl(hpgl)
87
165
 
88
- # pick up a pen
89
- pen(pen_no)
166
+ chiplotle_functions = convert_hpgl_to_chiplotle_functions(hpgl)
90
167
 
91
- # move to position
92
- position(x, y)
168
+ chiplotle_functions.each do |command|
169
+ plotter("hpgl.#{command}")
170
+ end
171
+ end
93
172
 
94
- # scale label
95
- label_size(character_height, character_width)
173
+ def write_file(hpgl)
174
+ temp_file = Tempfile.new('chiplotle-cli-wrapper')
96
175
 
97
- # rotate label
98
- rotate(rotation)
176
+ hpgl.gsub!(/\\r?\\n/, '')
99
177
 
100
- # vertical_label
101
- slant(slant)
178
+ log "hpgl: #{hpgl}"
102
179
 
103
- # print message
104
- label(text)
180
+ temp_file.write(hpgl)
181
+ temp_file.close
105
182
 
106
- # reset text size
107
- label_size_reset
183
+ log "temp_file.path: #{temp_file.path}"
108
184
 
109
- # replace pen
110
- replace_pen
111
- end
185
+ log %x{cat #{temp_file.path}}
112
186
 
113
- def write_hgpl(hgpl)
114
- hgpl.each do |command|
115
- plotter(command)
116
- end
117
- end
187
+ @chiplotle.puts("plotter.write_file('#{temp_file.path}')")
118
188
 
119
- def write_file(file)
120
- # TODO
121
- end
189
+ # FIXME - fork a sleep remove to prevent file being removed before chiplotle has read it?
190
+ #temp_file.unlink
122
191
  end
192
+ end
123
193
  end
metadata CHANGED
@@ -1,47 +1,98 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chiplotle-cli-wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
5
- prerelease:
4
+ version: 0.0.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Rob Wilson
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-03-23 00:00:00.000000000 Z
13
- dependencies: []
14
- description: A Wrapper for the chiplotle command line interface to the Chiplotle python
15
- library
11
+ date: 2013-04-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: log4r
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: A Wrapper for the CLI to the Chiplotle python library
16
56
  email: roobert@gmail.com
17
- executables: []
57
+ executables:
58
+ - convert_and_print_svg_to_hpgl.sh
59
+ - print_hpgl.rb
60
+ - print_text.rb
18
61
  extensions: []
19
62
  extra_rdoc_files: []
20
63
  files:
21
- - lib/chiplotle-cli-wrapper.rb
64
+ - .gitignore
65
+ - Gemfile
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - bin/convert_and_print_svg_to_hpgl.sh
70
+ - bin/print_hpgl.rb
22
71
  - bin/print_text.rb
72
+ - chiplotle-cli-wrapper.gemspec
73
+ - lib/chiplotle-cli-wrapper.rb
23
74
  homepage: http://github.com/roobert/chiplotle-cli-wrapper
24
- licenses: []
75
+ licenses:
76
+ - MIT
77
+ metadata: {}
25
78
  post_install_message:
26
79
  rdoc_options: []
27
80
  require_paths:
28
81
  - lib
29
82
  required_ruby_version: !ruby/object:Gem::Requirement
30
- none: false
31
83
  requirements:
32
- - - ! '>='
84
+ - - '>='
33
85
  - !ruby/object:Gem::Version
34
86
  version: '0'
35
87
  required_rubygems_version: !ruby/object:Gem::Requirement
36
- none: false
37
88
  requirements:
38
- - - ! '>='
89
+ - - '>='
39
90
  - !ruby/object:Gem::Version
40
91
  version: '0'
41
92
  requirements: []
42
93
  rubyforge_project:
43
- rubygems_version: 1.8.23
94
+ rubygems_version: 2.0.2
44
95
  signing_key:
45
- specification_version: 3
46
- summary: Wrapper for chiplotle-cli
96
+ specification_version: 4
97
+ summary: Wrapper library for the chiplotle-cli tool
47
98
  test_files: []