ctioga2 0.13.1 → 0.14

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog +26 -0
  3. data/bin/ct2-make-movie +4 -1
  4. data/bin/ctioga2 +1 -1
  5. data/lib/ctioga2/commands/commands.rb +2 -0
  6. data/lib/ctioga2/commands/doc/doc.rb +1 -1
  7. data/lib/ctioga2/commands/doc/documentation-commands.rb +38 -0
  8. data/lib/ctioga2/commands/doc/html.rb +84 -0
  9. data/lib/ctioga2/commands/general-commands.rb +20 -1
  10. data/lib/ctioga2/commands/general-functions.rb +26 -0
  11. data/lib/ctioga2/commands/general-types.rb +1 -0
  12. data/lib/ctioga2/commands/instruction.rb +61 -0
  13. data/lib/ctioga2/commands/interpreter.rb +12 -2
  14. data/lib/ctioga2/data/datacolumn.rb +38 -0
  15. data/lib/ctioga2/data/dataset.rb +6 -5
  16. data/lib/ctioga2/data/filters.rb +12 -5
  17. data/lib/ctioga2/data/stack.rb +105 -22
  18. data/lib/ctioga2/graphics/elements.rb +1 -1
  19. data/lib/ctioga2/graphics/elements/curve2d.rb +1 -1
  20. data/lib/ctioga2/graphics/elements/element.rb +29 -10
  21. data/lib/ctioga2/graphics/elements/primitive.rb +26 -2
  22. data/lib/ctioga2/graphics/elements/subplot.rb +7 -1
  23. data/lib/ctioga2/graphics/generator.rb +1 -2
  24. data/lib/ctioga2/graphics/legends/area.rb +3 -0
  25. data/lib/ctioga2/graphics/root.rb +18 -2
  26. data/lib/ctioga2/graphics/styles/curve.rb +6 -0
  27. data/lib/ctioga2/graphics/styles/drawable.rb +4 -0
  28. data/lib/ctioga2/graphics/styles/factory.rb +4 -5
  29. data/lib/ctioga2/graphics/styles/plot-types.rb +22 -7
  30. data/lib/ctioga2/graphics/subplot-commands.rb +2 -4
  31. data/lib/ctioga2/graphics/types.rb +17 -0
  32. data/lib/ctioga2/graphics/types/boundaries.rb +10 -0
  33. data/lib/ctioga2/graphics/types/boxes.rb +18 -0
  34. data/lib/ctioga2/graphics/types/dimensions.rb +4 -0
  35. data/lib/ctioga2/graphics/types/grid.rb +98 -4
  36. data/lib/ctioga2/graphics/types/point.rb +9 -0
  37. data/lib/ctioga2/metabuilder/types/lists.rb +1 -1
  38. data/lib/ctioga2/metabuilder/types/styles.rb +5 -3
  39. data/lib/ctioga2/plotmaker.rb +28 -5
  40. data/lib/ctioga2/postprocess.rb +28 -0
  41. data/lib/ctioga2/ruby.rb +7 -0
  42. data/lib/ctioga2/utils.rb +45 -0
  43. data/lib/ctioga2/version.rb +2 -2
  44. metadata +4 -3
@@ -210,7 +210,7 @@ module CTioga2
210
210
  nb.times do |i|
211
211
  array << Utils::mix_objects(e,s, i * fact)
212
212
  end
213
- elsif str =~ /(.*)!(\d+)(?:!(.*))?\s*$/
213
+ elsif str =~ /(.*)!!(\d+)(?:!!(.*))?\s*$/
214
214
  # We have a mixing
215
215
  nb = $2.to_i
216
216
  fact = nb*0.01
@@ -75,7 +75,7 @@ module CTioga2
75
75
  if (elems.size % 2) == 0
76
76
  elems << "White" # Implicit mix with white
77
77
  end
78
-
78
+
79
79
  temp = parse_one_color(elems.shift).dup
80
80
 
81
81
  while elems.size > 0
@@ -121,7 +121,7 @@ module CTioga2
121
121
 
122
122
  # A marker Type for Tioga. Input as
123
123
  #
124
- # a,b(,c)?
124
+ # a,(,b(,c)?)?
125
125
  #
126
126
  class MarkerType < Type
127
127
 
@@ -133,8 +133,10 @@ module CTioga2
133
133
  return [specs[0].to_i, specs[1].to_i]
134
134
  elsif specs.size == 3
135
135
  return [specs[0].to_i, specs[1].to_i, specs[2].to_f]
136
+ elsif specs.size == 1 # Defaults to symbols !
137
+ return [14, specs[0].to_i]
136
138
  else
137
- raise IncorrectInput, "You need two or three values to make a marker"
139
+ raise IncorrectInput, "You need between one and three values to make a marker"
138
140
  end
139
141
  end
140
142
  end
@@ -99,6 +99,9 @@
99
99
  # \todo make --xrange automatically select the range for the --math
100
100
  # backend unless another range was explicitly specified.
101
101
 
