dyi 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/CHANGES +7 -1
  2. data/lib/dyi.rb +3 -1
  3. data/lib/dyi/animation.rb +5 -4
  4. data/lib/dyi/canvas.rb +5 -8
  5. data/lib/dyi/chart.rb +1 -1
  6. data/lib/dyi/chart/array_reader.rb +104 -10
  7. data/lib/dyi/chart/axis_util.rb +31 -17
  8. data/lib/dyi/chart/base.rb +104 -7
  9. data/lib/dyi/chart/csv_reader.rb +56 -8
  10. data/lib/dyi/chart/excel_reader.rb +27 -4
  11. data/lib/dyi/chart/legend.rb +10 -8
  12. data/lib/dyi/chart/line_chart.rb +29 -25
  13. data/lib/dyi/chart/pie_chart.rb +192 -29
  14. data/lib/dyi/chart/table.rb +12 -10
  15. data/lib/dyi/color.rb +9 -7
  16. data/lib/dyi/coordinate.rb +177 -61
  17. data/lib/dyi/drawing.rb +1 -1
  18. data/lib/dyi/drawing/clipping.rb +9 -3
  19. data/lib/dyi/drawing/color_effect.rb +7 -4
  20. data/lib/dyi/drawing/filter.rb +10 -7
  21. data/lib/dyi/drawing/pen.rb +421 -11
  22. data/lib/dyi/drawing/pen_3d.rb +12 -7
  23. data/lib/dyi/element.rb +5 -4
  24. data/lib/dyi/event.rb +3 -3
  25. data/lib/dyi/font.rb +6 -4
  26. data/lib/dyi/formatter.rb +1 -1
  27. data/lib/dyi/formatter/base.rb +24 -15
  28. data/lib/dyi/formatter/emf_formatter.rb +6 -5
  29. data/lib/dyi/formatter/eps_formatter.rb +15 -14
  30. data/lib/dyi/formatter/svg_formatter.rb +16 -14
  31. data/lib/dyi/formatter/svg_reader.rb +4 -3
  32. data/lib/dyi/formatter/xaml_formatter.rb +9 -7
  33. data/lib/dyi/length.rb +213 -114
  34. data/lib/dyi/matrix.rb +4 -2
  35. data/lib/dyi/painting.rb +161 -87
  36. data/lib/dyi/script.rb +1 -1
  37. data/lib/dyi/script/ecmascript.rb +18 -29
  38. data/lib/dyi/script/simple_script.rb +4 -8
  39. data/lib/dyi/shape.rb +1 -1
  40. data/lib/dyi/shape/base.rb +8 -17
  41. data/lib/dyi/shape/path.rb +102 -19
  42. data/lib/dyi/stylesheet.rb +4 -3
  43. data/lib/dyi/svg_element.rb +9 -7
  44. data/lib/dyi/type.rb +5 -2
  45. data/lib/dyi/util.rb +36 -1
  46. data/lib/ironruby.rb +1 -1
  47. data/lib/util.rb +53 -5
  48. metadata +4 -19
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: UTF-8 -*-
2
2
 
3
- # Copyright (c) 2009-2011 Sound-F Co., Ltd. All rights reserved.
3
+ # Copyright (c) 2009-2012 Sound-F Co., Ltd. All rights reserved.
4
4
  #
5
5
  # Author:: Mamoru Yuo
6
6
  #
@@ -19,9 +19,11 @@
19
19
  # You should have received a copy of the GNU General Public License
20
20
  # along with DYI. If not, see <http://www.gnu.org/licenses/>.
21
21
 
22
- module DYI #:nodoc:
23
- module Chart #:nodoc:
22
+ #
23
+ module DYI
24
+ module Chart
24
25
 
26
+ # @since 0.0.0
25
27
  class Table < Base
26
28
  attr_reader :frame_canvas, :data_canvas
27
29
 
@@ -130,19 +132,19 @@ module DYI #:nodoc:
130
132
  =end
131
133
  private
132
134
 
133
- def options #:nodoc:
135
+ def options
134
136
  @options
135
137
  end
136
138
 
137
- def default_csv_format #:nodoc:
139
+ def default_csv_format
138
140
  [0, 1]
139
141
  end
140
142
 
141
- def convert_data(value) #:nodoc:
143
+ def convert_data(value)
142
144
  value.strip
