blog/_plugins/highlight-capion-options.rb

32 lines
1.1 KiB
Ruby

# Extend Jekyll 'highlight' tag to allow captions.
# You can use following options:
# 1. {% highlight <lang> [linenos] [caption] %}
# 2. {% highlight <lang> [linenos] [caption=some-text_without.duble/quotes] %}
module JekyllTagsExtensions
module HighlightCaption
def self.prepended(mod)
syntax = mod.send(:remove_const, :SYNTAX).source.gsub('\\w', '[^[:^graph:]"]')
mod.const_set(:SYNTAX, Regexp.new(syntax))
options = mod.send(:remove_const, :OPTIONS_REGEX).source.gsub('\\w', '[^[:^graph:]"]')
mod.const_set(:OPTIONS_REGEX, Regexp.new(options))
end
def render(*args)
caption = "<figcaption>"
caption << "<span class=\"lang\">#{@lang.upcase}#{@highlight_options[:caption] ? ":" : ""}</span>"
if @highlight_options[:caption].is_a? String
caption << "<em>#{@highlight_options[:caption]}</em>"
end
caption << "</figcaption>"
match = super.match('<figure[^>]*>')
match.pre_match + match.to_s + caption + match.post_match
end
end
end
Jekyll::Hooks.register :site, :pre_render do |site|
Jekyll::Tags::HighlightBlock.prepend JekyllTagsExtensions::HighlightCaption
end