class Rote::Filters::TextFilter

Baseclass from which Rote filters can be derived if they want to process text without macros. This class replaces macro tags/bodies with simple placeholders, containing only characters [a-z0-9] before passing it the text to the block. On return, macro markers are replaced with the corresponding (numbered) original macro body.

Attributes

handler_blk[RW]
macros[RW]

Public Class Methods

new(&handler) click to toggle source

Create a new TextFilter. The supplied block will be called with the text to be rendered, with all macros replaced by plain-text macro markers:

{ |text, page| "replacement" }
   # File lib/rote/filters/base.rb
37 def initialize(&handler)
38   @handler_blk = handler
39   @macros = []
40 end

Public Instance Methods

filter(text, page) click to toggle source
   # File lib/rote/filters/base.rb
42 def filter(text, page)
43   # we need to remove any macros to stop them being touched
44   n = -1        
45   tmp = text.gsub(MACRO_RE) do
46     macros << $&
47     # we need make the marker a 'paragraph'
48     "\nxmxmxmacro#{n += 1}orcamxmxmx\n"
49   end
50   
51   tmp = handler(tmp,page)
52 
53   # Match the placeholder, including any (and greedily all) markup that's
54   # been placed before or after it, and put the macro text back.
55   tmp.gsub(PLACEHOLDER_RE) { macros[$1.to_i] }      
56 end

Protected Instance Methods

handler(tmp,page) click to toggle source

Calls the handler block. Subclasses may override this rather than use a block.

   # File lib/rote/filters/base.rb
62 def handler(tmp,page)
63   handler_blk[tmp,page] if handler_blk
64 end