barcode1dtools 1.0.1.0 → 1.0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/lib/barcode1dtools/upc_a.rb
CHANGED
@@ -9,23 +9,24 @@ require 'barcode1dtools/ean13'
|
|
9
9
|
|
10
10
|
module Barcode1DTools
|
11
11
|
|
12
|
-
# Barcode1DTools::UPC_A - Create pattern for UPC-A barcodes
|
13
|
-
#
|
12
|
+
# Barcode1DTools::UPC_A - Create pattern for UPC-A barcodes.
|
14
13
|
# The value encoded is an 11-digit integer, and a checksum digit
|
15
14
|
# will be added. You can add the option :checksum_included => true
|
16
15
|
# when initializing to specify that you have already included a
|
17
16
|
# checksum.
|
18
17
|
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
18
|
+
# == Example
|
19
|
+
# # Note that this number is a UPC-A, with the number system of 08,
|
20
|
+
# # manufacturer's code of "28999", product code of "00682", and a
|
21
|
+
# # checksum of "3" (not included)
|
22
|
+
# num = '82899900682'
|
23
|
+
# bc = Barcode1DTools::UPC_A.new(num)
|
24
|
+
# pattern = bc.bars
|
25
|
+
# rle_pattern = bc.rle
|
26
|
+
# width = bc.width
|
27
|
+
# check_digit = Barcode1DTools::UPC_A.generate_check_digit_for(num)
|
28
28
|
#
|
29
|
+
# == Other Information
|
29
30
|
# A UPC-A barcode is an EAN-13 with an initial digit of "0" (that
|
30
31
|
# is the left digit of the number system designator). Like the
|
31
32
|
# EAN-13, the code is broken into a single-digit number system,
|
@@ -33,13 +34,13 @@ module Barcode1DTools
|
|
33
34
|
# digit checksum.
|
34
35
|
#
|
35
36
|
# The number system is:
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
37
|
+
# 0, 1, 6, 7, 8 - standard UPC codes
|
38
|
+
# 2 - a product weight- generally calculated at the store.
|
39
|
+
# 3 - pharmaceuticals
|
40
|
+
# 4 - used for loyalty cards at stores
|
41
|
+
# 5 - coupons
|
42
|
+
# 9 - coupons
|
43
|
+
# 978 - for books, with a 10-digit ISBN coming after 978
|
43
44
|
#
|
44
45
|
# For code 2, the manufacturer code becomes an item number, and the
|
45
46
|
# product number is used for either the weight or the price, with
|
@@ -52,7 +53,27 @@ module Barcode1DTools
|
|
52
53
|
# based on a table released by the GS1 US (formerly the UCC).
|
53
54
|
# Code 5 coupons may be doubled or tripled, but code 9 may not.
|
54
55
|
#
|
55
|
-
|
56
|
+
# == Formats
|
57
|
+
# There are two formats for the returned pattern (wn format is
|
58
|
+
# not available):
|
59
|
+
#
|
60
|
+
# *bars* - 1s and 0s specifying black lines and white spaces. Actual
|
61
|
+
# characters can be changed from "1" and 0" with options
|
62
|
+
# :line_character and :space_character.
|
63
|
+
#
|
64
|
+
# *rle* - Run-length-encoded version of the pattern. The first
|
65
|
+
# number is always a black line, with subsequent digits
|
66
|
+
# alternating between spaces and lines. The digits specify
|
67
|
+
# the width of each line or space.
|
68
|
+
#
|
69
|
+
# The "width" method will tell you the total end-to-end width, in
|
70
|
+
# units, of the entire barcode.
|
71
|
+
#
|
72
|
+
# Unlike some of the other barcodes, e.g. Code 3 of 9, there is no "w/n" format for
|
73
|
+
# EAN & UPC style barcodes because the bars and spaces are variable width from
|
74
|
+
# 1 to 4 units.
|
75
|
+
#
|
76
|
+
# == Rendering
|
56
77
|
#
|
57
78
|
# The UPC-A is typically rendered at 1-1.5 inch across, and half
|
58
79
|
# an inch high. The number system digit and checksum digit are
|
@@ -86,7 +107,7 @@ module Barcode1DTools
|
|
86
107
|
super('0' + value)
|
87
108
|
end
|
88
109
|
|
89
|
-
#
|
110
|
+
# Validates the check digit given a string - assumes check digit
|
90
111
|
# is last digit of string.
|
91
112
|
def validate_check_digit_for(value)
|
92
113
|
raise UnencodableCharactersError unless self.can_encode?(value, :checksum_included => true)
|
@@ -94,6 +115,7 @@ module Barcode1DTools
|
|
94
115
|
self.generate_check_digit_for(md[1]) == md[2].to_i
|
95
116
|
end
|
96
117
|
|
118
|
+
# Decode a bar pattern or rle pattern and return a UPC_A object.
|
97
119
|
def decode(value)
|
98
120
|
ean = super(value)
|
99
121
|
if ean.value[0,1] == '0'
|
@@ -104,6 +126,7 @@ module Barcode1DTools
|
|
104
126
|
end
|
105
127
|
end
|
106
128
|
|
129
|
+
# Create a new UPC_A object with a given value.
|
107
130
|
# Options are :line_character, :space_character, and
|
108
131
|
# :checksum_included.
|
109
132
|
def initialize(value, options = {})
|
@@ -129,7 +152,7 @@ module Barcode1DTools
|
|
129
152
|
@number_system, @manufacturers_code, @product_code = md[1], md[2], md[3]
|
130
153
|
end
|
131
154
|
|
132
|
-
#
|
155
|
+
# Returns a run-length-encoded string representation.
|
133
156
|
def rle
|
134
157
|
if @rle
|
135
158
|
@rle
|
@@ -139,12 +162,13 @@ module Barcode1DTools
|
|
139
162
|
end
|
140
163
|
end
|
141
164
|
|
142
|
-
# Returns a UPC_E object with the same value
|
165
|
+
# Returns a UPC_E object with the same value as the
|
166
|
+
# current UPC_A object, if possible.
|
143
167
|
def to_upc_e
|
144
168
|
UPC_E.new(UPC_E.upca_value_to_upce_value(@value), options.merge(:checksum_included => false))
|
145
169
|
end
|
146
170
|
|
147
|
-
# Returns true if the current value may be encoded as UPC-E
|
171
|
+
# Returns true if the current value may be encoded as UPC-E.
|
148
172
|
def upc_e_encodable?
|
149
173
|
begin
|
150
174
|
UPC_E.new(UPC_E.upca_value_to_upce_value(@value), options.merge(:checksum_included => false))
|
data/lib/barcode1dtools/upc_e.rb
CHANGED
@@ -9,20 +9,21 @@ require 'barcode1dtools/upc_a'
|
|
9
9
|
|
10
10
|
module Barcode1DTools
|
11
11
|
|
12
|
-
# Barcode1DTools::UPC_E - Create pattern for UPC-E barcodes
|
13
|
-
#
|
12
|
+
# Barcode1DTools::UPC_E - Create pattern for UPC-E barcodes.
|
14
13
|
# The value encoded is an 6-digit integer, and a checksum digit
|
15
14
|
# will be added. You can add the option :checksum_included => true
|
16
15
|
# when initializing to specify that you have already included a
|
17
16
|
# checksum.
|
18
17
|
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
18
|
+
# == Example
|
19
|
+
# num = '394932'
|
20
|
+
# bc = Barcode1DTools::UPC_E.new(num)
|
21
|
+
# pattern = bc.bars
|
22
|
+
# rle_pattern = bc.rle
|
23
|
+
# width = bc.width
|
24
|
+
# check_digit = Barcode1DTools::UPC_E.generate_check_digit_for(num)
|
25
25
|
#
|
26
|
+
# == Other Information
|
26
27
|
# A UPC-E barcode is an abbreviated form of UPC-A, but can encode
|
27
28
|
# only a few codes. The checksum is derived from the full UPC-A
|
28
29
|
# digit sequence rather than the 6 digits of the UPC-E. The checksum
|
@@ -32,23 +33,43 @@ module Barcode1DTools
|
|
32
33
|
# The last digit of the UPC-E determines the pattern used to convert
|
33
34
|
# to a UPC-A.
|
34
35
|
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
#
|
36
|
+
# UPC-E UPC-A equivalent
|
37
|
+
# 2 digits for manufacturer code (plus last digit), 3 digits for product
|
38
|
+
# XXNNN0 0XX000-00NNN
|
39
|
+
# XXNNN1 0XX100-00NNN
|
40
|
+
# XXNNN2 0XX200-00NNN
|
41
|
+
# 3 digits for manufacturer code, 2 digits for product
|
42
|
+
# XXXNN3 0XXX00-000NN
|
43
|
+
# 4 digits for manufacturer code, 1 digit for product
|
44
|
+
# XXXXN4 0XXXX0-0000N
|
45
|
+
# 5 digits for manufacturer code, 1 digit for product (5-9)
|
46
|
+
# XXXXX5 0XXXXX-00005
|
47
|
+
# XXXXX6 0XXXXX-00006
|
48
|
+
# XXXXX7 0XXXXX-00007
|
49
|
+
# XXXXX8 0XXXXX-00008
|
50
|
+
# XXXXX9 0XXXXX-00009
|
51
|
+
#
|
52
|
+
# == Formats
|
53
|
+
# There are two formats for the returned pattern (wn format is
|
54
|
+
# not available):
|
55
|
+
#
|
56
|
+
# *bars* - 1s and 0s specifying black lines and white spaces. Actual
|
57
|
+
# characters can be changed from "1" and 0" with options
|
58
|
+
# :line_character and :space_character.
|
59
|
+
#
|
60
|
+
# *rle* - Run-length-encoded version of the pattern. The first
|
61
|
+
# number is always a black line, with subsequent digits
|
62
|
+
# alternating between spaces and lines. The digits specify
|
63
|
+
# the width of each line or space.
|
64
|
+
#
|
65
|
+
# The "width" method will tell you the total end-to-end width, in
|
66
|
+
# units, of the entire barcode.
|
50
67
|
#
|
51
|
-
|
68
|
+
# Unlike some of the other barcodes, e.g. Code 3 of 9, there is no "w/n" format for
|
69
|
+
# EAN & UPC style barcodes because the bars and spaces are variable width from
|
70
|
+
# 1 to 4 units.
|
71
|
+
#
|
72
|
+
# == Rendering
|
52
73
|
#
|
53
74
|
# The UPC-E is made for smaller items. Generally, they are rendered
|
54
75
|
# with the number system digit (0) on the left of the bars and the
|
@@ -61,9 +82,12 @@ module Barcode1DTools
|
|
61
82
|
|
62
83
|
class UPC_E < Barcode1D
|
63
84
|
|
85
|
+
# Using the left patterns from UPC-A
|
64
86
|
LEFT_PATTERNS = UPC_A::LEFT_PATTERNS
|
87
|
+
# Using the left patterns from UPC-A
|
65
88
|
LEFT_PATTERNS_RLE = UPC_A::LEFT_PATTERNS_RLE
|
66
89
|
|
90
|
+
# UPC-E uses a different set of parity patterns to encode the check digit.
|
67
91
|
PARITY_PATTERNS = {
|
68
92
|
'0' => 'eeeooo',
|
69
93
|
'1' => 'eeoeoo',
|
@@ -77,9 +101,13 @@ module Barcode1DTools
|
|
77
101
|
'9' => 'eooeoe',
|
78
102
|
};
|
79
103
|
|
104
|
+
# Left guard pattern
|
80
105
|
LEFT_GUARD_PATTERN = '101'
|
106
|
+
# Right guard pattern
|
81
107
|
RIGHT_GUARD_PATTERN = '010101'
|
108
|
+
# Left guard pattern as RLE
|
82
109
|
LEFT_GUARD_PATTERN_RLE = '111'
|
110
|
+
# Right guard pattern as RLE
|
83
111
|
RIGHT_GUARD_PATTERN_RLE = '111111'
|
84
112
|
|
85
113
|
DEFAULT_OPTIONS = {
|
@@ -87,10 +115,13 @@ module Barcode1DTools
|
|
87
115
|
:space_character => '0'
|
88
116
|
}
|
89
117
|
|
90
|
-
# For UPC-E
|
118
|
+
# For UPC-E - the number system part of the item number
|
91
119
|
attr_reader :number_system
|
120
|
+
# For UPC-E - the manufacturer's code part of the item number
|
92
121
|
attr_reader :manufacturers_code
|
122
|
+
# For UPC-E - the product code part of the item number
|
93
123
|
attr_reader :product_code
|
124
|
+
# For UPC-E - the UPC-A value for this UPC-E value
|
94
125
|
attr_reader :upca_value
|
95
126
|
|
96
127
|
class << self
|
@@ -112,7 +143,7 @@ module Barcode1DTools
|
|
112
143
|
UPC_A.generate_check_digit_for(self.upce_value_to_upca_value(value))
|
113
144
|
end
|
114
145
|
|
115
|
-
#
|
146
|
+
# Validates the check digit given a string - assumes check digit
|
116
147
|
# is last digit of string.
|
117
148
|
def validate_check_digit_for(value)
|
118
149
|
raise UnencodableCharactersError unless self.can_encode?(value, :checksum_included => true)
|
@@ -120,6 +151,8 @@ module Barcode1DTools
|
|
120
151
|
self.generate_check_digit_for(md[1]) == md[2].to_i
|
121
152
|
end
|
122
153
|
|
154
|
+
# Decodes a bar pattern or rle string that represents a UPC-E. Returns
|
155
|
+
# a UPC_E object.
|
123
156
|
def decode(str)
|
124
157
|
if str.length == 51
|
125
158
|
# bar pattern
|
@@ -175,6 +208,7 @@ module Barcode1DTools
|
|
175
208
|
UPC_E.new('0' + digits + parity_digit, :checksum_included => true)
|
176
209
|
end
|
177
210
|
|
211
|
+
# Converts the given UPC-E value to a UPC-A value.
|
178
212
|
def upce_value_to_upca_value(value, options = {})
|
179
213
|
raise UnencodableCharactersError unless self.can_encode?(value, options)
|
180
214
|
# remove the check digit if it was included
|
@@ -194,6 +228,7 @@ module Barcode1DTools
|
|
194
228
|
upca_value
|
195
229
|
end
|
196
230
|
|
231
|
+
# Converts the given UPC-A value to a UPC-E value.
|
197
232
|
def upca_value_to_upce_value(value, options = {})
|
198
233
|
raise UnencodableCharactersError unless UPC_A.can_encode?(value, options)
|
199
234
|
value = value % 10 if options[:checksum_included]
|
@@ -213,6 +248,7 @@ module Barcode1DTools
|
|
213
248
|
end
|
214
249
|
end
|
215
250
|
|
251
|
+
# Create a new UPC-E object for a given value.
|
216
252
|
# Options are :line_character, :space_character, and
|
217
253
|
# :checksum_included.
|
218
254
|
def initialize(value, options = {})
|
@@ -239,12 +275,12 @@ module Barcode1DTools
|
|
239
275
|
@number_system, @manufacturers_code, @product_code = md[1], md[2], md[3]
|
240
276
|
end
|
241
277
|
|
242
|
-
# not usable with EAN-style codes
|
278
|
+
# W/N strings are not usable with EAN-style codes.
|
243
279
|
def wn
|
244
280
|
raise NotImplementedError
|
245
281
|
end
|
246
282
|
|
247
|
-
#
|
283
|
+
# Returns a run-length-encoded string representation.
|
248
284
|
def rle
|
249
285
|
if @rle
|
250
286
|
@rle
|
@@ -254,17 +290,17 @@ module Barcode1DTools
|
|
254
290
|
end
|
255
291
|
end
|
256
292
|
|
257
|
-
#
|
293
|
+
# Returns a bar pattern.
|
258
294
|
def bars
|
259
295
|
@bars ||= self.class.rle_to_bars(self.rle, @options)
|
260
296
|
end
|
261
297
|
|
262
|
-
#
|
298
|
+
# Returns the total unit width of the bar code.
|
263
299
|
def width
|
264
300
|
@width ||= rle.split('').inject(0) { |a,c| a + c.to_i }
|
265
301
|
end
|
266
302
|
|
267
|
-
# Returns a UPC_A object with the same value
|
303
|
+
# Returns a UPC_A object with the same value.
|
268
304
|
def to_upc_a
|
269
305
|
UPC_A.new(self.class.upce_value_to_upca_value(@value), options.merge(:checksum_included => false))
|
270
306
|
end
|
@@ -10,20 +10,20 @@ require 'barcode1dtools/upc_a'
|
|
10
10
|
module Barcode1DTools
|
11
11
|
|
12
12
|
# Barcode1DTools::UPC_Supplemental_2 - Create pattern for UPC
|
13
|
-
# Supplemental 2 barcodes
|
13
|
+
# Supplemental 2 barcodes. The value encoded is an 2-digit
|
14
|
+
# integer, and a checksum digit will be added. You can add the
|
15
|
+
# option :checksum_included => true when initializing to
|
16
|
+
# specify that you have already included a checksum.
|
14
17
|
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
# pattern = bc.bars
|
23
|
-
# rle_pattern = bc.rle
|
24
|
-
# width = bc.width
|
25
|
-
# check_digit = Barcode1DTools::UPC_E.generate_check_digit_for(num)
|
18
|
+
# == Example
|
19
|
+
# num = '24'
|
20
|
+
# bc = Barcode1DTools::UPC_Supplemental_2.new(num)
|
21
|
+
# pattern = bc.bars
|
22
|
+
# rle_pattern = bc.rle
|
23
|
+
# width = bc.width
|
24
|
+
# check_digit = Barcode1DTools::UPC_E.generate_check_digit_for(num)
|
26
25
|
#
|
26
|
+
# == Other Information
|
27
27
|
# This type of barcode consists of 2 digits, and a check digit
|
28
28
|
# (simply a modulus 4 of the number encoded) that is encoded in
|
29
29
|
# the "parity" of the two barcode digits. The bar patterns are the
|
@@ -37,7 +37,27 @@ module Barcode1DTools
|
|
37
37
|
# will likely need to use the Barcode::UPC_A module in addition
|
38
38
|
# to this one to create the full code.
|
39
39
|
#
|
40
|
-
|
40
|
+
# == Formats
|
41
|
+
# There are two formats for the returned pattern (wn format is
|
42
|
+
# not available):
|
43
|
+
#
|
44
|
+
# *bars* - 1s and 0s specifying black lines and white spaces. Actual
|
45
|
+
# characters can be changed from "1" and 0" with options
|
46
|
+
# :line_character and :space_character.
|
47
|
+
#
|
48
|
+
# *rle* - Run-length-encoded version of the pattern. The first
|
49
|
+
# number is always a black line, with subsequent digits
|
50
|
+
# alternating between spaces and lines. The digits specify
|
51
|
+
# the width of each line or space.
|
52
|
+
#
|
53
|
+
# The "width" method will tell you the total end-to-end width, in
|
54
|
+
# units, of the entire barcode.
|
55
|
+
#
|
56
|
+
# Unlike some of the other barcodes, e.g. Code 3 of 9, there is no "w/n" format for
|
57
|
+
# EAN & UPC style barcodes because the bars and spaces are variable width from
|
58
|
+
# 1 to 4 units.
|
59
|
+
#
|
60
|
+
# == Rendering
|
41
61
|
#
|
42
62
|
# The 2-digit supplement is positioned to the right of the main UPC
|
43
63
|
# code, and the human-readable digits are usually printed above the
|
@@ -52,11 +72,13 @@ module Barcode1DTools
|
|
52
72
|
|
53
73
|
class UPC_Supplemental_2 < Barcode1D
|
54
74
|
|
75
|
+
# The bar patterns are the left bar patterns of UPC-A/EAN-13
|
55
76
|
LEFT_PATTERNS = UPC_A::LEFT_PATTERNS
|
77
|
+
# The rle bar patterns are the left bar patterns of UPC-A/EAN-13
|
56
78
|
LEFT_PATTERNS_RLE = UPC_A::LEFT_PATTERNS_RLE
|
57
79
|
|
58
|
-
#
|
59
|
-
# and "o" is "0"
|
80
|
+
# Parity patterns, essentially binary counting where "e" is "1"
|
81
|
+
# and "o" is "0".
|
60
82
|
PARITY_PATTERNS = {
|
61
83
|
'0' => 'oo',
|
62
84
|
'1' => 'oe',
|
@@ -64,9 +86,13 @@ module Barcode1DTools
|
|
64
86
|
'3' => 'ee',
|
65
87
|
};
|
66
88
|
|
89
|
+
# Left guard pattern
|
67
90
|
LEFT_GUARD_PATTERN = '1011'
|
91
|
+
# Middle guard pattern
|
68
92
|
MIDDLE_GUARD_PATTERN = '01'
|
93
|
+
# Left guard pattern as an rle
|
69
94
|
LEFT_GUARD_PATTERN_RLE = '112'
|
95
|
+
# Middle guard pattern as an rle
|
70
96
|
MIDDLE_GUARD_PATTERN_RLE = '11'
|
71
97
|
|
72
98
|
DEFAULT_OPTIONS = {
|
@@ -93,7 +119,7 @@ module Barcode1DTools
|
|
93
119
|
value.to_i % 4
|
94
120
|
end
|
95
121
|
|
96
|
-
#
|
122
|
+
# Validates the check digit given a string - assumes check digit
|
97
123
|
# is last digit of string.
|
98
124
|
def validate_check_digit_for(value)
|
99
125
|
raise UnencodableCharactersError unless self.can_encode?(value, :checksum_included => true)
|
@@ -101,6 +127,8 @@ module Barcode1DTools
|
|
101
127
|
self.generate_check_digit_for(md[1]) == md[2].to_i
|
102
128
|
end
|
103
129
|
|
130
|
+
# Decodes a bar or rle pattern and returns a
|
131
|
+
# UPC_Supplemental_2 object.
|
104
132
|
def decode(str)
|
105
133
|
if str.length == 20
|
106
134
|
# bar pattern
|
@@ -156,6 +184,7 @@ module Barcode1DTools
|
|
156
184
|
|
157
185
|
end
|
158
186
|
|
187
|
+
# Create a new UPC_Supplemental_2 object from a given value.
|
159
188
|
# Options are :line_character, :space_character, and
|
160
189
|
# :checksum_included.
|
161
190
|
def initialize(value, options = {})
|
@@ -178,12 +207,13 @@ module Barcode1DTools
|
|
178
207
|
end
|
179
208
|
end
|
180
209
|
|
181
|
-
# not usable with EAN-style codes
|
210
|
+
# W/N patterns are not usable with EAN-style codes. This
|
211
|
+
# will raise an error.
|
182
212
|
def wn
|
183
213
|
raise NotImplementedError
|
184
214
|
end
|
185
215
|
|
186
|
-
#
|
216
|
+
# Returns a run-length-encoded string representation.
|
187
217
|
def rle
|
188
218
|
if @rle
|
189
219
|
@rle
|
@@ -193,12 +223,12 @@ module Barcode1DTools
|
|
193
223
|
end
|
194
224
|
end
|
195
225
|
|
196
|
-
#
|
226
|
+
# Returns a bar pattern.
|
197
227
|
def bars
|
198
228
|
@bars ||= self.class.rle_to_bars(self.rle, @options)
|
199
229
|
end
|
200
230
|
|
201
|
-
#
|
231
|
+
# Returns the total unit width of the bar code.
|
202
232
|
def width
|
203
233
|
@width ||= rle.split('').inject(0) { |a,c| a + c.to_i }
|
204
234
|
end
|