color-tools 1.2.0 → 1.3.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/Changelog +35 -1
- data/Install +11 -2
- data/README +44 -12
- data/Rakefile +11 -2
- data/lib/color.rb +35 -158
- data/lib/color/cmyk.rb +62 -18
- data/lib/color/css.rb +27 -0
- data/lib/color/grayscale.rb +43 -13
- data/lib/color/hsl.rb +130 -0
- data/lib/color/palette.rb +4 -0
- data/lib/color/palette/gimp.rb +47 -12
- data/lib/color/palette/monocontrast.rb +41 -11
- data/lib/color/rgb-colors.rb +189 -0
- data/lib/color/rgb.rb +163 -27
- data/lib/color/rgb/metallic.rb +28 -0
- data/lib/color/yiq.rb +35 -9
- data/metaconfig +11 -2
- data/pre-setup.rb +12 -3
- data/tests/test_cmyk.rb +116 -0
- data/tests/test_css.rb +28 -0
- data/tests/test_gimp.rb +79 -0
- data/tests/test_grayscale.rb +87 -0
- data/tests/test_hsl.rb +93 -0
- data/tests/test_monocontrast.rb +145 -0
- data/tests/test_rgb.rb +160 -0
- data/tests/test_yiq.rb +81 -0
- data/tests/testall.rb +20 -0
- metadata +23 -8
@@ -0,0 +1,28 @@
|
|
1
|
+
#--
|
2
|
+
# Colour management with Ruby.
|
3
|
+
#
|
4
|
+
# Copyright 2005 Austin Ziegler
|
5
|
+
# http://rubyforge.org/ruby-pdf/
|
6
|
+
#
|
7
|
+
# Licensed under a MIT-style licence.
|
8
|
+
#
|
9
|
+
# $Id: metallic.rb,v 1.1 2005/08/05 23:07:20 austin Exp $
|
10
|
+
#++
|
11
|
+
|
12
|
+
# This namespace contains some RGB metallic colours suggested by Jim Freeze.
|
13
|
+
module Color::RGB::Metallic
|
14
|
+
Aluminum = Color::RGB.new(0x99, 0x99, 0x99)
|
15
|
+
CoolCopper = Color::RGB.new(0xd9, 0x87, 0x19)
|
16
|
+
Copper = Color::RGB.new(0xb8, 0x73, 0x33)
|
17
|
+
Iron = Color::RGB.new(0x4c, 0x4c, 0x4c)
|
18
|
+
Lead = Color::RGB.new(0x19, 0x19, 0x19)
|
19
|
+
Magnesium = Color::RGB.new(0xb3, 0xb3, 0xb3)
|
20
|
+
Mercury = Color::RGB.new(0xe6, 0xe6, 0xe6)
|
21
|
+
Nickel = Color::RGB.new(0x80, 0x80, 0x80)
|
22
|
+
PolySilicon = Color::RGB.new(0x60, 0x00, 0x00)
|
23
|
+
Poly = PolySilicon
|
24
|
+
Silver = Color::RGB.new(0xcc, 0xcc, 0xcc)
|
25
|
+
Steel = Color::RGB.new(0x66, 0x66, 0x66)
|
26
|
+
Tin = Color::RGB.new(0x7f, 0x7f, 0x7f)
|
27
|
+
Tungsten = Color::RGB.new(0x33, 0x33, 0x33)
|
28
|
+
end
|
data/lib/color/yiq.rb
CHANGED
@@ -3,11 +3,17 @@
|
|
3
3
|
#
|
4
4
|
# Copyright 2005 Austin Ziegler
|
5
5
|
# http://rubyforge.org/ruby-pdf/
|
6
|
+
#
|
7
|
+
# Licensed under a MIT-style licence.
|
8
|
+
#
|
9
|
+
# $Id: yiq.rb,v 1.3 2005/08/08 02:44:17 austin Exp $
|
6
10
|
#++
|
7
11
|
|
8
12
|
# A colour object representing YIQ (NTSC) colour encoding.
|
9
13
|
class Color::YIQ
|
10
14
|
# Creates a YIQ colour object from fractional values 0 .. 1.
|
15
|
+
#
|
16
|
+
# Color::YIQ.new(0.3, 0.2, 0.1)
|
11
17
|
def self.from_fraction(y = 0, i = 0, q = 0)
|
12
18
|
color = Color::YIQ.new
|
13
19
|
color.y = y
|
@@ -17,6 +23,8 @@ class Color::YIQ
|
|
17
23
|
end
|
18
24
|
|
19
25
|
# Creates a YIQ colour object from percentages 0 .. 100.
|
26
|
+
#
|
27
|
+
# Color::YIQ.new(10, 20, 30)
|
20
28
|
def initialize(y = 0, i = 0, q = 0)
|
21
29
|
@y = y / 100.0
|
22
30
|
@i = i / 100.0
|
@@ -27,13 +35,15 @@ class Color::YIQ
|
|
27
35
|
# converted to YIQ before comparison, so the comparison between a YIQ
|
28
36
|
# colour and a non-YIQ colour will be approximate and based on the other
|
29
37
|
# colour's #to_yiq conversion. If there is no #to_yiq conversion, this
|
30
|
-
# will raise an exception.
|
38
|
+
# will raise an exception. This will report that two YIQ values are
|
39
|
+
# equivalent if all component colours are within 1e-4 (0.0001) of each
|
40
|
+
# other.
|
31
41
|
def ==(other)
|
32
42
|
other = other.to_yiq
|
33
43
|
other.kind_of?(Color::YIQ) and
|
34
|
-
(@y
|
35
|
-
(@i
|
36
|
-
(@q
|
44
|
+
((@y - other.y).abs <= 1e-4) and
|
45
|
+
((@i - other.i).abs <= 1e-4) and
|
46
|
+
((@q - other.q).abs <= 1e-4)
|
37
47
|
end
|
38
48
|
|
39
49
|
def to_yiq
|
@@ -41,12 +51,28 @@ class Color::YIQ
|
|
41
51
|
end
|
42
52
|
|
43
53
|
def brightness
|
44
|
-
@
|
54
|
+
@y
|
55
|
+
end
|
56
|
+
def to_grayscale
|
57
|
+
Color::GrayScale.new(@y)
|
45
58
|
end
|
46
|
-
alias to_grayscale brightness
|
47
59
|
alias to_greyscale to_grayscale
|
48
60
|
|
49
|
-
attr_accessor :y
|
50
|
-
|
51
|
-
|
61
|
+
attr_accessor :y, :i, :q
|
62
|
+
remove_method :y=, :i=, :q=
|
63
|
+
def y=(yy) #:nodoc:
|
64
|
+
yy = 1.0 if yy > 1
|
65
|
+
yy = 0.0 if yy < 0
|
66
|
+
@y = yy
|
67
|
+
end
|
68
|
+
def i=(ii) #:nodoc:
|
69
|
+
ii = 1.0 if ii > 1
|
70
|
+
ii = 0.0 if ii < 0
|
71
|
+
@i = ii
|
72
|
+
end
|
73
|
+
def q=(qq) #:nodoc:
|
74
|
+
qq = 1.0 if qq > 1
|
75
|
+
qq = 0.0 if qq < 0
|
76
|
+
@q = qq
|
77
|
+
end
|
52
78
|
end
|
data/metaconfig
CHANGED
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
#
|
2
|
+
#--
|
3
|
+
# Colour management with Ruby.
|
4
|
+
#
|
5
|
+
# Copyright 2005 Austin Ziegler
|
6
|
+
# http://rubyforge.org/ruby-pdf/
|
4
7
|
#
|
8
|
+
# Licensed under a MIT-style licence.
|
9
|
+
#
|
10
|
+
# $Id: metaconfig,v 1.2 2005/08/05 23:07:20 austin Exp $
|
11
|
+
#++
|
12
|
+
# vim: sts=2 sw=2 ts=4 et ai tw=77
|
13
|
+
|
data/pre-setup.rb
CHANGED
@@ -1,4 +1,13 @@
|
|
1
|
-
|
1
|
+
#--
|
2
|
+
# Colour management with Ruby.
|
3
|
+
#
|
4
|
+
# Copyright 2005 Austin Ziegler
|
5
|
+
# http://rubyforge.org/ruby-pdf/
|
6
|
+
#
|
7
|
+
# Licensed under a MIT-style licence.
|
8
|
+
#
|
9
|
+
# $Id: pre-setup.rb,v 1.5 2005/08/08 02:53:16 austin Exp $
|
10
|
+
#++
|
2
11
|
# vim: sts=2 sw=2 ts=4 et ai tw=77
|
3
12
|
|
4
13
|
require 'rdoc/rdoc'
|
@@ -12,7 +21,7 @@ rescue Exception => e
|
|
12
21
|
end
|
13
22
|
|
14
23
|
def build_ri(files)
|
15
|
-
RDoc::RDoc.new.document(
|
24
|
+
RDoc::RDoc.new.document(files)
|
16
25
|
rescue RDoc::RDocError => e
|
17
26
|
$stderr.puts e.message
|
18
27
|
rescue Exception => e
|
@@ -43,4 +52,4 @@ ri = %w(--ri-site --merge)
|
|
43
52
|
dox = %w(README Changelog lib)
|
44
53
|
build_rdoc rdoc + dox
|
45
54
|
build_ri ri + dox
|
46
|
-
|
55
|
+
run_tests Dir["tests/test_*.rb"]
|
data/tests/test_cmyk.rb
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
# Colour management with Ruby.
|
4
|
+
#
|
5
|
+
# Copyright 2005 Austin Ziegler
|
6
|
+
# http://rubyforge.org/ruby-pdf/
|
7
|
+
#
|
8
|
+
# Licensed under a MIT-style licence.
|
9
|
+
#
|
10
|
+
# $Id: test_cmyk.rb,v 1.1 2005/08/08 02:44:17 austin Exp $
|
11
|
+
#++
|
12
|
+
|
13
|
+
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
|
14
|
+
require 'test/unit' unless defined? $ZENTEST and $ZENTEST
|
15
|
+
require 'color'
|
16
|
+
|
17
|
+
module TestColor
|
18
|
+
class TestCMYK < Test::Unit::TestCase
|
19
|
+
def setup
|
20
|
+
@cmyk = Color::CMYK.new(10, 20, 30, 40)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_c
|
24
|
+
assert_in_delta(0.1, @cmyk.c, 1e-4)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_c_equals
|
28
|
+
assert_in_delta(0.1, @cmyk.c, 1e-4)
|
29
|
+
assert_nothing_raised { @cmyk.c = 0.2 }
|
30
|
+
assert_in_delta(0.2, @cmyk.c, 1e-4)
|
31
|
+
assert_nothing_raised { @cmyk.c = 2.0 }
|
32
|
+
assert_in_delta(1.0, @cmyk.c, 1e-4)
|
33
|
+
assert_nothing_raised { @cmyk.c = -1.0 }
|
34
|
+
assert_in_delta(0.0, @cmyk.c, 1e-4)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_html
|
38
|
+
assert(@cmyk.html =~ /^#[0-9a-fA-F]{6}/)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_k
|
42
|
+
assert_in_delta(0.4, @cmyk.k, 1e-4)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_k_equals
|
46
|
+
assert_in_delta(0.4, @cmyk.k, 1e-4)
|
47
|
+
assert_nothing_raised { @cmyk.k = 0.2 }
|
48
|
+
assert_in_delta(0.2, @cmyk.k, 1e-4)
|
49
|
+
assert_nothing_raised { @cmyk.k = 2.0 }
|
50
|
+
assert_in_delta(1.0, @cmyk.k, 1e-4)
|
51
|
+
assert_nothing_raised { @cmyk.k = -1.0 }
|
52
|
+
assert_in_delta(0.0, @cmyk.k, 1e-4)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_m
|
56
|
+
assert_in_delta(0.2, @cmyk.m, 1e-4)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_m_equals
|
60
|
+
assert_in_delta(0.2, @cmyk.m, 1e-4)
|
61
|
+
assert_nothing_raised { @cmyk.m = 0.3 }
|
62
|
+
assert_in_delta(0.3, @cmyk.m, 1e-4)
|
63
|
+
assert_nothing_raised { @cmyk.m = 2.0 }
|
64
|
+
assert_in_delta(1.0, @cmyk.m, 1e-4)
|
65
|
+
assert_nothing_raised { @cmyk.m = -1.0 }
|
66
|
+
assert_in_delta(0.0, @cmyk.m, 1e-4)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_pdf_fill
|
70
|
+
assert_equal("0.100 0.200 0.300 0.400 k", @cmyk.pdf_fill)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_pdf_stroke
|
74
|
+
assert_equal("0.100 0.200 0.300 0.400 K", @cmyk.pdf_stroke)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_to_cmyk
|
78
|
+
assert(@cmyk.to_cmyk == @cmyk)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_to_grayscale
|
82
|
+
assert_kind_of(Color::GrayScale, @cmyk.to_grayscale)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_to_greyscale
|
86
|
+
assert_kind_of(Color::GreyScale, @cmyk.to_grayscale)
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_to_hsl
|
90
|
+
assert_kind_of(Color::HSL, @cmyk.to_hsl)
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_to_rgb
|
94
|
+
assert_kind_of(Color::RGB, @cmyk.to_rgb(true))
|
95
|
+
assert_kind_of(Color::RGB, @cmyk.to_rgb)
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_to_yiq
|
99
|
+
assert_kind_of(Color::YIQ, @cmyk.to_yiq)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_y
|
103
|
+
assert_in_delta(0.3, @cmyk.y, 1e-4)
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_y_equals
|
107
|
+
assert_in_delta(0.3, @cmyk.y, 1e-4)
|
108
|
+
assert_nothing_raised { @cmyk.y = 0.2 }
|
109
|
+
assert_in_delta(0.2, @cmyk.y, 1e-4)
|
110
|
+
assert_nothing_raised { @cmyk.y = 2.0 }
|
111
|
+
assert_in_delta(1.0, @cmyk.y, 1e-4)
|
112
|
+
assert_nothing_raised { @cmyk.y = -1.0 }
|
113
|
+
assert_in_delta(0.0, @cmyk.y, 1e-4)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
data/tests/test_css.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
# Colour management with Ruby.
|
4
|
+
#
|
5
|
+
# Copyright 2005 Austin Ziegler
|
6
|
+
# http://rubyforge.org/ruby-pdf/
|
7
|
+
#
|
8
|
+
# Licensed under a MIT-style licence.
|
9
|
+
#
|
10
|
+
# $Id: test_css.rb,v 1.1 2005/08/08 02:44:17 austin Exp $
|
11
|
+
#++
|
12
|
+
|
13
|
+
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
|
14
|
+
require 'test/unit' unless defined? $ZENTEST and $ZENTEST
|
15
|
+
require 'color'
|
16
|
+
require 'color/css'
|
17
|
+
|
18
|
+
module TestColor
|
19
|
+
class TestCSS < Test::Unit::TestCase
|
20
|
+
def test_index
|
21
|
+
assert_equal(Color::RGB::AliceBlue, Color::CSS[:aliceblue])
|
22
|
+
assert_equal(Color::RGB::AliceBlue, Color::CSS["AliceBlue"])
|
23
|
+
assert_equal(Color::RGB::AliceBlue, Color::CSS["aliceBlue"])
|
24
|
+
assert_equal(Color::RGB::AliceBlue, Color::CSS["aliceblue"])
|
25
|
+
assert_equal(Color::RGB::AliceBlue, Color::CSS[:AliceBlue])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/tests/test_gimp.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
# Colour management with Ruby.
|
4
|
+
#
|
5
|
+
# Copyright 2005 Austin Ziegler
|
6
|
+
# http://rubyforge.org/ruby-pdf/
|
7
|
+
#
|
8
|
+
# Licensed under a MIT-style licence.
|
9
|
+
#
|
10
|
+
# $Id: test_gimp.rb,v 1.1 2005/08/08 02:44:17 austin Exp $
|
11
|
+
#++
|
12
|
+
|
13
|
+
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
|
14
|
+
require 'test/unit' unless defined? $ZENTEST and $ZENTEST
|
15
|
+
require 'color'
|
16
|
+
require 'color/palette/gimp'
|
17
|
+
|
18
|
+
module TestColor
|
19
|
+
module TestPalette
|
20
|
+
class TestGimp < Test::Unit::TestCase
|
21
|
+
def setup
|
22
|
+
wsc = <<-EOS
|
23
|
+
GIMP Palette
|
24
|
+
Name: W3C Named Colors
|
25
|
+
Columns: 2
|
26
|
+
#
|
27
|
+
# ColorZilla W3C Named Colors
|
28
|
+
#
|
29
|
+
255 255 255 White
|
30
|
+
255 255 0 Yellow
|
31
|
+
255 0 255 Fuchsia
|
32
|
+
255 0 0 Red
|
33
|
+
192 192 192 Silver
|
34
|
+
128 128 128 Gray
|
35
|
+
128 128 0 Olive
|
36
|
+
128 0 128 Purple
|
37
|
+
128 0 0 Maroon
|
38
|
+
0 255 255 Aqua
|
39
|
+
0 255 0 Lime
|
40
|
+
0 128 128 Teal
|
41
|
+
0 128 0 Green
|
42
|
+
0 0 255 Blue
|
43
|
+
0 0 128 Navy
|
44
|
+
0 0 0 Black
|
45
|
+
EOS
|
46
|
+
@gimp = Color::Palette::Gimp.new(wsc)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_each
|
50
|
+
assert_equal(16, @gimp.instance_variable_get(:@colors).size)
|
51
|
+
@gimp.each { |el| assert_kind_of(Color::RGB, el) }
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_each_name
|
55
|
+
assert_equal(16, @gimp.instance_variable_get(:@names).size)
|
56
|
+
|
57
|
+
@gimp.each_name { |color_name, color_set|
|
58
|
+
assert_kind_of(Array, color_set)
|
59
|
+
color_set.each { |el|
|
60
|
+
assert_kind_of(Color::RGB, el)
|
61
|
+
}
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_index
|
66
|
+
assert_equal(Color::RGB::White, @gimp[0])
|
67
|
+
assert_equal(Color::RGB::White, @gimp["White"][0])
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_valid_eh
|
71
|
+
assert(@gimp.valid?)
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_name
|
75
|
+
assert_equal("W3C Named Colors", @gimp.name)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
# Colour management with Ruby.
|
4
|
+
#
|
5
|
+
# Copyright 2005 Austin Ziegler
|
6
|
+
# http://rubyforge.org/ruby-pdf/
|
7
|
+
#
|
8
|
+
# Licensed under a MIT-style licence.
|
9
|
+
#
|
10
|
+
# $Id: test_grayscale.rb,v 1.1 2005/08/08 02:44:17 austin Exp $
|
11
|
+
#++
|
12
|
+
|
13
|
+
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
|
14
|
+
require 'test/unit' unless defined? $ZENTEST and $ZENTEST
|
15
|
+
require 'color'
|
16
|
+
|
17
|
+
module TestColor
|
18
|
+
class TestGrayScale < Test::Unit::TestCase
|
19
|
+
def setup
|
20
|
+
@gs = Color::GrayScale.new(33)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_brightness
|
24
|
+
assert_in_delta(0.33, @gs.brightness, 1e-4)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_darken_by
|
28
|
+
assert_in_delta(0.297, @gs.darken_by(10).g, 1e-4)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_g
|
32
|
+
assert_in_delta(0.33, @gs.g, 1e-4)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_g_equals
|
36
|
+
assert_in_delta(0.33, @gs.g, 1e-4)
|
37
|
+
assert_nothing_raised { @gs.g = 0.4 }
|
38
|
+
assert_in_delta(0.4, @gs.g, 1e-4)
|
39
|
+
assert_nothing_raised { @gs.g = 2.0 }
|
40
|
+
assert_in_delta(1.0, @gs.g, 1e-4)
|
41
|
+
assert_nothing_raised { @gs.g = -2.0 }
|
42
|
+
assert_in_delta(0.0, @gs.g, 1e-4)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_html
|
46
|
+
assert_equal("#545454", @gs.html)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_lighten_by
|
50
|
+
assert_in_delta(0.363, @gs.lighten_by(10).g, 1e-4)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_pdf_fill
|
54
|
+
assert_equal("0.330 g", @gs.pdf_fill)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_pdf_stroke
|
58
|
+
assert_equal("0.330 G", @gs.pdf_stroke)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_to_cmyk
|
62
|
+
assert_kind_of(Color::CMYK, @gs.to_cmyk)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_to_grayscale
|
66
|
+
assert_equal(@gs, @gs.to_grayscale)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_to_greyscale
|
70
|
+
assert_equal(@gs, @gs.to_greyscale)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_to_hsl
|
74
|
+
assert_kind_of(Color::HSL, @gs.to_hsl)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_to_rgb
|
78
|
+
assert_kind_of(Color::RGB, @gs.to_rgb)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_to_yiq
|
82
|
+
assert_kind_of(Color::YIQ, @gs.to_yiq)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# Number of errors detected: 2
|