middleman-gnuplot 0.2.1 → 0.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 76c651dec2492e3bb75494cb89e3e31478fd7676d3a56964afef202716e7e233
4
- data.tar.gz: 77ff5468d77b178341d2981ffb1bc7fc810440423835173a8d6af5fa24d567b0
3
+ metadata.gz: 5c17a392a4f1cc289766f0b40a56555db9f5db6da02f1a14a32cbf9034c28a47
4
+ data.tar.gz: 9ed89c1e1414bbf4a65b22b4c5cc85fcc44464dd964cada51ab9c882b7848eb7
5
5
  SHA512:
6
- metadata.gz: cba0f5baeb6e693bdda4d44cd3686a2e6cc79372cf4fc8e687cf86aa139f7d2acf1606b0c02cbe98cdc12a559c801276977c416acc99d04e274635e4e2ce7952
7
- data.tar.gz: e135f54970b188f1c0b97bcafc90a8b03df34414042c65c78ab0a3731116a661f5f8352cd0fb89badb91f784329393cc707db3237db1711f5ce055519c79c497
6
+ metadata.gz: 8f4532fd93a3c31c0173726e2dc38c0cb1eeece4d32671768916ed696841857e78e36fe473a9a69a8e123d12d13b41cd395f0b4ba484f7c1f5606b58ec2e1130
7
+ data.tar.gz: 03f440a898cb902302433edfa303736cc38769eece7d228cc159ae3494b3757989cccaddc9e198a1e3efc52124dff7c0b707ea9af97788ac31eeafd51b98e088
@@ -3,6 +3,7 @@ require "middleman-gnuplot/gp_helpers"
3
3
  require "middleman-core"
4
4
  require "numo/gnuplot"
5
5
  require "fileutils"
6
+ require "time"
6
7
 
7
8
  module Middleman
8
9
  class GnuplotExtension < Middleman::Extension
@@ -39,6 +40,9 @@ module Middleman
39
40
  end
40
41
 
41
42
  # Generates a plot via gnuplot using a given expression.
43
+ #
44
+ # @deprecated Will be deprecated in the next version in favor of {#plot}.
45
+ #
42
46
  # The function must be provided as hash using the following fields:
43
47
  # @param [Array<Hash>] functions function definition hash
44
48
  # @option functions [String] expression expression hat can be processed by gnuplot (e.g. sin(x))
@@ -86,6 +90,8 @@ module Middleman
86
90
 
87
91
  helpers do
88
92
  def plot_functions functions=[], filename=nil, title=nil
93
+ warn "plot_functions will be deprecated in the next version in favor of the new function plot"
94
+
89
95
  filename = random_filename_if_nil(filename)
90
96
 
91
97
  if title.nil?
@@ -130,6 +136,76 @@ module Middleman
130
136
  return outfile
131
137
  end
132
138
 
139
+ def plot functions=[], filename=nil, title=nil, options={}
140
+ filename = random_filename_if_nil(filename)
141
+
142
+ if title.nil?
143
+ title = ""
144
+ end
145
+
146
+ outfile = "#{app.config[:gp_outdir]}/#{filename}.#{app.config[:gp_format]}"
147
+
148
+ @@gp.set output:"./#{@@base_dir}/#{outfile}"
149
+ @@gp.set title:"#{title}"
150
+
151
+ if options.nil? == false
152
+ process_options options
153
+ end
154
+
155
+
156
+ gp_command = []
157
+
158
+ functions.each_with_index do |function,i|
159
+ if function[:expression].nil? == false
160
+ gp_command << function[:expression]
161
+ else
162
+ if function[:file].nil? == false and
163
+ function[:colx].nil? == false and
164
+ function[:coly].nil? == false
165
+ gp_command << "'#{function[:file]}' using #{function[:colx]}:#{function[:coly]} "
166
+ end
167
+ end
168
+
169
+ if function[:style].nil? == false
170
+ gp_command << {w:function[:style]}
171
+ else
172
+ gp_command << {w:'lines'}
173
+ end
174
+
175
+ if function[:dashtype].nil? == false
176
+ gp_command << "dt #{function[:dashtype]}"
177
+ end
178
+
179
+ if function[:width].nil? == false
180
+ gp_command << "lw #{function[:width]}"
181
+ end
182
+
183
+ if function[:color].nil? == false
184
+ gp_command << {lc:"rgb '#{function[:color]}'"}
185
+ end
186
+
187
+ if function[:title].nil? == false
188
+ gp_command << {t:"#{function[:title]}"}
189
+ else
190
+ gp_command << {t:''}
191
+ end
192
+
193
+ if function[:ymin].nil? == false
194
+ gp_command << "y1=#{function[:ymin]}"
195
+ end
196
+
197
+ gp_command << ", "
198
+ end
199
+
200
+ gp_command[-1] = ''
201
+
202
+ @@gp.plot gp_command
203
+
204
+ register_filename(filename)
205
+
206
+ return outfile
207
+ end
208
+
133
209
  def plot_script script, filename=nil, title=nil
