Class: BibTeX::Entry::CiteProcConverter
- Inherits:
-
Object
- Object
- BibTeX::Entry::CiteProcConverter
- Defined in:
- lib/bibtex/entry/citeproc_converter.rb
Constant Summary collapse
- CSL_FILTER =
Hash.new { |_h, k| k }.merge(Hash[*%w[ date issued isbn ISBN booktitle container-title journal container-title journaltitle container-title series collection-title address publisher-place pages page number issue url URL doi DOI pmid PMID pmcid PMCID year issued type genre school publisher institution publisher organization publisher howpublished publisher type genre urldate accessed ].map(&:intern)]).freeze
- CSL_FIELDS =
%w[ abstract annote archive archive_location archive-place authority call-number chapter-number citation-label citation-number collection-title container-title DOI edition event event-place first-reference-note-number genre ISBN issue jurisdiction keyword locator medium note number number-of-pages number-of-volumes original-publisher original-publisher-place original-title page page-first publisher publisher-place references section status title URL version volume year-suffix accessed container event-date issued original-date author editor translator recipient interviewer publisher composer original-publisher original-author container-author collection-editor ].map(&:intern).freeze
- CSL_TYPES =
Hash.new { |_h, k| k }.merge(Hash[*%w[ booklet pamphlet conference paper-conference inbook chapter incollection chapter inproceedings paper-conference manual book mastersthesis thesis phdthesis thesis proceedings book techreport report unpublished manuscript article article-journal ].map(&:intern)]).freeze
Class Method Summary collapse
Instance Method Summary collapse
- #accessed ⇒ Object
- #conferences ⇒ Object
- #convert! ⇒ Object
- #date ⇒ Object
-
#initialize(bibtex, options = {}) ⇒ CiteProcConverter
constructor
A new instance of CiteProcConverter.
- #key ⇒ Object
- #techreport ⇒ Object
- #type ⇒ Object
Constructor Details
#initialize(bibtex, options = {}) ⇒ CiteProcConverter
Returns a new instance of CiteProcConverter.
58 59 60 61 62 |
# File 'lib/bibtex/entry/citeproc_converter.rb', line 58 def initialize(bibtex, = {}) @bibtex = bibtex @hash = {} @options = { quotes: [] }.merge() end |
Class Method Details
.convert(bibtex, options = {}) ⇒ Object
54 55 56 |
# File 'lib/bibtex/entry/citeproc_converter.rb', line 54 def self.convert(bibtex, = {}) new(bibtex, ).convert! end |
Instance Method Details
#accessed ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/bibtex/entry/citeproc_converter.rb', line 127 def accessed return unless hash.key? 'accessed' hash['accessed'] = case hash['accessed'] when %r{^[\d/\s-]+$} { 'date-parts' => hash['accessed'].split('/').map { |pt| pt.split('-').map(&:to_i) } } else { 'literal' => hash['accessed'] } end end |
#conferences ⇒ Object
82 83 84 85 86 87 88 89 90 91 |
# File 'lib/bibtex/entry/citeproc_converter.rb', line 82 def conferences return unless %i[conference proceedings inproceedings].include?(bibtex.type) if bibtex.field?(:organization) && bibtex.field?(:publisher) hash['authority'] = bibtex[:organization] hash['publisher'] = bibtex[:publisher] end hash['event-place'] = bibtex[:address] if bibtex.field? :address end |
#convert! ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/bibtex/entry/citeproc_converter.rb', line 64 def convert! bibtex.parse_names bibtex.parse_month bibtex.each_pair do |key, value| convert key, value end bibtex.inherited_fields.each do |key| convert key, bibtex.parent.provide(key) end methods = self.class.instance_methods(false) - %i[convert! hash] methods.each { |m| send(m) } hash end |
#date ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/bibtex/entry/citeproc_converter.rb', line 99 def date if bibtex.field?(:date) hash['issued'] = { 'date-parts' => bibtex.date.to_s.split('/').map do |part| part.split('-').map(&:to_i) end } elsif bibtex.field?(:year) case bibtex[:year].to_s when /^\d+$/ parts = [bibtex[:year].to_s] if bibtex.field?(:month) parts.push BibTeX::Entry::MONTHS.find_index(bibtex[:month].to_s.intern) parts[1] = parts[1] + 1 unless parts[1].nil? parts.push bibtex[:day] if bibtex.field?(:day) end hash['issued'] = { 'date-parts' => [parts.compact.map(&:to_i)] } else hash['issued'] = { 'literal' => bibtex[:year].to_s } end end end |
#key ⇒ Object
142 143 144 |
# File 'lib/bibtex/entry/citeproc_converter.rb', line 142 def key hash['id'] = bibtex.key.to_s end |
#techreport ⇒ Object
93 94 95 96 97 |
# File 'lib/bibtex/entry/citeproc_converter.rb', line 93 def techreport return unless %i[techreport report].include?(bibtex.type) hash['number'] = bibtex[:number].to_s if bibtex.field? :number end |
#type ⇒ Object
146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/bibtex/entry/citeproc_converter.rb', line 146 def type hash['type'] = CSL_TYPES[bibtex.type].to_s return if hash.key?('genre') case bibtex.type when :mastersthesis hash['genre'] = "Master's thesis" when :phdthesis hash['genre'] = 'PhD thesis' end end |