2018-11-18 11:00:15 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2015-12-23 02:04:40 +05:30
|
|
|
module Banzai
|
|
|
|
module Filter
|
|
|
|
class MarkdownFilter < HTML::Pipeline::TextFilter
|
|
|
|
def initialize(text, context = nil, result = nil)
|
2018-03-27 19:54:05 +05:30
|
|
|
super(text, context, result)
|
|
|
|
|
2019-03-02 22:35:43 +05:30
|
|
|
@renderer = renderer(context[:markdown_engine]).new(context)
|
2018-03-27 19:54:05 +05:30
|
|
|
@text = @text.delete("\r")
|
2015-12-23 02:04:40 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
def call
|
2018-03-27 19:54:05 +05:30
|
|
|
@renderer.render(@text).rstrip
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
2018-11-08 19:23:39 +05:30
|
|
|
DEFAULT_ENGINE = :common_mark
|
2018-03-27 19:54:05 +05:30
|
|
|
|
|
|
|
def engine(engine_from_context)
|
|
|
|
engine_from_context ||= DEFAULT_ENGINE
|
|
|
|
|
|
|
|
engine_from_context.to_s.classify
|
2015-12-23 02:04:40 +05:30
|
|
|
end
|
|
|
|
|
2018-03-27 19:54:05 +05:30
|
|
|
def renderer(engine_from_context)
|
|
|
|
"Banzai::Filter::MarkdownEngines::#{engine(engine_from_context)}".constantize
|
|
|
|
rescue NameError
|
|
|
|
raise NameError, "`#{engine_from_context}` is unknown markdown engine"
|
2016-09-13 17:45:13 +05:30
|
|
|
end
|
2015-12-23 02:04:40 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|