134
210
  filename = random_filename_if_nil(filename)
135
211
 
@@ -150,23 +226,23 @@ module Middleman
150
226
  return outfile
151
227
  end
152
228
 
153
- def plot_data data, series=nil, filename=nil, title=nil
154
- unless series.nil?
155
- filename = random_filename_if_nil(filename)
229
+ def plot_data data, series=nil, filename=nil, title=nil
230
+ unless series.nil?
231
+ filename = random_filename_if_nil(filename)
156
232
 
157
- if title.nil?
158
- title = ""
159
- end
233
+ if title.nil?
234
+ title = ""
235
+ end
160
236
 
161
- outfile = "#{app.config[:gp_outdir]}/#{filename}.#{app.config[:gp_format]}"
237
+ outfile = "#{app.config[:gp_outdir]}/#{filename}.#{app.config[:gp_format]}"
162
238
 
163
- @@gp.set output:"./#{@@base_dir}/#{outfile}"
164
- @@gp.set title:"#{title}"
239
+ @@gp.set output:"./#{@@base_dir}/#{outfile}"
240
+ @@gp.set title:"#{title}"
165
241
 
166
- gp_command = []
242
+ gp_command = []
167
243
 
168
- series.each do |ser|
169
- gp_command << "\"-\" u #{ser[:x]}:#{ser[:y]}"
244
+ series.each do |ser|
245
+ gp_command << "\"-\" u #{ser[:x]}:#{ser[:y]}"
170
246
 
171
247
  if ser[:style].nil? == false
172
248
  gp_command << "w #{ser[:style]}"
@@ -175,71 +251,74 @@ module Middleman
175
251
  end
176
252
 
177
253
  if ser[:color].nil? == false
178
- gp_command << {lc:"rgb '#{ser[:color]}'"}
254
+ gp_command << {lc:"rgb '#{ser[:color]}'"}
179
255
  end
180
256
 
181
257
  if ser[:title].nil? == false
182
- gp_command << "t \"#{ser[:title]}\""
258
+ gp_command << "t \"#{ser[:title]}\""
183
259
  else
184
- gp_command << "notitle"
260
+ gp_command << "notitle"
185
261
  end
186
262
 
263
+ if ser[:width].nil? == false
264
+ gp_command << "lw #{ser[:width]}"
265
+ end
266
+
187
267
  gp_command << ", "
188
- end
268
+ end
189
269
 
190
- gp_command[-1] = ''
191
- gp_command << "\n"
270
+ gp_command[-1] = ''
271
+ gp_command << "\n"
192
272
 
193
- (1..series.size).each do
194
- data.each do |line|
195
- tmpstring = ""
273
+ (1..series.size).each do
274
+ data.each do |line|
275
+ tmpstring = ""
196
276
 
197
- line.each do |col|
198
- tmpstring << "#{col}\t"
199
- end
277
+ line.each do |col|
278
+ tmpstring << "#{col}\t"
279
+ end
200
280
 
201
- gp_command << "#{tmpstring}\n"
202
- end
281
+ gp_command << "#{tmpstring}\n"
282
+ end
203
283
 
204
- gp_command << "e\n"
205
- end
284
+ gp_command << "e\n"
285
+ end
206
286
 
207
- gp_command = gp_command.join(" ")
287
+ gp_command = gp_command.join(" ")
208
288
 
209
- puts "GP cmd: #{gp_command}"
289
+ puts "GP cmd: #{gp_command}"
210
290
 
211
- @@gp.plot gp_command
291
+ @@gp.plot gp_command
212
292
 
