arena_barby 0.3.2

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.
Files changed (49) hide show
  1. data/README +29 -0
  2. data/bin/barby +41 -0
  3. data/lib/barby.rb +17 -0
  4. data/lib/barby/barcode.rb +116 -0
  5. data/lib/barby/barcode/bookland.rb +37 -0
  6. data/lib/barby/barcode/code_128.rb +410 -0
  7. data/lib/barby/barcode/code_25.rb +193 -0
  8. data/lib/barby/barcode/code_25_iata.rb +23 -0
  9. data/lib/barby/barcode/code_25_interleaved.rb +73 -0
  10. data/lib/barby/barcode/code_39.rb +233 -0
  11. data/lib/barby/barcode/code_93.rb +230 -0
  12. data/lib/barby/barcode/ean_13.rb +178 -0
  13. data/lib/barby/barcode/ean_8.rb +32 -0
  14. data/lib/barby/barcode/gs1_128.rb +42 -0
  15. data/lib/barby/barcode/pdf_417.rb +76 -0
  16. data/lib/barby/barcode/qr_code.rb +101 -0
  17. data/lib/barby/outputter.rb +127 -0
  18. data/lib/barby/outputter/ascii_outputter.rb +41 -0
  19. data/lib/barby/outputter/cairo_outputter.rb +185 -0
  20. data/lib/barby/outputter/pdfwriter_outputter.rb +83 -0
  21. data/lib/barby/outputter/png_outputter.rb +97 -0
  22. data/lib/barby/outputter/prawn_outputter.rb +99 -0
  23. data/lib/barby/outputter/rmagick_outputter.rb +126 -0
  24. data/lib/barby/outputter/svg_outputter.rb +225 -0
  25. data/lib/barby/vendor.rb +3 -0
  26. data/lib/barby/version.rb +9 -0
  27. data/vendor/Pdf417lib-java-0.91/lib/Pdf417lib.jar +0 -0
  28. data/vendor/Pdf417lib-java-0.91/lib/Pdf417lib.java +1471 -0
  29. data/vendor/rqrcode/CHANGELOG +29 -0
  30. data/vendor/rqrcode/COPYING +19 -0
  31. data/vendor/rqrcode/README +98 -0
  32. data/vendor/rqrcode/Rakefile +65 -0
  33. data/vendor/rqrcode/lib/rqrcode.rb +13 -0
  34. data/vendor/rqrcode/lib/rqrcode/core_ext.rb +5 -0
  35. data/vendor/rqrcode/lib/rqrcode/core_ext/array.rb +5 -0
  36. data/vendor/rqrcode/lib/rqrcode/core_ext/array/behavior.rb +9 -0
  37. data/vendor/rqrcode/lib/rqrcode/core_ext/integer.rb +5 -0
  38. data/vendor/rqrcode/lib/rqrcode/core_ext/integer/bitwise.rb +11 -0
  39. data/vendor/rqrcode/lib/rqrcode/qrcode.rb +4 -0
  40. data/vendor/rqrcode/lib/rqrcode/qrcode/qr_8bit_byte.rb +37 -0
  41. data/vendor/rqrcode/lib/rqrcode/qrcode/qr_bit_buffer.rb +56 -0
  42. data/vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb +421 -0
  43. data/vendor/rqrcode/lib/rqrcode/qrcode/qr_math.rb +63 -0
  44. data/vendor/rqrcode/lib/rqrcode/qrcode/qr_polynomial.rb +78 -0
  45. data/vendor/rqrcode/lib/rqrcode/qrcode/qr_rs_block.rb +313 -0
  46. data/vendor/rqrcode/lib/rqrcode/qrcode/qr_util.rb +254 -0
  47. data/vendor/rqrcode/test/runtest.rb +78 -0
  48. data/vendor/rqrcode/test/test_data.rb +21 -0
  49. metadata +114 -0