143
145
  end
144
146
 
145
- def create_vector_image #:nodoc:
147
+ def create_vector_image
146
148
  pen = Drawing::Pen.new
147
149
  @frame_canvas = Shape::ShapeGroup.draw_on(@canvas)
148
150
  @data_canvas = Shape::ShapeGroup.draw_on(@canvas)
@@ -150,7 +152,7 @@ module DYI #:nodoc:
150
152
  draw_data(pen)
151
153
  end
152
154
 
153
- def draw_frame(pen) #:nodoc:
155
+ def draw_frame(pen)
154
156
  w = table_width
155
157
  h = table_height
156
158
 
@@ -166,7 +168,7 @@ module DYI #:nodoc:
166
168
  end
167
169
  end
168
170
 
169
- def draw_column_colors #:nodoc:
171
+ def draw_column_colors
170
172
  if column_colors
171
173
  brush = Drawing::Brush.new
172
174
  h = table_height
@@ -181,7 +183,7 @@ module DYI #:nodoc:
181
183
  end
182
184
  end
183
185
 
184
- def draw_data(pen) #:nodoc:
186
+ def draw_data(pen)
185
187
  cell_margin = (row_height - (font && font.draw_size || Font::DEFAULT_SIZE)) / 2
186
188
  series.inject(cell_margin) do |x, column_index|
187
189
  y = row_height - cell_margin
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: UTF-8 -*-
2
2
 
3
- # Copyright (c) 2009-2011 Sound-F Co., Ltd. All rights reserved.
3
+ # Copyright (c) 2009-2012 Sound-F Co., Ltd. All rights reserved.
4
4
  #
5
5
  # Author:: Mamoru Yuo
6
6
  #
@@ -19,8 +19,10 @@
19
19
  # You should have received a copy of the GNU General Public License
20
20
  # along with DYI. If not, see <http://www.gnu.org/licenses/>.
21
21
 
22
- module DYI #:nodoc:
22
+ #
23
+ module DYI
23
24
 
25
+ # @since 0.0.0
24
26
  class Color
