typographic-unit 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/.gitignore +7 -0
  2. data/Gemfile +4 -0
  3. data/HISTORY.md +12 -0
  4. data/{License.txt → LICENSE.txt} +4 -2
  5. data/README.md +87 -0
  6. data/Rakefile +16 -4
  7. data/lib/typographic-unit.rb +26 -284
  8. data/lib/typographic-unit/american-point.rb +7 -0
  9. data/lib/typographic-unit/big-point.rb +7 -0
  10. data/lib/typographic-unit/centimeter.rb +7 -0
  11. data/lib/typographic-unit/cicero.rb +7 -0
  12. data/lib/typographic-unit/didot-point.rb +7 -0
  13. data/lib/typographic-unit/gou.rb +50 -0
  14. data/lib/typographic-unit/inch.rb +6 -0
  15. data/lib/typographic-unit/jis-point.rb +6 -0
  16. data/lib/typographic-unit/meter.rb +7 -0
  17. data/lib/typographic-unit/millimeter.rb +7 -0
  18. data/lib/typographic-unit/pica.rb +7 -0
  19. data/lib/typographic-unit/postscript-point.rb +7 -0
  20. data/lib/typographic-unit/q.rb +8 -0
  21. data/lib/typographic-unit/scaled-point.rb +7 -0
  22. data/lib/typographic-unit/tex-point.rb +6 -0
  23. data/lib/typographic-unit/unit.rb +261 -0
  24. data/lib/typographic-unit/version.rb +2 -7
  25. data/{spec/typographic-unit_spec.rb → test/spec_typographic-unit.rb} +30 -32
  26. data/typographic-unit.gemspec +21 -0
  27. metadata +76 -68
  28. data/History.txt +0 -4
  29. data/Manifest.txt +0 -26
  30. data/README.txt +0 -27
  31. data/config/hoe.rb +0 -83
  32. data/config/requirements.rb +0 -17
  33. data/log/debug.log +0 -0
  34. data/script/destroy +0 -14
  35. data/script/generate +0 -14
  36. data/script/txt2html +0 -74
  37. data/setup.rb +0 -1585
  38. data/spec/spec.opts +0 -1
  39. data/spec/spec_helper.rb +0 -10
  40. data/tasks/deployment.rake +0 -34
  41. data/tasks/environment.rake +0 -7
  42. data/tasks/rspec.rake +0 -21
  43. data/tasks/website.rake +0 -17
  44. data/website/index.html +0 -180
  45. data/website/index.txt +0 -103
  46. data/website/javascripts/rounded_corners_lite.inc.js +0 -285
  47. data/website/stylesheets/screen.css +0 -138
  48. data/website/template.rhtml +0 -48
