ctioga2 0.3 → 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.
Files changed (99) hide show
  1. data/Changelog +18 -0
  2. data/lib/ctioga2/commands/arguments.rb +17 -2
  3. data/lib/ctioga2/commands/commands.rb +13 -5
  4. data/lib/ctioga2/commands/context.rb +53 -0
  5. data/lib/ctioga2/commands/doc/doc.rb +1 -1
  6. data/lib/ctioga2/commands/doc/documentation-commands.rb +1 -1
  7. data/lib/ctioga2/commands/doc/help.rb +1 -1
  8. data/lib/ctioga2/commands/doc/html.rb +1 -1
  9. data/lib/ctioga2/commands/doc/introspection.rb +16 -1
  10. data/lib/ctioga2/commands/doc/man.rb +1 -1
  11. data/lib/ctioga2/commands/doc/markup.rb +1 -1
  12. data/lib/ctioga2/commands/doc/wordwrap.rb +1 -1
  13. data/lib/ctioga2/commands/general-commands.rb +1 -1
  14. data/lib/ctioga2/commands/general-types.rb +1 -1
  15. data/lib/ctioga2/commands/groups.rb +1 -1
  16. data/lib/ctioga2/commands/interpreter.rb +22 -1
  17. data/lib/ctioga2/commands/parsers/command-line.rb +8 -1
  18. data/lib/ctioga2/commands/parsers/file.rb +2 -1
  19. data/lib/ctioga2/commands/strings.rb +1 -1
  20. data/lib/ctioga2/commands/type.rb +1 -1
  21. data/lib/ctioga2/commands/variables.rb +1 -1
  22. data/lib/ctioga2/data/backends/backend.rb +1 -1
  23. data/lib/ctioga2/data/backends/backends/gnuplot.rb +1 -1
  24. data/lib/ctioga2/data/backends/backends/math.rb +1 -1
  25. data/lib/ctioga2/data/backends/backends/text.rb +12 -2
  26. data/lib/ctioga2/data/backends/description.rb +1 -1
  27. data/lib/ctioga2/data/backends/factory.rb +1 -1
  28. data/lib/ctioga2/data/backends/parameter.rb +1 -1
  29. data/lib/ctioga2/data/datacolumn.rb +1 -1
  30. data/lib/ctioga2/data/dataset.rb +1 -1
  31. data/lib/ctioga2/data/filters.rb +1 -1
  32. data/lib/ctioga2/data/indexed-dtable.rb +1 -1
  33. data/lib/ctioga2/data/point.rb +1 -1
  34. data/lib/ctioga2/data/stack.rb +6 -6
  35. data/lib/ctioga2/graphics/coordinates.rb +1 -1
  36. data/lib/ctioga2/graphics/elements.rb +1 -1
  37. data/lib/ctioga2/graphics/elements/containers.rb +1 -1
  38. data/lib/ctioga2/graphics/elements/contour.rb +1 -1
  39. data/lib/ctioga2/graphics/elements/curve2d.rb +1 -1
  40. data/lib/ctioga2/graphics/elements/element.rb +1 -1
  41. data/lib/ctioga2/graphics/elements/gradient-region.rb +1 -1
  42. data/lib/ctioga2/graphics/elements/parametric2d.rb +1 -1
  43. data/lib/ctioga2/graphics/elements/primitive.rb +115 -69
  44. data/lib/ctioga2/graphics/elements/region.rb +1 -1
  45. data/lib/ctioga2/graphics/elements/subplot.rb +9 -3
  46. data/lib/ctioga2/graphics/elements/tangent.rb +1 -1
  47. data/lib/ctioga2/graphics/elements/xyz-map.rb +1 -1
  48. data/lib/ctioga2/graphics/generator.rb +1 -1
  49. data/lib/ctioga2/graphics/legends.rb +5 -7
  50. data/lib/ctioga2/graphics/legends/area.rb +8 -8
  51. data/lib/ctioga2/graphics/legends/items.rb +2 -2
  52. data/lib/ctioga2/graphics/legends/provider.rb +1 -1
  53. data/lib/ctioga2/graphics/legends/storage.rb +1 -1
  54. data/lib/ctioga2/graphics/root.rb +1 -1
  55. data/lib/ctioga2/graphics/styles.rb +5 -0
  56. data/lib/ctioga2/graphics/styles/arrows.rb +53 -0
  57. data/lib/ctioga2/graphics/styles/axes.rb +29 -23
  58. data/lib/ctioga2/graphics/styles/background.rb +12 -10
  59. data/lib/ctioga2/graphics/styles/base.rb +99 -5
  60. data/lib/ctioga2/graphics/styles/box.rb +67 -0
  61. data/lib/ctioga2/graphics/styles/carrays.rb +1 -1
  62. data/lib/ctioga2/graphics/styles/colormap.rb +1 -1
  63. data/lib/ctioga2/graphics/styles/curve.rb +7 -1
  64. data/lib/ctioga2/graphics/styles/drawable.rb +24 -11
  65. data/lib/ctioga2/graphics/styles/errorbar.rb +1 -1
  66. data/lib/ctioga2/graphics/styles/factory.rb +1 -1
  67. data/lib/ctioga2/graphics/styles/gradients.rb +3 -3
  68. data/lib/ctioga2/graphics/styles/legend.rb +20 -5
  69. data/lib/ctioga2/graphics/styles/location.rb +3 -3
  70. data/lib/ctioga2/graphics/styles/map-axes.rb +6 -7
  71. data/lib/ctioga2/graphics/styles/plot.rb +51 -26
  72. data/lib/ctioga2/graphics/styles/sets.rb +1 -1
  73. data/lib/ctioga2/graphics/styles/sheet.rb +348 -0
  74. data/lib/ctioga2/graphics/styles/texts.rb +45 -64
  75. data/lib/ctioga2/graphics/subplot-commands.rb +1 -1
  76. data/lib/ctioga2/graphics/types.rb +1 -3
  77. data/lib/ctioga2/graphics/types/bijection.rb +1 -1
  78. data/lib/ctioga2/graphics/types/boundaries.rb +1 -1
  79. data/lib/ctioga2/graphics/types/boxes.rb +1 -1
  80. data/lib/ctioga2/graphics/types/dimensions.rb +2 -2
  81. data/lib/ctioga2/graphics/types/grid.rb +1 -1
  82. data/lib/ctioga2/graphics/types/location.rb +2 -2
  83. data/lib/ctioga2/graphics/types/point.rb +1 -1
  84. data/lib/ctioga2/log.rb +10 -6
  85. data/lib/ctioga2/metabuilder/type.rb +1 -1
  86. data/lib/ctioga2/metabuilder/types/coordinates.rb +1 -1
  87. data/lib/ctioga2/metabuilder/types/data.rb +1 -1
  88. data/lib/ctioga2/metabuilder/types/dates.rb +1 -1
  89. data/lib/ctioga2/metabuilder/types/lists.rb +1 -1
  90. data/lib/ctioga2/metabuilder/types/numbers.rb +1 -1
  91. data/lib/ctioga2/metabuilder/types/strings.rb +1 -1
  92. data/lib/ctioga2/metabuilder/types/styles.rb +30 -3
  93. data/lib/ctioga2/plotmaker.rb +1 -1
  94. data/lib/ctioga2/postprocess.rb +1 -1
  95. data/lib/ctioga2/utils.rb +78 -3
  96. metadata +6 -5
  97. data/lib/ctioga2/git-fools-svn.rb +0 -7
  98. data/lib/ctioga2/graphics/elements/redirecting-container.rb~ +0 -123
  99. data/lib/ctioga2/metabuilder/types/generic.rb~ +0 -225
