Class: Prawn::ObjectStore
- Inherits:
-
Object
- Object
- Prawn::ObjectStore
- Includes:
- Enumerable
- Defined in:
- lib/prawn/object_store.rb
Overview
:nodoc:
Instance Method Summary collapse
- #[](id) ⇒ Object
- #compact ⇒ Object
- #each ⇒ Object
-
#initialize(info = {}) ⇒ ObjectStore
constructor
A new instance of ObjectStore.
-
#push(*args, &block) ⇒ Object
(also: #<<)
Adds the given reference to the store and returns the reference object.
- #ref(data, &block) ⇒ Object
- #size ⇒ Object (also: #length)
Constructor Details
#initialize(info = {}) ⇒ ObjectStore
Returns a new instance of ObjectStore.
12 13 14 15 16 17 18 19 20 |
# File 'lib/prawn/object_store.rb', line 12 def initialize(info={}) @objects = {} @identifiers = [] # Create required PDF roots @info = ref(info).identifier @pages = ref(:Type => :Pages, :Count => 0, :Kids => []).identifier @root = ref(:Type => :Catalog, :Pages => pages).identifier end |
Instance Method Details
#[](id) ⇒ Object
53 54 55 |
# File 'lib/prawn/object_store.rb', line 53 def [](id) @objects[id] end |
#compact ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/prawn/object_store.rb', line 62 def compact # Clear live markers each { |o| o.live = false } # Recursively mark reachable objects live, starting from the roots # (the only objects referenced in the trailer) root.mark_live info.mark_live # Renumber live objects to eliminate gaps (shrink the xref table) if @objects.any?{ |_, o| !o.live } new_id = 1 new_objects = {} new_identifiers = [] each do |obj| if obj.live obj.identifier = new_id new_objects[new_id] = obj new_identifiers << new_id new_id += 1 end end @objects = new_objects @identifiers = new_identifiers end end |
#each ⇒ Object
47 48 49 50 51 |
# File 'lib/prawn/object_store.rb', line 47 def each @identifiers.each do |id| yield @objects[id] end end |
#push(*args, &block) ⇒ Object Also known as: <<
Adds the given reference to the store and returns the reference object. If the object provided is not a Prawn::Reference, one is created from the arguments provided.
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/prawn/object_store.rb', line 35 def push(*args, &block) reference = if args.first.is_a?(Prawn::Reference) args.first else Prawn::Reference.new(*args, &block) end @objects[reference.identifier] = reference @identifiers << reference.identifier reference end |
#ref(data, &block) ⇒ Object
22 23 24 |
# File 'lib/prawn/object_store.rb', line 22 def ref(data, &block) push(size + 1, data, &block) end |
#size ⇒ Object Also known as: length
57 58 59 |
# File 'lib/prawn/object_store.rb', line 57 def size @identifiers.size end |