From 50c4ded7151b3926dc4761ac74fc5f68a4f8d07a Mon Sep 17 00:00:00 2001 From: Sylvester Keil Date: Sat, 6 Apr 2013 14:57:32 +0200 Subject: [PATCH] add bibliography templates #19 --- features/bibtex.feature | 28 +++++++++++++++++++ features/reference.feature | 33 +++++++++++++++++++++-- lib/jekyll/scholar/defaults.rb | 36 ++++++++++++++----------- lib/jekyll/scholar/tags/bibliography.rb | 2 +- lib/jekyll/scholar/utilities.rb | 26 ++++++++++++++++-- 5 files changed, 104 insertions(+), 21 deletions(-) diff --git a/features/bibtex.feature b/features/bibtex.feature index a4975e3..bfe6e7c 100644 --- a/features/bibtex.feature +++ b/features/bibtex.feature @@ -90,6 +90,34 @@ Feature: BibTeX And the "_site/scholar.html" file should exist And I should see "The Ruby Programming Language" in "_site/scholar.html" + @tags @bibliography @config + Scenario: Simple Bibliography With Custom Template + Given I have a scholar configuration with: + | key | value | + | source | ./_bibliography | + | bibliography_template | [%{key}]%{reference} | + And I have a "_bibliography" directory + And I have a file "_bibliography/references.bib": + """ + @book{ruby, + title = {The Ruby Programming Language}, + author = {Flanagan, David and Matsumoto, Yukihiro}, + year = {2008}, + publisher = {O'Reilly Media} + } + """ + And I have a page "scholar.html": + """ + --- + --- + {% bibliography -f references %} + """ + When I run jekyll + Then the _site directory should exist + And the "_site/scholar.html" file should exist + And I should see "The Ruby Programming Language" in "_site/scholar.html" + And I should see "\[ruby\]The Ruby" in "_site/scholar.html" - @tags @reference + @tags @reference @missing Scenario: Missing references Given I have a scholar configuration with: | key | value | @@ -54,4 +54,33 @@ Feature: Formatted References When I run jekyll Then the _site directory should exist And the "_site/scholar.html" file should exist - And I should see "missing reference" in "_site/scholar.html" + And I should see "(missing reference)" in "_site/scholar.html" + + @tags @reference @missing + Scenario: Missing references with a custom text + Given I have a scholar configuration with: + | key | value | + | source | ./_bibliography | + | bibliography | my_references | + | missing_reference | not found! | + And I have a "_bibliography" directory + And I have a file "_bibliography/my_references.bib": + """ + @book{ruby, + title = {The Ruby Programming Language}, + author = {Flanagan, David and Matsumoto, Yukihiro}, + year = {2008}, + publisher = {O'Reilly Media} + } + """ + And I have a page "scholar.html": + """ + --- + --- + {% reference java %} + """ + When I run jekyll + Then the _site directory should exist + And the "_site/scholar.html" file should exist + And I should see "not found!" in "_site/scholar.html" + And I should not see "(missing reference)" in "_site/scholar.html" diff --git a/lib/jekyll/scholar/defaults.rb b/lib/jekyll/scholar/defaults.rb index 2ab145d..81551cc 100644 --- a/lib/jekyll/scholar/defaults.rb +++ b/lib/jekyll/scholar/defaults.rb @@ -1,26 +1,30 @@ module Jekyll class Scholar - @defaults = Hash[*%w{ + @defaults = { + 'style' => 'apa', + 'locale' => 'en', - style apa - locale en + 'sort_by' => 'none', + 'order' => 'ascending', - sort_by none - order ascending + 'source' => './_bibliography', + 'bibliography' => 'references.bib', - source ./_bibliography - bibliography references.bib + 'details_dir' => 'bibliography', + 'details_layout' => 'bibtex.html', + 'details_link' => 'Details', - details_dir bibliography - details_layout bibtex.html - details_link Details - - bibliography_class bibliography - details_link_class details + 'bibliography_class' => 'bibliography', + 'bibliography_template' => '%{reference}', - query @* - - }].freeze + 'reference_tagname' => 'span', + 'missing_reference' => '(missing reference)', + + 'details_link_class' => 'details', + + 'query' => '@*' + + }.freeze class << self attr_reader :defaults diff --git a/lib/jekyll/scholar/tags/bibliography.rb b/lib/jekyll/scholar/tags/bibliography.rb index 6546542..fbaf0a1 100644 --- a/lib/jekyll/scholar/tags/bibliography.rb +++ b/lib/jekyll/scholar/tags/bibliography.rb @@ -24,7 +24,7 @@ module Jekyll end references.map! do |entry| - reference = reference_tag entry + reference = bibliography_tag entry if generate_details? reference << link_to(details_link_for(entry), diff --git a/lib/jekyll/scholar/utilities.rb b/lib/jekyll/scholar/utilities.rb index 57ebbee..50bc7fb 100644 --- a/lib/jekyll/scholar/utilities.rb +++ b/lib/jekyll/scholar/utilities.rb @@ -80,13 +80,35 @@ module Jekyll end def reference_tag(entry) - return '(missing reference)' unless entry + return missing_reference unless entry entry = entry.convert(:latex) reference = CiteProc.process entry.to_citeproc, :style => config['style'], :locale => config['locale'], :format => 'html' - content_tag :span, reference, :id => [prefix, entry.key].compact.join('-') + content_tag reference_tagname, reference, + :id => [prefix, entry.key].compact.join('-') + end + + def missing_reference + config['missing_reference'] + end + + def reference_tagname + config['reference_tagname'] || :span + end + + def bibliography_template + config['bibliography_template'] || '%{reference}' + end + + def bibliography_tag(entry) + return missing_reference unless entry + + bibliography_template % { + :reference => reference_tag(entry), + :key => entry.key + } end def generate_details? -- GitLab