ctioga2 0.0
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.
- data/COPYING +339 -0
- data/Changelog +6 -0
- data/bin/ctioga2 +26 -0
- data/lib/ctioga2/commands/arguments.rb +58 -0
- data/lib/ctioga2/commands/commands.rb +258 -0
- data/lib/ctioga2/commands/doc/doc.rb +118 -0
- data/lib/ctioga2/commands/doc/documentation-commands.rb +119 -0
- data/lib/ctioga2/commands/doc/help.rb +95 -0
- data/lib/ctioga2/commands/doc/html.rb +230 -0
- data/lib/ctioga2/commands/doc/introspection.rb +211 -0
- data/lib/ctioga2/commands/doc/man.rb +279 -0
- data/lib/ctioga2/commands/doc/markup.rb +359 -0
- data/lib/ctioga2/commands/general-commands.rb +119 -0
- data/lib/ctioga2/commands/general-types.rb +118 -0
- data/lib/ctioga2/commands/groups.rb +73 -0
- data/lib/ctioga2/commands/interpreter.rb +257 -0
- data/lib/ctioga2/commands/parsers/command-line.rb +187 -0
- data/lib/ctioga2/commands/parsers/file.rb +186 -0
- data/lib/ctioga2/commands/strings.rb +303 -0
- data/lib/ctioga2/commands/type.rb +100 -0
- data/lib/ctioga2/commands/variables.rb +101 -0
- data/lib/ctioga2/data/backends/backend.rb +260 -0
- data/lib/ctioga2/data/backends/backends.rb +39 -0
- data/lib/ctioga2/data/backends/backends/gnuplot.rb +140 -0
- data/lib/ctioga2/data/backends/backends/math.rb +121 -0
- data/lib/ctioga2/data/backends/backends/text.rb +335 -0
- data/lib/ctioga2/data/backends/description.rb +405 -0
- data/lib/ctioga2/data/backends/factory.rb +73 -0
- data/lib/ctioga2/data/backends/parameter.rb +109 -0
- data/lib/ctioga2/data/datacolumn.rb +245 -0
- data/lib/ctioga2/data/dataset.rb +233 -0
- data/lib/ctioga2/data/filters.rb +131 -0
- data/lib/ctioga2/data/merge.rb +43 -0
- data/lib/ctioga2/data/point.rb +72 -0
- data/lib/ctioga2/data/stack.rb +294 -0
- data/lib/ctioga2/graphics/coordinates.rb +73 -0
- data/lib/ctioga2/graphics/elements.rb +111 -0
- data/lib/ctioga2/graphics/elements/containers.rb +111 -0
- data/lib/ctioga2/graphics/elements/curve2d.rb +155 -0
- data/lib/ctioga2/graphics/elements/element.rb +90 -0
- data/lib/ctioga2/graphics/elements/primitive.rb +256 -0
- data/lib/ctioga2/graphics/elements/subplot.rb +140 -0
- data/lib/ctioga2/graphics/generator.rb +68 -0
- data/lib/ctioga2/graphics/legends.rb +108 -0
- data/lib/ctioga2/graphics/legends/area.rb +199 -0
- data/lib/ctioga2/graphics/legends/items.rb +183 -0
- data/lib/ctioga2/graphics/legends/provider.rb +58 -0
- data/lib/ctioga2/graphics/legends/storage.rb +65 -0
- data/lib/ctioga2/graphics/root.rb +209 -0
- data/lib/ctioga2/graphics/styles.rb +30 -0
- data/lib/ctioga2/graphics/styles/axes.rb +247 -0
- data/lib/ctioga2/graphics/styles/background.rb +122 -0
- data/lib/ctioga2/graphics/styles/base.rb +115 -0
- data/lib/ctioga2/graphics/styles/carrays.rb +53 -0
- data/lib/ctioga2/graphics/styles/curve.rb +101 -0
- data/lib/ctioga2/graphics/styles/drawable.rb +87 -0
- data/lib/ctioga2/graphics/styles/factory.rb +351 -0
- data/lib/ctioga2/graphics/styles/legend.rb +63 -0
- data/lib/ctioga2/graphics/styles/plot.rb +410 -0
- data/lib/ctioga2/graphics/styles/sets.rb +64 -0
- data/lib/ctioga2/graphics/styles/texts.rb +277 -0
- data/lib/ctioga2/graphics/subplot-commands.rb +141 -0
- data/lib/ctioga2/graphics/types.rb +188 -0
- data/lib/ctioga2/graphics/types/bijection.rb +79 -0
- data/lib/ctioga2/graphics/types/boundaries.rb +170 -0
- data/lib/ctioga2/graphics/types/boxes.rb +157 -0
- data/lib/ctioga2/graphics/types/dimensions.rb +157 -0
- data/lib/ctioga2/graphics/types/point.rb +247 -0
- data/lib/ctioga2/log.rb +97 -0
- data/lib/ctioga2/metabuilder/type.rb +316 -0
- data/lib/ctioga2/metabuilder/types.rb +39 -0
- data/lib/ctioga2/metabuilder/types/coordinates.rb +124 -0
- data/lib/ctioga2/metabuilder/types/dates.rb +43 -0
- data/lib/ctioga2/metabuilder/types/lists.rb +188 -0
- data/lib/ctioga2/metabuilder/types/numbers.rb +97 -0
- data/lib/ctioga2/metabuilder/types/strings.rb +93 -0
- data/lib/ctioga2/metabuilder/types/styles.rb +178 -0
- data/lib/ctioga2/plotmaker.rb +677 -0
- data/lib/ctioga2/postprocess.rb +115 -0
- data/lib/ctioga2/utils.rb +120 -0
- data/setup.rb +1586 -0
- metadata +144 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# dates.rb: a Type to deal with dates
|
|
2
|
+
# Copyright (C) 2006, 2009 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.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program; if not, write to the Free Software
|
|
16
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
17
|
+
|
|
18
|
+
require 'time'
|
|
19
|
+
require 'ctioga2/utils'
|
|
20
|
+
|
|
21
|
+
module CTioga2
|
|
22
|
+
Version::register_svn_info('$Revision: 2 $', '$Date: 2009-04-25 14:03:30 +0200 (Sat, 25 Apr 2009) $')
|
|
23
|
+
|
|
24
|
+
module MetaBuilder
|
|
25
|
+
|
|
26
|
+
# The module Types should be used for all subclasses of Type, to
|
|
27
|
+
# keep the place clean and tidy.
|
|
28
|
+
module Types
|
|
29
|
+
|
|
30
|
+
# A combination date/time
|
|
31
|
+
class DateTimeParameter < Type
|
|
32
|
+
|
|
33
|
+
type_name :date_time, 'date', Time.new
|
|
34
|
+
|
|
35
|
+
def string_to_type_internal(str)
|
|
36
|
+
return Time.parse(str)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# lists.rb : Different Types to deal with types where
|
|
2
|
+
# you can choose among several possibilities
|
|
3
|
+
# Copyright (C) 2006, 2009 Vincent Fourmond
|
|
4
|
+
#
|
|
5
|
+
# This program is free software; you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
|
7
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU General Public License
|
|
16
|
+
# along with this program; if not, write to the Free Software
|
|
17
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
18
|
+
|
|
19
|
+
require 'ctioga2/utils'
|
|
20
|
+
|
|
21
|
+
module CTioga2
|
|
22
|
+
|
|
23
|
+
Version::register_svn_info('$Revision: 2 $', '$Date: 2009-04-25 14:03:30 +0200 (Sat, 25 Apr 2009) $')
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
module MetaBuilder
|
|
27
|
+
|
|
28
|
+
# The module Types should be used for all subclasses of
|
|
29
|
+
# Type, to keep the place clean and tidy.
|
|
30
|
+
module Types
|
|
31
|
+
|
|
32
|
+
# A regular expression matching true
|
|
33
|
+
TRUE_RE = /^\s*(true|yes|on)\s*$/i
|
|
34
|
+
|
|
35
|
+
# A regular expression matching false
|
|
36
|
+
FALSE_RE = /^\s*(false|no(ne)?|off)\s*$/i
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# A boolean parameter
|
|
40
|
+
class BooleanParameter < Type
|
|
41
|
+
|
|
42
|
+
type_name :boolean
|
|
43
|
+
|
|
44
|
+
def type_name
|
|
45
|
+
return 'bool'
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Yes, this *really* is a boolean !
|
|
49
|
+
def boolean?
|
|
50
|
+
return true
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def string_to_type_internal(str)
|
|
54
|
+
if str == true or str =~ TRUE_RE
|
|
55
|
+
return true
|
|
56
|
+
else
|
|
57
|
+
return false
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def type_to_string_internal(val)
|
|
62
|
+
if val
|
|
63
|
+
return "true"
|
|
64
|
+
else
|
|
65
|
+
return "false"
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Booleans are a special case for option parser, as they
|
|
70
|
+
# are handled completely differently
|
|
71
|
+
def option_parser_long_option(name, biniou = nil)
|
|
72
|
+
return "--[no-]#{name}"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# A list of symbols. A hash :list must be provided that states
|
|
77
|
+
# the correspondance between the legal symbols that can be
|
|
78
|
+
# accepted by this parameter and their "english" name.
|
|
79
|
+
# This parameter can typically be used to prompt the user
|
|
80
|
+
# for different choices.
|
|
81
|
+
class ListParameter < Type
|
|
82
|
+
|
|
83
|
+
type_name :list
|
|
84
|
+
|
|
85
|
+
def initialize(type)
|
|
86
|
+
super
|
|
87
|
+
raise "type must have a :list key" unless type.has_key?(:list)
|
|
88
|
+
# We make a copy for our own purposes.
|
|
89
|
+
@hash = type[:list].dup
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def type_name
|
|
93
|
+
return 'list'
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def string_to_type_internal(str)
|
|
97
|
+
if @hash.has_key?(str.to_sym)
|
|
98
|
+
return str.to_sym
|
|
99
|
+
else
|
|
100
|
+
raise IncorrectInput, "Invalid input: #{str} should be one of " +
|
|
101
|
+
@hash.keys.map {|s| s.to_s}.join(',')
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def type_to_string_internal(val)
|
|
106
|
+
return val.to_s
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# An array of identical elements of type specified by :subtype. Defaults
|
|
111
|
+
# to String
|
|
112
|
+
class ArrayParameter < Type
|
|
113
|
+
type_name :array
|
|
114
|
+
|
|
115
|
+
def initialize(type)
|
|
116
|
+
super
|
|
117
|
+
# We make a copy for our own purposes.
|
|
118
|
+
subtype = type[:subtype] || {:type => :string}
|
|
119
|
+
@subtype = Type.get_type(subtype)
|
|
120
|
+
@separator = /\s*,\s*/
|
|
121
|
+
@separator_out = ','
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def type_name
|
|
125
|
+
return 'array'
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def string_to_type_internal(str)
|
|
129
|
+
ary = str.split(@separator)
|
|
130
|
+
return ary.map do |a|
|
|
131
|
+
@subtype.string_to_type(a)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def type_to_string_internal(val)
|
|
136
|
+
return val.map do |a|
|
|
137
|
+
@subtype.type_to_string(a)
|
|
138
|
+
end.join(@separator_out)
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# A Type used for sets for Graphics::Styles::CircularArray
|
|
143
|
+
# objects.
|
|
144
|
+
#
|
|
145
|
+
# TODO: write a gradient stuff !!!
|
|
146
|
+
class SetParameter < ArrayParameter
|
|
147
|
+
type_name :set
|
|
148
|
+
|
|
149
|
+
def initialize(type)
|
|
150
|
+
super
|
|
151
|
+
@separator = /\s*\|\s*/
|
|
152
|
+
@sepatarot_out = '|'
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def type_name
|
|
156
|
+
return 'set'
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def string_to_type_internal(str)
|
|
160
|
+
if str =~ /^\s*gradient:(.+)--(.+),(\d+)\s*$/
|
|
161
|
+
s,e,nb = $1, $2, $3.to_i
|
|
162
|
+
s,e = @subtype.string_to_type(s),@subtype.string_to_type(e)
|
|
163
|
+
fact = if nb > 1
|
|
164
|
+
1.0/(nb - 1) # The famous off-by one...
|
|
165
|
+
else
|
|
166
|
+
warn "Incorrect gradient number: #{nb}"
|
|
167
|
+
1.0
|
|
168
|
+
end
|
|
169
|
+
array = []
|
|
170
|
+
nb.times do |i|
|
|
171
|
+
a = []
|
|
172
|
+
f = i * fact
|
|
173
|
+
e.each_index do |c|
|
|
174
|
+
a << s[c] * (1 - f) + e[c] * f
|
|
175
|
+
end
|
|
176
|
+
array << a
|
|
177
|
+
end
|
|
178
|
+
return array
|
|
179
|
+
else
|
|
180
|
+
return super
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# numbers.rb : Different Types to deal with numbers
|
|
2
|
+
# Copyright (C) 2006 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.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program; if not, write to the Free Software
|
|
16
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
require 'ctioga2/utils'
|
|
20
|
+
|
|
21
|
+
module CTioga2
|
|
22
|
+
|
|
23
|
+
Version::register_svn_info('$Revision: 2 $', '$Date: 2009-04-25 14:03:30 +0200 (Sat, 25 Apr 2009) $')
|
|
24
|
+
|
|
25
|
+
module MetaBuilder
|
|
26
|
+
|
|
27
|
+
# The module Types should be used for all subclasses of
|
|
28
|
+
# Type, to keep the place clean and tidy.
|
|
29
|
+
module Types
|
|
30
|
+
|
|
31
|
+
# An integer
|
|
32
|
+
class IntegerParameter < Type
|
|
33
|
+
|
|
34
|
+
type_name :integer, 'number', 0
|
|
35
|
+
|
|
36
|
+
def string_to_type_internal(str)
|
|
37
|
+
return Integer(str)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# A float
|
|
43
|
+
class FloatParameter < Type
|
|
44
|
+
|
|
45
|
+
type_name :float, 'number', 0.0
|
|
46
|
+
|
|
47
|
+
def string_to_type_internal(str)
|
|
48
|
+
return Float(str)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# A Float Range.
|
|
54
|
+
class FloatRangeParameter < Type
|
|
55
|
+
|
|
56
|
+
RANGE_RE = /([^:]+):([^:]+)/
|
|
57
|
+
|
|
58
|
+
type_name :float_range, 'range'
|
|
59
|
+
|
|
60
|
+
def string_to_type_internal(str)
|
|
61
|
+
raise IncorrectInput, "#{str} is not a valid range" unless
|
|
62
|
+
str =~ RANGE_RE
|
|
63
|
+
s,e = Float($1), Float($2)
|
|
64
|
+
return Range.new(s,e)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def type_to_string_internal(value)
|
|
68
|
+
return "#{value.first.to_s}:#{value.last.to_s}"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Returns a [ start, end ] array where elements are either Float
|
|
74
|
+
# or _nil_.
|
|
75
|
+
class PartialFloatRangeType < Type
|
|
76
|
+
|
|
77
|
+
RANGE_RE = /([^:]+)?:([^:]+)?/
|
|
78
|
+
|
|
79
|
+
type_name :partial_float_range, 'range'
|
|
80
|
+
|
|
81
|
+
def string_to_type_internal(str)
|
|
82
|
+
raise IncorrectInput, "#{str} is not a valid range" unless
|
|
83
|
+
str =~ RANGE_RE
|
|
84
|
+
s,e = ($1 ? Float($1) : nil), ($2 ? Float($2) : nil)
|
|
85
|
+
return [s, e]
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def type_to_string_internal(value)
|
|
89
|
+
return "#{value.first.to_s}:#{value.last.to_s}"
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# strings.rb : Different Types to deal with strings
|
|
2
|
+
# Copyright (C) 2006 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.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program; if not, write to the Free Software
|
|
16
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
17
|
+
|
|
18
|
+
require 'ctioga2/utils'
|
|
19
|
+
|
|
20
|
+
module CTioga2
|
|
21
|
+
|
|
22
|
+
Version::register_svn_info('$Revision: 2 $', '$Date: 2009-04-25 14:03:30 +0200 (Sat, 25 Apr 2009) $')
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
module MetaBuilder
|
|
26
|
+
|
|
27
|
+
# The module Types should be used for all subclasses of
|
|
28
|
+
# Type, to keep the place clean and tidy.
|
|
29
|
+
module Types
|
|
30
|
+
|
|
31
|
+
# A String
|
|
32
|
+
class StringParameter < Type
|
|
33
|
+
|
|
34
|
+
type_name :string
|
|
35
|
+
|
|
36
|
+
def type_name
|
|
37
|
+
return 'text'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def string_to_type(str)
|
|
41
|
+
return str
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# A piece of text representing the path to a file.
|
|
46
|
+
class FileParameter < StringParameter
|
|
47
|
+
|
|
48
|
+
type_name :file
|
|
49
|
+
|
|
50
|
+
# The file filters, Qt style.
|
|
51
|
+
attr_reader :filter
|
|
52
|
+
|
|
53
|
+
def initialize(type)
|
|
54
|
+
super(type)
|
|
55
|
+
@filter = @type[:filter]
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def type_name
|
|
59
|
+
return 'file'
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# A String or a regular expression
|
|
65
|
+
class StringOrRegexpParameter < Type
|
|
66
|
+
|
|
67
|
+
type_name :string_or_regexp
|
|
68
|
+
|
|
69
|
+
def type_name
|
|
70
|
+
return 'regexp'
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def string_to_type(str)
|
|
74
|
+
if str =~ /^\/(.*)\/$/
|
|
75
|
+
return Regexp.new($1)
|
|
76
|
+
else
|
|
77
|
+
return str
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def type_to_string(val)
|
|
82
|
+
if val.is_a? String
|
|
83
|
+
return val
|
|
84
|
+
else
|
|
85
|
+
return "/#{val}/"
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# styles.rb : Different Types to deal with various style arguments.
|
|
2
|
+
# Copyright (C) 2006, 2009 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.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program; if not, write to the Free Software
|
|
16
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
require 'ctioga2/utils'
|
|
20
|
+
|
|
21
|
+
module CTioga2
|
|
22
|
+
|
|
23
|
+
Version::register_svn_info('$Revision: 96 $', '$Date: 2009-06-27 20:56:17 +0200 (Sat, 27 Jun 2009) $')
|
|
24
|
+
|
|
25
|
+
module MetaBuilder
|
|
26
|
+
module Types
|
|
27
|
+
|
|
28
|
+
# A color for use with Tioga, ie an [red, green, blue] array
|
|
29
|
+
# of values between 0 and 1.0. It accepts HTML-like colors, or
|
|
30
|
+
# three comma-separated values between 0 and 1.
|
|
31
|
+
class TiogaColorType < Type
|
|
32
|
+
|
|
33
|
+
type_name :tioga_color, 'color'
|
|
34
|
+
|
|
35
|
+
def string_to_type_internal(str)
|
|
36
|
+
if str =~ /^\s*#([0-9a-fA-F]{6})\s*$/
|
|
37
|
+
value = $1.scan(/../).map {
|
|
38
|
+
|i| i.to_i(16)/255.0
|
|
39
|
+
}
|
|
40
|
+
elsif str =~ /^\s*#([0-9a-fA-F]{3})\s*$/
|
|
41
|
+
value = $1.scan(/../).map {
|
|
42
|
+
|i| i.to_i(16)/15.0
|
|
43
|
+
}
|
|
44
|
+
else
|
|
45
|
+
value = str.split(/\s*,\s*/).map do |s|
|
|
46
|
+
s.to_f
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
if value.size != 3
|
|
50
|
+
raise IncorrectInput, "You need exactly three values to make up a color"
|
|
51
|
+
end
|
|
52
|
+
return value
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# A line style for Tioga. It will be represented as:
|
|
57
|
+
#
|
|
58
|
+
# a,b,c,d,...:e
|
|
59
|
+
#
|
|
60
|
+
# This creates a line style of:
|
|
61
|
+
#
|
|
62
|
+
# [[a,b,c,d,...],e]
|
|
63
|
+
#
|
|
64
|
+
# If the :e is omitted 0 is used.
|
|
65
|
+
class LineStyleType < Type
|
|
66
|
+
|
|
67
|
+
type_name :tioga_line_style, 'line_style'
|
|
68
|
+
|
|
69
|
+
def string_to_type_internal(str)
|
|
70
|
+
specs = str.split(/\s*,\s*/)
|
|
71
|
+
if specs.last =~ /:(.*)$/
|
|
72
|
+
phase = $1.to_f
|
|
73
|
+
specs.last.gsub!(/:.*$/,'')
|
|
74
|
+
else
|
|
75
|
+
phase = 0
|
|
76
|
+
end
|
|
77
|
+
p specs
|
|
78
|
+
return [ specs.map { |s| s.to_f }, phase]
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# A marker Type for Tioga. Input as
|
|
83
|
+
#
|
|
84
|
+
# a,b(,c)?
|
|
85
|
+
#
|
|
86
|
+
class MarkerType < Type
|
|
87
|
+
|
|
88
|
+
type_name :tioga_marker, 'marker'
|
|
89
|
+
|
|
90
|
+
def string_to_type_internal(str)
|
|
91
|
+
specs = str.split(/\s*,\s*/)
|
|
92
|
+
if specs.size == 2
|
|
93
|
+
return [specs[0].to_i, specs[1].to_i]
|
|
94
|
+
elsif specs.size == 3
|
|
95
|
+
return [specs[0].to_i, specs[1].to_i, specs[2].to_f]
|
|
96
|
+
else
|
|
97
|
+
raise IncorrectInput, "You need two or three values to make a marker"
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# The type of edges/axis
|
|
103
|
+
class AxisType < Type
|
|
104
|
+
|
|
105
|
+
include Tioga::FigureConstants
|
|
106
|
+
|
|
107
|
+
ValidTypes = {
|
|
108
|
+
/hidden|off/i => AXIS_HIDDEN,
|
|
109
|
+
/line/i => AXIS_LINE_ONLY,
|
|
110
|
+
/ticks/i => AXIS_WITH_TICKS_ONLY,
|
|
111
|
+
/major/i => AXIS_WITH_MAJOR_TICKS_ONLY,
|
|
112
|
+
/major-num/i => AXIS_WITH_MAJOR_TICKS_AND_NUMERIC_LABELS,
|
|
113
|
+
/full/i => AXIS_WITH_TICKS_AND_NUMERIC_LABELS
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
type_name :tioga_axis_type, 'axis_type'
|
|
117
|
+
|
|
118
|
+
def string_to_type_internal(str)
|
|
119
|
+
for k,v in ValidTypes
|
|
120
|
+
if str =~ /^\s*#{k}\s*/
|
|
121
|
+
return v
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
raise IncorrectInput, "Not an axis type: #{str}"
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Justification (horizontal alignement)
|
|
129
|
+
class JustificationType < Type
|
|
130
|
+
|
|
131
|
+
include Tioga::FigureConstants
|
|
132
|
+
|
|
133
|
+
ValidTypes = {
|
|
134
|
+
/l(eft)?/i => LEFT_JUSTIFIED,
|
|
135
|
+
/c(enter)?/i => CENTERED,
|
|
136
|
+
/r(ight)?/ => RIGHT_JUSTIFIED
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
type_name :tioga_justification, 'halign'
|
|
140
|
+
|
|
141
|
+
def string_to_type_internal(str)
|
|
142
|
+
for k,v in ValidTypes
|
|
143
|
+
if str =~ /^\s*#{k}\s*/
|
|
144
|
+
return v
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
raise IncorrectInput, "Not a justification: #{str}"
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Vertical alignement
|
|
152
|
+
class AlignmentType < Type
|
|
153
|
+
|
|
154
|
+
include Tioga::FigureConstants
|
|
155
|
+
|
|
156
|
+
type_name :tioga_align, 'valign'
|
|
157
|
+
|
|
158
|
+
ValidTypes = {
|
|
159
|
+
/t(op)?/i => ALIGNED_AT_TOP,
|
|
160
|
+
/c(enter)|m(idheight)/i => ALIGNED_AT_MIDHEIGHT,
|
|
161
|
+
/B|Baseline|baseline/ => ALIGNED_AT_BASELINE,
|
|
162
|
+
/b(ottom)?/ => ALIGNED_AT_BOTTOM
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def string_to_type_internal(str)
|
|
167
|
+
for k,v in ValidTypes
|
|
168
|
+
if str =~ /^\s*#{k}\s*/
|
|
169
|
+
return v
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
raise IncorrectInput, "Not a vertical alignment: #{str}"
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|