@@ -17,7 +17,7 @@ require 'ctioga2/log'
17
17
 
18
18
  module CTioga2
19
19
 
20
- Version::register_svn_info('$Revision$', '$Date$')
20
+ Version::register_svn_info('$Revision: 288 $', '$Date: 2011-02-22 21:12:58 +0100 (Tue, 22 Feb 2011) $')
21
21
 
22
22
  module Graphics
23
23
 
@@ -16,7 +16,7 @@ require 'ctioga2/log'
16
16
 
17
17
  module CTioga2
18
18
 
19
- Version::register_svn_info('$Revision$', '$Date$')
19
+ Version::register_svn_info('$Revision: 329 $', '$Date: 2012-12-11 00:13:17 +0100 (Tue, 11 Dec 2012) $')
20
20
 
21
21
  module Graphics
22
22
 
@@ -103,8 +103,14 @@ module CTioga2
103
103
  # Makes up a Boundaries object from two axes keys
104
104
  def get_given_boundaries(horiz, vert)
105
105
  if @computed_boundaries
106
- return Types::Boundaries.from_ranges(@computed_boundaries[horiz],
107
- @computed_boundaries[vert])
106
+ if @computed_boundaries.key?(horiz) and
107
+ @computed_boundaries.key?(vert)
108
+ return Types::Boundaries.from_ranges(@computed_boundaries[horiz],
109
+ @computed_boundaries[vert])
110
+ else
111
+ error { "A subplot element doesn't have inner bounds -- which probably means that no curves were defined" }
112
+ return Types::Boundaries.new(0.0,1.0,0.0,1.0)
113
+ end
108
114
  else
