module Jekyll class EnunciationTagBlock < Liquid::Block def initialize(tag_name, arg, parse_context) super @arg = arg.strip @slugtemplate = Liquid::Template.parse("{{ string | slugify }}") end def render(context) text = super # If the enunciation ends with a KaTeX displayed equation, # then we remove the bottom margin. if text[-5,5] == " $$\n" text += ' {: .katex-display .mb-0 }' elsif text[-3,3] == "$$\n" text += '{: .katex-display .mb-0 }' end # Check if a description was given. if @arg.length < 1 "{: .#{block_name} }\n #{text.gsub!(/^/,'> ')}" else if @arg[0] == "*" title = @arg.delete_prefix("* ") else title = "#{block_name.capitalize} (#{@arg})" end slug = @slugtemplate.render( 'string' => title ) "{: .#{block_name}-title }\n> #{title}\n> {: \##{slug} }\n>\n#{text.gsub!(/^/,'> ')}" end end end end # TODO: avoid reading configuration twice Jekyll.configuration({})['callouts'].each do |name, value| Liquid::Template.register_tag(name, Jekyll::EnunciationTagBlock) end