Chris@909: module CodeRay Chris@909: module Encoders Chris@909: Chris@909: # A Filter encoder has another Tokens instance as output. Chris@909: # It can be subclass to select, remove, or modify tokens in the stream. Chris@909: # Chris@909: # Subclasses of Filter are called "Filters" and can be chained. Chris@909: # Chris@909: # == Options Chris@909: # Chris@909: # === :tokens Chris@909: # Chris@909: # The Tokens object which will receive the output. Chris@909: # Chris@909: # Default: Tokens.new Chris@909: # Chris@909: # See also: TokenKindFilter Chris@909: class Filter < Encoder Chris@909: Chris@909: register_for :filter Chris@909: Chris@909: protected Chris@909: def setup options Chris@909: super Chris@909: Chris@909: @tokens = options[:tokens] || Tokens.new Chris@909: end Chris@909: Chris@909: def finish options Chris@909: output @tokens Chris@909: end Chris@909: Chris@909: public Chris@909: Chris@909: def text_token text, kind # :nodoc: Chris@909: @tokens.text_token text, kind Chris@909: end Chris@909: Chris@909: def begin_group kind # :nodoc: Chris@909: @tokens.begin_group kind Chris@909: end Chris@909: Chris@909: def begin_line kind # :nodoc: Chris@909: @tokens.begin_line kind Chris@909: end Chris@909: Chris@909: def end_group kind # :nodoc: Chris@909: @tokens.end_group kind Chris@909: end Chris@909: Chris@909: def end_line kind # :nodoc: Chris@909: @tokens.end_line kind Chris@909: end Chris@909: Chris@909: end Chris@909: Chris@909: end Chris@909: end