qttk 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/Gemfile +6 -0
  4. data/Gemfile.lock +36 -0
  5. data/README.markdown +131 -0
  6. data/Rakefile +17 -0
  7. data/TODO.markdown +236 -0
  8. data/bin/qt +7 -0
  9. data/etc/gutenprint/gp-tool.rb +56 -0
  10. data/etc/gutenprint/gutenprint-filter.c +400 -0
  11. data/etc/gutenprint/gutenprint.rb +86 -0
  12. data/etc/gutenprint/stp-test +326 -0
  13. data/etc/images/3551599565_db282cf840_o.jpg +0 -0
  14. data/etc/images/4843122063_d582c569e9_o.jpg +0 -0
  15. data/etc/images/4843128953_83c1770907_o.jpg +0 -0
  16. data/lib/quadtone.rb +56 -0
  17. data/lib/quadtone/cgats.rb +137 -0
  18. data/lib/quadtone/cluster_calculator.rb +81 -0
  19. data/lib/quadtone/color.rb +83 -0
  20. data/lib/quadtone/color/cmyk.rb +112 -0
  21. data/lib/quadtone/color/device_n.rb +23 -0
  22. data/lib/quadtone/color/gray.rb +46 -0
  23. data/lib/quadtone/color/lab.rb +150 -0
  24. data/lib/quadtone/color/qtr.rb +71 -0
  25. data/lib/quadtone/color/rgb.rb +71 -0
  26. data/lib/quadtone/color/xyz.rb +80 -0
  27. data/lib/quadtone/curve.rb +138 -0
  28. data/lib/quadtone/curve_set.rb +196 -0
  29. data/lib/quadtone/descendants.rb +9 -0
  30. data/lib/quadtone/environment.rb +5 -0
  31. data/lib/quadtone/extensions/math.rb +11 -0
  32. data/lib/quadtone/extensions/pathname3.rb +11 -0
  33. data/lib/quadtone/printer.rb +106 -0
  34. data/lib/quadtone/profile.rb +217 -0
  35. data/lib/quadtone/quad_file.rb +59 -0
  36. data/lib/quadtone/renderer.rb +139 -0
  37. data/lib/quadtone/run.rb +10 -0
  38. data/lib/quadtone/sample.rb +32 -0
  39. data/lib/quadtone/separator.rb +36 -0
  40. data/lib/quadtone/target.rb +277 -0
  41. data/lib/quadtone/tool.rb +61 -0
  42. data/lib/quadtone/tools/add_printer.rb +73 -0
  43. data/lib/quadtone/tools/characterize.rb +43 -0
  44. data/lib/quadtone/tools/chart.rb +31 -0
  45. data/lib/quadtone/tools/check.rb +16 -0
  46. data/lib/quadtone/tools/dir.rb +15 -0
  47. data/lib/quadtone/tools/edit.rb +23 -0
  48. data/lib/quadtone/tools/init.rb +82 -0
  49. data/lib/quadtone/tools/install.rb +15 -0
  50. data/lib/quadtone/tools/linearize.rb +28 -0
  51. data/lib/quadtone/tools/list.rb +19 -0
  52. data/lib/quadtone/tools/print.rb +38 -0
  53. data/lib/quadtone/tools/printer_options.rb +40 -0
  54. data/lib/quadtone/tools/rename.rb +17 -0
  55. data/lib/quadtone/tools/render.rb +43 -0
  56. data/lib/quadtone/tools/rewrite.rb +15 -0
  57. data/lib/quadtone/tools/separate.rb +71 -0
  58. data/lib/quadtone/tools/show.rb +15 -0
  59. data/lib/quadtone/tools/test.rb +26 -0
  60. data/qttk.gemspec +34 -0
  61. metadata +215 -0
