barby 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,154 @@
1
+ require 'cairo'
2
+ require 'stringio'
3
+
4
+ module Barby
5
+ class CairoOutputter < Outputter
6
+
7
+ register :render_to_cairo_context
8
+ register :to_png
9
+
10
+ if Cairo.const_defined?(:PSSurface)
11
+ register :to_ps
12
+ register :to_eps if Cairo::PSSurface.method_defined?(:eps=)
13
+ end
14
+
15
+ register :to_pdf if Cairo.const_defined?(:PDFSurface)
16
+ register :to_svg if Cairo.const_defined?(:SVGSurface)
17
+
18
+ attr_writer :x, :y, :xdim, :height, :margin
19
+
20
+
21
+ def render_to_cairo_context(context, options={})
22
+ if context.respond_to?(:have_current_point?) and
23
+ context.have_current_point?
24
+ current_x, current_y = context.current_point
25
+ else
26
+ current_x = x(options) || margin(options)
27
+ current_y = y(options) || margin(options)
28
+ end
29
+
30
+ _xdim = xdim(options)
31
+ _height = height(options)
32
+ context.save do
33
+ context.set_source_color(:black)
34
+ context.fill do
35
+ barcode.encoding.scan(/(?:0+|1+)/).each do |codes|
36
+ current_width = _xdim * codes.size
37
+ if codes[0] == ?1
38
+ context.rectangle(current_x, current_y, current_width, _height)
39
+ end
40
+ current_x += current_width
41
+ end
42
+ end
43
+ end
44
+
45
+ context
46
+ end
47
+
48
+
49
+ def to_png(options={})
50
+ output_to_string_io do |io|
51
+ Cairo::ImageSurface.new(options[:format],
52
+ full_width(options),
53
+ full_height(options)) do |surface|
54
+ render(surface, options)
55
+ surface.write_to_png(io)
56
+ end
57
+ end
58
+ end
59
+
60
+
61
+ def to_ps(options={})
62
+ output_to_string_io do |io|
63
+ Cairo::PSSurface.new(io,
64
+ full_width(options),
65
+ full_height(options)) do |surface|
66
+ surface.eps = options[:eps] if surface.respond_to?(:eps=)
67
+ render(surface, options)
68
+ end
69
+ end
70
+ end
71
+
72
+
73
+ def to_eps(options={})
74
+ to_ps(options.merge(:eps => true))
75
+ end
76
+
77
+
78
+ def to_pdf(options={})
79
+ output_to_string_io do |io|
80
+ Cairo::PDFSurface.new(io,
81
+ full_width(options),
82
+ full_height(options)) do |surface|
83
+ render(surface, options)
84
+ end
85
+ end
86
+ end
87
+
88
+
89
+ def to_svg(options={})
90
+ output_to_string_io do |io|
91
+ Cairo::SVGSurface.new(io,
92
+ full_width(options),
93
+ full_height(options)) do |surface|
94
+ render(surface, options)
95
+ end
96
+ end
97
+ end
98
+
99
+
100
+ def x(options={})
101
+ @x || options[:x]
102
+ end
103
+
104
+ def y(options={})
105
+ @y || options[:y]
106
+ end
107
+
108
+ def width(options={})
109
+ barcode.encoding.length * xdim(options)
110
+ end
111
+
112
+ def height(options={})
113
+ @height || options[:height] || 50
114
+ end
115
+
116
+ def full_width(options={})
117
+ width(options) + (margin(options) * 2)
118
+ end
119
+
120
+ def full_height(options={})
121
+ height(options) + (margin(options) * 2)
122
+ end
123
+
124
+ def xdim(options={})
125
+ @xdim || options[:xdim] || 1
126
+ end
127
+
128
+ def margin(options={})
129
+ @margin || options[:margin] || 10
130
+ end
131
+
132
+
133
+ private
134
+
135
+ def output_to_string_io
136
+ io = StringIO.new
137
+ yield(io)
138
+ io.rewind
139
+ io.read
140
+ end
141
+
142
+
143
+ def render(surface, options)
144
+ context = Cairo::Context.new(surface)
145
+ yield(context) if block_given?
146
+ context.set_source_color(options[:background] || :white)
147
+ context.paint
148
+ render_to_cairo_context(context, options)
149
+ context
150
+ end
151
+
152
+
153
+ end
154
+ end
metadata CHANGED
@@ -1,70 +1,64 @@
1
1
  --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.4
3
+ specification_version: 1
2
4
  name: barby
3
5
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
6
+ version: 0.1.2
7
+ date: 2008-04-27 00:00:00 +02:00
8
+ summary: A pure-Ruby barcode generator
9
+ require_paths:
10
+ - lib
11
+ email: toredarell@gmail.com
12
+ homepage: http://tore.darell.no/
13
+ rubyforge_project:
14
+ description:
15
+ autorequire: barby
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
5
25
  platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
6
29
  authors:
7
30
  - Tore Darell
8
- autorequire: barby
9
- bindir: bin
10
- cert_chain: []
11
-
12
- date: 2008-04-25 00:00:00 +02:00
13
- default_executable:
14
- dependencies: []
15
-
16
- description:
17
- email: toredarell@gmail.com
18
- executables: []
19
-
20
- extensions: []
21
-
22
- extra_rdoc_files:
23
- - README
24
31
  files:
25
32
  - lib/barby.rb
26
33
  - lib/barby
27
34
  - lib/barby/barcode.rb
28
35
  - lib/barby/barcode
36
+ - lib/barby/outputter.rb
37
+ - lib/barby/outputter
38
+ - lib/barby/version.rb
29
39
  - lib/barby/barcode/bookland.rb
30
40
  - lib/barby/barcode/code_128.rb
31
41
  - lib/barby/barcode/code_39.rb
32
42
  - lib/barby/barcode/ean_13.rb
33
43
  - lib/barby/barcode/ean_8.rb
34
44
  - lib/barby/barcode/gs1_128.rb
35
- - lib/barby/outputter.rb
36
- - lib/barby/outputter
37
45
  - lib/barby/outputter/ascii_outputter.rb
38
46
  - lib/barby/outputter/pdfwriter_outputter.rb
39
47
  - lib/barby/outputter/rmagick_outputter.rb
48
+ - lib/barby/outputter/cairo_outputter.rb
40
49
  - lib/barby/outputter/png_outputter.rb
41
- - lib/barby/version.rb
42
50
  - README
43
- has_rdoc: true
44
- homepage: http://tore.darell.no/
45
- post_install_message:
51
+ test_files: []
52
+
46
53
  rdoc_options: []
47
54
 
48
- require_paths:
49
- - lib
50
- required_ruby_version: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: "0"
55
- version:
56
- required_rubygems_version: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: "0"
61
- version:
55
+ extra_rdoc_files:
56
+ - README
57
+ executables: []
58
+
59
+ extensions: []
60
+
62
61
  requirements: []
63
62
 
64
- rubyforge_project:
65
- rubygems_version: 1.1.1
66
- signing_key:
67
- specification_version: 2
68
- summary: A pure-Ruby barcode generator
69
- test_files: []
63
+ dependencies: []
70
64