pdf417 0.1.0 → 0.1.1
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/.gitignore +0 -1
- data/README.rdoc +2 -0
- data/Rakefile +6 -0
- data/VERSION +1 -1
- data/ext/pdf417/pdf417.c +29 -39
- data/ext/pdf417/pdf417.h +1 -10
- data/lib/pdf417.rb +28 -2
- data/pdf417.gemspec +57 -0
- data/test/pdf417_test.rb +50 -2
- data/test/test_helper.rb +6 -3
- metadata +18 -6
- data/ext/pdf417/test.rb +0 -52
data/.gitignore
CHANGED
data/README.rdoc
CHANGED
@@ -15,6 +15,8 @@ A wrapper for the pdf417lib C Library, from the README:
|
|
15
15
|
Fetching the codewords only can be handy for using rtex and the pst-barcode package. If you're using prawn
|
16
16
|
or RMagic the to_blob function should help generate a complete barcode.
|
17
17
|
|
18
|
+
Much of this was based off of reading through the Nokogiri and RMagic source code. Thanks!
|
19
|
+
|
18
20
|
== Usage
|
19
21
|
|
20
22
|
There are a few ways to use the library, at its simplest:
|
data/Rakefile
CHANGED
@@ -57,3 +57,9 @@ Rake::RDocTask.new do |rdoc|
|
|
57
57
|
rdoc.rdoc_files.include("*.rdoc")
|
58
58
|
rdoc.rdoc_files.include("ext/pdf417/*.c")
|
59
59
|
end
|
60
|
+
|
61
|
+
desc 'rebuilds the pdf417 library'
|
62
|
+
task :build_extension do
|
63
|
+
pwd = `pwd`
|
64
|
+
exec "cd ext/pdf417 && make clean && ruby extconf.rb && make && cd #{pwd}"
|
65
|
+
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/ext/pdf417/pdf417.c
CHANGED
@@ -39,7 +39,6 @@ void Init_pdf417() {
|
|
39
39
|
rb_define_method(rb_cPdf417, "code_columns", rb_pdf417_codeColumns, 0);
|
40
40
|
rb_define_method(rb_cPdf417, "codeword_length", rb_pdf417_lenCodewords, 0);
|
41
41
|
rb_define_method(rb_cPdf417, "error_level", rb_pdf417_errorLevel, 0);
|
42
|
-
rb_define_method(rb_cPdf417, "generation_options", rb_pdf417_options, 0);
|
43
42
|
rb_define_method(rb_cPdf417, "aspect_ratio", rb_pdf417_aspectRatio, 0);
|
44
43
|
rb_define_method(rb_cPdf417, "y_height", rb_pdf417_yHeight, 0);
|
45
44
|
rb_define_method(rb_cPdf417, "generation_error", rb_pdf417_error, 0);
|
@@ -96,6 +95,7 @@ static VALUE rb_pdf417_new(VALUE class, VALUE text) {
|
|
96
95
|
pdf417param *ptr;
|
97
96
|
VALUE tdata = Data_Make_Struct(class, pdf417param, 0, rb_pdf417_cleanup, ptr);
|
98
97
|
pdf417init(ptr);
|
98
|
+
rb_iv_set(tdata, "@generation_options", INT2NUM(ptr->options));
|
99
99
|
argv[0] = text;
|
100
100
|
rb_obj_call_init(tdata, 1, argv);
|
101
101
|
return tdata;
|
@@ -112,15 +112,7 @@ static VALUE rb_pdf417_codewords(VALUE self) {
|
|
112
112
|
int k;
|
113
113
|
pdf417param *ptr;
|
114
114
|
Data_Get_Struct(self, pdf417param, ptr);
|
115
|
-
|
116
|
-
// Only re-do it if our text has changed
|
117
|
-
if ( ptr->text != STR2CSTR(rb_iv_get(self, "@text")) ) {
|
118
|
-
ptr->text = STR2CSTR(rb_iv_get(self, "@text")); //StringValuePtr(text);
|
119
|
-
|
120
|
-
paintCode(ptr); //paintCode also sets the error correction, we call it here so we can get the blob if needed w/o trouble
|
121
|
-
}
|
122
|
-
|
123
|
-
// otherwise, fill the array and respond
|
115
|
+
refreshStruct(self, ptr);
|
124
116
|
if (ptr->error) {
|
125
117
|
return Qnil; //could also return list
|
126
118
|
}
|
@@ -143,15 +135,7 @@ static VALUE rb_pdf417_codewords(VALUE self) {
|
|
143
135
|
static VALUE rb_pdf417_to_blob(VALUE self) {
|
144
136
|
pdf417param *ptr;
|
145
137
|
Data_Get_Struct(self, pdf417param, ptr);
|
146
|
-
|
147
|
-
// Only re-do it if our text has changed
|
148
|
-
if ( ptr->text != STR2CSTR(rb_iv_get(self, "@text")) ) {
|
149
|
-
ptr->text = STR2CSTR(rb_iv_get(self, "@text")); //StringValuePtr(text);
|
150
|
-
|
151
|
-
paintCode(ptr);
|
152
|
-
}
|
153
|
-
|
154
|
-
// otherwise, fill the array and respond
|
138
|
+
refreshStruct(self, ptr);
|
155
139
|
if (ptr->error) {
|
156
140
|
return Qnil; //could also return list
|
157
141
|
}
|
@@ -231,26 +215,6 @@ static VALUE rb_pdf417_errorLevel(VALUE self){
|
|
231
215
|
return INT2NUM(ptr->errorLevel);
|
232
216
|
}
|
233
217
|
|
234
|
-
/*
|
235
|
-
* call-seq:
|
236
|
-
* generation_options
|
237
|
-
*
|
238
|
-
* The int representing the options used to generate the barcode, defined in the library as:
|
239
|
-
* [PDF417_USE_ASPECT_RATIO] use aspectRatio to set the y/x dimension. Also uses yHeight
|
240
|
-
* [PDF417_FIXED_RECTANGLE] make the barcode dimensions at least codeColumns by codeRows
|
241
|
-
* [PDF417_FIXED_COLUMNS] make the barcode dimensions at least codeColumns
|
242
|
-
* [PDF417_FIXED_ROWS] make the barcode dimensions at least codeRows
|
243
|
-
* [PDF417_AUTO_ERROR_LEVEL] automatic error level depending on text size
|
244
|
-
* [PDF417_USE_ERROR_LEVEL] the error level is errorLevel. The used errorLevel may be different
|
245
|
-
* [PDF417_USE_RAW_CODEWORDS] use codewords instead of text
|
246
|
-
* [PDF417_INVERT_BITMAP] invert the resulting bitmap
|
247
|
-
*/
|
248
|
-
static VALUE rb_pdf417_options(VALUE self){
|
249
|
-
pdf417param *ptr;
|
250
|
-
Data_Get_Struct(self, pdf417param, ptr);
|
251
|
-
return INT2NUM(ptr->options);
|
252
|
-
}
|
253
|
-
|
254
218
|
/*
|
255
219
|
* call-seq:
|
256
220
|
* aspect_ratio
|
@@ -289,3 +253,29 @@ static VALUE rb_pdf417_error(VALUE self){
|
|
289
253
|
Data_Get_Struct(self, pdf417param, ptr);
|
290
254
|
return INT2NUM(ptr->error);
|
291
255
|
}
|
256
|
+
|
257
|
+
// Refresh the PDF417 struct containing our data if anything important has changed.
|
258
|
+
static void refreshStruct(VALUE self, pdf417param *ptr) {
|
259
|
+
|
260
|
+
char* text = STR2CSTR(rb_iv_get(self, "@text"));
|
261
|
+
int options = 0;
|
262
|
+
VALUE generation_options = rb_iv_get(self, "@generation_options");
|
263
|
+
|
264
|
+
if ( TYPE(generation_options) == T_FIXNUM ){
|
265
|
+
options = FIX2INT(generation_options);
|
266
|
+
}
|
267
|
+
|
268
|
+
// Only re-do it if our text has changed
|
269
|
+
if ( 0 != strcmp(ptr->text, text) || options != ptr->options) {
|
270
|
+
ptr->options = options;
|
271
|
+
ptr->outBits = NULL;
|
272
|
+
ptr->lenBits = 0;
|
273
|
+
ptr->error = 0;
|
274
|
+
ptr->lenText = -1;
|
275
|
+
ptr->text = "";
|
276
|
+
ptr->yHeight = 3;
|
277
|
+
ptr->aspectRatio = 0.5;
|
278
|
+
ptr->text = STR2CSTR(rb_iv_get(self, "@text"));
|
279
|
+
paintCode(ptr); //paintCode also sets the error correction, we call it here so we can get the blob if needed w/o trouble
|
280
|
+
}
|
281
|
+
}
|
data/ext/pdf417/pdf417.h
CHANGED
@@ -1,12 +1,3 @@
|
|
1
|
-
// strfunctions from Nokogiri
|
2
|
-
#define PDF417_STR_NEW2(str) \
|
3
|
-
rb_str_new2((const char *)(str))
|
4
|
-
|
5
|
-
#define PDF417_STR_NEW(str, len) \
|
6
|
-
rb_str_new((const char *)(str), (long)(len))
|
7
|
-
|
8
|
-
#define RBSTR_OR_QNIL(_str) \
|
9
|
-
(_str ? PDF417_STR_NEW2(_str) : Qnil)
|
10
1
|
|
11
2
|
VALUE rb_cPdf417;
|
12
3
|
static VALUE rb_pdf417_encode_text(VALUE self, VALUE text);
|
@@ -21,7 +12,7 @@ static VALUE rb_pdf417_codeRows(VALUE self);
|
|
21
12
|
static VALUE rb_pdf417_codeColumns(VALUE self);
|
22
13
|
static VALUE rb_pdf417_lenCodewords(VALUE self);
|
23
14
|
static VALUE rb_pdf417_errorLevel(VALUE self);
|
24
|
-
static VALUE rb_pdf417_options(VALUE self);
|
25
15
|
static VALUE rb_pdf417_aspectRatio(VALUE self);
|
26
16
|
static VALUE rb_pdf417_yHeight(VALUE self);
|
27
17
|
static VALUE rb_pdf417_error(VALUE self);
|
18
|
+
static void refreshStruct(VALUE self, pdf417param *ptr);
|
data/lib/pdf417.rb
CHANGED
@@ -1,6 +1,33 @@
|
|
1
1
|
require 'pdf417/pdf417'
|
2
2
|
|
3
3
|
class PDF417
|
4
|
+
|
5
|
+
PDF417_USE_ASPECT_RATIO = 0
|
6
|
+
PDF417_FIXED_RECTANGLE = 1
|
7
|
+
PDF417_FIXED_COLUMNS = 2
|
8
|
+
PDF417_FIXED_ROWS = 4
|
9
|
+
PDF417_AUTO_ERROR_LEVEL = 0
|
10
|
+
PDF417_USE_ERROR_LEVEL = 16
|
11
|
+
PDF417_USE_RAW_CODEWORDS = 64
|
12
|
+
PDF417_INVERT_BITMAP = 128
|
13
|
+
|
14
|
+
PDF417_ERROR_SUCCESS = 0
|
15
|
+
PDF417_ERROR_TEXT_TOO_BIG = 1
|
16
|
+
PDF417_ERROR_INVALID_PARAMS = 2
|
17
|
+
|
18
|
+
# The int representing the options used to generate the barcode, defined in the library as:
|
19
|
+
# [PDF417_USE_ASPECT_RATIO] use aspectRatio to set the y/x dimension. Also uses yHeight
|
20
|
+
# [PDF417_FIXED_RECTANGLE] make the barcode dimensions at least codeColumns by codeRows
|
21
|
+
# [PDF417_FIXED_COLUMNS] make the barcode dimensions at least codeColumns
|
22
|
+
# [PDF417_FIXED_ROWS] make the barcode dimensions at least codeRows
|
23
|
+
# [PDF417_AUTO_ERROR_LEVEL] automatic error level depending on text size
|
24
|
+
# [PDF417_USE_ERROR_LEVEL] the error level is errorLevel. The used errorLevel may be different
|
25
|
+
# [PDF417_USE_RAW_CODEWORDS] use codewords instead of text
|
26
|
+
# [PDF417_INVERT_BITMAP] invert the resulting bitmap
|
27
|
+
#
|
28
|
+
# For example
|
29
|
+
# b.generation_options = PDF417::PDF417_INVERT_BITMAP | PDF417::PDF417_AUTO_ERROR_LEVEL
|
30
|
+
attr_accessor :generation_options
|
4
31
|
attr_accessor :text
|
5
32
|
def inspect # :nodoc:
|
6
33
|
attributes = inspect_attributes.reject { |x|
|
@@ -14,8 +41,7 @@ class PDF417
|
|
14
41
|
"#{attribute.to_s}=#{send(attribute).inspect}"
|
15
42
|
}.join ' '
|
16
43
|
"#<#{self.class.name}:#{sprintf("0x%x", object_id)} #{attributes}>"
|
17
|
-
end
|
18
|
-
|
44
|
+
end
|
19
45
|
|
20
46
|
private
|
21
47
|
def inspect_attributes
|
data/pdf417.gemspec
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{pdf417}
|
8
|
+
s.version = "0.1.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["jamesprior"]
|
12
|
+
s.date = %q{2011-03-30}
|
13
|
+
s.description = %q{Generate a series of codewords or a binary blob for PDF417 barcodes}
|
14
|
+
s.email = %q{j.prior@asee.org}
|
15
|
+
s.extensions = ["ext/pdf417/extconf.rb"]
|
16
|
+
s.extra_rdoc_files = [
|
17
|
+
"LICENSE",
|
18
|
+
"README.rdoc"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
".document",
|
22
|
+
".gitignore",
|
23
|
+
"LICENSE",
|
24
|
+
"README.rdoc",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION",
|
27
|
+
"ext/pdf417/Makefile",
|
28
|
+
"ext/pdf417/extconf.rb",
|
29
|
+
"ext/pdf417/pdf417.c",
|
30
|
+
"ext/pdf417/pdf417.h",
|
31
|
+
"ext/pdf417/pdf417lib.c",
|
32
|
+
"ext/pdf417/pdf417lib.h",
|
33
|
+
"ext/pdf417/pdf417libimp.h",
|
34
|
+
"lib/pdf417.rb",
|
35
|
+
"pdf417.gemspec",
|
36
|
+
"test/pdf417_test.rb",
|
37
|
+
"test/test_helper.rb"
|
38
|
+
]
|
39
|
+
s.homepage = %q{http://github.com/asee/pdf417}
|
40
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
41
|
+
s.require_paths = ["lib", "ext"]
|
42
|
+
s.rubygems_version = %q{1.6.2}
|
43
|
+
s.summary = %q{A Ruby wrapper for the PDF417 barcode library}
|
44
|
+
s.test_files = [
|
45
|
+
"test/pdf417_test.rb",
|
46
|
+
"test/test_helper.rb"
|
47
|
+
]
|
48
|
+
|
49
|
+
if s.respond_to? :specification_version then
|
50
|
+
s.specification_version = 3
|
51
|
+
|
52
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
53
|
+
else
|
54
|
+
end
|
55
|
+
else
|
56
|
+
end
|
57
|
+
end
|
data/test/pdf417_test.rb
CHANGED
@@ -1,7 +1,55 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class Pdf417Test < Test::Unit::TestCase
|
4
|
-
|
5
|
-
|
4
|
+
|
5
|
+
should "initialize text" do
|
6
|
+
b = PDF417.new("fred")
|
7
|
+
assert_equal "fred", b.text
|
6
8
|
end
|
9
|
+
|
10
|
+
should "initialize generation_options" do
|
11
|
+
b = PDF417.new("fred")
|
12
|
+
assert_equal 0, b.generation_options
|
13
|
+
end
|
14
|
+
|
15
|
+
should "know the right codewords for fred" do
|
16
|
+
assert_equal [4, 815, 514, 119], PDF417.encode_text("fred")
|
17
|
+
assert_equal [4, 815, 514, 119], PDF417.new("fred").codewords
|
18
|
+
end
|
19
|
+
|
20
|
+
should "re-generate if the text has been reassigned" do
|
21
|
+
b = PDF417.new("fred")
|
22
|
+
fred_words = b.codewords
|
23
|
+
fred_blob = b.to_blob
|
24
|
+
b.text = "Joebob"
|
25
|
+
assert fred_words != b.codewords
|
26
|
+
assert fred_blob != b.to_blob
|
27
|
+
end
|
28
|
+
|
29
|
+
should "re-generate if the text has been updated" do
|
30
|
+
b = PDF417.new("fred")
|
31
|
+
fred_words = b.codewords
|
32
|
+
fred_blob = b.to_blob
|
33
|
+
b.text += " and joe"
|
34
|
+
assert fred_words != b.codewords
|
35
|
+
assert fred_blob != b.to_blob
|
36
|
+
end
|
37
|
+
|
38
|
+
should "re-generate if the options have changed" do
|
39
|
+
b = PDF417.new("fred")
|
40
|
+
fred_words = b.codewords
|
41
|
+
fred_blob = b.to_blob
|
42
|
+
b.generation_options = PDF417::PDF417_INVERT_BITMAP
|
43
|
+
assert_equal b.generation_options, PDF417::PDF417_INVERT_BITMAP
|
44
|
+
assert_equal fred_words, b.codewords # NOTE that the codewords have not changed, just the binary blob
|
45
|
+
assert fred_blob != b.to_blob
|
46
|
+
end
|
47
|
+
|
48
|
+
should "work when generation options are set weird" do
|
49
|
+
b = PDF417.new("fred")
|
50
|
+
b.generation_options = "ALBERT"
|
51
|
+
assert b.codewords.is_a?(Array)
|
52
|
+
end
|
53
|
+
|
54
|
+
|
7
55
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'test/unit'
|
3
|
-
require 'shoulda'
|
4
1
|
|
5
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'ext'))
|
6
4
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
5
|
require 'pdf417'
|
8
6
|
|
7
|
+
require 'rubygems'
|
8
|
+
require 'test/unit'
|
9
|
+
require 'shoulda'
|
10
|
+
|
11
|
+
|
9
12
|
class Test::Unit::TestCase
|
10
13
|
end
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdf417
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 25
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- jamesprior
|
@@ -9,7 +15,7 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-30 00:00:00 -04:00
|
13
19
|
default_executable:
|
14
20
|
dependencies: []
|
15
21
|
|
@@ -36,8 +42,8 @@ files:
|
|
36
42
|
- ext/pdf417/pdf417lib.c
|
37
43
|
- ext/pdf417/pdf417lib.h
|
38
44
|
- ext/pdf417/pdf417libimp.h
|
39
|
-
- ext/pdf417/test.rb
|
40
45
|
- lib/pdf417.rb
|
46
|
+
- pdf417.gemspec
|
41
47
|
- test/pdf417_test.rb
|
42
48
|
- test/test_helper.rb
|
43
49
|
has_rdoc: true
|
@@ -51,21 +57,27 @@ require_paths:
|
|
51
57
|
- lib
|
52
58
|
- ext
|
53
59
|
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
54
61
|
requirements:
|
55
62
|
- - ">="
|
56
63
|
- !ruby/object:Gem::Version
|
64
|
+
hash: 3
|
65
|
+
segments:
|
66
|
+
- 0
|
57
67
|
version: "0"
|
58
|
-
version:
|
59
68
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
60
70
|
requirements:
|
61
71
|
- - ">="
|
62
72
|
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
74
|
+
segments:
|
75
|
+
- 0
|
63
76
|
version: "0"
|
64
|
-
version:
|
65
77
|
requirements: []
|
66
78
|
|
67
79
|
rubyforge_project:
|
68
|
-
rubygems_version: 1.
|
80
|
+
rubygems_version: 1.6.2
|
69
81
|
signing_key:
|
70
82
|
specification_version: 3
|
71
83
|
summary: A Ruby wrapper for the PDF417 barcode library
|
data/ext/pdf417/test.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
# Basic testing file, run via make clean && ruby extconf.rb && make && ruby test.rb
|
2
|
-
require 'pdf417'
|
3
|
-
|
4
|
-
class PDF417
|
5
|
-
attr_accessor :text
|
6
|
-
def inspect # :nodoc:
|
7
|
-
attributes = inspect_attributes.reject { |x|
|
8
|
-
begin
|
9
|
-
attribute = send x
|
10
|
-
!attribute || (attribute.respond_to?(:empty?) && attribute.empty?)
|
11
|
-
rescue NoMethodError
|
12
|
-
true
|
13
|
-
end
|
14
|
-
}.map { |attribute|
|
15
|
-
"#{attribute.to_s}=#{send(attribute).inspect}"
|
16
|
-
}.join ' '
|
17
|
-
"#<#{self.class.name}:#{sprintf("0x%x", object_id)} #{attributes}>"
|
18
|
-
end
|
19
|
-
|
20
|
-
|
21
|
-
private
|
22
|
-
def inspect_attributes
|
23
|
-
[:text, :bit_columns, :bit_length, :code_rows, :code_columns, :codeword_length, :error_level, :generation_options, :aspect_ratio, :y_height, :generation_error]
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
|
28
|
-
puts "Testing codewords for 'fred'"
|
29
|
-
PDF417.encode_text("fred").each_with_index{|cw,i| puts "Ruby thinks cw #{i} is #{cw}"}
|
30
|
-
# For fred, should return:
|
31
|
-
# Ruby thinks cw 0 is 4
|
32
|
-
# Ruby thinks cw 1 is 815
|
33
|
-
# Ruby thinks cw 2 is 514
|
34
|
-
# Ruby thinks cw 3 is 119
|
35
|
-
|
36
|
-
p = PDF417.new("test")
|
37
|
-
puts p.inspect
|
38
|
-
p = PDF417.new("fred")
|
39
|
-
puts p.text
|
40
|
-
puts p.codewords.inspect
|
41
|
-
puts p.to_blob.inspect
|
42
|
-
puts p.bit_columns
|
43
|
-
puts p.bit_length
|
44
|
-
puts p.code_rows
|
45
|
-
puts p.code_columns
|
46
|
-
puts p.codeword_length
|
47
|
-
puts p.error_level
|
48
|
-
puts p.generation_options
|
49
|
-
puts p.aspect_ratio
|
50
|
-
puts p.y_height
|
51
|
-
puts p.generation_error
|
52
|
-
puts p.inspect
|