109
115
  return nil
110
116
  end
@@ -17,7 +17,7 @@ require 'ctioga2/graphics/elements/primitive'
17
17
  # This module contains all the classes used by ctioga
18
18
  module CTioga2
19
19
 
20
- Version::register_svn_info('$Revision$', '$Date$')
20
+ Version::register_svn_info('$Revision: 171 $', '$Date: 2010-10-22 17:07:52 +0200 (Fri, 22 Oct 2010) $')
21
21
 
22
22
  module Graphics
23
23
 
@@ -19,7 +19,7 @@ require 'Dobjects/Function'
19
19
 
20
20
  module CTioga2
21
21
 
22
- Version::register_svn_info('$Revision$', '$Date$')
22
+ Version::register_svn_info('$Revision: 198 $', '$Date: 2010-11-30 00:48:23 +0100 (Tue, 30 Nov 2010) $')
23
23
 
24
24
  module Graphics
25
25
 
@@ -18,7 +18,7 @@ require 'ctioga2/graphics/coordinates'
18
18
 
19
19
  module CTioga2
20
20
 
21
- Version::register_svn_info('$Revision$', '$Date$')
21
+ Version::register_svn_info('$Revision: 311 $', '$Date: 2012-04-16 22:51:59 +0200 (Mon, 16 Apr 2012) $')
22
22
 
23
23
  module Graphics
24
24
 
@@ -19,7 +19,7 @@ require 'ctioga2/graphics/legends/provider'
19
19
 
20
20
  module CTioga2
21
21
 
22
- Version::register_svn_info('$Revision$', '$Date$')
22
+ Version::register_svn_info('$Revision: 357 $', '$Date: 2012-12-26 00:49:11 +0100 (Wed, 26 Dec 2012) $')
23
23
 
24
24
  module Graphics
25
25
 
@@ -54,6 +54,9 @@ EOH
54
54
  Adds a line of text unrelated to any curve to the legend.
55
55
  EOH
56
56
 
57
+
58
+ Commands::make_alias_for_option 'legend-line', 'alignment', 'align', true
59
+
57
60
  AutoLegendCommand =
58
61
  Cmd.new("auto-legend",nil,"--auto-legend",
59
62
  [ CmdArg.new('boolean') ]) do |plotmaker, value|