25
27
  @@named_colors = {'aliceblue'=>[240,248,255],'antiquewhite'=>[250,235,215],'aqua'=>[0,255,255],'aquamarine'=>[127,255,212],'azure'=>[240,255,255],'beige'=>[245,245,220],'bisque'=>[255,228,196],'black'=>[0,0,0],'blanchedalmond'=>[255,235,205],'blue'=>[0,0,255],'blueviolet'=>[138,43,226],'brown'=>[165,42,42],'burlywood'=>[222,184,135],'cadetblue'=>[95,158,160],'chartreuse'=>[127,255,0],'chocolate'=>[210,105,30],'coral'=>[255,127,80],'cornflowerblue'=>[100,149,237],'cornsilk'=>[255,248,220],'crimson'=>[220,20,60],'cyan'=>[0,255,255],'darkblue'=>[0,0,139],'darkcyan'=>[0,139,139],'darkgoldenrod'=>[184,134,11],'darkgray'=>[169,169,169],'darkgreen'=>[0,100,0],'darkgrey'=>[169,169,169],'darkkhaki'=>[189,183,107],'darkmagenta'=>[139,0,139],'darkolivegreen'=>[85,107,47],'darkorange'=>[255,140,0],'darkorchid'=>[153,50,204],'darkred'=>[139,0,0],'darksalmon'=>[233,150,122],'darkseagreen'=>[143,188,143],'darkslateblue'=>[72,61,139],'darkslategray'=>[47,79,79],'darkslategrey'=>[47,79,79],'darkturquoise'=>[0,206,209],'darkviolet'=>[148,0,211],'deeppink'=>[255,20,147],'deepskyblue'=>[0,191,255],'dimgray'=>[105,105,105],'dimgrey'=>[105,105,105],'dodgerblue'=>[30,144,255],'firebrick'=>[178,34,34],'floralwhite'=>[255,250,240],'forestgreen'=>[34,139,34],'fuchsia'=>[255,0,255],'gainsboro'=>[220,220,220],'ghostwhite'=>[248,248,255],'gold'=>[255,215,0],'goldenrod'=>[218,165,32],'gray'=>[128,128,128],'grey'=>[128,128,128],'green'=>[0,128,0],'greenyellow'=>[173,255,47],'honeydew'=>[240,255,240],'hotpink'=>[255,105,180],'indianred'=>[205,92,92],'indigo'=>[75,0,130],'ivory'=>[255,255,240],'khaki'=>[240,230,140],'lavender'=>[230,230,250],'lavenderblush'=>[255,240,245],'lawngreen'=>[124,252,0],'lemonchiffon'=>[255,250,205],'lightblue'=>[173,216,230],'lightcoral'=>[240,128,128],'lightcyan'=>[224,255,255],'lightgoldenrodyellow'=>[250,250,210],'lightgray'=>[211,211,211],'lightgreen'=>[144,238,144],'lightgrey'=>[211,211,211],'lightpink'=>[255,182,193],'lightsalmon'=>[255,160,122],'lightseagreen'=>[32,178,170],'lightskyblue'=>[135,206,250],'lightslategray'=>[119,136,153],'lightslategrey'=>[119,136,153],'lightsteelblue'=>[176,196,222],'lightyellow'=>[255,255,224],'lime'=>[0,255,0],'limegreen'=>[50,205,50],'linen'=>[250,240,230],'magenta'=>[255,0,255],'maroon'=>[128,0,0],'mediumaquamarine'=>[102,205,170],'mediumblue'=>[0,0,205],'mediumorchid'=>[186,85,211],'mediumpurple'=>[147,112,219],'mediumseagreen'=>[60,179,113],'mediumslateblue'=>[123,104,238],'mediumspringgreen'=>[0,250,154],'mediumturquoise'=>[72,209,204],'mediumvioletred'=>[199,21,133],'midnightblue'=>[25,25,112],'mintcream'=>[245,255,250],'mistyrose'=>[255,228,225],'moccasin'=>[255,228,181],'navajowhite'=>[255,222,173],'navy'=>[0,0,128],'oldlace'=>[253,245,230],'olive'=>[128,128,0],'olivedrab'=>[107,142,35],'orange'=>[255,165,0],'orangered'=>[255,69,0],'orchid'=>[218,112,214],'palegoldenrod'=>[238,232,170],'palegreen'=>[152,251,152],'paleturquoise'=>[175,238,238],'palevioletred'=>[219,112,147],'papayawhip'=>[255,239,213],'peachpuff'=>[255,218,185],'peru'=>[205,133,63],'pink'=>[255,192,203],'plum'=>[221,160,221],'powderblue'=>[176,224,230],'purple'=>[128,0,128],'red'=>[255,0,0],'rosybrown'=>[188,143,143],'royalblue'=>[65,105,225],'saddlebrown'=>[139,69,19],'salmon'=>[250,128,114],'sandybrown'=>[244,164,96],'seagreen'=>[46,139,87],'seashell'=>[255,245,238],'sienna'=>[160,82,45],'silver'=>[192,192,192],'skyblue'=>[135,206,235],'slateblue'=>[106,90,205],'slategray'=>[112,128,144],'slategrey'=>[112,128,144],'snow'=>[255,250,250],'springgreen'=>[0,255,127],'steelblue'=>[70,130,180],'tan'=>[210,180,140],'teal'=>[0,128,128],'thistle'=>[216,191,216],'tomato'=>[255,99,71],'turquoise'=>[64,224,208],'violet'=>[238,130,238],'wheat'=>[245,222,179],'white'=>[255,255,255],'whitesmoke'=>[245,245,245],'yellow'=>[255,255,0],'yellowgreen'=>[154,205,50]}
26
28
  @@default_format = ['#%02X%02X%02X', false]
@@ -87,7 +89,7 @@ module DYI #:nodoc:
87
89
  self == other
88
90
  end
89
91
 
90
- def hash #:nodoc:
92
+ def hash
91
93
  (@r << 16) + (@g << 8) + @b
92
94
  end
93
95
 
@@ -149,7 +151,7 @@ module DYI #:nodoc:
149
151
 
150
152
  public
151
153
 
152
- def new(*args) #:nodoc:
154
+ def new(*args)
153
155
  if args.size == 1
154
156
  case args.first
155
157
  when self
@@ -167,7 +169,7 @@ module DYI #:nodoc:
167
169
  (args.size == 1 && args.first.nil?) ? nil : new(*args)
168
170
  end
169
171
 