@@ -0,0 +1,86 @@
1
+ module Quadtone
2
+
3
+ class Gutenprint
4
+
5
+ attr_accessor :printer
6
+
7
+ def initialize(printer)
8
+ @printer = printer
9
+ end
10
+
11
+ def channels
12
+ run_filter(%w{-s}).split(/\n/).map { |s| s.split(/:\s+/, 2) }
13
+ end
14
+
15
+ def geometry
16
+ Hash[
17
+ run_filter(%w{-g}).split(/\n/).map do |s|
18
+ key, value = s.split(/:\s+/, 2)
19
+ value = case value
20
+ when /^\d+$/
21
+ value.to_i
22
+ when /^\d+\.\d+$/
23
+ value.to_f
24
+ else
25
+ value
26
+ end
27
+ [key.to_sym, value]
28
+ end
29
+ ]
30
+ end
31
+
32
+ def print(args, &block)
33
+ run_filter(
34
+ [
35
+ '-c', args[:num_channels],
36
+ '-h', args[:rows],
37
+ '-w', args[:columns],
38
+ '-o', args[:output_file],
39
+ '-'
40
+ ], 'w'
41
+ ) do |io|
42
+ yield(io)
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def run_filter(args, mode='r', &block)
49
+ cmd = [
50
+ File.join(File.realpath(File.dirname($0)), 'gutenprint-filter'),
51
+ '-d', @printer,
52
+ ] + args
53
+ cmd = cmd.map { |c| c.to_s }
54
+ ;;warn cmd.join(' ')
55
+
56
+ IO.popen(cmd, mode) do |io|
57
+ if block_given?
58
+ yield(io)
59
+ else
60
+ io.read
61
+ end
62
+ end
63
+ end
64
+
65
+ # currently unused
66
+ class ChannelMap
67
+
68
+ def initialize(gp_channels)
69
+ @qtr_channels = {}
70
+ gp_channels.each_with_index do |channel, i|
71
+ short, long = *channel
72
+ qtr_key = long.split(/\s+/).map { |s| (s == 'Black') ? 'K' : s[0] }.join.to_sym
73
+ raise "Unknown channel: #{long}" unless Color::QTR::Channels.index(qtr_key)
74
+ @qtr_channels[qtr_key] = i
75
+ end
76
+ end
77
+
78
+ def qtr_to_raw_channel_index(qtr_color)
79
+ @qtr_channels[qtr_color.channel]
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+
86
+ end
@@ -0,0 +1,326 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ffi'
4
+
5
+ module Gutenprint
6
+
7
+ module FFI
8
+
9
+ extend ::FFI::Library
10
+
11
+ ffi_lib('/usr/lib/libgutenprint.dylib')
12
+
13
+ STP_CHANNEL_LIMIT = 32
14
+
15
+ STP_IMAGE_STATUS_OK = 0
16
+ STP_IMAGE_STATUS_ABORT = 1
17
+
18
+ class ImageS < ::FFI::Struct
19
+
20
+ end
21
+
22
+ attach_function :stp_init, [], :void
23
+
24
+ ### printers.h
25
+
26
+ attach_function :stp_printer_model_count, [], :int
27
+ attach_function :stp_get_printer_by_index, [:int], :pointer
28
+ attach_function :stp_get_printer, [:pointer], :string
29
+ attach_function :stp_printer_get_driver, [:pointer], :string
30
+ attach_function :stp_printer_get_long_name, [:pointer], :string
31
+ attach_function :stp_printer_get_device_id, [:pointer], :string
32
+ attach_function :stp_printer_get_family, [:pointer], :string
33
+ attach_function :stp_printer_get_manufacturer, [:pointer], :string
34
+ attach_function :stp_printer_get_defaults, [:pointer], :pointer
35
+ attach_function :stp_set_printer_defaults, [:pointer, :pointer], :void
36
+ attach_function :stp_set_printer_defaults_soft, [:pointer, :pointer], :void
37
+
38
+ ###
39
+ ### vars.h
40
+ ###
41
+
42
+ enum :stp_parameter_type, [
43
+ :string_list,
44
+ :int,
45
+ :boolean,
46
+ :double,
47
+ :curve,
48
+ :file,
49
+ :raw,
50
+ :array,
51
+ :dimension,
52
+ :invalid
53
+ ]
54
+
55
+ enum :stp_parameter_class, [
56
+ :feature,
57
+ :output,
58
+ :core,
59
+ :invalid
60
+ ]
61
+
62
+ enum :stp_parameter_level, [
63
+ :basic,
64
+ :advanced,
65
+ :advanced1,
66
+ :advanced2,
67
+ :advanced3,
68
+ :advanced4,
69
+ :internal,
70
+ :external,
71
+ :invalid
72
+ ]
73
+
74
+ enum :stp_parameter_activity, [
75
+ :inactive,
76
+ :defaulted,
77
+ :active
78
+ ]
79
+
80
+ # basic printer settings
81
+ attach_function :stp_vars_create, [], :pointer
82
+ attach_function :stp_vars_copy, [:pointer, :pointer], :void
83
+ attach_function :stp_default_settings, [], :void
84
+ attach_function :stp_vars_create_copy, [:pointer], :pointer
85
+ attach_function :stp_vars_destroy, [:pointer], :void
86
+ attach_function :stp_set_driver, [:pointer, :string], :void
87
+ attach_function :stp_get_driver, [:pointer], :string
88
+ attach_function :stp_set_color_conversion, [:pointer, :string], :void
89
+ attach_function :stp_get_color_conversion, [:pointer], :string
90
+ attach_function :stp_set_left, [:pointer, :int], :void
91
+ attach_function :stp_get_left, [:pointer], :int
92
+ attach_function :stp_set_top, [:pointer, :int], :void
93
+ attach_function :stp_get_top, [:pointer], :int
94
+ attach_function :stp_set_width, [:pointer, :int], :void
95
+ attach_function :stp_get_width, [:pointer], :int
96
+ attach_function :stp_set_height, [:pointer, :int], :void
97
+ attach_function :stp_get_height, [:pointer], :int
98
+ attach_function :stp_set_page_width, [:pointer, :int], :void
99
+ attach_function :stp_get_page_width, [:pointer], :int
100
+ attach_function :stp_set_page_height, [:pointer, :int], :void
101
+ attach_function :stp_get_page_height, [:pointer], :int
102
+ attach_function :stp_set_outfunc, [:pointer, :pointer], :void
103
+ attach_function :stp_get_outfunc, [:pointer], :pointer
104
+ attach_function :stp_set_errfunc, [:pointer, :pointer], :void
105
+ attach_function :stp_get_errfunc, [:pointer], :pointer
106
+ attach_function :stp_set_outdata, [:pointer, :pointer], :void
107
+ attach_function :stp_get_outdata, [:pointer], :void
108
+ attach_function :stp_set_errdata, [:pointer, :pointer], :void
109
+ attach_function :stp_get_errdata, [:pointer], :void
110
+
111
+ # parameter management
112
+ attach_function :stp_get_parameter_list, [:pointer], :pointer
113
+ attach_function :stp_parameter_list_count, [:pointer], :int
114
+ attach_function :stp_parameter_find, [:pointer, :string], :pointer
115
+ attach_function :stp_parameter_list_param, [:pointer, :int], :pointer
116
+ attach_function :stp_parameter_list_destroy, [:pointer], :void
117
+ attach_function :stp_parameter_list_create, [], :pointer
118
+ attach_function :stp_parameter_list_add_param, [:pointer, :pointer], :void
119
+ attach_function :stp_parameter_list_copy, [:pointer], :pointer
120
+ attach_function :stp_parameter_list_append, [:pointer, :pointer], :void
121
+ attach_function :stp_describe_parameter, [:pointer, :string, :pointer], :void
122
+ attach_function :stp_parameter_description_destroy, [:pointer], :void
123
+ attach_function :stp_parameter_find_in_settings, [:pointer, :string], :pointer
124
+ attach_function :stp_set_string_parameter, [:pointer, :string, :string], :void
125
+ attach_function :stp_set_string_parameter_n, [:pointer, :string, :string, :int], :void
126
+ attach_function :stp_set_file_parameter, [:pointer, :string, :string], :void
127
+ attach_function :stp_set_file_parameter_n, [:pointer, :string, :string, :int], :void
128
+ attach_function :stp_set_float_parameter, [:pointer, :string, :double], :void
129
+ attach_function :stp_set_int_parameter, [:pointer, :string, :int], :void
130
+ attach_function :stp_set_dimension_parameter, [:pointer, :string, :int], :void
131
+ attach_function :stp_set_boolean_parameter, [:pointer, :string, :int], :void
132
+ attach_function :stp_set_curve_parameter, [:pointer, :string, :pointer], :void
133
+ attach_function :stp_set_array_parameter, [:pointer, :string, :pointer], :void
134
+ attach_function :stp_set_raw_parameter, [:pointer, :string, :pointer, :int], :void
135
+ attach_function :stp_scale_float_parameter, [:pointer, :string, :double], :void
136
+ attach_function :stp_set_default_string_parameter, [:pointer, :string, :string], :void
137
+ attach_function :stp_set_default_string_parameter_n, [:pointer, :string, :string, :int], :void
138
+ attach_function :stp_set_default_file_parameter, [:pointer, :string, :string], :void
139
+ attach_function :stp_set_default_file_parameter_n, [:pointer, :string, :string, :int], :void
140
+ attach_function :stp_set_default_float_parameter, [:pointer, :string, :double], :void
141
+ attach_function :stp_set_default_int_parameter, [:pointer, :string, :int], :void
142
+ attach_function :stp_set_default_dimension_parameter, [:pointer, :string, :int], :void
143
+ attach_function :stp_set_default_boolean_parameter, [:pointer, :string, :int], :void
144
+ attach_function :stp_set_default_curve_parameter, [:pointer, :string, :pointer], :void
145
+ attach_function :stp_set_default_array_parameter, [:pointer, :string, :pointer], :void
146
+ attach_function :stp_set_default_raw_parameter, [:pointer, :string, :pointer, :int], :void
147
+ attach_function :stp_get_string_parameter, [:pointer, :string], :string
148
+ attach_function :stp_get_file_parameter, [:pointer, :string], :string
149
+ attach_function :stp_get_float_parameter, [:pointer, :string], :double
150
+ attach_function :stp_get_int_parameter, [:pointer, :string], :int
151
+ attach_function :stp_get_dimension_parameter, [:pointer, :string], :int
152
+ attach_function :stp_get_boolean_parameter, [:pointer, :string], :int
153
+ attach_function :stp_get_curve_parameter, [:pointer, :string], :pointer
154
+ attach_function :stp_get_array_parameter, [:pointer, :string], :pointer
155
+ attach_function :stp_get_raw_parameter, [:pointer, :string], :pointer
156
+ attach_function :stp_clear_string_parameter, [:pointer, :string], :void
157
+ attach_function :stp_clear_file_parameter, [:pointer, :string], :void
158
+ attach_function :stp_clear_float_parameter, [:pointer, :string], :void
159
+ attach_function :stp_clear_int_parameter, [:pointer, :string], :void
160
+ attach_function :stp_clear_dimension_parameter, [:pointer, :string], :void
161
+ attach_function :stp_clear_boolean_parameter, [:pointer, :string], :void
162
+ attach_function :stp_clear_curve_parameter, [:pointer, :string], :void
163
+ attach_function :stp_clear_array_parameter, [:pointer, :string], :void
164
+ attach_function :stp_clear_raw_parameter, [:pointer, :string], :void
165
+ attach_function :stp_clear_parameter, [:pointer, :string, :stp_parameter_type], :void
166
+ attach_function :stp_list_string_parameters, [:pointer], :pointer
167
+ attach_function :stp_list_file_parameters, [:pointer], :pointer
168
+ attach_function :stp_list_float_parameters, [:pointer], :pointer
169
+ attach_function :stp_list_int_parameters, [:pointer], :pointer
170
+ attach_function :stp_list_dimension_parameters, [:pointer], :pointer
171
+ attach_function :stp_list_boolean_parameters, [:pointer], :pointer
172
+ attach_function :stp_list_curve_parameters, [:pointer], :pointer
173
+ attach_function :stp_list_array_parameters, [:pointer], :pointer
174
+ attach_function :stp_list_raw_parameters, [:pointer], :pointer
175
+ attach_function :stp_list_parameters, [:pointer, :stp_parameter_type], :pointer
176
+ attach_function :stp_set_string_parameter_active, [:pointer, :string, :stp_parameter_activity], :void
177
+ attach_function :stp_set_file_parameter_active, [:pointer, :string, :stp_parameter_activity], :void
178
+ attach_function :stp_set_float_parameter_active, [:pointer, :string, :stp_parameter_activity], :void
179
+ attach_function :stp_set_int_parameter_active, [:pointer, :string, :stp_parameter_activity], :void
180
+ attach_function :stp_set_dimension_parameter_active, [:pointer, :string, :stp_parameter_activity], :void
181
+ attach_function :stp_set_boolean_parameter_active, [:pointer, :string, :stp_parameter_activity], :void
182
+ attach_function :stp_set_curve_parameter_active, [:pointer, :string, :stp_parameter_activity], :void
183
+ attach_function :stp_set_array_parameter_active, [:pointer, :string, :stp_parameter_activity], :void
184
+ attach_function :stp_set_raw_parameter_active, [:pointer, :string, :stp_parameter_activity], :void
185
+ attach_function :stp_set_parameter_active, [:pointer, :string, :stp_parameter_activity, :stp_parameter_type], :void
186
+ attach_function :stp_check_string_parameter, [:pointer, :string, :stp_parameter_activity], :int
187
+ attach_function :stp_check_file_parameter, [:pointer, :string, :stp_parameter_activity], :int
188
+ attach_function :stp_check_float_parameter, [:pointer, :string, :stp_parameter_activity], :int
189
+ attach_function :stp_check_int_parameter, [:pointer, :string, :stp_parameter_activity], :int
190
+ attach_function :stp_check_dimension_parameter, [:pointer, :string, :stp_parameter_activity], :int
191
+ attach_function :stp_check_boolean_parameter, [:pointer, :string, :stp_parameter_activity], :int
192
+ attach_function :stp_check_curve_parameter, [:pointer, :string, :stp_parameter_activity], :int
193
+ attach_function :stp_check_array_parameter, [:pointer, :string, :stp_parameter_activity], :int
194
+ attach_function :stp_check_raw_parameter, [:pointer, :string, :stp_parameter_activity], :int
195
+ attach_function :stp_check_parameter, [:pointer, :string, :stp_parameter_activity, :stp_parameter_type], :int
196
+ attach_function :stp_get_string_parameter_active, [:pointer, :string], :pointer
197
+ attach_function :stp_get_file_parameter_active, [:pointer, :string], :pointer
198
+ attach_function :stp_get_float_parameter_active, [:pointer, :string], :pointer
199
+ attach_function :stp_get_int_parameter_active, [:pointer, :string], :pointer
200
+ attach_function :stp_get_dimension_parameter_active, [:pointer, :string], :pointer
201
+ attach_function :stp_get_boolean_parameter_active, [:pointer, :string], :pointer
202
+ attach_function :stp_get_curve_parameter_active, [:pointer, :string], :pointer
203
+ attach_function :stp_get_array_parameter_active, [:pointer, :string], :pointer
204
+ attach_function :stp_get_raw_parameter_active, [:pointer, :string], :pointer
205
+ attach_function :stp_get_parameter_active, [:pointer, :string, :stp_parameter_type], :pointer
206
+
207
+ # informational queries
208
+
209
+ ###
210
+ ###
211
+ ###
212
+
213
+ end
214
+
215
+ FFI.stp_init
216
+
217
+ class Printer
218
+
219
+ def self.all_printers
220
+ FFI.stp_printer_model_count.times.map do |i|
221
+ new(FFI.stp_get_printer_by_index(i))
222
+ end
223
+ end
224
+
225
+ def initialize(stp_printer)
226
+ @stp_printer = stp_printer
227
+ end
228
+
229
+ def driver
230
+ FFI.stp_printer_get_driver(@stp_printer)
231
+ end
232
+
233
+ def long_name
234
+ FFI.stp_printer_get_long_name(@stp_printer)
235
+ end
236
+
237
+ def device_id
238
+ FFI.stp_printer_get_device_id(@stp_printer)
239
+ end
240
+
241
+ def family
242
+ FFI.stp_printer_get_family(@stp_printer)
243
+ end
244
+
245
+ def manufacturer
246
+ FFI.stp_printer_get_manufacturer(@stp_printer)
247
+ end
248
+
249
+ end
250
+
251
+ class Vars
252
+
253
+ include FFI
254
+
255
+ def initialize
256
+ @vars = stp_vars_create
257
+ stp_vars_copy(@vars, stp_default_settings)
258
+ @printer = stp_get_printer(@vars)
259
+ stp_set_printer_defaults(@vars, @printer)
260
+ end
261
+
262
+ end
263
+
264
+ class Image
265
+
266
+ def initialize
267
+ end
268
+
269
+ def init
270
+ end
271
+
272
+ def reset
273
+ end
274
+
275
+ def width
276
+ end
277
+
278
+ def height
279
+ end
280
+
281
+ def get_row(data, limit, row)
282
+ end
283
+
284
+ def get_appname
285
+ end
286
+
287
+ def conclude
288
+ end
289
+
290
+ end
291
+
292
+ end
293
+
294
+ if $0 == __FILE__
295
+
296
+ require 'pp'
297
+
298
+ # puts "Valid printers are:"
299
+ # Gutenprint::Printer.all_printers.select { |p| p.driver =~ /^escp2-/ }.each do |printer|
300
+ # puts "%-30s %s (device id = %s, family = %s, manufacturer = %s)" % [
301
+ # printer.driver,
302
+ # printer.long_name.inspect,
303
+ # printer.device_id.inspect,
304
+ # printer.family.inspect,
305
+ # printer.manufacturer.inspect
306
+ # ]
307
+ # end
308
+
309
+ Gutenprint::FFI.stp_init
310
+ vars = Gutenprint::FFI.stp_vars_create
311
+ defaults = Gutenprint::FFI.stp_default_settings
312
+ Gutenprint::FFI.stp_vars_copy(vars, defaults) if defaults
313
+ printer = Gutenprint::FFI.stp_get_printer(vars)
314
+ Gutenprint::FFI.stp_set_printer_defaults(vars, printer)
315
+
316
+ # vars = Gutenprint::Vars.new
317
+ # vars.driver = "escp2-r2400"
318
+ # vars.printer_defaults = vars.printer
319
+ #
320
+ # param = vars.describe_parameter("RawChannelNames")
321
+ # channels = param.bounds or raise "No channels found"
322
+ # channels.each do |desc|
323
+ # puts "\t%s (%s)" % [desc.text, desc.name]
324
+ # end
325
+
326
+ end
@@ -0,0 +1,56 @@
1
+ # system
2
+ require 'pp'
3
+
4
+ # gems
5
+ require 'pathname3'
6
+ require 'rvg/rvg' # loads 'rmagick'
7
+ require 'builder'
8
+ require 'cupsffi'
9
+ require 'hashstruct'
10
+ require 'descriptive_statistics'
11
+ require 'spliner'
12
+
13
+ # ours
14
+ require 'quadtone/cgats'
15
+ require 'quadtone/color'
16
+ require 'quadtone/color/device_n'
17
+ require 'quadtone/color/cmyk'
18
+ require 'quadtone/color/gray'
19
+ require 'quadtone/color/lab'
20
+ require 'quadtone/color/qtr'
21
+ require 'quadtone/color/rgb'
22
+ require 'quadtone/color/xyz'
23
+ require 'quadtone/cluster_calculator'
24
+ require 'quadtone/curve'
25
+ require 'quadtone/curve_set'
26
+ require 'quadtone/descendants'
27
+ require 'quadtone/environment'
28
+ require 'quadtone/extensions/math'
29
+ require 'quadtone/extensions/pathname3'
30
+ require 'quadtone/printer'
31
+ require 'quadtone/profile'
32
+ require 'quadtone/quad_file'
33
+ require 'quadtone/renderer'
34
+ require 'quadtone/run'
35
+ require 'quadtone/sample'
36
+ require 'quadtone/separator'
37
+ require 'quadtone/target'
38
+ require 'quadtone/tool'
39
+ require 'quadtone/tools/add_printer'
40
+ require 'quadtone/tools/characterize'
41
+ require 'quadtone/tools/chart'
42
+ require 'quadtone/tools/check'
43
+ require 'quadtone/tools/dir'
44
+ require 'quadtone/tools/edit'
45
+ require 'quadtone/tools/init'
46
+ require 'quadtone/tools/install'
47
+ require 'quadtone/tools/linearize'
48
+ require 'quadtone/tools/list'
49
+ require 'quadtone/tools/print'
50
+ require 'quadtone/tools/printer_options'
51
+ require 'quadtone/tools/rename'
52
+ require 'quadtone/tools/render'
53
+ require 'quadtone/tools/rewrite'
54
+ require 'quadtone/tools/separate'
55
+ require 'quadtone/tools/show'
56
+ require 'quadtone/tools/test'