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
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
|