ctioga2 0.3 → 0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog +18 -0
- data/lib/ctioga2/commands/arguments.rb +17 -2
- data/lib/ctioga2/commands/commands.rb +13 -5
- data/lib/ctioga2/commands/context.rb +53 -0
- data/lib/ctioga2/commands/doc/doc.rb +1 -1
- data/lib/ctioga2/commands/doc/documentation-commands.rb +1 -1
- data/lib/ctioga2/commands/doc/help.rb +1 -1
- data/lib/ctioga2/commands/doc/html.rb +1 -1
- data/lib/ctioga2/commands/doc/introspection.rb +16 -1
- data/lib/ctioga2/commands/doc/man.rb +1 -1
- data/lib/ctioga2/commands/doc/markup.rb +1 -1
- data/lib/ctioga2/commands/doc/wordwrap.rb +1 -1
- data/lib/ctioga2/commands/general-commands.rb +1 -1
- data/lib/ctioga2/commands/general-types.rb +1 -1
- data/lib/ctioga2/commands/groups.rb +1 -1
- data/lib/ctioga2/commands/interpreter.rb +22 -1
- data/lib/ctioga2/commands/parsers/command-line.rb +8 -1
- data/lib/ctioga2/commands/parsers/file.rb +2 -1
- data/lib/ctioga2/commands/strings.rb +1 -1
- data/lib/ctioga2/commands/type.rb +1 -1
- data/lib/ctioga2/commands/variables.rb +1 -1
- data/lib/ctioga2/data/backends/backend.rb +1 -1
- data/lib/ctioga2/data/backends/backends/gnuplot.rb +1 -1
- data/lib/ctioga2/data/backends/backends/math.rb +1 -1
- data/lib/ctioga2/data/backends/backends/text.rb +12 -2
- data/lib/ctioga2/data/backends/description.rb +1 -1
- data/lib/ctioga2/data/backends/factory.rb +1 -1
- data/lib/ctioga2/data/backends/parameter.rb +1 -1
- data/lib/ctioga2/data/datacolumn.rb +1 -1
- data/lib/ctioga2/data/dataset.rb +1 -1
- data/lib/ctioga2/data/filters.rb +1 -1
- data/lib/ctioga2/data/indexed-dtable.rb +1 -1
- data/lib/ctioga2/data/point.rb +1 -1
- data/lib/ctioga2/data/stack.rb +6 -6
- data/lib/ctioga2/graphics/coordinates.rb +1 -1
- data/lib/ctioga2/graphics/elements.rb +1 -1
- data/lib/ctioga2/graphics/elements/containers.rb +1 -1
- data/lib/ctioga2/graphics/elements/contour.rb +1 -1
- data/lib/ctioga2/graphics/elements/curve2d.rb +1 -1
- data/lib/ctioga2/graphics/elements/element.rb +1 -1
- data/lib/ctioga2/graphics/elements/gradient-region.rb +1 -1
- data/lib/ctioga2/graphics/elements/parametric2d.rb +1 -1
- data/lib/ctioga2/graphics/elements/primitive.rb +115 -69
- data/lib/ctioga2/graphics/elements/region.rb +1 -1
- data/lib/ctioga2/graphics/elements/subplot.rb +9 -3
- data/lib/ctioga2/graphics/elements/tangent.rb +1 -1
- data/lib/ctioga2/graphics/elements/xyz-map.rb +1 -1
- data/lib/ctioga2/graphics/generator.rb +1 -1
- data/lib/ctioga2/graphics/legends.rb +5 -7
- data/lib/ctioga2/graphics/legends/area.rb +8 -8
- data/lib/ctioga2/graphics/legends/items.rb +2 -2
- data/lib/ctioga2/graphics/legends/provider.rb +1 -1
- data/lib/ctioga2/graphics/legends/storage.rb +1 -1
- data/lib/ctioga2/graphics/root.rb +1 -1
- data/lib/ctioga2/graphics/styles.rb +5 -0
- data/lib/ctioga2/graphics/styles/arrows.rb +53 -0
- data/lib/ctioga2/graphics/styles/axes.rb +29 -23
- data/lib/ctioga2/graphics/styles/background.rb +12 -10
- data/lib/ctioga2/graphics/styles/base.rb +99 -5
- data/lib/ctioga2/graphics/styles/box.rb +67 -0
- data/lib/ctioga2/graphics/styles/carrays.rb +1 -1
- data/lib/ctioga2/graphics/styles/colormap.rb +1 -1
- data/lib/ctioga2/graphics/styles/curve.rb +7 -1
- data/lib/ctioga2/graphics/styles/drawable.rb +24 -11
- data/lib/ctioga2/graphics/styles/errorbar.rb +1 -1
- data/lib/ctioga2/graphics/styles/factory.rb +1 -1
- data/lib/ctioga2/graphics/styles/gradients.rb +3 -3
- data/lib/ctioga2/graphics/styles/legend.rb +20 -5
- data/lib/ctioga2/graphics/styles/location.rb +3 -3
- data/lib/ctioga2/graphics/styles/map-axes.rb +6 -7
- data/lib/ctioga2/graphics/styles/plot.rb +51 -26
- data/lib/ctioga2/graphics/styles/sets.rb +1 -1
- data/lib/ctioga2/graphics/styles/sheet.rb +348 -0
- data/lib/ctioga2/graphics/styles/texts.rb +45 -64
- data/lib/ctioga2/graphics/subplot-commands.rb +1 -1
- data/lib/ctioga2/graphics/types.rb +1 -3
- data/lib/ctioga2/graphics/types/bijection.rb +1 -1
- data/lib/ctioga2/graphics/types/boundaries.rb +1 -1
- data/lib/ctioga2/graphics/types/boxes.rb +1 -1
- data/lib/ctioga2/graphics/types/dimensions.rb +2 -2
- data/lib/ctioga2/graphics/types/grid.rb +1 -1
- data/lib/ctioga2/graphics/types/location.rb +2 -2
- data/lib/ctioga2/graphics/types/point.rb +1 -1
- data/lib/ctioga2/log.rb +10 -6
- data/lib/ctioga2/metabuilder/type.rb +1 -1
- data/lib/ctioga2/metabuilder/types/coordinates.rb +1 -1
- data/lib/ctioga2/metabuilder/types/data.rb +1 -1
- data/lib/ctioga2/metabuilder/types/dates.rb +1 -1
- data/lib/ctioga2/metabuilder/types/lists.rb +1 -1
- data/lib/ctioga2/metabuilder/types/numbers.rb +1 -1
- data/lib/ctioga2/metabuilder/types/strings.rb +1 -1
- data/lib/ctioga2/metabuilder/types/styles.rb +30 -3
- data/lib/ctioga2/plotmaker.rb +1 -1
- data/lib/ctioga2/postprocess.rb +1 -1
- data/lib/ctioga2/utils.rb +78 -3
- metadata +6 -5
- data/lib/ctioga2/git-fools-svn.rb +0 -7
- data/lib/ctioga2/graphics/elements/redirecting-container.rb~ +0 -123
- data/lib/ctioga2/metabuilder/types/generic.rb~ +0 -225
@@ -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: 161 $', '$Date: 2010-08-03 12:07:49 +0200 (Tue, 03 Aug 2010) $')
|
21
21
|
|
22
22
|
module Graphics
|
23
23
|
|
@@ -0,0 +1,348 @@
|
|
1
|
+
# sheet.rb: handling of style sheets
|
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
|
+
require 'ctioga2/graphics/coordinates'
|
18
|
+
|
19
|
+
# This module contains all the classes used by ctioga
|
20
|
+
module CTioga2
|
21
|
+
|
22
|
+
Version::register_svn_info('$Revision$', '$Date$')
|
23
|
+
|
24
|
+
module Graphics
|
25
|
+
|
26
|
+
module Styles
|
27
|
+
|
28
|
+
# This is a style sheet, is a storage place for style
|
29
|
+
# objects. It has two related functions:
|
30
|
+
# * first, store the user-specified preferences
|
31
|
+
# * second, provide the appropriate default style for any given
|
32
|
+
# object, most probably at construction time (although that
|
33
|
+
# may get hard some times)
|
34
|
+
#
|
35
|
+
# The style are cascading and scoped. A scope should begin in
|
36
|
+
# each plot.
|
37
|
+
#
|
38
|
+
# Cascades happen in two ways:
|
39
|
+
#
|
40
|
+
# * more specific styles inherit from less specific (axis ->
|
41
|
+
# yaxis -> left)
|
42
|
+
# * children style inherit from parent style
|
43
|
+
class StyleSheet
|
44
|
+
|
45
|
+
# The parent of the style sheet, or nil if this is the top one.
|
46
|
+
attr_accessor :parent
|
47
|
+
|
48
|
+
# The styles, in form of a style class -> style name -> style
|
49
|
+
# object nested hash
|
50
|
+
#
|
51
|
+
# The style object is actually a hash ready to be fed to the
|
52
|
+
# BasicStyle#set_from_hash
|
53
|
+
attr_accessor :own_styles
|
54
|
+
|
55
|
+
def initialize(par = nil)
|
56
|
+
@parent = par
|
57
|
+
@own_styles = {}
|
58
|
+
end
|
59
|
+
|
60
|
+
# This hash contains the parent style for each of the style
|
61
|
+
# listed in
|
62
|
+
#
|
63
|
+
# Keyed by class -> style name -> parent name
|
64
|
+
@style_parent = {}
|
65
|
+
|
66
|
+
# Sets the parent for the given style
|
67
|
+
def self.set_parent(cls, style, parent)
|
68
|
+
@style_parent[cls] ||= {}
|
69
|
+
@style_parent[cls][style] = parent
|
70
|
+
end
|
71
|
+
|
72
|
+
# Returns the parent style for the style (or _nil_ should the
|
73
|
+
# style have no parent)
|
74
|
+
#
|
75
|
+
# All styles (but base) derive from the corresponding "base"
|
76
|
+
# style.
|
77
|
+
def self.get_parent(cls, style)
|
78
|
+
@style_parent[cls] ||= {}
|
79
|
+
stl = @style_parent[cls][style]
|
80
|
+
if (! stl) and (! (style == 'base'))
|
81
|
+
return 'base'
|
82
|
+
end
|
83
|
+
return stl
|
84
|
+
end
|
85
|
+
|
86
|
+
set_parent AxisStyle, "x", "base"
|
87
|
+
set_parent AxisStyle, "y", "base"
|
88
|
+
|
89
|
+
set_parent AxisStyle, "bottom", "x"
|
90
|
+
set_parent AxisStyle, "top", "x"
|
91
|
+
set_parent AxisStyle, "left", "y"
|
92
|
+
set_parent AxisStyle, "right", "y"
|
93
|
+
|
94
|
+
|
95
|
+
# This returns the style we have in this object for the given
|
96
|
+
# name. Inner cascading should take place (ie object
|
97
|
+
# hierarchy, but not scope hierarchy).
|
98
|
+
#
|
99
|
+
# This returns a hash that can be modified.
|
100
|
+
def own_style_hash_for(cls, name)
|
101
|
+
p = self.class.get_parent(cls, name)
|
102
|
+
base = {}
|
103
|
+
if p
|
104
|
+
base = own_style_hash_for(cls, p)
|
105
|
+
end
|
106
|
+
@own_styles[cls] ||= {}
|
107
|
+
style = @own_styles[cls][name]
|
108
|
+
if ! style
|
109
|
+
return base
|
110
|
+
end
|
111
|
+
style = style.dup
|
112
|
+
style.merge!(base) { |key, v1, v2| v1 }
|
113
|
+
return style
|
114
|
+
end
|
115
|
+
|
116
|
+
# The style for the given name, including all cascading
|
117
|
+
def get_style_hash_for(cls, name)
|
118
|
+
ps = {}
|
119
|
+
if @parent
|
120
|
+
ps = @parent.get_style_hash_for(cls, name);
|
121
|
+
end
|
122
|
+
style = own_style_hash_for(cls, name)
|
123
|
+
style.merge!(ps) { |key, v1, v2| v1 }
|
124
|
+
return style
|
125
|
+
end
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
# The current sheet
|
130
|
+
@sheet = StyleSheet.new
|
131
|
+
|
132
|
+
# Returns a suitable style object for the given style name, or
|
133
|
+
# crashes if the name isn't known.
|
134
|
+
#
|
135
|
+
# Additional arguments are passed to the constructor
|
136
|
+
def self.style_for(cls, name, *args)
|
137
|
+
a = cls.new(*args)
|
138
|
+
a.set_from_hash(@sheet.get_style_hash_for(cls, name))
|
139
|
+
return a
|
140
|
+
end
|
141
|
+
|
142
|
+
def self.enter_scope()
|
143
|
+
@sheet = StyleSheet.new(@sheet)
|
144
|
+
end
|
145
|
+
|
146
|
+
def self.leave_scope()
|
147
|
+
if @sheet.parent
|
148
|
+
@sheet = @sheet.parent
|
149
|
+
else
|
150
|
+
warn { "Trying to leave top-level stylesheet scope" }
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def self.current_sheet()
|
155
|
+
return @sheet
|
156
|
+
end
|
157
|
+
|
158
|
+
end
|
159
|
+
|
160
|
+
StyleSheetGroup = CmdGroup.new('style-sheets',
|
161
|
+
"Default styles",
|
162
|
+
<<EOD, 40)
|
163
|
+
Commands for defining default styles.
|
164
|
+
|
165
|
+
All commands take the name of the style to redefine. Different styles
|
166
|
+
live in a different name space, so there is no risk naming an @axis@ and
|
167
|
+
a @text@ style with the same name. All styles for a given type inherit from
|
168
|
+
the style name @base@.
|
169
|
+
|
170
|
+
ctioga2 does not support changing a style after its use. It may
|
171
|
+
affect only the following objects or all the ones that were created
|
172
|
+
from the beginning, depending on the context. For safety, only define
|
173
|
+
style before issueing any graphics command.
|
174
|
+
|
175
|
+
ctioga2 may support at a later time loading style files, but that is
|
176
|
+
not the case for now.
|
177
|
+
|
178
|
+
EOD
|
179
|
+
# We create the commands programmatically
|
180
|
+
kinds = [
|
181
|
+
['axis', AxisStyle, 'axis'],
|
182
|
+
['background', BackgroundStyle, 'plot background'],
|
183
|
+
['title', TextLabel, 'plot title'],
|
184
|
+
['text', FullTextStyle, 'text'],
|
185
|
+
['marker', MarkerStringStyle, 'marker'],
|
186
|
+
['box', BoxStyle, 'boxes'],
|
187
|
+
['arrow', ArrowStyle, 'arrows'],
|
188
|
+
['line', StrokeStyle, 'lines']
|
189
|
+
]
|
190
|
+
|
191
|
+
StyleSheetCommands = {}
|
192
|
+
StyleSheetPredefinedNames = {}
|
193
|
+
|
194
|
+
kinds.each do |k|
|
195
|
+
name, cls, desc = *k
|
196
|
+
|
197
|
+
StyleSheetCommands[name] =
|
198
|
+
Cmd.new("define-#{name}-style",nil,
|
199
|
+
"--define-#{name}-style",
|
200
|
+
[
|
201
|
+
CmdArg.new('text'),
|
202
|
+
],
|
203
|
+
cls.options_hash
|
204
|
+
) do |plotmaker, what, opts|
|
205
|
+
StyleSheet.current_sheet.own_styles[cls] ||= {}
|
206
|
+
StyleSheet.current_sheet.own_styles[cls][what] ||= {}
|
207
|
+
StyleSheet.current_sheet.own_styles[cls][what].merge!(opts)
|
208
|
+
end
|
209
|
+
StyleSheetCommands[name].
|
210
|
+
describe("Sets the default style for the given #{desc}.",
|
211
|
+
<<"EOH", StyleSheetGroup)
|
212
|
+
Sets the default style for the named #{desc}.
|
213
|
+
EOH
|
214
|
+
end
|
215
|
+
|
216
|
+
StyleSheetCommands['line'].long_description = <<EOD
|
217
|
+
Sets the default style for lines. All line styles descend from the
|
218
|
+
@base@ style. Use a style different than @base@ by passing its name as
|
219
|
+
the @/base-style@ option to the {command: draw-line} command.
|
220
|
+
|
221
|
+
Meaning of the style parameters:
|
222
|
+
|
223
|
+
* @color@: the color of the line, see {type: color}
|
224
|
+
* @style@: the line style, see {type: line-style}
|
225
|
+
* @width@: the line width (in points)
|
226
|
+
|
227
|
+
> --define-line-style base /color=Pink
|
228
|
+
|
229
|
+
makes all lines pink (unless overriden by the /color option to
|
230
|
+
{command: draw-line}), while
|
231
|
+
|
232
|
+
> --define-line-style line-pink /color=Pink
|
233
|
+
|
234
|
+
only affect those to which the /base-style=line-pink style option
|
235
|
+
was given.
|
236
|
+
EOD
|
237
|
+
|
238
|
+
StyleSheetCommands['arrow'].long_description = <<EOD
|
239
|
+
Sets the default style for arrows. All arrow styles descend from the
|
240
|
+
@base@ style. Use a style different than @base@ by passing its name as
|
241
|
+
the @/base-style@ option to the {command: draw-arrow} command.
|
242
|
+
|
243
|
+
Meaning of the style parameters:
|
244
|
+
|
245
|
+
* @color@, @style@ and @width@: same as in {command: define-line-style}
|
246
|
+
* @head_marker@, @tail_marker@: a {type: marker} to be used for the head
|
247
|
+
or for the tail
|
248
|
+
* @head_scale@, @tail_scale@: scale of the head or tail markers
|
249
|
+
* @head_angle@, @tail_angle@: rotate the head or the tail by that many
|
250
|
+
degrees
|
251
|
+
* @head_color@, @tail_color@: the {type: color} of the head or tail
|
252
|
+
EOD
|
253
|
+
|
254
|
+
StyleSheetCommands['box'].long_description = <<EOD
|
255
|
+
Sets the default style for boxes. All box styles descend from the
|
256
|
+
@base@ style. Use a style different than @base@ by passing its name as
|
257
|
+
the @/base-style@ option to the {command: draw-box} command.
|
258
|
+
|
259
|
+
Meaning of the style parameters:
|
260
|
+
|
261
|
+
* @color@, @style@ and @width@: same as in {command: define-line-style}
|
262
|
+
* @fill_color@: fill color for the box
|
263
|
+
* @fill_transparency@: the transparency for the fill, from 0 to 1
|
264
|
+
EOD
|
265
|
+
|
266
|
+
StyleSheetCommands['text'].long_description = <<EOD
|
267
|
+
Sets the default style for texts. All text styles descend from the
|
268
|
+
@base@ style. Use a style different than @base@ by passing its name as
|
269
|
+
the @/base-style@ option to the {command: draw-text} command.
|
270
|
+
|
271
|
+
Meaning of the style parameters:
|
272
|
+
|
273
|
+
* @alignment@: vertical alignment
|
274
|
+
* @justification@: horizontal alignment
|
275
|
+
* @angle@: angle in degrees to the horizontal (or default orientation in
|
276
|
+
some cases)
|
277
|
+
* @color@: text color
|
278
|
+
* @scale@: text scale
|
279
|
+
EOD
|
280
|
+
|
281
|
+
StyleSheetCommands['title'].long_description = <<EOD
|
282
|
+
Sets the style for title. All title styles descend from the
|
283
|
+
@base@ style. In addition, the title of a plot is addressed by the
|
284
|
+
style name @title@.
|
285
|
+
|
286
|
+
Meaning of the style parameters:
|
287
|
+
|
288
|
+
* @alignment@, @justification@, @angle@, @color@ and @scale@:
|
289
|
+
as in {command: define-text-style}
|
290
|
+
* @text@: sets the title text
|
291
|
+
* @loc@: the side on which to display the title, a {type: location}
|
292
|
+
* @shift@: the distance away from the plot in text size units
|
293
|
+
(maybe a dimension should be better later)
|
294
|
+
* @position@: shift from the center (parallel to the plot side)
|
295
|
+
EOD
|
296
|
+
|
297
|
+
StyleSheetCommands['marker'].long_description = <<EOD
|
298
|
+
Sets the style for marker and marker strings. All marker and marker
|
299
|
+
string styles descend from the @base@ style. Use a style different
|
300
|
+
than @base@ by passing its name as the @/base-style@ option to the
|
301
|
+
{command: draw-marker} or {command: draw-string-marker} commands.
|
302
|
+
|
303
|
+
Meaning of the style parameters:
|
304
|
+
|
305
|
+
* @alignment@, @justification@, @angle@, @color@ and @scale@:
|
306
|
+
as in {command: define-text-style}
|
307
|
+
* @fill_color@ and @stroke_color@: markers are both stroked and filled,
|
308
|
+
you can control all colors in one go using @color@ or specifying each
|
309
|
+
with @fill_color@ and @stroke_color@
|
310
|
+
* @font@: is a PDF font number (from 1 to 14), only used for marker
|
311
|
+
strings
|
312
|
+
* @horizontal_scale@, @vertical_scale@: scales the marker only
|
313
|
+
horizontally or vertically
|
314
|
+
EOD
|
315
|
+
|
316
|
+
StyleSheetCommands['background'].long_description = <<EOD
|
317
|
+
Sets the style for plot background. All background styles descend from the
|
318
|
+
@base@ style. In addition, the background of a plot is change by the
|
319
|
+
style name @background@.
|
320
|
+
|
321
|
+
Meaning of the style parameters:
|
322
|
+
|
323
|
+
* @watermark@: the text of the watermark
|
324
|
+
* all @watermark_@ styles have the same meaning as in
|
325
|
+
{command: define-text-style}, as the watermark is a string marker
|
326
|
+
* @background_color@: the color of the background
|
327
|
+
EOD
|
328
|
+
|
329
|
+
StyleSheetCommands['axis'].long_description = <<EOD
|
330
|
+
Sets the style for a whole axis. All axis styles descend from the
|
331
|
+
@base@ style. Horizontal and vertical axis styles descend from the
|
332
|
+
@x@ and @y@ styles, and plot sides are styled with the @left@, @right@,
|
333
|
+
@top@ and @bottom@ styles.
|
334
|
+
|
335
|
+
Axis styles have lots of parameters:
|
336
|
+
|
337
|
+
* @axis_label_@ and @tick_label_@ parameters are title style parameters
|
338
|
+
whose meaning is given in {command: define-title-style}, that affect
|
339
|
+
ticks and axis labels
|
340
|
+
* @decoration@: a {type: axis-decoration} that specify which ticks and
|
341
|
+
tick labels to draw
|
342
|
+
* @background_lines_@ parameters define the style of background lines,
|
343
|
+
as in {command: define-line-style}
|
344
|
+
EOD
|
345
|
+
|
346
|
+
end
|
347
|
+
end
|
348
|
+
end
|
@@ -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: 370 $', '$Date: 2012-12-28 17:40:18 +0100 (Fri, 28 Dec 2012) $')
|
21
21
|
|
22
22
|
module Graphics
|
23
23
|
|
@@ -26,31 +26,36 @@ module CTioga2
|
|
26
26
|
# The style of a text object. This class is suitable for
|
27
27
|
# inclusion as a Hash to FigureMaker#show_axis, for the tick
|
28
28
|
# labels.
|
29
|
+
#
|
30
|
+
# @todo alignement and justification are poor names. halign
|
31
|
+
# and/or valign would be better.
|
29
32
|
class BaseTextStyle < BasicStyle
|
30
33
|
|
31
34
|
# The angle of the text
|
32
|
-
|
35
|
+
typed_attribute :angle, 'float'
|
33
36
|
|
34
37
|
# The 'shift' of the text. Only meaningful for axes and tick
|
35
38
|
# labels, where the position of the text is specified using a
|
36
|
-
# side rather than a precise position
|
37
|
-
|
39
|
+
# side rather than a precise position. In frame coordinates ?
|
40
|
+
typed_attribute :shift, 'float'
|
38
41
|
|
39
42
|
# The scale of the text
|
40
|
-
|
43
|
+
typed_attribute :scale, 'float'
|
41
44
|
|
42
45
|
# The vertical alignment
|
43
|
-
|
46
|
+
typed_attribute :alignment, 'alignment'
|
44
47
|
|
45
48
|
# The horizontal alignment
|
46
|
-
|
49
|
+
typed_attribute :justification, 'justification'
|
47
50
|
|
48
51
|
# Draw the _text_ at the given location with the given style.
|
49
52
|
# If _y_ is _nil_, then _x_or_loc_ is taken to be a location
|
50
53
|
# (see FigureMaker#show_text).
|
51
54
|
def draw_text(t, text, x_or_loc, y = nil, measure = nil)
|
52
|
-
|
53
|
-
|
55
|
+
t.context do
|
56
|
+
dict = prepare_show_text_dict(text, x_or_loc, y, measure)
|
57
|
+
t.show_text(dict)
|
58
|
+
end
|
54
59
|
end
|
55
60
|
|
56
61
|
protected
|
@@ -83,38 +88,35 @@ module CTioga2
|
|
83
88
|
# The style of a full text object.
|
84
89
|
class FullTextStyle < BaseTextStyle
|
85
90
|
# The color of the text
|
86
|
-
|
91
|
+
typed_attribute :color, 'color'
|
87
92
|
|
88
93
|
# The (horizontal) position with respect to a location. You'll
|
89
94
|
# seldom need that.
|
90
|
-
|
95
|
+
#
|
96
|
+
# @todo Maybe this needs to fo in TextLabel rather than here ?
|
97
|
+
typed_attribute :position, 'float'
|
91
98
|
end
|
92
99
|
|
93
100
|
# A hash that can be used as a base for optional arguments to
|
94
101
|
# things that take texts.
|
95
|
-
FullTextStyleOptions =
|
96
|
-
'angle' => CmdArg.new('float'),
|
97
|
-
'shift' => CmdArg.new('float'),
|
98
|
-
'scale' => CmdArg.new('float'),
|
99
|
-
'justification' => CmdArg.new('justification'),
|
100
|
-
'color' => CmdArg.new('color'),
|
101
|
-
'align' => CmdArg.new('alignment'),
|
102
|
-
}
|
102
|
+
FullTextStyleOptions = FullTextStyle.options_hash()
|
103
103
|
|
104
104
|
# A label.
|
105
105
|
class TextLabel < FullTextStyle
|
106
106
|
# The text of the label. _nil_ or _false_ means there will be
|
107
107
|
# no text displayed
|
108
|
-
|
108
|
+
typed_attribute :text, "text"
|
109
109
|
|
110
110
|
# The location of the label.
|
111
111
|
#
|
112
112
|
# @todo This will have to eventually use PlotLocation, as it
|
113
113
|
# makes much more sense.
|
114
|
-
|
114
|
+
typed_attribute :loc, "location"
|
115
115
|
|
116
|
-
def initialize(text = nil)
|
116
|
+
def initialize(text = nil, loc = nil)
|
117
|
+
super()
|
117
118
|
@text = text
|
119
|
+
@loc = loc
|
118
120
|
end
|
119
121
|
|
120
122
|
# Draw the label, if #text is not _nil_ or _false_.
|
@@ -159,10 +161,8 @@ module CTioga2
|
|
159
161
|
|
160
162
|
end
|
161
163
|
|
162
|
-
|
163
|
-
|
164
|
-
FullTextLabelOptions = FullTextStyleOptions.dup
|
165
|
-
FullTextLabelOptions['text'] = CmdArg.new('text')
|
164
|
+
|
165
|
+
FullTextLabelOptions = TextLabel.options_hash()
|
166
166
|
|
167
167
|
|
168
168
|
|
@@ -171,44 +171,32 @@ module CTioga2
|
|
171
171
|
# like that.
|
172
172
|
class MarkerStringStyle < BasicStyle
|
173
173
|
|
174
|
-
MarkerOptions = {
|
175
|
-
'color' => 'color',
|
176
|
-
'stroke_color' => 'color',
|
177
|
-
'fill_color' => 'color',
|
178
|
-
'scale' => 'float',
|
179
|
-
'horizontal_scale' => 'float',
|
180
|
-
'vertical_scale' => 'float',
|
181
|
-
'angle' => 'float',
|
182
|
-
'justification' => 'justification',
|
183
|
-
'alignment' => 'alignment',
|
184
|
-
}
|
185
|
-
|
186
|
-
|
187
174
|
# The angle of the text
|
188
|
-
|
175
|
+
typed_attribute :angle, 'float'
|
189
176
|
|
190
177
|
# The scale of the text
|
191
|
-
|
178
|
+
typed_attribute :scale, "float"
|
192
179
|
|
193
180
|
# The horizontal scale of the text
|
194
|
-
|
181
|
+
typed_attribute :horizontal_scale, "float"
|
195
182
|
|
196
183
|
# The vertical scale of the text
|
197
|
-
|
184
|
+
typed_attribute :vertical_scale, "float"
|
198
185
|
|
199
186
|
# The vertical alignment
|
200
|
-
|
187
|
+
typed_attribute :alignment, "alignment"
|
201
188
|
|
202
189
|
# The horizontal alignment
|
203
|
-
|
190
|
+
typed_attribute :justification, "justification"
|
204
191
|
|
205
192
|
# Colors
|
206
|
-
|
207
|
-
|
208
|
-
|
193
|
+
typed_attribute :color, 'color-or-false'
|
194
|
+
typed_attribute :stroke_color, 'color-or-false'
|
195
|
+
typed_attribute :fill_color, 'color-or-false'
|
196
|
+
|
209
197
|
|
210
198
|
# A number between 1 to 14 -- a PDF font
|
211
|
-
|
199
|
+
typed_attribute :font, "pdf-font"
|
212
200
|
|
213
201
|
# The rendering mode.
|
214
202
|
attr_accessor :mode
|
@@ -226,8 +214,14 @@ module CTioga2
|
|
226
214
|
dict = self.to_hash
|
227
215
|
dict['text'] = text
|
228
216
|
dict['at'] = [x, y]
|
229
|
-
|
230
|
-
|
217
|
+
t.show_marker(dict)
|
218
|
+
end
|
219
|
+
|
220
|
+
# Draws the string marker at the given location
|
221
|
+
def draw_marker(t, marker, x, y)
|
222
|
+
dict = self.to_hash
|
223
|
+
dict['marker'] = marker
|
224
|
+
dict['at'] = [x, y]
|
231
225
|
t.show_marker(dict)
|
232
226
|
end
|
233
227
|
|
@@ -237,19 +231,6 @@ module CTioga2
|
|
237
231
|
end
|
238
232
|
end
|
239
233
|
|
240
|
-
StringMarkerOptions = {
|
241
|
-
'color' => CmdArg.new('color'),
|
242
|
-
'stroke_color' => CmdArg.new('color'),
|
243
|
-
'fill_color' => CmdArg.new('color'),
|
244
|
-
'scale' => CmdArg.new('float'),
|
245
|
-
'horizontal_scale' => CmdArg.new('float'),
|
246
|
-
'vertical_scale' => CmdArg.new('float'),
|
247
|
-
'angle' => CmdArg.new('float'),
|
248
|
-
'justification' => CmdArg.new('justification'),
|
249
|
-
'alignment' => CmdArg.new('alignment'),
|
250
|
-
'font' => CmdArg.new('pdf-font')
|
251
|
-
}
|
252
|
-
|
253
234
|
# A LaTeX font. It should be applied to text using the function
|
254
235
|
# #fontify.
|
255
236
|
#
|