class Origami::XRefStream
Constants
- Index
- Size
- W
- XREF_COMPRESSED
- XREF_FREE
- XREF_USED
Public Class Methods
new(data = "", dictionary = {})
click to toggle source
Calls superclass method
Origami::Stream::new
# File lib/origami/xreftable.rb, line 387 def initialize(data = "", dictionary = {}) super(data, dictionary) @xrefs = nil end
Public Instance Methods
<<(xref)
click to toggle source
clear()
click to toggle source
# File lib/origami/xreftable.rb, line 471 def clear self.data = '' @xrefs = [] self.Index = [] end
each(&b)
click to toggle source
Iterates over each XRef
present in the stream.
# File lib/origami/xreftable.rb, line 425 def each(&b) load! if @xrefs.nil? @xrefs.each(&b) end
each_with_number() { |next, no| ... }
click to toggle source
Iterates over each XRef
present in the stream, passing the XRef
and its object number.
# File lib/origami/xreftable.rb, line 434 def each_with_number return enum_for(__method__) unless block_given? load! if @xrefs.nil? ranges = object_ranges xrefs = @xrefs.to_enum ranges.each do |range| range.each do |no| begin yield(xrefs.next, no) rescue StopIteration raise InvalidXRefStreamObjectError, "Range is bigger than number of entries" end end end end
entries()
click to toggle source
# File lib/origami/xreftable.rb, line 393 def entries load! if @xrefs.nil? @xrefs end
find(no)
click to toggle source
Returns an XRef
matching this object number.
# File lib/origami/xreftable.rb, line 456 def find(no) load! if @xrefs.nil? ranges = object_ranges index = 0 ranges.each do |range| return @xrefs[index + no - range.begin] if range.cover?(no) index += range.size end nil end
Private Instance Methods
field_widths()
click to toggle source
Check and return the internal field widths.
# File lib/origami/xreftable.rb, line 533 def field_widths widths = self.W unless widths.is_a?(Array) and widths.length == 3 and widths.all? {|w| w.is_a?(Integer) and w >= 0 } raise InvalidXRefStreamObjectError, "Invalid W field: #{widths}" end widths end
object_ranges()
click to toggle source
# File lib/origami/xreftable.rb, line 479 def object_ranges load! if @xrefs.nil? if self.key?(:Index) ranges = self.Index unless ranges.is_a?(Array) and ranges.length.even? and ranges.all?{|i| i.is_a?(Integer)} raise InvalidXRefStreamObjectError, "Index must be an even Array of integers" end ranges.each_slice(2).map { |start, length| Range.new(start.to_i, start.to_i + length.to_i - 1) } else [ 0...@xrefs.size ] end end