213
293
 
214
- register_filename(filename)
294
+ register_filename(filename)
215
295
 
216
- return outfile
217
- end
218
- end
296
+ return outfile
297
+ end
298
+ end
219
299
 
220
300
 
221
301
  private
222
302
 
223
303
  # Generates a random filename, if the given paramter is nil or empty.
224
- # The length of the random string can be overridden by setting
225
- # app.config[:gp_rndfilelength] in config.rb of the middleman project.
226
- #
304
+ # The length of the random string can be overridden by setting
305
+ # app.config[:gp_rndfilelength] in config.rb of the middleman project.
306
+ #
227
307
  # Returns filename (given or random)
228
308
  # Params.
229
309
  # +filename+:: input filename
230
- # +length+:: length of random filename
310
+ # +length+:: length of random filename
231
311
  def random_filename_if_nil filename=nil, length=6
232
312
  if filename.nil? or filename == ""
313
+ length = app.config[:gp_rndfilelength] unless app.config[:gp_rndfilelength].nil?
233
314
 
234
- length = app.config[:gp_rndfilelength] unless app.config[:gp_rndfilelength].nil?
235
-
236
- puts "Length of random filename: #{length}"
315
+ puts "Length of random filename: #{length}"
237
316
 
238
- loop do
239
- filename = ([*('A'..'Z'),*('0'..'9')]).sample(length).join
317
+ loop do
318
+ filename = ([*('A'..'Z'),*('0'..'9')]).sample(length).join
240
319
 
241
- break if @@plot_names.include?(filename) == false
242
- end
320
+ break if @@plot_names.include?(filename) == false
321
+ end
243
322
  end
244
323
 
245
324
  return filename
@@ -253,7 +332,7 @@ module Middleman
253
332
  # +filename+:: filename to be added to array
254
333
  def register_filename filename
255
334
  if @@plot_names.include?(filename)
256
- message "Warning: Filename #{filename} for plot already in use!", :warning
335
+ message "Warning: Filename #{filename} for plot already in use!", :warning
257
336
  end
258
337
 
259
338
  @@plot_names.append(filename)
@@ -270,15 +349,127 @@ module Middleman
270
349
 
271
350
  case type
272
351
  when :warning
273
- colString = "\033[1;33m"
352
+ colString = "\033[1;33m"
274
353
  when :error
275
- colString = "\033[1;31m"
354
+ colString = "\033[1;31m"
276
355
  end
277
356
 
278
357
  message = "#{colString}#{offset}middleman-gnuplot: #{text}#{colReset}"
279
358
 
280
359
  puts message
281
360
  end
