diff --git a/lib/jekyll/scholar.rb b/lib/jekyll/scholar.rb index b3d2f55a35df36ef770faedd7ee9a1602794a83a..d9832a4caea9d3182ab2e303290d8cc932b11270 100644 --- a/lib/jekyll/scholar.rb +++ b/lib/jekyll/scholar.rb @@ -5,36 +5,10 @@ require 'bibtex' require 'citeproc' require 'jekyll/scholar/version' +require 'jekyll/scholar/defaults' require 'jekyll/scholar/utilities' + require 'jekyll/scholar/converters/bibtex' require 'jekyll/scholar/tags/bibliography' require 'jekyll/scholar/tags/cite' require 'jekyll/scholar/generators/details' - -module Jekyll - class Scholar - - @defaults = Hash[*%w{ - - style apa - locale en - - sort_by none - order ascending - - source ./_bibliography - bibliography references.bib - - details_dir ./bibliography - details_layout bibtex.html - - query @* - - }].freeze - - class << self - attr_reader :defaults - end - - end -end diff --git a/lib/jekyll/scholar/defaults.rb b/lib/jekyll/scholar/defaults.rb new file mode 100644 index 0000000000000000000000000000000000000000..39d2e67e01a8bd79818e07a853d8e9601eb511b9 --- /dev/null +++ b/lib/jekyll/scholar/defaults.rb @@ -0,0 +1,26 @@ +module Jekyll + class Scholar + @defaults = Hash[*%w{ + + style apa + locale en + + sort_by none + order ascending + + source ./_bibliography + bibliography references.bib + + details_dir bibliography + details_layout bibtex.html + details_link Details + + query @* + + }].freeze + + class << self + attr_reader :defaults + end + end +end \ No newline at end of file diff --git a/lib/jekyll/scholar/generators/details.rb b/lib/jekyll/scholar/generators/details.rb index 2e334a3b2bd2ecef35e49659e620edbca6b6d953..31c5d858b6092c9b378058a256ba79ffd7b38e03 100644 --- a/lib/jekyll/scholar/generators/details.rb +++ b/lib/jekyll/scholar/generators/details.rb @@ -2,15 +2,14 @@ module Jekyll class Scholar class Details < Page - - attr_reader :config + include Scholar::Utilities def initialize(site, base, dir, entry) @site, @base, @dir = site, base, dir @config = Scholar.defaults.merge(site.config['scholar'] || {}) - @name = filename_for(entry) + @name = details_file_for(entry) process(@name) read_yaml(File.join(base, '_layouts'), config['details_layout']) @@ -20,14 +19,6 @@ module Jekyll private - def filename_for(entry) - n = entry.key.dup - - n.gsub!(/[:\s]+/, '_') - - [n, 'html'].join('.') - end - def liquidify(entry) data['entry'] = {} @@ -42,16 +33,17 @@ module Jekyll end class DetailsGenerator < Generator + include Scholar::Utilities safe true attr_reader :config def generate(site) - @config = Scholar.defaults.merge(site.config['scholar'] || {}) + @site, @config = site, Scholar.defaults.merge(site.config['scholar'] || {}) - if site.layouts.key?(File.basename(config['details_layout'], '.html')) - bibliography[config['query']].each do |entry| - details = Details.new(site, site.source, config['details_dir'], entry) + if generate_details? + entries.each do |entry| + details = Details.new(site, site.source, details_path, entry) details.render(site.layouts, site.site_payload) details.write(site.dest) @@ -61,17 +53,6 @@ module Jekyll end end - private - - def bibliography - @bibliography ||= BibTeX.open(bibliography_path, :filter => :latex) - end - - def bibliography_path - p = File.join(config['source'], config['bibliography']) - p << '.bib' unless File.exists?(p) - p - end end diff --git a/lib/jekyll/scholar/tags/bibliography.rb b/lib/jekyll/scholar/tags/bibliography.rb index b395b7b3041caffb0c325bd77c1ca17fd339409c..6f79efe5b22b288daeab5e21e7d2bd67fdcdb3a5 100644 --- a/lib/jekyll/scholar/tags/bibliography.rb +++ b/lib/jekyll/scholar/tags/bibliography.rb @@ -2,65 +2,35 @@ module Jekyll class Scholar class BibliographyTag < Liquid::Tag + include Scholar::Utilities - attr_reader :file, :config - def initialize(tag_name, arguments, tokens) super @config = Scholar.defaults.dup - @file = arguments.strip + @bibtex_file = arguments.strip end def render(context) - config.merge!(context.registers[:site].config['scholar'] || {}) + @site = context.registers[:site] + config.merge!(site.config['scholar'] || {}) references = entries.map do |e| - r = CiteProc.process e.to_citeproc, :style => config['style'], + reference = CiteProc.process e.to_citeproc, :style => config['style'], :locale => config['locale'], :format => 'html' - r = "#{r}" + reference = "#{reference}" - if e.field?(:url) - r << "URL" - end - - if e.field?(:doi) - r << "DOI" + if generate_details? + reference << "#{config['details_link']}" end - - "