102
+ # Maybe, maybe, maybe... We need tioga ?
103
+ require 'Tioga/FigureMaker'
104
+
102
105
  require 'ctioga2/utils'
103
106
  require 'ctioga2/log'
104
107
 
@@ -109,8 +112,9 @@ require 'shellwords'
109
112
  # Path name mangling
110
113
  require 'pathname'
111
114
 
112
- # Maybe, maybe, maybe... We need tioga ?
113
- require 'Tioga/FigureMaker'
115
+ # And yaml...
116
+ require 'yaml'
117
+
114
118
 
115
119
  # Interaction with Ruby code
116
120
  require 'ctioga2/ruby'
@@ -279,6 +283,9 @@ module CTioga2
279
283
  end
280
284
 
281
285
  # ctioga's entry point.
286
+ #
287
+ # Returns true if there was no errors and false if there was one
288
+ # or more.
282
289
  def run(command_line)
283
290
 
284
291
  # The main catch-all around the plot:
@@ -311,6 +318,7 @@ module CTioga2
311
318
  STDIN.gets
312
319
  end
313
320
  end
321
+ return errs == 0
314
322
  end
315
323
 
316
324
  # Flushes the current root object and starts a new one:
@@ -490,8 +498,9 @@ module CTioga2
490
498
  # of ctioga2 used to produce the PDF, and the command-line if
491
499
  # applicable.
492
500
  t.tex_preamble +=
493
- "\n\\pdfinfo {\n#{title}/Creator(#{Utils::pdftex_quote_string("ctioga2 #{Version::version}")})\n}\n"
501
+ "\n\\pdfinfo {\n#{title}/Creator(#{Utils::pdftex_quote_string("ctioga2 #{Version::version}")})\n}\n"
494
502
 
503
+ #" #emacs ruby-mode is a dummy
495
504
  return t
496
505
  end
497
506
 
@@ -530,6 +539,8 @@ EOH
530
539
  PlotLastOptions =
531
540
  Graphics::Styles::CurveStyleFactory::PlotCommandOptions.dup
532
541
 
542
+ PlotLastOptions.merge!(Graphics::Elements::TiogaElement::StyleBaseOptions)
543
+
533
544
  PlotLastOptions['which'] = CmdArg.new('stored-dataset')
534
545
 
535
546
  PlotLastCommand =
@@ -642,8 +653,7 @@ EOH
642
653
 
643
654
  ResolutionCommand =
644
655
  Cmd.new("resolution", false,"--resolution",
645
- [ CmdArg.new('float') ],
646
- ) do |plotmaker, size, options|
656
+ [ CmdArg.new('float') ]) do |plotmaker, size, options|
647
657
  plotmaker.pdf_resolution = size
648
658
  end
649
659
 
@@ -784,6 +794,19 @@ EOH
784
794
  <<EOH, OutputSetupGroup)
785
795
  When this feature is on, all produced PDF files are converted to SVG
786
796
  using the neat pdf2svg program.
797
+ EOH
798
+
799
+ CleanupPDFCommand =
800
+ Cmd.new("cleanup-pdf",nil,"--cleanup-pdf",
801
+ [CmdArg.new('boolean') ]) do |plotmaker,val|
802
+ plotmaker.postprocess.cleanup_pdf = val
803
+ end
804
+
805
+ CleanupPDFCommand.describe('Cleanup produced PDF using gs',
806
+ <<EOH, OutputSetupGroup)
807
+ If this is on, then @ctioga2@ uses ghostscript to cleanup the PDF file
808
+ produced. It is on by default is @ctioga2@ is able to find the @gs@
809
+ executable.
787
810
  EOH
788
811
 
789
812
  EPSCommand =
@@ -43,6 +43,13 @@ module CTioga2
43
43
  # Are we converting to EPS using pdftops ?
44
44
  attr_accessor :eps
45
45
 
46
+ # Are we cleaning up the PDF produced using gs (in particular, to
47
+ # include missing markers and such, that are known to cause
48
+ # problems from time to time).
49
+ #
50
+ # @todo Path to gs...
51
+ attr_accessor :cleanup_pdf
52
+
46
53
 
47
54
  # @todo Maybe all the PNG stuff should be it is own class ?
48
55
 
@@ -72,6 +79,9 @@ module CTioga2
72
79
  @png_pdftoppm = false
73
80
 
74
81
  @processed_files = []
82
+
83
+ gs = Utils::which('gs')
84
+ @cleanup_pdf = (gs ? true : false)
75
85
  end
76
86
 
77
87
 
@@ -106,6 +116,24 @@ module CTioga2
106
116
  # only happen last happen.
107
117
  def process_file(file, last = false)
108
118
  @processed_files << file