361
+
362
+ # Processes a set of options that should be passed to gnuplot.
363
+ # Params.
364
+ # @param [array of hashes] an array of hashes that contain the options
365
+ # @option :datafilesep data file separator (e.g. '\t' or ' ')
366
+ # @option :timefmt a string indicating the time format that should be used
367
+ # @option :xtype only required if it should be set to :date
368
+ # @option :ytype only required if it should be set to :date
369
+ # @option :xrange a string indicating the x-axis range
370
+ # @option :yrange a string indicating the y-axis range
371
+ # @option :xformat a string indicating the x-axis format
372
+ # @option :yformat a string indicating the y-axis format
373
+ # @option :key a string to place or modify the key
374
+ def process_options options={}
375
+ if options[:term].nil? == false
376
+ @@gp.set term:"#{options[:term]}"
377
+ end
378
+
379
+ if options[:datafilesep].nil? == false
380
+ @@gp.set "datafile separator '#{options[:datafilesep]}'"
381
+ end
382
+
383
+ if ((options[:xtype].nil? == false and options[:xtype] == :date) or
384
+ (options[:ytype].nil? == false and options[:ytype] == :date)) and
385
+ (options[:timefmt].nil? == false)
386
+ if options[:xtype] == :date
387
+ @@gp.set "xdata time"
388
+ end
389
+
390
+ if options[:ytype] == :date
391
+ @@gp.set "ydata time"
392
+ end
393
+
394
+ @@gp.set "timefmt '#{options[:timefmt]}'"
395
+ end
396
+
397
+ if options[:xrange].nil? == false
398
+ if options[:xtype].nil? == false and options[:xtype] == :date
399
+ @@gp.set "xrange ['#{Time.at(options[:xrange].begin).strftime("%Y-%m-%d %H:%M:%S")}':'#{Time.at(options[:xrange].end).strftime("%Y-%m-%d %H:%M:%S")}']"
400
+ else
401
+ @@gp.set "xrange [#{options[:xrange].begin}:#{options[:xrange].end}]"
402
+ end
403
+ else
404
+ @@gp.unset "xrange"
405
+ end
406
+
407
+ if options[:yrange].nil? == false
408
+ if options[:ytype].nil? == false and options[:ytype] == :date
409
+ @@gp.set "yrange ['#{Time.at(options[:yrange].begin).strftime("%Y-%m-%d %H:%M:%S")}':'#{Time.at(options[:yrange].end).strftime("%Y-%m-%d %H:%M:%S")}']"
410
+ else
411
+ @@gp.set "yrange [#{options[:yrange].begin}:#{options[:yrange].end}]"
412
+ end
413
+ else
414
+ @@gp.unset "yrange"
415
+ end
416
+
417
+ if options[:xtics].nil? == false
418
+ @@gp.set "xtics #{options[:xtics]}"
419
+ end
420
+
421
+ if options[:ytics].nil? == false
422
+ @@gp.set "ytics #{options[:ytics]}"
423
+ end
424
+
425
+ if options[:mxtics].nil? == false
426
+ @@gp.set "mxtics #{options[:mxtics]}"
427
+ end
428
+
429
+ if options[:mytics].nil? == false
430
+ @@gp.set "mytics #{options[:mytics]}"
431
+ end
432
+
433
+ if options[:logx].nil? == false and options[:logx] == true
434
+ @@gp.set "log x"
435
+ else
436
+ @@gp.unset "log x"
437
+ end
438
+
439
+ if options[:logy].nil? == false and options[:logy] == true
440
+ @@gp.set "log y"
441
+ else
442
+ @@gp.unset "log y"
443
+ end
444
+
445
+ if options[:xformat].nil? == false
446
+ @@gp.set "format x '#{options[:xformat]}'"
447
+ end
448
+
449
+ if options[:yformat].nil? == false
450
+ @@gp.set "format y '#{options[:yformat]}'"
451
+ end
452
+
453
+ if options[:xlabel].nil? == false
454
+ @@gp.set "xlabel '#{options[:xlabel]}'"
455
+ else
456
+ @@gp.unset "xlabel"
457
+ end
458
+
459
+ if options[:ylabel].nil? == false
460
+ @@gp.set "ylabel '#{options[:ylabel]}'"
461
+ else
462
+ @@gp.unset "ylabel"
463
+ end
464
+
465
+ if options[:key].nil? == false
466
+ @@gp.set "key #{options[:key]}"
467
+ end
468
+
469
+ if options[:grid].nil? == false
470
+ @@gp.set "grid #{options[:grid]}"
471
+ end
472
+ end
282
473
  end
283
474
  end
284
475
  end
@@ -15,6 +15,8 @@ module Middleman
15
15
  term = 'pngcairo'
16
16
  when 'pdf'
17
17
  term = 'pdfcairo'
18
+ when 'svg'
19
+ term = 'svg'
18
20
  else
19
21
  term = 'pngcairo'
20
22
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  module Middleman
7
7
  module Gnuplot
8
- VERSION = "0.2.1"
8
+ VERSION = "0.2.2"
9
9
  end
10
10
  end
11
11
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-gnuplot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hermann Detz
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-08 00:00:00.000000000 Z
11
+ date: 2023-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: numo-gnuplot
@@ -63,7 +63,7 @@ homepage: https://github.com/hermanndetz/middleman-gnuplot
63
63
  licenses:
64
64
  - MIT
65
65
  metadata: {}
66
- post_install_message:
66
+ post_install_message:
67
67
  rdoc_options: []
68
68
  require_paths:
69
69
  - lib
@@ -78,9 +78,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
78
  - !ruby/object:Gem::Version
79
79
  version: '0'
80
80
  requirements: []
81
- rubyforge_project:
82
- rubygems_version: 2.7.6
83
- signing_key:
81
+ rubygems_version: 3.4.1
82
+ signing_key:
84
83
  specification_version: 4
85
84
  summary: Middleman extension for gnuplot
86
85
  test_files: []