Sha256: 8ea7656f1363b52d6b4122983d75a99f0b09fc65938ecc68e1a9571724dc7796

Contents?: true

Size: 1.49 KB

Versions: 2

Compression:

Stored size: 1.49 KB

Contents

require 'bibtex'
require 'bibtex/filters'
require 'latex/decode/base'
require 'latex/decode/maths'
require 'latex/decode/accents'
require 'latex/decode/diacritics'
require 'latex/decode/punctuation'
require 'latex/decode/symbols'
require 'latex/decode/greek'

module AsciidoctorBibliography
  module Databases
    module BibTeX
      def self.load(filename)
        ::BibTeX.open(filename, filter: [LatexFilter]).to_citeproc
      end

      # This filter extends the original latex filter in bibtex-ruby to handle
      # unknown latex macros more gracefully. We could have used latex-decode
      # gem together with our custom replacement rules, but latex-decode eats up
      # all braces after it finishes all decoding. So we hack over the
      # LaTeX.decode function and insert our rules before `strip_braces`.
      class LatexFilter < ::BibTeX::Filter
        def apply(value)
          text = value.to_s
          LaTeX::Decode::Base.normalize(text)
          LaTeX::Decode::Maths.decode!(text)
          LaTeX::Decode::Accents.decode!(text)
          LaTeX::Decode::Diacritics.decode!(text)
          LaTeX::Decode::Punctuation.decode!(text)
          LaTeX::Decode::Symbols.decode!(text)
          LaTeX::Decode::Greek.decode!(text)
          text.gsub!(/\\url\{(.+?)\}/, " \\1 ")
          text.gsub!(/\\\w+(?=\s+\w)/, "")
          text.gsub!(/\\\w+(?:\[.+?\])?\s*\{(.+?)\}/, "\\1")
          LaTeX::Decode::Base.strip_braces(text)
          LaTeX.normalize_C(text)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
asciidoctor-bibliography-0.1 lib/asciidoctor-bibliography/databases/bibtex.rb
asciidoctor-bibliography-0.0.1.dev lib/asciidoctor-bibliography/databases/bibtex.rb