170
- def method_missing(name, *args) #:nodoc:
172
+ def method_missing(name, *args)
171
173
  if args.size == 0 && color = named_color(name)
172
174
  instance_eval %{
173
175
  def self.#{name}
@@ -192,7 +194,7 @@ module DYI #:nodoc:
192
194
  @@default_format
193
195
  end
194
196
 
195
- def check_format(fmt) #:nodoc:
197
+ def check_format(fmt)
196
198
  begin
197
199
  (fmt = fmt.to_s) % [0.0, 0.0, 0.0]
198
200
  fmt
@@ -203,7 +205,7 @@ module DYI #:nodoc:
203
205
 
204
206
  private
205
207
 
206
- def named_color(name) #:nodoc:
208
+ def named_color(name)
207
209
  name = name.to_s.downcase
208
210
  color = instance_variable_get('@' + name) rescue (return nil)
209
211
  return color if color
@@ -1,9 +1,8 @@
1
1
  # -*- encoding: UTF-8 -*-
2
2
 
3
- # Copyright (c) 2009-2011 Sound-F Co., Ltd. All rights reserved.
3
+ # Copyright (c) 2009-2012 Sound-F Co., Ltd. All rights reserved.
4
4
  #
5
5
  # Author:: Mamoru Yuo
6
- # Documentation:: Mamoru Yuo
7
6
  #
8
7
  # This file is part of DYI.
9
8
  #
@@ -19,52 +18,51 @@
19
18
  #
20
19
  # You should have received a copy of the GNU General Public License
21
20
  # along with DYI. If not, see <http://www.gnu.org/licenses/>.
22
- #
23
- # == Overview
24
- #
25
- # This file provides the DYI::Coordinate class, which provides
26
- # coordinate supports for DYI scripts. The coordinate represents a
27
- # length in the user coordinate system that is the given distance from the
28
- # origin of the user coordinate system along the relevant axis (the x-axis for
29
- # X coordinates, the y-axis for Y coordinates).
30
- #
31
- # See the documentation to the DYI::Coordinate class for more details
32
- # and examples of usage.
33
- #
34
21
 
35
- module DYI #:nodoc:
22
+ #
23
+ module DYI
36
24
 
37
- # Class representing a coordinate. See documentation for the file
38
- # dyi/coordinate.rb for an overview.
39
- #
40
- # == Introduction
41
- #
42
- # This class works with two length that mean orthogonal coordinates. The
43
- # initial coordinate system has the origin at the top/left with the x-axis
44
- # pointing to the right and the y-axis pointing down.
25
+ # Class representing a coordinate. This class works with two length that mean
26
+ # orthogonal coordinates. The initial coordinate system has the origin at the
27
+ # top/left with the x-axis pointing to the right and the y-axis pointing down.
45
28
  #
46
- # The equality operator '<tt>==</tt>' does not test equality instance but test
29
+ # The equality operator '{#== ==}' does not test equality instance but test
47
30
  # equality value of x-coordinate and y-coordinate.
48
31
  #
49
- # == Ways of calculating
32
+ # == Ways of Calculating
50
33
  #
51
- # This class suports following arithmetic operators and methods: <tt>+</tt>,
52
- # <tt>-</tt>, <tt>*</tt>, <tt>/</tt>, <tt>**</tt>, +#quo+. The operators
53
- # '<tt>+</tt>', '<tt>-</tt>' coerced right hand operand into Coordinate, and
54
- # then calculate.
34
+ # This class suports following arithmetic operators and methods: {#+ +},
35
+ # {#- -}, {#* *}, {#/ /}, {#** **}, {#quo}. The operators '{#+ +}', '{#- -}'
36
+ # coerces a right hand operand into Coordinate, and then calculates.
55
37
  #
56
- # See the documentation to each operators and methods class for details.
38
+ # @since 0.0.0
57
39
  class Coordinate
58
- @@default_format = '(x,y)'
59
40
 
60
- attr_reader :x, :y
41
+ # @private
42
+ @@default_format = '(x,y)'
61
43
 
62
- # :call-seq:
63
- # new (x_length, y_length)
64
- # new (x_number, y_number)
65
- # new (array)
66
- # new (coordinate)
67
- #
44
+ # Returns an x-coordinate
45
+ # @return [Length] an x-coordinate
46
+ attr_reader :x
47
+
48
+ # Returns a y-coordinate
49
+ # @return [Length] a y-coordinate
50
+ attr_reader :y
51
+
52
+ # @overload initialize(coordinate)
53
+ # Returns the argument itself.
54
+ # @param [Coordinate] coordinate the source coordinate
55
+ # @overload initialize(array)
56
+ # Return a new instance of Coordinate. First element of _array_ is used
57
+ # for x-coordinate, second element of _array_ is used y-coordinate.
58
+ # @param [Array<Length, Number, String>] array an array converted into
59
+ # Coordinate
60
+ # @raise [ArgumentError] size of _array_ does not equal to 2
61
+ # @overload initialize(x, y)
62
+ # @param [Length, Number, String] x an x-cooridnate
63
+ # @param [Length, Number, String] y a y-cooridnate
64
+ # @raise [TypeError] the argument can not be coerced into +Coordinate+
65
+ # @see .new
68
66
  def initialize(*args)
69
67
  case args.size
70
68
  when 1
@@ -87,70 +85,123 @@ module DYI #:nodoc:
87
85
  end
88
86
  end
89
87
 
88
+ # The origin point.
90
89
  ZERO = new(0,0)
91
90
 
91
+ # Unary Plus -- Returns the receiver's value.
92
+ # @return [Length] receiver itself
92
93
  def +@
93
94
  self
94
95
  end
95
96
 
97
+ # Unary Minus -- Returns a coordinate whose x-coordinate and y-coordinate
98
+ # negated.
99
+ # @return [Length] the negated receiver's value
96
100
  def -@
97
101
  self.class.new(-@x, -@y)
98
102
  end
99
103
 
104
+ # Returns a new coordinate which is the sum of the receiver and _other_.
105
+ # First, _other_ is converted into +Coordinate+.
106
+ # @param [Coordinate, Array<Length, Number, String>] other the value that
107
+ # can be converted into +Coordinate+
108
+ # @return [Length] a new length which is the sum of the receiver and _other_
100
109
  def +(other)
101
110
  other = self.class.new(other)
102
111
  self.class.new(@x + other.x, @y + other.y)
103
112
  end
104
113
 
114
+ # Returns a new length which is the difference of the receiver and _other_.
115
+ # First _other_ is converted into +Coordinate+.
116
+ # @param [Length, Numeric, String] other the value that can be converted
117
+ # into +Coordinate+
118
+ # @return [Length] a new length which is the difference of the receiver and
119
+ # _other_
105
120
  def -(other)
106
121
  other = self.class.new(other)
107
122
  self.class.new(@x - other.x, @y - other.y)
108
123
  end
109
124
 
125
+ # Returns a new muliplicative coordinate of the receiver by _number_.
126
+ # @param [Numeric] number the operand value
127
+ # @return [Length] a new muliplicative length
110
128
  def *(number)
111
129
  self.class.new(@x * number, @y * number)
112
130
  end
113
131
 
132
+ # Raises a coordinate the _number_ power.
133
+ # @param [Numeric] number the operand value
134
+ # @return [Length] a coordinate the _number_ power
114
135
  def **(number)
115
136
  self.class.new(@x ** number, @y ** number)
116
137
  end
117
138
 
118
- def quo(number)
139
+ # Returns a new divisional length of the receiver by _number_.
140
+ # @param [Numeric] other the operand value
141
+ # @return [Length] a new divisional length
142
+ # @raise [TypeError] _other_ can't be coerced into Numeric
143
+ def /(number)
119
144
  raise TypeError, "#{number.class} can't be coerced into Numeric" unless number.kind_of?(Numeric)
120
145
  self.class.new(@x.quo(number.to_f), @y.quo(number.to_f))
121
146
  end
122
147
 
123
- alias / quo
148
+ alias quo /
124
149
 
150
+ # Returns whether the receiver is the origin point.
151
+ # @return [Boolean] true if the receiver is the origin point, false
152
+ # otherwise
125
153
  def zero?
126
154
  @x.zero? && @y.zero?
127
155
  end
128
156
 
157
+ # Returns whether the receiver is not the origin point.
158
+ # @return [Coordinate, nil] self if the receiver is not the origin point,
159
+ # nil otherwise
129
160
  def nonzero?
130
161
  zero? ? nil : self
131
162
  end
132
163
 
164
+ # Returns whether the receiver equals to _other_.
165
+ # @param [Object] other an object
166
+ # @return [Boolean] true if _other_ is an instance of +Coordinate+ and
167
+ # each coordinate of receiver equals to a coordinate of _other_, false
168
+ # otherwise
133
169
  def ==(other)
134
170
  return false unless other.kind_of?(self.class)
135
171
  @x == other.x && @y == other.y
136
172
  end
137
173
 
174
+ # Returns a distance between receiver and the origin point.
175
+ # @return [Length] a distance between receiver and the origin point
138
176
  def abs
139
177
  (@x ** 2 + @y ** 2) ** 0.5
140
178
  end
141
179
 
180
+ # Returns a distance between receiver and _origin_.
181
+ # @return [Length] a distance between receiver and _origin_
142
182
  def distance(other)
143
183
  (self - other).abs
144
184
  end
145
185
 
186
+ # Returns a coordinate that converted into the user unit.
187
+ # @return [Coordinate] a coordinate that converted into the user unit
146
188
  def to_user_unit
147
189
  self.class.new(@x.to_user_unit, @y.to_user_unit)
148
190
  end
149
191
 
150
- # :call-seq:
151
- # to_s ()
152
- # to_s (format)
153
- #
192
+ # Returns a string to represent the receiver.
193
+ #
194
+ # Format string can be specified for the argument. If no argument is given,
195
+ # {.default_format} is used as format string. About format string, see the
196
+ # documentation of {.default_format} method.
197
+ # @param [String] format a format string
198
+ # @return [Length] a string to represent the receiver
199
+ # @example
200
+ # point = DYI::Coordinate.new(10, 20)
201
+ # point.to_s('<x, y>') # => "<10, 20>"
202
+ # point.to_s('\\x:x, \\y:y') # => "x:10, y:20"
203
+ # @see .default_format=
204
+ # @see .set_default_format
154
205
  def to_s(format=nil)
155
206
  fmts = (format || @@default_format).split('\\\\')
156
207
  fmts = fmts.map do |fmt|
@@ -159,7 +210,8 @@ module DYI #:nodoc:
159
210
  fmts.join('\\')
160
211
  end
161
212
 
162
- def inspect #:nodoc:
213
+ # @private
214
+ def inspect
163
215
  "(#{@x.inspect}, #{@y.inspect})"
164
216
  end
165
217
 
@@ -167,26 +219,84 @@ module DYI #:nodoc:
167
219
 
168
220
  public
169
221
 
170
- def new(*args) #:nodoc:
222
+ # Creates and returns a new instance of Coordinate provided the argument
223
+ # is not an instace of Coordinate. If the argument is an instace of
224
+ # Coordinate, returns the argument itself.
225
+ # @overload new(coordinate)
226
+ # Returns the argument itself.
227
+ # @param [Coordinate] coordinate the source coordinate
228
+ # @overload new(array)
229
+ # Return a new instance of Coordinate. First element of _array_ is used
230
+ # for x-coordinate, second element of _array_ is used y-coordinate.
231
+ # @param [Array<Length, Number, String>] array an array converted into
232
+ # Coordinate
233
+ # @raise [ArgumentError] size of _array_ does not equal to 2
234
+ # @overload new(x, y)
235
+ # @param [Length, Number, String] x an x-cooridnate
236
+ # @param [Length, Number, String] y a y-cooridnate
237
+ # @raise (see #initialize)
238
+ # @example
239
+ # x = DYI::Length(10)
240
+ # y = DYI::Length(20)
241
+ # point1 = DYI::Coordinate.new(x, y) # this point is (10, 20)
242
+ # point2 = DYI::Coordinate.new(10, 20) # it is (10, 20) too
243
+ # point3 = DYI::Coordinate.new([x, y]) # it is (10, 20) too
244
+ # point4 = DYI::Coordinate.new([10, 20]) # it is (10, 20) too
245
+ # point5 = DYI::Coordinate.new(['10px', '20px']) # it is (10, 20) too
246
+ def new(*args)
171
247
  return args.first if args.size == 1 && args.first.instance_of?(self)
172
248
  super
173
249
  end
174
250
 
175
-
176
- # Creats and Returns new instance as +new+ method when an argument is not
177
- # +nil+. If an argument is +nil+, returns +nil+.
251
+ # Returns a new instace of Coordinate if the argments is not +nil+ (calls
252
+ # +Coordinate.new+ method), but returns +nil+ if the argument is +nil+.
253
+ # @return [Coordinate, nil] a new instace of Length if the argments is not
254
+ # nil, nil otherwise
255
+ # @see .new
178
256
  def new_or_nil(*args)
179
257
  (args.size == 1 && args.first.nil?) ? nil : new(*args)
180
258
  end
181
259
 
260
+ # Creates a new instance of Coordinate using the cartesian coordinates,
261
+ # and returns it.
262
+ # @param [Length, Number, String] x an x-cooridnate
263
+ # @param [Length, Number, String] y a y-cooridnate
182
264
  def orthogonal_coordinates(x, y)
183
265
  new(x, y)
184
266
  end
185
267
 
268
+ # Creates a new instance of Coordinate using the polar coordinates,
269
+ # and returns it.
270
+ # @param [Length, Number, String] radius distance from the origin point
271
+ # @param [Numeric] theta the angle from x-direction in degrees
186
272
  def polar_coordinates(radius, theta)
187
273
  new(radius * DYI::Util.cos(theta), radius * DYI::Util.sin(theta))
188
274
  end
189
275
 
276
+ # Invokes block with given format string as default format.
277
+ # @overload set_default_format(format)
278
+ # Invokes block with given _format_ as default format. After invokes the
279
+ # block, the original format is used.
280
+ # @param [String] format a format string
281
+ # @yield a block which the format string is used in
282
+ # @return [Length] the receiver itself
283
+ # @overload set_default_format(format)
284
+ # Sets default format setring as {.default_format=} method.
285
+ # @param [String] format a format string
286
+ # @return [String] the given argument
287
+ # @example
288
+ # # an initial format string is "(x,y)"
289
+ # point = DYI::Coordinate.new(10, 20)
290
+ # point.to_s # => "(10,20)"
291
+ # DYI::Coordinate.set_default_format('<x, y>') {
292
+ # point.to_s # => "<10, 20>"
293
+ # DYI::Length.set_default_format('0.0u') {
294
+ # point.to_s # => "<10.0pt, 20.0pt>"
295
+ # }
296
+ # }
297
+ # point.to_s # => "(10,20)"
298
+ # @see Length.set_default_format
299
+ # @see .default_format=
190
300
  def set_default_format(format)
191
301
  if block_given?
192
302
  org_format = default_format
@@ -199,23 +309,29 @@ module DYI #:nodoc:
199
309
  end
200
310
  end
201
311
 
312
+ # Returns a format that is used when called {#to_s} without an argument.
313
+ # @return [String] a format string
314
+ # @see .default_format=
202
315
  def default_format
203
316
  @@default_format
204
317
  end
205
318
 
206
- # Sets format that is used when called to_s.
207
- #
208
- # The following format indicators can be used for the format specification
209
- # character string.
319
+ # Sets a format string that is used when called {#to_s} without an
320
+ # argument. The format string that is set at this method is used
321
+ # permanently. Use {.set_default_format} with a block when you want to use
322
+ # a format string temporarily.
210
323
  #
211
- # +x+:: (x-coordinate placeholder) Placeholder '+x+' is replaced as
212
- # x-coordinate.
213
- # +y+:: (y-coordinate placeholder) Placeholder '+y+' is replaced as
214
- # y-coordinate.
215
- # <tt>\\\\<tt>:: (escape character) Causes the next character to be interpreted
216
- # as a literal rather than as a custom format specifier.
217
- # all other characters:: The character is copied to the result string
218
- # unchanged.
324
+ # Uses the following characters as coordinate format strings.
325
+ # [<tt>"x"</tt> (x-coordinate placeholder)] Placeholder '+x+' is replaced
326
+ # as x-coordinate.
327
+ # [<tt>"y"</tt> (y-coordinate placeholder)] Placeholder '+y+' is replaced
328
+ # as y-coordinate.
329
+ # [<tt>"\\"</tt> (Escape Character)] Causes the next character to be
330
+ # interpreted as a literal.
331
+ # @see #to_s
332
+ # @see .set_default_format
333
+ # @see Length.default_format=
334
+ # @see Numeric#strfnum
219
335
  def default_format=(fromat)
220
336
  @@default_format = fromat.clone
221
337
  end