Sha256: 5d61e43e9073bca7bb35bb9563a34d7472de467ebede69e7ca45f13fcc78f504

Contents?: true

Size: 1.54 KB

Versions: 35

Compression:

Stored size: 1.54 KB

Contents

begin
  require 'bibtex'
  require 'citeproc'
  require 'csl'
  require 'csl/styles'
rescue LoadError => error
end

# Render BibTeX files.
class Gollum::Filter::BibTeX < Gollum::Filter

  def extract(data)
    return data unless supported_format? && gems_available? && bib = ::BibTeX.parse(data).convert(:latex)
    style = find_csl_data('csl') || ::CSL::Style.default
    locale = find_csl_data('locale') || ::CSL::Locale.default

    begin
      style = ::CSL::Style.load(style)
      ::CSL::Locale.load(locale)
    rescue ::CSL::ParseError => error
      log_failure(error.to_s)
      return CGI.escapeHTML(data)
    end

    citeproc = ::CiteProc::Processor.new(style: style, locale: locale, format: 'html')
    citeproc.import(bib.to_citeproc)
    citeproc.bibliography.references.join('<br/>')
  end

  def process(data)
    data
  end

  private

  def log_failure(msg)
    @markup.metadata = {} unless @markup.metadata
    @markup.metadata['errors'] = [] unless @markup.metadata['errors']
    @markup.metadata['errors'] << "Could not render the bibliography because no valid CSL or locale file was found in the wiki or in the CSL directory. Please commited a valid file, or install the csl-styles gem. The message from the parser was: #{msg.to_s}."
  end

  def supported_format?
    @markup.format == :bib
  end

  def gems_available?
    ::Gollum::Markup.formats[:bib][:enabled]
  end

  def find_csl_data(key)
    path = @markup.metadata ? @markup.metadata[key] : nil
    file = path ? @markup.wiki.file(path) : nil
    file.nil? ? path : file.raw_data
  end
end

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
gollum-lib-6.0-java lib/gollum-lib/filter/bibtex.rb
gollum-lib-6.0 lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.2.4-java lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.2.4 lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.2.3-java lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.2.3 lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.2.2-java lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.2.2 lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.2.1-java lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.2.1 lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.2-java lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.2 lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.1.3-java lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.1.3 lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.1.2-java lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.1.2 lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.1.1-java lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.1.1 lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.1-java lib/gollum-lib/filter/bibtex.rb
gollum-lib-5.1 lib/gollum-lib/filter/bibtex.rb