Sha256: 6ebc1fc1fa079da46d71eef11ab93b5c06ac129d82f74d0c3334faded969fe9e

Contents?: true

Size: 1.73 KB

Versions: 9

Compression:

Stored size: 1.73 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
      EXTENSIONS = %w[.bib .bibtex].freeze

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

      # NOTE: the class below comes from asciidoctor-bibtex

      # 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) # rubocop:disable Metrics/MethodLength; keep this a list, though!
          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)
          # TODO: could we be doing something smarter with some macros, e.g. \url?
          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

9 entries across 9 versions & 1 rubygems

Version Path
asciidoctor-bibliography-0.5.0 lib/asciidoctor-bibliography/databases/bibtex.rb
asciidoctor-bibliography-0.7.0 lib/asciidoctor-bibliography/databases/bibtex.rb
asciidoctor-bibliography-0.6.0 lib/asciidoctor-bibliography/databases/bibtex.rb
asciidoctor-bibliography-0.5.1 lib/asciidoctor-bibliography/databases/bibtex.rb
asciidoctor-bibliography-0.4.4 lib/asciidoctor-bibliography/databases/bibtex.rb
asciidoctor-bibliography-0.4.3 lib/asciidoctor-bibliography/databases/bibtex.rb
asciidoctor-bibliography-0.4.2 lib/asciidoctor-bibliography/databases/bibtex.rb
asciidoctor-bibliography-0.4.1 lib/asciidoctor-bibliography/databases/bibtex.rb
asciidoctor-bibliography-0.4.0 lib/asciidoctor-bibliography/databases/bibtex.rb