Class: Banzai::Filter::MathFilter

Inherits:
HTML::Pipeline::Filter
  • Object
show all
Defined in:
lib/banzai/filter/math_filter.rb

Overview

HTML filter that adds class=“code math” and removes the dollar sign in $`2+2`$.

Constant Summary collapse

STYLE_ATTRIBUTE =

Attribute indicating inline or display math.

'data-math-style'
TAG_CLASS =

Class used for tagging elements that should be rendered

'js-render-math'
INLINE_CLASSES =
"code math #{TAG_CLASS}"
DOLLAR_SIGN =
'$'

Instance Method Summary collapse

Instance Method Details

#callObject


23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/banzai/filter/math_filter.rb', line 23

def call
  doc.css('code').each do |code|
    closing = code.next
    opening = code.previous

    # We need a sibling before and after.
    # They should end and start with $ respectively.
    if closing && opening &&
        closing.text? && opening.text? &&
        closing.content.first == DOLLAR_SIGN &&
        opening.content.last == DOLLAR_SIGN

      code[:class] = INLINE_CLASSES
      code[STYLE_ATTRIBUTE] = 'inline'
      closing.content = closing.content[1..-1]
      opening.content = opening.content[0..-2]
    end
  end

  doc.css('pre.code.math').each do |el|
    el[STYLE_ATTRIBUTE] = 'display'
    el[:class] += " #{TAG_CLASS}"
  end

  doc
end