@@ -0,0 +1,7 @@
1
+ module TypographicUnit
2
+ # AmericanPoint is a unit of American point.
3
+ # See http://www.ops.dti.ne.jp/~robundo/TMTaroY01.html for details.
4
+ class AmericanPoint < Unit
5
+ unit :american_pt, Millimeter, Rational(3514, 10000)
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module TypographicUnit
2
+ # This is a class for big point(bp). Big point is defined as 1/72 inch in this
3
+ # library.
4
+ class BigPoint < Unit
5
+ unit :bp, Inch, Rational(1, 72)
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module TypographicUnit
2
+ # This is a class for representing centimeter(cm). Centimeter is defined as 10
3
+ # millimeter in this library.
4
+ class Centimeter < Unit
5
+ unit :cm, Millimeter, 10
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module TypographicUnit
2
+ # This is a class for representing cicero(cc). Cicero is defined as 12 didot
3
+ # point in this library.
4
+ class Cicero < Unit
5
+ unit :cc, DidotPoint, 12
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module TypographicUnit
2
+ # This is a class for representing didot point(dd). Didot point is defined as
3
+ # 1238/1157 tex point in this library.
4
+ class DidotPoint < Unit
5
+ unit :dd, TeXPoint, Rational(1238, 1157)
6
+ end
7
+ end
@@ -0,0 +1,50 @@
1
+ # -*- coding: utf-8 -*-
2
+ module TypographicUnit
3
+ # Gou is a unit of Japanese Gou(号).
4
+ # See http://www.um.u-tokyo.ac.jp/publish_db/1996Moji/05/5901.html and
5
+ # http://www.asahi-net.or.jp/~ax2s-kmtn/ref/type_size.html for details.
6
+ # In this library, "初号" is Gou.new(:first) or 0.gou.
7
+ class Gou < Unit
8
+ unit :gou, AmericanPoint, nil
9
+
10
+ def initialize(value)
11
+ if value.kind_of?(Unit)
12
+ raise ArgumentError.new, value
13
+ end
14
+ unless (0..8).include?(value) or value == :first
15
+ raise ArgumentError.new, value
16
+ end
17
+ @value = value
18
+ end
19
+
20
+ # Return a size according to "初号".
21
+ def self.first
22
+ 0.gou
23
+ end
24
+
25
+ # Convert the value into american point.
26
+ def scaled_point
27
+ val = case @value
28
+ when :first, 0
29
+ 42.american_pt
30
+ when 1
31
+ 27.5.american_pt
32
+ when 2
33
+ 21.american_pt
34
+ when 3
35
+ 15.75.american_pt
36
+ when 4
37
+ 13.75.american_pt
38
+ when 5
39
+ 10.5.american_pt
40
+ when 6
41
+ 7.875.american_pt
42
+ when 7
43
+ 5.25.american_pt
44
+ when 8
45
+ 3.9375.american_pt
46
+ end
47
+ val.kind_of?(ScaledPoint) ? val : val.scaled_point
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,6 @@
1
+ module TypographicUnit
2
+ # Inch is a unit of inch. 7227 TeX point equals 100 inch.
3
+ class Inch < Unit
4
+ unit :in, TeXPoint, Rational(7227, 100)
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module TypographicUnit
2
+ # JISPoint is a unit of JIS point. JIS point is just same as American point.
3
+ class JISPoint < AmericanPoint
4
+ unit :jis_pt, AmericanPoint, 1
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ module TypographicUnit
2
+ # This is a class for representing meter(cm). Meter is defined as 100
3
+ # centimeter in this library.
4
+ class Meter < Unit
5
+ unit :m, Centimeter, 100
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module TypographicUnit
2
+ # This is a class for representing millimeter(mm). Millimeter is defined as
3
+ # 10/254 inch in this library.
4
+ class Millimeter < Unit
5
+ unit :mm, Inch, Rational(10, 254)
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module TypographicUnit
2
+ # This is a class for representing Pica(pc). Pica is defined as 12 tex point
3
+ # in this library.
4
+ class Pica < Unit
5
+ unit :pc, TeXPoint, 12
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module TypographicUnit
2
+ # This is a class for representing PostScript point(ps_pt). PostScript point
3
+ # is defined as 1 big point in this library.
4
+ class PostScriptPoint < Unit
5
+ unit :ps_pt, BigPoint, 1
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module TypographicUnit
4
+ # Q is a unit of Japanese Q(級).
5
+ class Q < Unit
6
+ unit :q, Millimeter, Rational(25, 100)
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ module TypographicUnit
2
+ # This is a class for representing scaled point(sp). Scaled point is defined
3
+ # as base unit in this library.
4
+ class ScaledPoint < Unit
5
+ unit :sp, self, 1
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ module TypographicUnit
2
+ # TeXPoint is a unit of TeX point. 1 TeX point equals 65536 scaled point.
3
+ class TeXPoint < Unit
4
+ unit :pt, ScaledPoint, 65536
5
+ end
6
+ end
@@ -0,0 +1,261 @@
1
+ module TypographicUnit
2
+ # This is a base class for all unit classes.
3
+ class Unit < ::Numeric
4
+ class << self
5
+ # @api private
6
+ def register(short, unit)
7
+ TypographicUnit::TABLE[short] = unit
8
+ end
9
+ private :register
10
+
11
+ # Define a unit. This method is used in concrete unit classes.
12
+ #
13
+ # @param short [Symbol]
14
+ # short name for the unit
15
+ # @param base [Unit]
16
+ # base unit class
17
+ # @param size [Rational]
18
+ # unit size
19
+ # @return [void]
20
+ def unit(short, base, size)
21
+ @short = short
22
+ @base = base
23
+ @size = size
24
+ register(short, self)
25
+ end
26
+
27
+ # Return short name of the unit.
28
+ #
29
+ # @return [Symbol]
30
+ # short name of the unit
31
+ def short
32
+ @short
33
+ end
34
+
35
+ # Return base unit class.
36
+ #
37
+ # @return [Class]
38
+ # base unit class
39
+ def base
40
+ @base
41
+ end
42
+
43
+ # Return size of the unit.
44
+ #
45
+ # @return [Rational]
46
+ # size of the unit
47
+ def size
48
+ @size
49
+ end
50
+ end
51
+
52
+ attr_reader :value
53
+
54
+ def initialize(value)
55
+ unless value.kind_of?(Numeric) and not(value.kind_of?(Unit))
56
+ raise ArgumentError.new, value
57
+ end
58
+ @value = value
59
+ end
60
+
61
+ # Convert the value into scaled point.
62
+ #
63
+ # @return [ScaledPoint]
64
+ # scaled point representation of the length
65
+ def scaled_point
66
+ val = self.class.base.new(@value * self.class.size)
67
+ val.kind_of?(ScaledPoint) ? val : val.scaled_point
68
+ end
69
+
70
+ # @api private
71
+ def <=>(other)
72
+ raise ArgumentError, other unless other.kind_of?(Unit)
73
+ self.scaled_point.value.to_i <=> other.scaled_point.value.to_i
74
+ end
75
+
76
+ # Convert the length into other unit.
77
+ #
78
+ # @param other [Unit]
79
+ # target unit
80
+ def >>(other)
81
+ oclass = other.kind_of?(Symbol) ? TABLE[other] : other
82
+ u = oclass.new(1)
83
+ oclass.new((self.scaled_point.value / u.scaled_point.value).to_f)
84
+ end
85
+
86
+ alias :convert :>>
87
+
88
+ # Same as +Number#%+.
89
+ def %(other)
90
+ case other
91
+ when Unit
92
+ self.class.new(@value % (other >> self.class).value)
93
+ when Integer, Float
94
+ self.class.new(@value % other)
95
+ else
96
+ raise ArgumentError, other
97
+ end
98
+ end
99
+
100
+ # Same as +Number#div+.
101
+ def div(other)
102
+ case other
103
+ when Unit
104
+ @value.div((other >> self.class).value)
105
+ when Integer, Float
106
+ @value.div(other)
107
+ else
108
+ raise ArgumentError, other
109
+ end
110
+ end
111
+
112
+ # Same as +Number#quo+.
113
+ def quo(other)
114
+ case other
115
+ when Unit
116
+ @value.quo((other >> self.class).value)
117
+ when Integer, Float
118
+ @value.quo(other)
119
+ else
120
+ raise ArgumentError, other
121
+ end
122
+ end
123
+
124
+ # Same as Number#+@.
125
+ def +@
126
+ self.class.new(+@value)
127
+ end
128
+
129
+ # Same as +Number#-@+.
130
+ def -@
131
+ self.class.new(-@value)
132
+ end
133
+
134
+ # Same as +Number#abs+.
135
+ def abs
136
+ self.class.new(@value.abs)
137
+ end
138
+
139
+ # Perform addition.
140
+ #
141
+ # @param other [Unit]
142
+ # additional value
143
+ # @return [Unit]
144
+ # new value of the unit
145
+ # @example
146
+ # 1.cm + 1.mm #=> 1.1.cm
147
+ def +(other)
148
+ raise ArgumentError, other unless other.kind_of?(Unit)
149
+ self.class.new((@value + (other >> self.class).value).to_f)
150
+ end
151
+
152
+ # Perform subtraction.
153
+ #
154
+ # @param other [Unit]
155
+ # subtractional value
156
+ # @return [Unit]
157
+ # new value of the unit
158
+ # @example
159
+ # 1.cm - 1.mm #=> 0.9.cm
160
+ def -(other)
161
+ raise ArgumentError, other unless other.kind_of?(Unit)
162
+ self.class.new((@value - (other >> self.class).value).to_f)
163
+ end
164
+
165
+ # Same as +Number#*+.
166
+ def *(other)
167
+ raise ArgumentError, other unless other.kind_of?(Integer) or other.kind_of?(Float)
168
+ self.class.new(@value * other)
169
+ end
170
+
171
+ # Same as +Number#ceil+.
172
+ def ceil
173
+ self.class.new(@value.ceil)
174
+ end
175
+
176
+ # Same as +Number#floor+.
177
+ def floor
178
+ self.class.new(@value.floor)
179
+ end
180
+
181
+ # Same as +Number#round+.
182
+ def round
183
+ self.class.new(@value.round)
184
+ end
185
+
186
+ # Same as +Number#truncate+.
187
+ def truncate
188
+ self.class.new(@value.truncate)
189
+ end
190
+
191
+ # Same as +Number#integer?+.
192
+ def integer?
193
+ @value.integer?
194
+ end
195
+
196
+ # Same as +Number#nonzero?+.
197
+ def nonzero?
198
+ @value.nonzero?
199
+ end
200
+
201
+ # Convert to float representation.
202
+ #
203
+ # @return [Unit]
204
+ # same unit but the value is float
205
+ # @example
206
+ # 1.cm.to_f #=> 1.0.cm
207
+ def to_f
208
+ self.class.new(@value.to_f)
209
+ end
210
+
211
+ # Convert to int representaion.
212
+ #
213
+ # @return [Unit]
214
+ # same unit but the value is int
215
+ # @example
216
+ # 1.0.cm.to_i #=> 1.cm
217
+ def to_i
218
+ self.class.new(@value.to_i)
219
+ end
220
+
221
+ # Convert to int representation.
222
+ #
223
+ # @return [Unit]
224
+ # same unit but the value is float
225
+ # @example
226
+ # 1.cm.to_f #=> 1.0.cm
227
+ def to_int
228
+ @value.to_i
229
+ end
230
+
231
+ # Same as +Number#zero?+.
232
+ def zero?
233
+ @value.zero?
234
+ end
235
+
236
+ # Same as +Number#step+ but you can specify +step+ as unit length.
237
+ #
238
+ # @param limit [Unit]
239
+ # limit length
240
+ # @param step [Unit]
241
+ # step
242
+ def step(limit, step=1)
243
+ step = step.kind_of?(Unit) ? step : self.class.new(step)
244
+ @value.step(limit.value, (step >> self.class).value) do |n|
245
+ yield(self.class.new(n)) if block_given?
246
+ end
247
+ end
248
+
249
+ # Return string format.
250
+ def to_s
251
+ @value.to_s + self.class.short.to_s
252
+ end
253
+
254
+ # @api private
255
+ def inspect
256
+ "#<#{@value.to_s}#{self.class.short.to_s}>"
257
+ end
258
+
259
+ alias :eql? :"=="
260
+ end
261
+ end
@@ -1,9 +1,4 @@
1
1
  module TypographicUnit
2
- module VERSION #:nodoc:
3
- MAJOR = 0
4
- MINOR = 1
5
- TINY = 1
6
-
7
- STRING = [MAJOR, MINOR, TINY].join('.')
8
- end
2
+ # Version number of typographic-unit.
3
+ VERSION = "0.2.0"
9
4
  end