@@ -0,0 +1,29 @@
1
+ *0.3.2* (Mar 15th, 2009)
2
+
3
+ * Ruby 1.9 fixes by [Tore Darell http://tore.darell.no] [Chris Mowforth http://blog.99th.st]
4
+
5
+ *0.3.1* (Nov 24th, 2008)
6
+
7
+ * expanded RS block table to QRcode version 40 [Vladislav Gorodetskiy]
8
+
9
+ *0.3.0* (Feb 28th, 2008)
10
+
11
+ * added more documentation
12
+ * changed to_console to to_s (what was I thinking)
13
+ * add more tests
14
+
15
+ *0.2.1* (Feb 24th, 2008)
16
+
17
+ * small changes to rakefile and readme
18
+ * small change to to_console method
19
+ * make console_count method private (use modules.size instead)
20
+ * slowy updating rdocs
21
+
22
+ *0.2.0* (Feb 23rd, 2008)
23
+
24
+ * Split files up [DR]
25
+ * added rdoc comment ... more to do there
26
+
27
+ *0.1.0* (Feb 22rd, 2008)
28
+
29
+ * Initial Release [DR]
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2008 Duncan Robertson
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to
5
+ deal in the Software without restriction, including without limitation the
6
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
+ THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19
+
@@ -0,0 +1,98 @@
1
+ == rQRCode, Encode QRCodes
2
+
3
+ rQRCode is a library for encoding QR Codes in Ruby. It has a simple interface with all the standard qrcode options. It was adapted from the Javascript library by Kazuhiko Arase.
4
+
5
+ RubyForge Project Page http://rubyforge.org/projects/rqrcode/
6
+
7
+ == An Overview
8
+
9
+ Let's clear up some rQRCode stuff.
10
+
11
+ # rQRCode is a *standalone library*. It requires no other libraries. Just Ruby!
12
+ # It is an encoding library. You can't decode QR codes with it.
13
+ # The interface is simple and assumes you just want to encode a string into a QR code
14
+ # QR code is trademarked by Denso Wave inc
15
+
16
+ == Resources
17
+
18
+ wikipedia:: http://en.wikipedia.org/wiki/QR_Code
19
+ Denso-Wave website:: http://www.denso-wave.com/qrcode/index-e.html
20
+ kaywa:: http://qrcode.kaywa.com
21
+
22
+
23
+ == Installing
24
+
25
+ You may get the latest stable version from Rubyforge.
26
+
27
+ $ gem install rqrcode
28
+
29
+ You can also get the source from http://github.com/whomwah/rqrcode/tree/master
30
+
31
+ $ git clone git://github.com/whomwah/rqrcode.git
32
+
33
+
34
+ === Loading rQRCode Itself
35
+
36
+ You have installed the gem already, yeah?
37
+
38
+ require 'rubygems'
39
+ require 'rqrcode'
40
+
41
+ === Simple QRCode generation to screen
42
+
43
+ qr = RQRCode::QRCode.new( 'my string to generate', :size => 4, :level => :h )
44
+ puts qr.to_s
45
+ #
46
+ # Prints:
47
+ # xxxxxxx x x x x x xx xxxxxxx
48
+ # x x xxx xxxxxx xxx x x
49
+ # x xxx x xxxxx x xx x xxx x
50
+ # ... etc
51
+
52
+ === Simple QRCode generation to view (RubyOnRails)
53
+
54
+ <b>Controller:</b>
55
+ @qr = RQRCode::QRCode.new( 'my string to generate', :size => 4, :level => :h )
56
+
57
+ <b>View: (minimal styling added)</b>
58
+ <style type="text/css">
59
+ table {
60
+ border-width: 0;
61
+ border-style: none;
62
+ border-color: #0000ff;
63
+ border-collapse: collapse;
64
+ }
65
+ td {
66
+ border-width: 0;
67
+ border-style: none;
68
+ border-color: #0000ff;
69
+ border-collapse: collapse;
70
+ padding: 0;
71
+ margin: 0;
72
+ width: 10px;
73
+ height: 10px;
74
+ }
75
+ td.black { background-color: #000; }
76
+ td.white { background-color: #fff; }
77
+ </style>
78
+
79
+ <table>
80
+ <% @qr.modules.each_index do |x| %>
81
+ <tr>
82
+ <% @qr.modules.each_index do |y| %>
83
+ <% if @qr.is_dark(x,y) %>
84
+ <td class="black"/>
85
+ <% else %>
86
+ <td class="white"/>
87
+ <% end %>
88
+ <% end %>
89
+ </tr>
90
+ <% end %>
91
+ </table>
92
+
93
+ == Contact
94
+
95
+ Author:: Duncan Robertson
96
+ Email:: duncan@whomwah.com
97
+ Home Page:: http://whomwah.com
98
+ License:: MIT Licence (http://www.opensource.org/licenses/mit-license.html)
@@ -0,0 +1,65 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/gempackagetask'
5
+ require 'rake/rdoctask'
6
+ require 'rake/testtask'
7
+
8
+ NAME = "rqrcode"
9
+ VERS = "0.3.2"
10
+ CLEAN.include ['pkg', 'rdoc']
11
+
12
+ Gem::manage_gems
13
+
14
+ spec = Gem::Specification.new do |s|
15
+ s.name = NAME
16
+ s.version = VERS
17
+ s.author = "Duncan Robertson"
18
+ s.email = "duncan@whomwah.com"
19
+ s.homepage = "http://rqrcode.rubyforge.org"
20
+ s.platform = Gem::Platform::RUBY
21
+ s.summary = "A library to encode QR Codes"
22
+ s.rubyforge_project = NAME
23
+ s.description = <<EOF
24
+ rQRCode is a library for encoding QR Codes. The simple
25
+ interface allows you to create QR Code data structures
26
+ ready to be displayed in the way you choose.
27
+ EOF
28
+ s.files = FileList["lib/**/*", "test/*"].exclude("rdoc").to_a
29
+ s.require_path = "lib"
30
+ s.has_rdoc = true
31
+ s.extra_rdoc_files = ["README", "CHANGELOG", "COPYING"]
32
+ s.test_file = "test/runtest.rb"
33
+ end
34
+
35
+ task :build_package => [:repackage]
36
+ Rake::GemPackageTask.new(spec) do |pkg|
37
+ #pkg.need_zip = true
38
+ #pkg.need_tar = true
39
+ pkg.gem_spec = spec
40
+ end
41
+
42
+ desc "Default: run unit tests."
43
+ task :default => :test
44
+
45
+ desc "Run all the tests"
46
+ Rake::TestTask.new(:test) do |t|
47
+ t.libs << "lib"
48
+ t.pattern = "test/runtest.rb"
49
+ t.verbose = true
50
+ end
51
+
52
+ desc "Generate documentation for the library"
53
+ Rake::RDocTask.new("rdoc") { |rdoc|
54
+ rdoc.rdoc_dir = 'rdoc'
55
+ rdoc.title = "rQRCode Documentation"
56
+ rdoc.template = "~/bin/jamis.rb"
57
+ rdoc.options << '--line-numbers' << '--inline-source'
58
+ rdoc.main = "README"
59
+ rdoc.rdoc_files.include("README", "CHANGELOG", "COPYING", 'lib/**/*.rb')
60
+ }
61
+
62
+ desc "rdoc to rubyforge"
63
+ task :rubyforge => [:rdoc] do
64
+ sh %{/usr/bin/scp -r -p rdoc/* rubyforge:/var/www/gforge-projects/rqrcode}
65
+ end
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Copyright 2008 by Duncan Robertson (duncan@whomwah.com).
5
+ # All rights reserved.
6
+
7
+ # Permission is granted for use, copying, modification, distribution,
8
+ # and distribution of modified versions of this work as long as the
9
+ # above copyright notice is included.
10
+ #++
11
+
12
+ require "rqrcode/core_ext"
13
+ require "rqrcode/qrcode"
@@ -0,0 +1,5 @@
1
+ Dir[File.dirname(__FILE__) + "/core_ext/*.rb"].sort.each do |path|
2
+ filename = File.basename(path)
3
+ require "rqrcode/core_ext/#{filename}"
4
+ end
5
+
@@ -0,0 +1,5 @@
1
+ require 'rqrcode/core_ext/array/behavior'
2
+
3
+ class Array #:nodoc:
4
+ include CoreExtensions::Array::Behavior
5
+ end
@@ -0,0 +1,9 @@
1
+ module CoreExtensions #:nodoc:
2
+ module Array #:nodoc:
3
+ module Behavior
4
+ def extract_options!
5
+ last.is_a?(::Hash) ? pop : {}
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ require 'rqrcode/core_ext/integer/bitwise'
2
+
3
+ class Integer #:nodoc:
4
+ include CoreExtensions::Integer::Bitwise
5
+ end
@@ -0,0 +1,11 @@
1
+ module CoreExtensions #:nodoc:
2
+ module Integer #:nodoc:
3
+ module Bitwise
4
+ def rszf(count)
5
+ # zero fill right shift
6
+ (self >> count) & ((2 ** ((self.size * 8) - count))-1)
7
+ end
8
+ end
9
+ end
10
+ end
11
+
@@ -0,0 +1,4 @@
1
+ Dir[File.dirname(__FILE__) + "/qrcode/*.rb"].sort.each do |path|
2
+ filename = File.basename(path)
3
+ require "rqrcode/qrcode/#{filename}"
4
+ end
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Copyright 2004 by Duncan Robertson (duncan@whomwah.com).
5
+ # All rights reserved.
6
+
7
+ # Permission is granted for use, copying, modification, distribution,
8
+ # and distribution of modified versions of this work as long as the
9
+ # above copyright notice is included.
10
+ #++
11
+
12
+ module RQRCode
13
+
14
+ class QR8bitByte
15
+ attr_reader :mode
16
+
17
+ def initialize( data )
18
+ @mode = QRMODE[:mode_8bit_byte]
19
+ @data = data;
20
+ end
21
+
22
+
23
+ def get_length
24
+ @data.size
25
+ end
26
+
27
+
28
+ def write( buffer )
29
+ ( 0...@data.size ).each do |i|
30
+ c = @data[i]
31
+ c = c.ord if c.respond_to?(:ord)#String#[] returns single-char string in 1.9, .ord gets ASCII pos
32
+ buffer.put( c, 8 )
33
+ end
34
+ end
35
+ end
36
+
37
+ end
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Copyright 2004 by Duncan Robertson (duncan@whomwah.com).
5
+ # All rights reserved.
6
+
7
+ # Permission is granted for use, copying, modification, distribution,
8
+ # and distribution of modified versions of this work as long as the
9
+ # above copyright notice is included.
10
+ #++
11
+
12
+ module RQRCode
13
+
14
+ class QRBitBuffer
15
+ attr_reader :buffer
16
+
17
+ def initialize
18
+ @buffer = []
19
+ @length = 0
20
+ end
21
+
22
+
23
+ def get( index )
24
+ buf_index = (index / 8).floor
25
+ (( (@buffer[buf_index]).rszf(7 - index % 8)) & 1) == 1
26
+ end
27
+
28
+
29
+ def put( num, length )
30
+ ( 0...length ).each do |i|
31
+ put_bit((((num).rszf(length - i - 1)) & 1) == 1)
32
+ end
33
+ end
34
+
35
+
36
+ def get_length_in_bits
37
+ @length
38
+ end
39
+
40
+
41
+ def put_bit( bit )
42
+ buf_index = ( @length / 8 ).floor
43
+ if @buffer.size <= buf_index
44
+ @buffer << 0
45
+ end
46
+
47
+ if bit
48
+ @buffer[buf_index] |= ((0x80).rszf(@length % 8))
49
+ end
50
+
51
+ @length += 1
52
+ end
53
+
54
+ end
55
+
56
+ end
@@ -0,0 +1,421 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Copyright 2008 by Duncan Robertson (duncan@whomwah.com).
5
+ # All rights reserved.
6
+
7
+ # Permission is granted for use, copying, modification, distribution,
8
+ # and distribution of modified versions of this work as long as the
9
+ # above copyright notice is included.
10
+ #++
11
+
12
+ module RQRCode #:nodoc:
13
+
14
+ QRMODE = {
15
+ :mode_number => 1 << 0,
16
+ :mode_alpha_numk => 1 << 1,
17
+ :mode_8bit_byte => 1 << 2,
18
+ :mode_kanji => 1 << 3
19
+ }
20
+
21
+ QRERRORCORRECTLEVEL = {
22
+ :l => 1,
23
+ :m => 0,
24
+ :q => 3,
25
+ :h => 2
26
+ }
27
+
28
+ QRMASKPATTERN = {
29
+ :pattern000 => 0,
30
+ :pattern001 => 1,
31
+ :pattern010 => 2,
32
+ :pattern011 => 3,
33
+ :pattern100 => 4,
34
+ :pattern101 => 5,
35
+ :pattern110 => 6,
36
+ :pattern111 => 7
37
+ }
38
+
39
+ # StandardErrors
40
+
41
+ class QRCodeArgumentError < ArgumentError; end
42
+ class QRCodeRunTimeError < RuntimeError; end
43
+
44
+ # == Creation
45
+ #
46
+ # QRCode objects expect only one required constructor parameter
47
+ # and an optional hash of any other. Here's a few examples:
48
+ #
49
+ # qr = RQRCode::QRCode.new('hello world')
50
+ # qr = RQRCode::QRCode.new('hello world', :size => 1, :level => :m )
51
+ #
52
+
53
+ class QRCode
54
+ attr_reader :modules, :module_count
55
+
56
+ PAD0 = 0xEC
57
+ PAD1 = 0x11
58
+
59
+ # Expects a string to be parsed in, other args are optional
60
+ #
61
+ # # string - the string you wish to encode
62
+ # # size - the size of the qrcode (default 4)
63
+ # # level - the error correction level, can be:
64
+ # * Level :l 7% of code can be restored
65
+ # * Level :m 15% of code can be restored
66
+ # * Level :q 25% of code can be restored
67
+ # * Level :h 30% of code can be restored (default :h)
68
+ #
69
+ # qr = RQRCode::QRCode.new('hello world', :size => 1, :level => :m )
70
+ #
71
+
72
+ def initialize( *args )
73
+ raise QRCodeArgumentError unless args.first.kind_of?( String )
74
+
75
+ @data = args.shift
76
+ options = args.extract_options!
77
+ level = options[:level] || :h
78
+ @error_correct_level = QRERRORCORRECTLEVEL[ level.to_sym ]
79
+ @type_number = options[:size] || 4
80
+ @module_count = @type_number * 4 + 17
81
+ @modules = nil
82
+ @data_cache = nil
83
+ @data_list = QR8bitByte.new( @data )
84
+
85
+ self.make
86
+ end
87
+
88
+ # <tt>is_dark</tt> is called with a +col+ and +row+ parameter. This will
89
+ # return true or false based on whether that coordinate exists in the
90
+ # matrix returned. It would normally be called while iterating through
91
+ # <tt>modules</tt>. A simple example would be:
92
+ #
93
+ # instance.is_dark( 10, 10 ) => true
94
+ #
95
+
96
+ def is_dark( row, col )
97
+ if row < 0 || @module_count <= row || col < 0 || @module_count <= col
98
+ raise QRCodeRunTimeError, "#{row},#{col}"
99
+ end
100
+ @modules[row][col]
101
+ end
102
+
103
+ # This is a public method that returns the QR Code you have
104
+ # generated as a string. It will not be able to be read
105
+ # in this format by a QR Code reader, but will give you an
106
+ # idea if the final outout. It takes two optional args
107
+ # +:true+ and +:false+ which are there for you to choose
108
+ # how the output looks. Here's an example of it's use:
109
+ #
110
+ # instance.to_s =>
111
+ # xxxxxxx x x x x x xx xxxxxxx
112
+ # x x xxx xxxxxx xxx x x
113
+ # x xxx x xxxxx x xx x xxx x
114
+ #
115
+ # instance._to_s( :true => 'E', :false => 'Q') =>
116
+ # EEEEEEEQEQQEQEQQQEQEQQEEQQEEEEEEE
117
+ # EQQQQQEQQEEEQQEEEEEEQEEEQQEQQQQQE
118
+ # EQEEEQEQQEEEEEQEQQQQQQQEEQEQEEEQE
119
+ #
120
+
121
+ def to_s( *args )
122
+ options = args.extract_options!
123
+ row = options[:true] || 'x'
124
+ col = options[:false] || ' '
125
+
126
+ res = []
127
+
128
+ @modules.each_index do |c|
129
+ tmp = []
130
+ @modules.each_index do |r|
131
+ if is_dark(c,r)
132
+ tmp << row
133
+ else
134
+ tmp << col
135
+ end
136
+ end
137
+ res << tmp.join
138
+ end
139
+ res.join("\n")
140
+ end
141
+
142
+ protected
143
+
144
+ def make #:nodoc:
145
+ make_impl( false, get_best_mask_pattern )
146
+ end
147
+
148
+ private
149
+
150
+
151
+ def make_impl( test, mask_pattern ) #:nodoc:
152
+ @modules = Array.new( @module_count )
153
+
154
+ ( 0...@module_count ).each do |row|
155
+ @modules[row] = Array.new( @module_count )
156
+ end
157
+
158
+ setup_position_probe_pattern( 0, 0 )
159
+ setup_position_probe_pattern( @module_count - 7, 0 )
160
+ setup_position_probe_pattern( 0, @module_count - 7 )
161
+ setup_position_adjust_pattern
162
+ setup_timing_pattern
163
+ setup_type_info( test, mask_pattern )
164
+ setup_type_number( test ) if @type_number >= 7
165
+
166
+ if @data_cache.nil?
167
+ @data_cache = QRCode.create_data(
168
+ @type_number, @error_correct_level, @data_list
169
+ )
170
+ end
171
+
172
+ map_data( @data_cache, mask_pattern )
173
+ end
174
+
175
+
176
+ def setup_position_probe_pattern( row, col ) #:nodoc:
177
+ ( -1..7 ).each do |r|
178
+ next if ( row + r ) <= -1 || @module_count <= ( row + r )
179
+ ( -1..7 ).each do |c|
180
+ next if ( col + c ) <= -1 || @module_count <= ( col + c )
181
+ if 0 <= r && r <= 6 && ( c == 0 || c == 6 ) || 0 <= c && c <= 6 && ( r == 0 || r == 6 ) || 2 <= r && r <= 4 && 2 <= c && c <= 4
182
+ @modules[row + r][col + c] = true;
183
+ else
184
+ @modules[row + r][col + c] = false;
185
+ end
186
+ end
187
+ end
188
+ end
189
+
190
+
191
+ def get_best_mask_pattern #:nodoc:
192
+ min_lost_point = 0
193
+ pattern = 0
194
+
195
+ ( 0...8 ).each do |i|
196
+ make_impl( true, i )
197
+ lost_point = QRUtil.get_lost_point( self )
198
+
199
+ if i == 0 || min_lost_point > lost_point
200
+ min_lost_point = lost_point
201
+ pattern = i
202
+ end
203
+ end
204
+ pattern
205
+ end
206
+
207
+
208
+ def setup_timing_pattern #:nodoc:
209
+ ( 8...@module_count - 8 ).each do |i|
210
+ @modules[i][6] = @modules[6][i] = i % 2 == 0
211
+ end
212
+ end
213
+
214
+
215
+ def setup_position_adjust_pattern #:nodoc:
216
+ pos = QRUtil.get_pattern_position(@type_number)
217
+
218
+ ( 0...pos.size ).each do |i|
219
+ ( 0...pos.size ).each do |j|
220
+ row = pos[i]
221
+ col = pos[j]
222
+
223
+ next unless @modules[row][col].nil?
224
+
225
+ ( -2..2 ).each do |r|
226
+ ( -2..2 ).each do |c|
227
+ if r == -2 || r == 2 || c == -2 || c == 2 || ( r == 0 && c == 0 )
228
+ @modules[row + r][col + c] = true
229
+ else
230
+ @modules[row + r][col + c] = false
231
+ end
232
+ end
233
+ end
234
+ end
235
+ end
236
+ end
237
+
238
+
239
+ def setup_type_number( test ) #:nodoc:
240
+ bits = QRUtil.get_bch_type_number( @type_number )
241
+
242
+ ( 0...18 ).each do |i|
243
+ mod = ( !test && ( (bits >> i) & 1) == 1 )
244
+ @modules[ (i / 3).floor ][ i % 3 + @module_count - 8 - 3 ] = mod
245
+ @modules[ i % 3 + @module_count - 8 - 3 ][ (i / 3).floor ] = mod
246
+ end
247
+ end
248
+
249
+
250
+ def setup_type_info( test, mask_pattern ) #:nodoc:
251
+ data = (@error_correct_level << 3 | mask_pattern)
252
+ bits = QRUtil.get_bch_type_info( data )
253
+
254
+ ( 0...15 ).each do |i|
255
+ mod = (!test && ( (bits >> i) & 1) == 1)
256
+
257
+ # vertical
258
+ if i < 6
259
+ @modules[i][8] = mod
260
+ elsif i < 8
261
+ @modules[ i + 1 ][8] = mod
262
+ else
263
+ @modules[ @module_count - 15 + i ][8] = mod
264
+ end
265
+
266
+ # horizontal
267
+ if i < 8
268
+ @modules[8][ @module_count - i - 1 ] = mod
269
+ elsif i < 9
270
+ @modules[8][ 15 - i - 1 + 1 ] = mod
271
+ else
272
+ @modules[8][ 15 - i - 1 ] = mod
273
+ end
274
+ end
275
+
276
+ # fixed module
277
+ @modules[ @module_count - 8 ][8] = !test
278
+ end
279
+
280
+
281
+ def map_data( data, mask_pattern ) #:nodoc:
282
+ inc = -1
283
+ row = @module_count - 1
284
+ bit_index = 7
285
+ byte_index = 0
286
+
287
+ ( @module_count - 1 ).step( 1, -2 ) do |col|
288
+ col = col - 1 if col <= 6
289
+
290
+ while true do
291
+ ( 0...2 ).each do |c|
292
+
293
+ if @modules[row][ col - c ].nil?
294
+ dark = false
295
+ if byte_index < data.size && !data[byte_index].nil?
296
+ dark = (( (data[byte_index]).rszf( bit_index ) & 1) == 1 )
297
+ end
298
+ mask = QRUtil.get_mask( mask_pattern, row, col - c )
299
+ dark = !dark if mask
300
+ @modules[row][ col - c ] = dark
301
+ bit_index -= 1
302
+
303
+ if bit_index == -1
304
+ byte_index += 1
305
+ bit_index = 7
306
+ end
307
+ end
308
+ end
309
+
310
+ row += inc
311
+
312
+ if row < 0 || @module_count <= row
313
+ row -= inc
314
+ inc = -inc
315
+ break
316
+ end
317
+ end
318
+ end
319
+ end
320
+
321
+ def QRCode.create_data( type_number, error_correct_level, data_list ) #:nodoc:
322
+ rs_blocks = QRRSBlock.get_rs_blocks( type_number, error_correct_level )
323
+ buffer = QRBitBuffer.new
324
+
325
+ data = data_list
326
+ buffer.put( data.mode, 4 )
327
+ buffer.put(
328
+ data.get_length, QRUtil.get_length_in_bits( data.mode, type_number )
329
+ )
330
+ data.write( buffer )
331
+
332
+ total_data_count = 0
333
+ ( 0...rs_blocks.size ).each do |i|
334
+ total_data_count = total_data_count + rs_blocks[i].data_count
335
+ end
336
+
337
+ if buffer.get_length_in_bits > total_data_count * 8
338
+ raise QRCodeRunTimeError,
339
+ "code length overflow. (#{buffer.get_length_in_bits}>#{total_data_count})"
340
+ end
341
+
342
+ if buffer.get_length_in_bits + 4 <= total_data_count * 8
343
+ buffer.put( 0, 4 )
344
+ end
345
+
346
+ while buffer.get_length_in_bits % 8 != 0
347
+ buffer.put_bit( false )
348
+ end
349
+
350
+ while true
351
+ break if buffer.get_length_in_bits >= total_data_count * 8
352
+ buffer.put( QRCode::PAD0, 8 )
353
+ break if buffer.get_length_in_bits >= total_data_count * 8
354
+ buffer.put( QRCode::PAD1, 8 )
355
+ end
356
+
357
+ QRCode.create_bytes( buffer, rs_blocks )
358
+ end
359
+
360
+
361
+ def QRCode.create_bytes( buffer, rs_blocks ) #:nodoc:
362
+ offset = 0
363
+ max_dc_count = 0
364
+ max_ec_count = 0
365
+ dcdata = Array.new( rs_blocks.size )
366
+ ecdata = Array.new( rs_blocks.size )
367
+
368
+ ( 0...rs_blocks.size ).each do |r|
369
+ dc_count = rs_blocks[r].data_count
370
+ ec_count = rs_blocks[r].total_count - dc_count
371
+ max_dc_count = [ max_dc_count, dc_count ].max
372
+ max_ec_count = [ max_ec_count, ec_count ].max
373
+ dcdata[r] = Array.new( dc_count )
374
+
375
+ ( 0...dcdata[r].size ).each do |i|
376
+ dcdata[r][i] = 0xff & buffer.buffer[ i + offset ]
377
+ end
378
+
379
+ offset = offset + dc_count
380
+ rs_poly = QRUtil.get_error_correct_polynomial( ec_count )
381
+ raw_poly = QRPolynomial.new( dcdata[r], rs_poly.get_length - 1 )
382
+ mod_poly = raw_poly.mod( rs_poly )
383
+ ecdata[r] = Array.new( rs_poly.get_length - 1 )
384
+ ( 0...ecdata[r].size ).each do |i|
385
+ mod_index = i + mod_poly.get_length - ecdata[r].size
386
+ ecdata[r][i] = mod_index >= 0 ? mod_poly.get( mod_index ) : 0
387
+ end
388
+ end
389
+
390
+ total_code_count = 0
391
+ ( 0...rs_blocks.size ).each do |i|
392
+ total_code_count = total_code_count + rs_blocks[i].total_count
393
+ end
394
+
395
+ data = Array.new( total_code_count )
396
+ index = 0
397
+
398
+ ( 0...max_dc_count ).each do |i|
399
+ ( 0...rs_blocks.size ).each do |r|
400
+ if i < dcdata[r].size
401
+ index += 1
402
+ data[index-1] = dcdata[r][i]
403
+ end
404
+ end
405
+ end
406
+
407
+ ( 0...max_ec_count ).each do |i|
408
+ ( 0...rs_blocks.size ).each do |r|
409
+ if i < ecdata[r].size
410
+ index += 1
411
+ data[index-1] = ecdata[r][i]
412
+ end
413
+ end
414
+ end
415
+
416
+ data
417
+ end
418
+
419
+ end
420
+
421
+ end