utilities.rb 1.56 KB
Newer Older
Sylvester Keil's avatar
Sylvester Keil committed
1
module Jekyll
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  class Scholar
    
    # Utility methods used by several Scholar plugins. The methods in this
    # module may depend on the presence of #config, #bibtex_file, and
    # #site readers
    module Utilities
      
      attr_reader :bibtex_file, :config, :site
      
      def bibtex_options
        @bibtex_options ||= { :filter => :latex }
      end
      
      def bibtex_path
        @bibtex_path ||= extend_path(bibtex_file)
      end
      
      def bibliography
        @bibliography ||= BibTeX.open(bibtex_path, bibtex_options)
      end          
      
      def entries
        b = bibliography[config['query']]

        unless config['sort_by'] == 'none'
          b.sort_by! { |e| e[config['sort_by']].to_s }
          b.reverse! if config['order'] =~ /^(desc|reverse)/i
        end
        
        b
      end
      
      def extend_path(name)
        if name.nil? || name.empty?
          name = config['bibliography']
        end
        
        p = File.join(config['source'], name)
        p << '.bib' unless File.exists?(p)
        p
      end
      
      def generate_details?
        site.layouts.key?(File.basename(config['details_layout'], '.html'))
      end
      
      def details_file_for(entry)
        name = entry.key.to_s.dup
        
        name.gsub!(/[:\s]+/, '_')
        
        [name, 'html'].join('.')
      end
      
      def details_link_for(entry)
        [site.source, details_path, details_file_for(entry)].join('/')
      end
      
      def details_path
        config['details_dir']
      end
      
    end
    
  end
Sylvester Keil's avatar
Sylvester Keil committed
67
end