@@ -66,12 +69,7 @@ When this option is in effect (off by default), all datasets get a legend,
66
69
  their 'dataset name', unless another legend is manually specified.
67
70
  EOH
68
71
 
69
- LegendStyleOptions = {
70
- 'dy' => CmdArg.new('dimension'),
71
- 'scale' => CmdArg.new('float'),
72
- 'text_scale' => CmdArg.new('float'),
73
- }
74
-
72
+ LegendStyleOptions = Styles::LegendStorageStyle.options_hash()
75
73
 
76
74
  LegendStyleCommand =
77
75
  Cmd.new("legend-style",nil,"--legend-style",
@@ -16,7 +16,7 @@ require 'ctioga2/log'
16
16
 
17
17
  module CTioga2
18
18
 
19
- Version::register_svn_info('$Revision$', '$Date$')
19
+ Version::register_svn_info('$Revision: 359 $', '$Date: 2012-12-26 10:45:35 +0100 (Wed, 26 Dec 2012) $')
20
20
 
21
21
  module Graphics
22
22
 
@@ -27,13 +27,6 @@ module CTioga2
27
27
  #
28
28
  # \todo
29
29
  #
30
- # * a legend can be plotted either inside a plot or outside the
31
- # root object
32
- #
33
- # * in case it is plotted outside the root object, the user should
34
- # be able to choose whether it should be counted in the
35
- # real-size or not.
36
- #
37
30
  # * legends should provide all the kind of things that were in the
38
31
  # first ctioga, such as background, frames, and so on...
39
32
  #
@@ -88,6 +81,13 @@ module CTioga2
88
81
  t.set_bounds([0, 1, 1, 0])
89
82
  ## \todo customize this !
90
83
  x, y = initial_xy(t, container)
84
+
85
+ w,h = *size(t, container)
86
+ h /= @legend_style.scale * @legend_style.text_scale
87
+ @legend_style.frame.
88
+ draw_box_around(t, x, y,
89
+ x + w, y - h, @legend_style.frame_padding)
90
+
91
91
  for item in items
92
92
  ## \todo transform the 0.0 for x into a negative
93
93
  # user-specifiable stuff.
@@ -18,7 +18,7 @@ require 'ctioga2/graphics/styles'
18
18
 
19
19
  module CTioga2
20
20
 
21
- Version::register_svn_info('$Revision$', '$Date$')
21
+ Version::register_svn_info('$Revision: 345 $', '$Date: 2012-12-24 10:43:37 +0100 (Mon, 24 Dec 2012) $')
22
22
 
23
23
  module Graphics
24
24
 
@@ -146,7 +146,7 @@ module CTioga2
146
146
  t.subfigure(margin_specs) do
147
147
  # We make the markers slightly smaller than the text
148
148
  # around.
149
- t.rescale_text(0.8)
149
+ t.rescale_text(0.8 * legend_style.symbol_scale)
150
150
  @curve_style.draw_legend_pictogram(t)
151
151
  end
152
152
  end
@@ -16,7 +16,7 @@ require 'ctioga2/log'
16
16
 
17
17
  module CTioga2
18
18
 
19
- Version::register_svn_info('$Revision$', '$Date$')
19
+ Version::register_svn_info('$Revision: 2 $', '$Date: 2009-04-25 14:03:30 +0200 (Sat, 25 Apr 2009) $')
20
20
 
21
21
  module Graphics
22
22
 
@@ -16,7 +16,7 @@ require 'ctioga2/log'
16
16
 
17
17
  module CTioga2
18
18
 
19
- Version::register_svn_info('$Revision$', '$Date$')
19
+ Version::register_svn_info('$Revision: 139 $', '$Date: 2010-01-22 00:12:17 +0100 (Fri, 22 Jan 2010) $')
20
20
 
21
21
  module Graphics
22
22
 
@@ -21,7 +21,7 @@ require 'ctioga2/graphics/subplot-commands'
21
21
 
22
22
  module CTioga2
23
23
 
24
- Version::register_svn_info('$Revision$', '$Date$')
24
+ Version::register_svn_info('$Revision: 155 $', '$Date: 2010-06-21 21:41:32 +0200 (Mon, 21 Jun 2010) $')
25
25
 
26
26
  # This module contains all graphical elements of CTioga2
27
27
  module Graphics
@@ -14,6 +14,8 @@
14
14
  require 'ctioga2/graphics/styles/base'
15
15
 
16
16
  require 'ctioga2/graphics/styles/drawable'
17
+ require 'ctioga2/graphics/styles/arrows'
18
+ require 'ctioga2/graphics/styles/box'
17
19
  require 'ctioga2/graphics/styles/location'
18
20
  require 'ctioga2/graphics/styles/texts'
19
21
  require 'ctioga2/graphics/styles/carrays'
@@ -36,3 +38,6 @@ require 'ctioga2/graphics/styles/legend'
36
38
 
37
39
 
38
40
  require 'ctioga2/graphics/styles/factory'
41
+
42
+ # Style sheets
43
+ require 'ctioga2/graphics/styles/sheet'
@@ -0,0 +1,53 @@
1
+ # arrows.rb: style objects for lines and arrows
2
+ # copyright (c) 2012 by Vincent Fourmond
3
+
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details (in the COPYING file).
13
+
14
+ require 'ctioga2/utils'
15
+ require 'ctioga2/log'
16
+
17
+ # This module contains all the classes used by ctioga
18
+ module CTioga2
19
+
20
+ Version::register_svn_info('$Revision$', '$Date$')
21
+
22
+ module Graphics
23
+
24
+ # All the styles
25
+ module Styles
26
+
27
+ # This class represents an arrow
28
+
29
+ class ArrowStyle < StrokeStyle
30
+
31
+ # This probably should end up being a marker_style sub_style
32
+
33
+ for e in [:head, :tail]
34
+ typed_attribute "#{e}_marker".to_sym, 'marker'
35
+ typed_attribute "#{e}_scale".to_sym, 'float'
36
+ typed_attribute "#{e}_angle".to_sym, 'float'
37
+ typed_attribute "#{e}_color".to_sym, 'color'
38
+ end
39
+
40
+ def draw_arrow(t, x1, y1, x2, y2)
41
+ dict = self.to_hash
42
+ dict.rename_key('width', 'line_width')
43
+ dict.rename_key('style', 'line_style')
44
+ dict['head'] = [x2,y2]
45
+ dict['tail'] = [x1,y1]
46
+ t.show_arrow(dict)
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+ end
53
+
@@ -17,7 +17,7 @@ require 'ctioga2/log'
17
17
  # This module contains all the classes used by ctioga
18
18
  module CTioga2
19
19
 
20
- Version::register_svn_info('$Revision$', '$Date$')
20
+ Version::register_svn_info('$Revision: 357 $', '$Date: 2012-12-26 00:49:11 +0100 (Wed, 26 Dec 2012) $')
21
21
 
22
22
  module Graphics
23
23
 
@@ -33,36 +33,44 @@ module CTioga2
33
33
  # AXIS_WITH_TICKS_ONLY,
34
34
  # AXIS_WITH_MAJOR_TICKS_AND_NUMERIC_LABELS, and
35
35
  # AXIS_WITH_TICKS_AND_NUMERIC_LABELS.
36
- attr_accessor :decoration
36
+ typed_attribute :decoration, 'axis-decoration'
37
37
 
38
38
  # The position of the axis. Can be one of :left, :right, :top,
39
39
  # :bottom, :at_y_origin or :at_x_origin.
40
- attr_accessor :location
40
+ typed_attribute :location, 'location'
41
41
 
42
42
  # Offset of the axis with respect to its normal position. It
43
43
  # is counted *away* from the graph. It is either a
44
44
  # Types::Dimension object or _nil_.
45
- attr_accessor :offset
45
+ typed_attribute :offset, 'dimension'
46
46
 
47
47
  # The background lines for the given axis. _nil_ for nothing,
48
48
  # or a StrokeStyle object if we want to draw something.
49
- attr_accessor :background_lines
49
+ #
50
+ # @todo Use a sub-style for that when that is implemented.
51
+ sub_style :background_lines, StrokeStyle
50
52
 
51
53
  # The style of the tick labels
52
- attr_accessor :tick_label_style
54
+ sub_style :tick_label_style, FullTextStyle, "tick_label_%s"
53
55
 
54
56
  # The label of the axis, if there is one
55
- attr_accessor :axis_label
57
+ sub_style :axis_label, TextLabel
56
58
 
57
59
  # Whether the axis should be log scale or not
58
- attr_accessor :log
60
+ typed_attribute :log, 'boolean'
59
61
 
60
62
  # Transform: a Types::Bijection object specifying a coordinate
61
63
  # transformation for the axis.
62
- attr_accessor :transform
64
+ typed_attribute :transform, 'bijection'
63
65
 
64
66
  # The color of the stroke for the lines of the axis
65
- attr_accessor :stroke_color
67
+ typed_attribute :stroke_color, 'color'
68
+
69
+ typed_attribute :major_tick_length, 'float'
70
+ typed_attribute :major_tick_width, 'float'
71
+
72
+ typed_attribute :minor_tick_length, 'float'
73
+ typed_attribute :minor_tick_width, 'float'
66
74
 
67
75
 
68
76
  # Creates a new AxisStyle object at the given location with
@@ -89,8 +97,14 @@ module CTioga2
89
97
  spec = get_axis_specification(t)
90
98
  # Add tick label style:
91
99
  spec.merge!(@tick_label_style.to_hash)
92
- if @stroke_color
93
- spec['stroke_color'] = @stroke_color
100
+
101
+ # Direct copy of attributes
102
+ for key in %w(stroke_color major_tick_length major_tick_width
103
+ minor_tick_length minor_tick_width)
104
+ val = self.send(key.to_sym)
105
+ if val
106
+ spec[key] = val
107
+ end
94
108
  end
95
109
  t.show_axis(spec)
96
110
  @axis_label.loc = @location
@@ -258,17 +272,9 @@ module CTioga2
258
272
 
259
273
  end
260
274
 
261
- PartialAxisStyle = {
262
- 'transform' => CmdArg.new('bijection'),
263
- 'location' => CmdArg.new('location'),
264
- 'log' => CmdArg.new('boolean'),
265
- 'stroke_color' => CmdArg.new('color')
266
- }
267
-
268
- FullAxisStyle = PartialAxisStyle.dup
269
- FullAxisStyle['decoration'] = CmdArg.new('axis-decoration')
270
-
271
-
275
+ AxisStyleOptions = AxisStyle.options_hash()
276
+ PartialAxisStyle = AxisStyleOptions.without('decoration')
277
+
272
278
  end
273
279
  end
274
280
  end
@@ -16,7 +16,7 @@ require 'ctioga2/log'
16
16
 
17
17
  module CTioga2
18
18
 
19
- Version::register_svn_info('$Revision$', '$Date$')
19
+ Version::register_svn_info('$Revision: 342 $', '$Date: 2012-12-23 21:34:48 +0100 (Sun, 23 Dec 2012) $')
20
20
 
21
21
  module Graphics
22
22
 
@@ -28,16 +28,18 @@ module CTioga2
28
28
  # * pictures (in a distant future ?)
29
29
  class BackgroundStyle < BasicStyle
30
30
 
31
- # The background color for a uniform fill.
32
- attr_accessor :background_color
31
+ # The background color for a uniform fill.
32
+ #
33
+ # @todo This should be turned into a full-scale fill style
34
+ typed_attribute :background_color, 'color-or-false'
33
35
 
34
36
  # The text of the watermark, or _nil_ if there should be no
35
37
  # watermark.
36
- attr_accessor :watermark_text
38
+ typed_attribute :watermark, 'text'
37
39
 
38
40
  # A MarkerStringStyle object representing the style of the
39
41
  # watermark.
40
- attr_accessor :watermark_style
42
+ sub_style :watermark_style, MarkerStringStyle, "watermark_%s"
41
43
 
42
44
  # Creates a new AxisStyle object at the given location with
43
45
  # the given style.
@@ -62,7 +64,7 @@ module CTioga2
62
64
  end
63
65
 
64
66
  def draw_watermark(t)
65
- if @watermark_text
67
+ if @watermark
66
68
  x = t.convert_frame_to_figure_x(0.5)
67
69
  y = t.convert_frame_to_figure_y(0.5)
68
70
 
@@ -70,7 +72,7 @@ module CTioga2
70
72
  real_vertical_scale
71
73
 
72
74
  # We split lines on \\, just like in standard LaTeX
73
- lines = @watermark_text.split(/\s*\\\\\s*/)
75
+ lines = @watermark.split(/\s*\\\\\s*/)
74
76
  i = + (lines.size-1)/2.0
75
77
  for text in lines
76
78
  @watermark_style.
@@ -106,16 +108,16 @@ EOH
106
108
  WatermarkCmd =
107
109
  Cmd.new('watermark', nil, '--watermark',
108
110
  [ CmdArg.new('text') ],
109
- StringMarkerOptions) do |plotmaker, text, opts|
111
+ MarkerStringStyle.options_hash) do |plotmaker, text, opts|
110
112
  bg = PlotStyle.current_plot_style(plotmaker).
