barcode1dtools 1.0.1.0 → 1.0.2.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/lib/barcode1dtools.rb +174 -61
- data/lib/barcode1dtools/codabar.rb +40 -28
- data/lib/barcode1dtools/code11.rb +34 -23
- data/lib/barcode1dtools/code128.rb +56 -27
- data/lib/barcode1dtools/code3of9.rb +42 -28
- data/lib/barcode1dtools/code93.rb +41 -26
- data/lib/barcode1dtools/coop2of5.rb +36 -25
- data/lib/barcode1dtools/ean13.rb +97 -89
- data/lib/barcode1dtools/ean8.rb +39 -27
- data/lib/barcode1dtools/iata2of5.rb +32 -23
- data/lib/barcode1dtools/industrial2of5.rb +33 -24
- data/lib/barcode1dtools/interleaved2of5.rb +30 -26
- data/lib/barcode1dtools/matrix2of5.rb +33 -24
- data/lib/barcode1dtools/msi.rb +35 -23
- data/lib/barcode1dtools/plessey.rb +33 -23
- data/lib/barcode1dtools/postnet.rb +29 -21
- data/lib/barcode1dtools/upc_a.rb +47 -23
- data/lib/barcode1dtools/upc_e.rb +67 -31
- data/lib/barcode1dtools/upc_supplemental_2.rb +50 -20
- data/lib/barcode1dtools/upc_supplemental_5.rb +49 -18
- metadata +13 -13
@@ -16,14 +16,15 @@ module Barcode1DTools
|
|
16
16
|
# checksum and wish to have it validated, or :skip_checksum =>
|
17
17
|
# true if you don't wish to add one or have it validated.
|
18
18
|
#
|
19
|
-
# COOP 2 of 5 is low-density and limited. It should not be
|
19
|
+
# *Note:* COOP 2 of 5 is low-density and limited. It should not be
|
20
20
|
# used in any new applications.
|
21
21
|
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
22
|
+
# == Example
|
23
|
+
# val = "3423"
|
24
|
+
# bc = Barcode1DTools::Coop2of5.new(val)
|
25
|
+
# pattern = bc.bars
|
26
|
+
# rle_pattern = bc.rle
|
27
|
+
# width = bc.width
|
27
28
|
#
|
28
29
|
# The object created is immutable.
|
29
30
|
#
|
@@ -34,27 +35,28 @@ module Barcode1DTools
|
|
34
35
|
# Coop2of5 characters consist of 3 bars and 2 spaces, with a narrow
|
35
36
|
# space between them. 2 of the bars/spaces in each symbol are wide.
|
36
37
|
#
|
38
|
+
# == Formats
|
37
39
|
# There are three formats for the returned pattern:
|
38
40
|
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
41
|
+
# *bars* - 1s and 0s specifying black lines and white spaces. Actual
|
42
|
+
# characters can be changed from "1" and 0" with options
|
43
|
+
# :line_character and :space_character.
|
42
44
|
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
45
|
+
# *rle* - Run-length-encoded version of the pattern. The first
|
46
|
+
# number is always a black line, with subsequent digits
|
47
|
+
# alternating between spaces and lines. The digits specify
|
48
|
+
# the width of each line or space.
|
47
49
|
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
50
|
+
# *wn* - The native format for this barcode type. The string
|
51
|
+
# consists of a series of "w" and "n" characters. The first
|
52
|
+
# item is always a black line, with subsequent characters
|
53
|
+
# alternating between spaces and lines. A "wide" item
|
54
|
+
# is twice the width of a "narrow" item.
|
53
55
|
#
|
54
56
|
# The "width" method will tell you the total end-to-end width, in
|
55
57
|
# units, of the entire barcode.
|
56
58
|
#
|
57
|
-
|
59
|
+
# == Rendering
|
58
60
|
#
|
59
61
|
# The standard w/n ratio seems to be 2:1. There seem to be no real
|
60
62
|
# standards for display.
|
@@ -62,7 +64,7 @@ module Barcode1DTools
|
|
62
64
|
class Coop2of5 < Barcode1D
|
63
65
|
|
64
66
|
# Character sequence - 0-based offset in this string is character
|
65
|
-
# number
|
67
|
+
# number.
|
66
68
|
CHAR_SEQUENCE = "0123456789"
|
67
69
|
|
68
70
|
# Patterns for making bar codes. Note that the position
|
@@ -82,7 +84,9 @@ module Barcode1DTools
|
|
82
84
|
'9'=> {'val'=>9 ,'wn'=>'wnwnn'}
|
83
85
|
}
|
84
86
|
|
87
|
+
# Left guard pattern
|
85
88
|
GUARD_PATTERN_LEFT_WN = 'wnw'
|
89
|
+
# Right guard pattern
|
86
90
|
GUARD_PATTERN_RIGHT_WN = 'nww'
|
87
91
|
|
88
92
|
DEFAULT_OPTIONS = {
|
@@ -94,11 +98,14 @@ module Barcode1DTools
|
|
94
98
|
}
|
95
99
|
|
96
100
|
class << self
|
97
|
-
# Coop2of5 can encode digits
|
101
|
+
# Coop2of5 can encode digits. This will return
|
102
|
+
# true given a string of digits.
|
98
103
|
def can_encode?(value)
|
99
104
|
value.to_s =~ /\A[0-9]+\z/
|
100
105
|
end
|
101
106
|
|
107
|
+
# Generates a check digit for a given value. This uses a Luhn
|
108
|
+
# algorithm.
|
102
109
|
def generate_check_digit_for(value)
|
103
110
|
raise UnencodableCharactersError unless self.can_encode?(value)
|
104
111
|
mult = 3
|
@@ -106,13 +113,16 @@ module Barcode1DTools
|
|
106
113
|
(10 - (value % 10)) % 10
|
107
114
|
end
|
108
115
|
|
116
|
+
# Validates a check digit given a string of digits. It is assumed
|
117
|
+
# that the last digit is the check digit. Returns "true" if
|
118
|
+
# the check digit is correct.
|
109
119
|
def validate_check_digit_for(value)
|
110
120
|
raise UnencodableCharactersError unless self.can_encode?(value)
|
111
121
|
md = value.match(/^(\d+?)(\d)$/)
|
112
122
|
self.generate_check_digit_for(md[1]) == md[2].to_i
|
113
123
|
end
|
114
124
|
|
115
|
-
# Decode a string in rle format. This will return a Coop2of5
|
125
|
+
# Decode a string in rle or w/n format. This will return a Coop2of5
|
116
126
|
# object.
|
117
127
|
def decode(str, options = {})
|
118
128
|
if str =~ /[^1-3]/ && str =~ /[^wn]/
|
@@ -163,6 +173,7 @@ module Barcode1DTools
|
|
163
173
|
|
164
174
|
end
|
165
175
|
|
176
|
+
# Create a new Coop2of5 object with a given value.
|
166
177
|
# Options are :line_character, :space_character, :w_character,
|
167
178
|
# :n_character, :checksum_included, and :skip_checksum.
|
168
179
|
def initialize(value, options = {})
|
@@ -195,17 +206,17 @@ module Barcode1DTools
|
|
195
206
|
@wn ||= wn_str.tr('wn', @options[:w_character].to_s + @options[:n_character].to_s)
|
196
207
|
end
|
197
208
|
|
198
|
-
#
|
209
|
+
# Returns a run-length-encoded string representation
|
199
210
|
def rle
|
200
211
|
@rle ||= self.class.wn_to_rle(self.wn, @options)
|
201
212
|
end
|
202
213
|
|
203
|
-
#
|
214
|
+
# Returns 1s and 0s (for "black" and "white")
|
204
215
|
def bars
|
205
216
|
@bars ||= self.class.rle_to_bars(self.rle, @options)
|
206
217
|
end
|
207
218
|
|
208
|
-
#
|
219
|
+
# Returns the total unit width of the bar code
|
209
220
|
def width
|
210
221
|
@width ||= rle.split('').inject(0) { |a,c| a + c.to_i }
|
211
222
|
end
|
data/lib/barcode1dtools/ean13.rb
CHANGED
@@ -7,60 +7,51 @@
|
|
7
7
|
|
8
8
|
module Barcode1DTools
|
9
9
|
|
10
|
-
# Barcode1DTools::EAN_13 - Create pattern for EAN-13 barcodes
|
11
|
-
|
10
|
+
# Barcode1DTools::EAN_13 - Create pattern for EAN-13 barcodes.
|
12
11
|
# The value encoded is an
|
13
12
|
# integer, and a checksum digit will be added. You can add the option
|
14
13
|
# :checksum_included => true when initializing to specify that you
|
15
14
|
# have already included a checksum.
|
16
15
|
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
16
|
+
# == Example
|
17
|
+
# # Note that this number is a UPC-A, with the number system of 08,
|
18
|
+
# # manufacturer's code of "28999", product code of "00682", and a
|
19
|
+
# # checksum of "3" (not included)
|
20
|
+
# num = '082899900682'
|
21
|
+
# bc = Barcode1DTools::EAN13.new(num)
|
22
|
+
# pattern = bc.bars
|
23
|
+
# rle_pattern = bc.rle
|
24
|
+
# width = bc.width
|
25
|
+
# check_digit = Barcode1DTools::EAN13.generate_check_digit_for(num)
|
26
26
|
#
|
27
27
|
# The object created is immutable.
|
28
28
|
#
|
29
|
+
# == Formats
|
29
30
|
# There are two formats for the returned pattern (wn format is
|
30
31
|
# not available):
|
31
32
|
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
# in the string renders to a single unit width.
|
33
|
+
# *bars* - 1s and 0s specifying black lines and white spaces. Actual
|
34
|
+
# characters can be changed from "1" and 0" with options
|
35
|
+
# :line_character and :space_character.
|
36
36
|
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
37
|
+
# *rle* - Run-length-encoded version of the pattern. The first
|
38
|
+
# number is always a black line, with subsequent digits
|
39
|
+
# alternating between spaces and lines. The digits specify
|
40
|
+
# the width of each line or space.
|
41
41
|
#
|
42
42
|
# The "width" method will tell you the total end-to-end width, in
|
43
43
|
# units, of the entire barcode.
|
44
44
|
#
|
45
|
-
# Unlike some of the other barcodes, e.g. Code 3 of 9, there is no "
|
45
|
+
# Unlike some of the other barcodes, e.g. Code 3 of 9, there is no "w/n" format for
|
46
46
|
# EAN & UPC style barcodes because the bars and spaces are variable width from
|
47
|
-
# 1 to
|
47
|
+
# 1 to 4 units.
|
48
48
|
#
|
49
|
-
#
|
50
|
-
# "49". The table below shows "49" to be "Japan".
|
51
|
-
#
|
52
|
-
# Also note that many books use a "bookland" code, perhaps along with a UPC
|
53
|
-
# Supplemental. The bookland code is really an EAN-13 with the initial 3 digits
|
54
|
-
# of "978". The next 9 digits are the first 9 digits of the ISBN, and of course
|
55
|
-
# we still include the final check digit. An ISBN is 10 digits, however, the
|
56
|
-
# final digit is also a check digit, so it is not necessary.
|
57
|
-
#
|
58
|
-
# MISCELLANEOUS INFORMATION
|
49
|
+
# == Miscellaneous Information
|
59
50
|
#
|
60
51
|
# An EAN-13 with an initial "number system" digit of "0" is a UPC-A.
|
61
52
|
# The BarcodeTools::UPC_A module actually just uses this EAN13 module.
|
62
53
|
#
|
63
|
-
#
|
54
|
+
# An EAN-13 barcode has 4 elements:
|
64
55
|
# 1. A two-digit "number system" designation
|
65
56
|
# 2. A 5-digit manufacturer's code
|
66
57
|
# 3. A 5-digit product code
|
@@ -71,45 +62,54 @@ module Barcode1DTools
|
|
71
62
|
# systems are further split up. An example is "74", which is used for
|
72
63
|
# Central America with "740" for Guatemala, "741" for El Salvador, etc.
|
73
64
|
#
|
74
|
-
#
|
65
|
+
# Note that JAN codes (Japanese) are simply EAN-13's, and they always start with
|
66
|
+
# "49". The table below shows "49" to be "Japan".
|
67
|
+
#
|
68
|
+
# Also note that many books use a "bookland" code, perhaps along with a UPC
|
69
|
+
# Supplemental. The bookland code is really an EAN-13 with the initial 3 digits
|
70
|
+
# of "978". The next 9 digits are the first 9 digits of the ISBN, and of course
|
71
|
+
# we still include the final check digit. An ISBN is 10 digits, however, the
|
72
|
+
# final digit is also a check digit, so it is not necessary.
|
75
73
|
#
|
76
|
-
#
|
77
|
-
# 20-29: In-Store Functions 594: Romania 784: Paraguay
|
78
|
-
# 30-37: France 599: Hungary 785: Peru
|
79
|
-
# 40-44: Germany 600 & 601: South Africa 786: Ecuador
|
80
|
-
# 45: Japan (also 49) 609: Mauritius 789: Brazil
|
81
|
-
# 46: Russian Federation 611: Morocco 80 - 83: Italy
|
82
|
-
# 471: Taiwan 613: Algeria 84: Spain
|
83
|
-
# 474: Estonia 619: Tunisia 850: Cuba
|
84
|
-
# 475: Latvia 622: Egypt 858: Slovakia
|
85
|
-
# 477: Lithuania 625: Jordan 859: Czech Republic
|
86
|
-
# 479: Sri Lanka 626: Iran 860: Yugloslavia
|
87
|
-
# 480: Philippines 64: Finland 869: Turkey
|
88
|
-
# 482: Ukraine 690-692: China 87: Netherlands
|
89
|
-
# 484: Moldova 70: Norway 880: South Korea
|
90
|
-
# 485: Armenia 729: Israel 885: Thailand
|
91
|
-
# 486: Georgia 73: Sweden 888: Singapore
|
92
|
-
# 487: Kazakhstan 740: Guatemala 890: India
|
93
|
-
# 489: Hong Kong 741: El Salvador 893: Vietnam
|
94
|
-
# 49: Japan (JAN-13) 742: Honduras 899: Indonesia
|
95
|
-
# 50: United Kingdom 743: Nicaragua 90 & 91: Austria
|
96
|
-
# 520: Greece 744: Costa Rica 93: Australia
|
97
|
-
# 528: Lebanon 746: Dominican Republic 94: New Zealand
|
98
|
-
# 529: Cyprus 750: Mexico 955: Malaysia
|
99
|
-
# 531: Macedonia 759: Venezuela 977: ISSN
|
100
|
-
# 535: Malta 76: Switzerland 978: ISBN
|
101
|
-
# 539: Ireland 770: Colombia 979: ISMN
|
102
|
-
# 54: Belgium & Luxembourg 773: Uruguay 980: Refund receipts
|
103
|
-
# 560: Portugal 775: Peru 981 & 982: CCC
|
104
|
-
# 569: Iceland 777: Bolivia 99: Coupons
|
105
|
-
# 57: Denmark 779: Argentina
|
74
|
+
# Here is the complete table from www.barcodeisland.com:
|
106
75
|
#
|
107
|
-
#
|
108
|
-
#
|
109
|
-
#
|
110
|
-
#
|
76
|
+
# 00-13: USA & Canada 590: Poland 780: Chile
|
77
|
+
# 20-29: In-Store Functions 594: Romania 784: Paraguay
|
78
|
+
# 30-37: France 599: Hungary 785: Peru
|
79
|
+
# 40-44: Germany 600 & 601: South Africa 786: Ecuador
|
80
|
+
# 45: Japan (also 49) 609: Mauritius 789: Brazil
|
81
|
+
# 46: Russian Federation 611: Morocco 80 - 83: Italy
|
82
|
+
# 471: Taiwan 613: Algeria 84: Spain
|
83
|
+
# 474: Estonia 619: Tunisia 850: Cuba
|
84
|
+
# 475: Latvia 622: Egypt 858: Slovakia
|
85
|
+
# 477: Lithuania 625: Jordan 859: Czech Republic
|
86
|
+
# 479: Sri Lanka 626: Iran 860: Yugloslavia
|
87
|
+
# 480: Philippines 64: Finland 869: Turkey
|
88
|
+
# 482: Ukraine 690-692: China 87: Netherlands
|
89
|
+
# 484: Moldova 70: Norway 880: South Korea
|
90
|
+
# 485: Armenia 729: Israel 885: Thailand
|
91
|
+
# 486: Georgia 73: Sweden 888: Singapore
|
92
|
+
# 487: Kazakhstan 740: Guatemala 890: India
|
93
|
+
# 489: Hong Kong 741: El Salvador 893: Vietnam
|
94
|
+
# 49: Japan (JAN-13) 742: Honduras 899: Indonesia
|
95
|
+
# 50: United Kingdom 743: Nicaragua 90 & 91: Austria
|
96
|
+
# 520: Greece 744: Costa Rica 93: Australia
|
97
|
+
# 528: Lebanon 746: Dominican Republic 94: New Zealand
|
98
|
+
# 529: Cyprus 750: Mexico 955: Malaysia
|
99
|
+
# 531: Macedonia 759: Venezuela 977: ISSN
|
100
|
+
# 535: Malta 76: Switzerland 978: ISBN
|
101
|
+
# 539: Ireland 770: Colombia 979: ISMN
|
102
|
+
# 54: Belgium & Luxembourg 773: Uruguay 980: Refund receipts
|
103
|
+
# 560: Portugal 775: Peru 981 & 982: CCC
|
104
|
+
# 569: Iceland 777: Bolivia 99: Coupons
|
105
|
+
# 57: Denmark 779: Argentina
|
106
|
+
#
|
107
|
+
# ISSN:: International Standard Serial Number for Periodicals
|
108
|
+
# ISBN:: International Standard Book Numbering
|
109
|
+
# ISMN:: International Standard Music Number
|
110
|
+
# CCC:: Common Currency Coupons
|
111
111
|
#
|
112
|
-
#
|
112
|
+
# == Rendering
|
113
113
|
#
|
114
114
|
# When rendered, the initial digit of the number system is shown to the
|
115
115
|
# left and above the rest of the digits. The other two sets of six
|
@@ -117,13 +117,13 @@ module Barcode1DTools
|
|
117
117
|
# bottom of the code, and with the middle guard pattern bars extending
|
118
118
|
# down between them. The lower digits may be aligned flush with the
|
119
119
|
# bottom of the barcode, or the center of the text may be aligned with the
|
120
|
-
# bottom of the barcode.
|
120
|
+
# bottom of the barcode. Typically, the barcode is 1-1.5" across and 60%
|
121
|
+
# or more of the width in height. There should be at least 10 units of
|
122
|
+
# quiet space on each side.
|
121
123
|
|
122
124
|
class EAN13 < Barcode1D
|
123
125
|
|
124
|
-
#
|
125
|
-
|
126
|
-
# left side, odd/even
|
126
|
+
# Patterns for the left side, split between odd and even parity
|
127
127
|
LEFT_PATTERNS = {
|
128
128
|
'0' => { 'o' => '0001101', 'e' => '0100111'},
|
129
129
|
'1' => { 'o' => '0011001', 'e' => '0110011'},
|
@@ -135,9 +135,11 @@ module Barcode1DTools
|
|
135
135
|
'7' => { 'o' => '0111011', 'e' => '0010001'},
|
136
136
|
'8' => { 'o' => '0110111', 'e' => '0001001'},
|
137
137
|
'9' => { 'o' => '0001011', 'e' => '0010111'},
|
138
|
-
}
|
138
|
+
}
|
139
139
|
|
140
|
-
#
|
140
|
+
# Patterns for the left side, split between odd and even parity, in
|
141
|
+
# RLE format. Note that all left side patterns start with a space
|
142
|
+
# and end with a bar.
|
141
143
|
LEFT_PATTERNS_RLE = {
|
142
144
|
'0' => { 'o' => '3211', 'e' => '1123'},
|
143
145
|
'1' => { 'o' => '2221', 'e' => '1222'},
|
@@ -149,8 +151,9 @@ module Barcode1DTools
|
|
149
151
|
'7' => { 'o' => '1312', 'e' => '2131'},
|
150
152
|
'8' => { 'o' => '1213', 'e' => '3121'},
|
151
153
|
'9' => { 'o' => '3112', 'e' => '2113'},
|
152
|
-
}
|
154
|
+
}
|
153
155
|
|
156
|
+
# Left parity patterns. An extra digit is encoded in the parity.
|
154
157
|
LEFT_PARITY_PATTERNS = {
|
155
158
|
'0' => 'oooooo',
|
156
159
|
'1' => 'ooeoee',
|
@@ -162,9 +165,9 @@ module Barcode1DTools
|
|
162
165
|
'7' => 'oeoeoe',
|
163
166
|
'8' => 'oeoeeo',
|
164
167
|
'9' => 'oeeoeo',
|
165
|
-
}
|
168
|
+
}
|
166
169
|
|
167
|
-
# right side
|
170
|
+
# Bar patterns for right side.
|
168
171
|
RIGHT_PATTERNS = {
|
169
172
|
'0' => '1110010',
|
170
173
|
'1' => '1100110',
|
@@ -176,9 +179,10 @@ module Barcode1DTools
|
|
176
179
|
'7' => '1000100',
|
177
180
|
'8' => '1001000',
|
178
181
|
'9' => '1110100',
|
179
|
-
}
|
182
|
+
}
|
180
183
|
|
181
|
-
#
|
184
|
+
# Bar patterns for right side as RLE. Note that on the right
|
185
|
+
# side each pattern starts with a bar and ends with a space.
|
182
186
|
RIGHT_PATTERNS_RLE = {
|
183
187
|
'0' => '3211',
|
184
188
|
'1' => '2221',
|
@@ -190,15 +194,15 @@ module Barcode1DTools
|
|
190
194
|
'7' => '1312',
|
191
195
|
'8' => '1213',
|
192
196
|
'9' => '3112',
|
193
|
-
}
|
197
|
+
}
|
194
198
|
|
195
199
|
# AAAAHHHHHHHHH side + middle + side is 666, the number of the beast
|
196
200
|
SIDE_GUARD_PATTERN='101';
|
197
201
|
MIDDLE_GUARD_PATTERN='01010';
|
198
202
|
|
199
|
-
# Starts with bar
|
203
|
+
# Side guard pattern - Starts with bar
|
200
204
|
SIDE_GUARD_PATTERN_RLE='111';
|
201
|
-
# Starts with space
|
205
|
+
# Middle guard pattern - Starts with space
|
202
206
|
MIDDLE_GUARD_PATTERN_RLE='11111';
|
203
207
|
|
204
208
|
DEFAULT_OPTIONS = {
|
@@ -206,13 +210,15 @@ module Barcode1DTools
|
|
206
210
|
:space_character => '0'
|
207
211
|
}
|
208
212
|
|
209
|
-
# Specific for EAN
|
213
|
+
# Specific for EAN - the number system part of the payload
|
210
214
|
attr_reader :number_system
|
215
|
+
# Specific for EAN - the manufacturer's code part of the payload
|
211
216
|
attr_reader :manufacturers_code
|
217
|
+
# Specific for EAN - the product code part of the payload
|
212
218
|
attr_reader :product_code
|
213
219
|
|
214
220
|
class << self
|
215
|
-
#
|
221
|
+
# Returns true if value can be encoded. Must be 12 or 13 digits.
|
216
222
|
def can_encode?(value, options = nil)
|
217
223
|
if !options
|
218
224
|
value.to_s =~ /^[0-9]{12,13}$/
|
@@ -232,7 +238,7 @@ module Barcode1DTools
|
|
232
238
|
(10 - (value % 10)) % 10
|
233
239
|
end
|
234
240
|
|
235
|
-
#
|
241
|
+
# Validates the check digit given a string - assumes check digit
|
236
242
|
# is last digit of string.
|
237
243
|
def validate_check_digit_for(value)
|
238
244
|
raise UnencodableCharactersError unless self.can_encode?(value, :checksum_included => true)
|
@@ -329,6 +335,7 @@ module Barcode1DTools
|
|
329
335
|
end
|
330
336
|
end
|
331
337
|
|
338
|
+
# Create a new EAN-13 barcode object.
|
332
339
|
# Options are :line_character, :space_character, and
|
333
340
|
# :checksum_included.
|
334
341
|
def initialize(value, options = {})
|
@@ -354,12 +361,13 @@ module Barcode1DTools
|
|
354
361
|
@number_system, @manufacturers_code, @product_code = md[1], md[2], md[3]
|
355
362
|
end
|
356
363
|
|
357
|
-
#
|
364
|
+
# Note that EANs cannot produce a w/n string, so this
|
365
|
+
# will raise an error.
|
358
366
|
def wn
|
359
367
|
raise NotImplementedError
|
360
368
|
end
|
361
369
|
|
362
|
-
#
|
370
|
+
# Returns a run-length-encoded string representation
|
363
371
|
def rle
|
364
372
|
if @rle
|
365
373
|
@rle
|
@@ -369,12 +377,12 @@ module Barcode1DTools
|
|
369
377
|
end
|
370
378
|
end
|
371
379
|
|
372
|
-
#
|
380
|
+
# Returns 1s and 0s (for "black" and "white")
|
373
381
|
def bars
|
374
382
|
@bars ||= self.class.rle_to_bars(self.rle, @options)
|
375
383
|
end
|
376
384
|
|
377
|
-
#
|
385
|
+
# Returns the total unit width of the bar code
|
378
386
|
def width
|
379
387
|
@width ||= rle.split('').inject(0) { |a,c| a + c.to_i }
|
380
388
|
end
|