require 'jekyll'
module Jekyll
module Generators
class Abbreviate < Jekyll::Generator
safe true
def initialize(config)
super
@config = config['abbreviate'] ||= {}
end
def generate(site)
site.pages
.reject { |page| skip_layout?(page.data['layout']) }
.each { |page| abbreviate page }
site.posts.docs
.reject { |post| skip_layout?(post.data['layout']) }
.each { |post| abbreviate post }
end
private
def abbreviate(page)
return unless page.data.key?('abbreviations')
seen = {}
page.data['abbreviations'].each do |abbr, definition|
page.content = page.content.gsub(/\{(#{abbr})\}/) do
if seen.key?(abbr)
firstdef = false
else
firstdef = true
seen[abbr] = true
end
if firstdef
"#{definition} (#{abbr})"
else
"<abbr title=\"#{definition}\">#{abbr}</abbr>"
end
end
end
end
def skip_layout?(layout)
to_skip = @config['skip_layouts'] || []
true if to_skip.empty?
to_skip.include?(layout)
end
end
end
end