111
113
  background
112
- bg.watermark_text = text
114
+ bg.watermark = text
113
115
  bg.watermark_style.set_from_hash(opts)
114
116
  end
115
117
 
116
118
  WatermarkCmd.describe("Sets a watermark for the current plot",
117
119
  <<"EOH", BackgroundGroup)
118
- Watermark...
120
+ Sets a watermark for the background of the current plot.
119
121
  EOH
120
122
  end
121
123
  end
@@ -1,5 +1,5 @@
1
1
  # base.rb: the base of style objects
2
- # copyright (c) 2009 by Vincent Fourmond
2
+ # copyright (c) 2009, 2012 by Vincent Fourmond
3
3
 
4
4
  # This program is free software; you can redistribute it and/or modify
5
5
  # it under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@ require 'ctioga2/log'
16
16
  # This module contains all the classes used by ctioga
17
17
  module CTioga2
18
18
 
19
- Version::register_svn_info('$Revision$', '$Date$')
19
+ Version::register_svn_info('$Revision: 370 $', '$Date: 2012-12-28 17:40:18 +0100 (Fri, 28 Dec 2012) $')
20
20
 
21
21
  module Graphics
22
22
 
@@ -26,9 +26,6 @@ module CTioga2
26
26
  # This style is the base class of a series of style objects that
