Class: Banzai::Filter::BlockquoteFenceFilter
- Inherits:
-
TimeoutTextPipelineFilter
- Object
- HTML::Pipeline::TextFilter
- TimeoutTextPipelineFilter
- Banzai::Filter::BlockquoteFenceFilter
- Defined in:
- lib/banzai/filter/blockquote_fence_filter.rb
Constant Summary collapse
- REGEX =
%r{ #{::Gitlab::Regex.markdown_code_or_html_blocks} | (?=(?<=^\n|\A)\ *>>>\ *\n.*\n\ *>>>\ *(?=\n$|\z))(?: # Blockquote: # >>> # Anything, including code and HTML blocks # >>> (?<=^\n|\A)(?<indent>\ *)>>>\ *\n (?<blockquote> (?: # Any character that doesn't introduce a code or HTML block (?! ^``` | ^<[^>]+?>\ *\n ) . | # A code block \g<code> | # An HTML block \g<html> )+? ) \n\ *>>>\ *(?=\n$|\z) ) }mx
Constants inherited from TimeoutTextPipelineFilter
TimeoutTextPipelineFilter::RENDER_TIMEOUT
Instance Method Summary collapse
- #call_with_timeout ⇒ Object
-
#initialize(text, context = nil, result = nil) ⇒ BlockquoteFenceFilter
constructor
A new instance of BlockquoteFenceFilter.
Methods inherited from TimeoutTextPipelineFilter
Constructor Details
#initialize(text, context = nil, result = nil) ⇒ BlockquoteFenceFilter
Returns a new instance of BlockquoteFenceFilter.
37 38 39 40 |
# File 'lib/banzai/filter/blockquote_fence_filter.rb', line 37 def initialize(text, context = nil, result = nil) super text, context, result @text = @text.delete("\r") end |
Instance Method Details
#call_with_timeout ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/banzai/filter/blockquote_fence_filter.rb', line 42 def call_with_timeout @text.gsub(REGEX) do if $~[:blockquote] # keep the same number of source lines/positions by replacing the # fence lines with newlines indent = $~[:indent] "\n" + $~[:blockquote].gsub(/^#{Regexp.quote(indent)}/, "#{indent}> ").gsub(/^> $/, ">") + "\n" else $~[0] end end end |