Module: Pdfrb::Filter

Defined in:
lib/pdfrb/filter.rb,
lib/pdfrb/filter/base.rb,
lib/pdfrb/filter/crypt.rb,
lib/pdfrb/filter/dct_decode.rb,
lib/pdfrb/filter/jpx_decode.rb,
lib/pdfrb/filter/lzw_decode.rb,
lib/pdfrb/filter/flate_decode.rb,
lib/pdfrb/filter/jbig2_decode.rb,
lib/pdfrb/filter/brotli_decode.rb,
lib/pdfrb/filter/png_predictor.rb,
lib/pdfrb/filter/ascii_85_decode.rb,
lib/pdfrb/filter/ascii_hex_decode.rb,
lib/pdfrb/filter/ccitt_fax_decode.rb,
lib/pdfrb/filter/run_length_decode.rb,
lib/pdfrb/filter/passthrough_filters.rb

Overview

Stream filter pipeline (s7.4). Each filter is a stateless class with decoder(bytes, parms, document) and encoder(bytes, parms, document) class methods, registered via register_as.

Defined Under Namespace

Modules: Base, BrotliDecode, CCITTFaxDecode, DCTDecode, JBIG2Decode, JPXDecode, PNGPredictor Classes: ASCII85Decode, ASCIIHexDecode, Crypt, FlateDecode, LZWDecode, RunLengthDecode

Class Method Summary collapse

Class Method Details

.[](name) ⇒ Object



28
29
30
# File 'lib/pdfrb/filter.rb', line 28

def [](name)
  registry[name.to_s]
end

.apply(bytes, filters:, parms:, direction:, document: nil) ⇒ Object



45
46
47
48
49
50
51
52
53
54
# File 'lib/pdfrb/filter.rb', line 45

def apply(bytes, filters:, parms:, direction:, document: nil)
  eager_load!
  return bytes if filters.empty?

  case direction
  when :decode then decode_chain(bytes, filters, parms, document)
  when :encode then encode_chain(bytes, filters, parms, document)
  else raise ArgumentError, "unknown direction #{direction.inspect}"
  end
end

.eager_load!Object

Force-load all filter implementations so register_as calls fire and populate the registry. Idempotent.



34
35
36
37
38
39
40
41
42
43
# File 'lib/pdfrb/filter.rb', line 34

def eager_load!
  return if @eager_loaded

  constants.each do |c|
    const_get(c)
  rescue NameError
    # Skip autoload targets that don't define a class.
  end
  @eager_loaded = true
end

.register(name, klass) ⇒ Object



24
25
26
# File 'lib/pdfrb/filter.rb', line 24

def register(name, klass)
  registry[name.to_s] = klass
end

.registryObject



22
# File 'lib/pdfrb/filter.rb', line 22

def registry; @registry ||= {}; end