27
27
  # share one common feature: all their attributes can be set
28
28
  # using the set_from_hash function.
29
- #
30
- # \todo maybe a basic MetaBuilder::Type should be associated to
31
- # each attribute ???
32
29
  class BasicStyle
33
30
 
34
31
  OldAttrAccessor = method(:attr_accessor)
@@ -40,6 +37,10 @@ module CTioga2
40
37
  @attributes ||= []
41
38
  @attributes << symbol
42
39
  OldAttrAccessor.call(symbol)
40
+ # cl = caller()
41
+ # if not cl[0] =~ /typed_attribute/
42
+ # puts "old-style attribute: #{cl[0]}"
43
+ # end
43
44
  end
44
45
 
45
46
  # Returns the list of attributes.
@@ -52,6 +53,73 @@ module CTioga2
52
53
  end
53
54
  end
54
55
 
56
+ # This function should be the main way now of declaring
57
+ # attributes, as it allows one to automatically generate an
58
+ # options hash for Command
59
+ #
60
+ # @todo There may be a reason to make some of the attributes
61
+ # private to some extent ?
62
+ #
63
+ # @todo Provide a function to make attributes "aliases" of
64
+ # others (but just on the hash side of the things), in order
65
+ # for instance to have halign and valign as aliases for the
66
+ # less intuitive alignment and justification.
67
+ def self.typed_attribute(symbol, type)
68
+ sym = symbol.to_sym
69
+ self.attr_accessor(sym)
70
+ type = CmdArg.new(type) unless type.respond_to? :string_to_type
71
+ @attribute_types ||= {}
72
+ @attribute_types[sym] = type
73
+ end
74
+
75
+ # Defines an accessor for an attribute which is a BasicStyle
76
+ # subclass in itself.
77
+ #
78
+ # _format_ is the thing fed to the subclass for the
79
+ # _from_hash_ function.
80
+ def self.sub_style(symbol, cls, fmt = nil)
81
+ @sub_styles ||= [] # A list of [symbol, cls, fmt]
82
+
83
+ if ! fmt
84
+ fmt = "#{symbol.to_s}_%s"
85
+ end
86
+
87
+ @sub_styles << [symbol, cls, fmt]
88
+ # Define the accessor
89
+ OldAttrAccessor.call(symbol)
90
+ end
91
+
92
+ # Returns a hash suitable for using as an options hash.
93
+ #
94
+ # _key_ provides tuning of the key names.
95
+ def self.options_hash(key = "%s")
96
+ ret = if superclass.respond_to?(:options_hash)
97
+ superclass.options_hash(key)
98
+ else
99
+ {}
100
+ end
101
+
102
+ if @attribute_types # Not always present
103
+ for k, v in @attribute_types
104
+ ret[key % k] = v
105
+ end
106
+ end
107
+
108
+ if @sub_styles # Not always present too
109
+ for sub in @sub_styles
110
+ sym, cls, fmt = *sub
111
+ fmt = key % fmt
112
+ ret.merge!(cls.options_hash(fmt))
113
+ end
114
+ end
115
+
116
+ return ret
117
+ end
118
+
119
+ def self.sub_styles
120
+ return @sub_styles
121
+ end
122
+
55
123
  # Sets the values of the attributes from the given
