class Mdoc::Pipeline

Attributes

processors[R]
writer[RW]

Public Class Methods

new(ary = []) click to toggle source
# File lib/mdoc/pipeline.rb, line 6
def initialize(ary = [])
  @processors = []
  append ary
end

Public Instance Methods

append(prc) click to toggle source
# File lib/mdoc/pipeline.rb, line 37
def append(prc)
  prc = get_prc(prc)
  prc.each { |p| @processors << p }
end
apply!(document) click to toggle source

recursively apply processors to document

# File lib/mdoc/pipeline.rb, line 53
def apply!(document)
  @processors.each do |pn|
    prc = Mdoc.get_processor(pn)
    prc.new.pre_processors.each { |p| document.apply!(p) }
    document.apply!(prc)
    prc.new.post_processors.each { |p| document.apply!(p) }
  end

  writer.new.process!(document)
end
enabled?(prc) click to toggle source
# File lib/mdoc/pipeline.rb, line 47
def enabled?(prc)
  prc = get_prc(prc)
  @processors.include(prc)
end
get_offset(opts) click to toggle source

from :before, :after, calculate insert offset

# File lib/mdoc/pipeline.rb, line 27
def get_offset(opts)
  phash = Hash[@processors.map.with_index.to_a]
  if opts[:before]
    offset = phash[Mdoc.get_processor(opts[:before])]
  elsif opts[:after]
    offset = phash[Mdoc.get_processor(opts[:after])] + 1
  end
  offset
end
get_prc(prc) click to toggle source

get processor class in name

# File lib/mdoc/pipeline.rb, line 12
def get_prc(prc)
  prc = [prc] unless prc.is_a?(Array)
  prc.map { |pn| Mdoc.get_processor(pn) }
end
insert(prc, opts = {}) click to toggle source
# File lib/mdoc/pipeline.rb, line 17
def insert(prc, opts = {})
  prc = get_prc(prc)
  raise 'can not set before with after' if opts[:before] && opts[:after]
  ankor = opts[:before] || opts[:after]
  offset = get_offset(opts) if ankor
  ankor ? @processors.insert(offset, *prc) :
          @processors = prc.concat(@processors)
end
remove(prc) click to toggle source
# File lib/mdoc/pipeline.rb, line 42
def remove(prc)
  prc = get_prc(prc)
  prc.map { |pn| @processors.delete(pn) }
end