119
+
120
+
121
+ if @cleanup_pdf
122
+ nw_src = file.sub(/(\.pdf)?$/,'.raw.pdf')
123
+ begin
124
+ File::rename(file, nw_src)
125
+ info { "Running gs to clean up the target PDF file: '#{file}'" }
126
+ if ! system('gs', "-sOutputFile=#{file}", "-q", "-sDEVICE=pdfwrite",
127
+ "-dCompatibilityLevel=1.4", "-dNOPAUSE", "-dAutoRotatePages=/None", "-dBATCH", nw_src)
128
+ error { "Failed to run gs to cleanup '#{nw_src}', you can disable that using --no-cleanup-pdf" }
129
+ else
130
+ File::unlink(nw_src)
131
+ end
132
+ rescue SystemCallError => e
133
+ error { "Could not rename '#{file}' to '#{nw_src}': #{e.message}, try using --no-cleanup-pdf, or resolve the problem otherwise" }
134
+ end
135
+ end
136
+
109
137
  # Converts to SVG if applicable
110
138
  if @svg
111
139
  target = file.sub(/(\.pdf)?$/,'.svg')
@@ -44,6 +44,13 @@ module CTioga2
44
44
  def self.compute_formula(col, vals, mods = [])
45
45
  return Dobjects::Dvector.compute_formula(col, vals, [@module] + mods)
46
46
  end
47
+
48
+ # Returns a Dobjects::MathEvaluator object to evaluate
49
+ def self.make_evaluator(formula, vars, mods = [])
50
+ return Dobjects::MathEvaluator.new(formula, vars.join(","),
51
+ [@module] + mods)
52
+ end
53
+
47
54
  end
48
55
  end
49
56
 
@@ -64,6 +64,14 @@ module CTioga2
64
64
  return (flt.is_a?(Numeric) and flt.to_f.finite?)
65
65
  end
66
66
 
67
+ def self.nan_number?(flt)
68
+ return (flt.respond_to?(:nan?) and flt.nan?)
69
+ end
70
+
71
+ def self.infinite_number?(flt)
72
+ return (flt.respond_to?(:infinite?) and flt.infinite?)
73
+ end
74
+
67
75
  # Converts a number to a float while trying to stay as lenient as
68
76
  # possible
69
77
  def self.txt_to_float(txt)
@@ -199,6 +207,34 @@ module CTioga2
199
207
  return sets_by_prefix
200
208
  end
201
209
 
210
+ @@color_name_by_value = nil
211
+
212
+ def self.color_name_by_value_hsh
213
+ if ! @@color_name_by_value
214
+ @@color_name_by_value = {}
215
+ colors = Tioga::ColorConstants::constants
216
+ for c in colors
217
+ color = Tioga::ColorConstants::const_get(c)
218
+ @@color_name_by_value[Utils::color_to_html(color)] = c.to_s
219
+ end
220
+ end
221
+ return @@color_name_by_value
222
+ end
223
+
224
+ # Returns the Tioga name for the given color. Can be nil if the
225
+ # color does not match a Tioga named color.
226
+ def self.color_name_by_value(color)
227
+ return color_name_by_value_hsh()[Utils::color_to_html(color)]
228
+ end
229
+
230
+ # Transforms a Tioga color into a HTML color string "xxxxxx"
231
+ # (without the leeading #)
232
+ def self.color_to_html(color)
233
+ return color.map do |i|
234
+ "%02x" % (i*255.to_i)
235
+ end.join('')
236
+ end
237
+
202
238
  # An instrumentized version of Dir::chdir
203
239
  def self.chdir(dir, &blk)
204
240
  @current_dirs ||= []
@@ -653,6 +689,15 @@ module CTioga2
653
689
 
654
690
  end
655
691
 
692
+
693
+ # Patching YAML generation for recent Ruby
694
+
695
+ class Dobjects::Dvector
696
+ def encode_with(coder)
697
+ coder.seq = self.to_a
698
+ end
699
+ end
700
+
656
701
  ######################################################################
657
702
  # Now come a few functions that add to ruby's standard classes or
658
703
  # modules
@@ -2,7 +2,7 @@
2
2
  module CTioga2
3
3
 
4
4
  module Version
5
- GIT_VERSION = '0.13.1'
6
- GIT_DATE = 'Wed 29 Jul 20:32:19 CEST 2015'
5
+ GIT_VERSION = '0.14'
6
+ GIT_DATE = 'Thu 18 Feb 21:03:36 CET 2016'
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ctioga2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.1
4
+ version: '0.14'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vincent Fourmond <vincent.fourmond@9online.fr>
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-29 00:00:00.000000000 Z
11
+ date: 2016-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tioga
@@ -56,6 +56,7 @@ files:
56
56
  - lib/ctioga2/commands/general-functions.rb
57
57
  - lib/ctioga2/commands/general-types.rb
58
58
  - lib/ctioga2/commands/groups.rb
59
+ - lib/ctioga2/commands/instruction.rb
59
60
  - lib/ctioga2/commands/interpreter.rb
60
61
  - lib/ctioga2/commands/parsers/command-line.rb
61
62
  - lib/ctioga2/commands/parsers/file.rb
@@ -181,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
182
  version: '0'
182
183
  requirements: []
183
184
  rubyforge_project:
184
- rubygems_version: 2.2.2
185
+ rubygems_version: 2.4.5.1
185
186
  signing_key:
186
187
  specification_version: 4
187
188
  summary: ctioga2 - the polymorphic plotting program