56
124
  # _hash_. Keys are looked under the form of
57
125
  #
@@ -61,13 +129,39 @@ module CTioga2
61
129
  #
62
130
  # Unspecified attributes are not removed from the
63
131
  # object. Extra keys are silently ignored.
132
+ #
133
+ # @todo Maybe there should be a way to detect extra attributes ?
134
+ #
135
+ # This function returns the number of properties that were
136
+ # effectively set (including those set in sub-styles)
64
137
  def set_from_hash(hash, name = "%s")
138
+ nb_set = 0
65
139
  for key_name in self.class.attributes
66
140
  hash_key = name % key_name
67
141
  if hash.key? hash_key
68
142
  self.send("#{key_name}=", hash[hash_key])
143
+ nb_set += 1
144
+ end
145
+ end
146
+
147
+ if self.class.sub_styles
148
+ for sub in self.class.sub_styles
149
+ sym, cls, fmt = *sub
150
+ cur_var = self.send(sym)
151
+ if ! cur_var # Create if not present
152
+ cur_var = cls.new
153
+ set_after = true
154
+ end
155
+ fmt = name % fmt
156
+ nb = cur_var.set_from_hash(hash, fmt)
157
+ if nb > 0 and set_after
158
+ self.send("#{sym}=", cur_var)
159
+ end
160
+ nb_set += nb
69
161
  end
70
162
  end
163
+ return nb_set
164
+
71
165
  end
72
166
 
73
167
  # Creates a new object from a hash specification, just as in