1
0
Fork 0
mirror of https://github.com/haml/haml.git synced 2022-11-09 12:33:31 -05:00
haml--haml/lib/hamlit/filters.rb
2015-10-24 20:32:23 +09:00

53 lines
1.1 KiB
Ruby

require 'hamlit/filters/base'
require 'hamlit/filters/css'
require 'hamlit/filters/escaped'
require 'hamlit/filters/javascript'
require 'hamlit/filters/plain'
require 'hamlit/filters/preserve'
module Hamlit
class Filters
@registered = {}
class << self
attr_reader :registered
private
def register(name, compiler)
registered[name] = compiler
end
end
register :css, Css
register :escaped, Escaped
register :javascript, Javascript
register :plain, Plain
register :preserve, Preserve
def initialize(options = {})
@format = options[:format]
end
def compile(node)
find_compiler(node.value[:name]).compile(node)
end
private
def find_compiler(name)
name = name.to_sym
compiler = Filters.registered[name]
raise NotFound.new("FilterCompiler for '#{name}' was not found") unless compiler
compilers[name] ||= compiler.new(@format)
end
def compilers
@compilers ||= {}
end
class NotFound < RuntimeError
end
end
end