relaton-bib 1.20.7 → 2.0.0.pre.alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/README.adoc +183 -154
- data/bin/console +1 -1
- data/grammars/basicdoc.rng +1516 -645
- data/grammars/biblio-standoc.rng +100 -20
- data/grammars/biblio.rng +959 -356
- data/grammars/versions.json +10 -10
- data/lib/relaton/bib/hash_parser_v1.rb +711 -0
- data/lib/relaton/bib/item_data.rb +168 -0
- data/lib/relaton/bib/model/address.rb +22 -0
- data/lib/relaton/bib/model/affiliation.rb +16 -0
- data/lib/relaton/bib/model/bibdata.rb +24 -0
- data/lib/relaton/bib/model/bibitem.rb +23 -0
- data/lib/relaton/bib/model/contact.rb +18 -0
- data/lib/relaton/bib/model/contribution_info.rb +16 -0
- data/lib/relaton/bib/model/contributor.rb +71 -0
- data/lib/relaton/bib/model/copyright.rb +27 -0
- data/lib/relaton/bib/model/date.rb +29 -0
- data/lib/relaton/bib/model/depiction.rb +14 -0
- data/lib/relaton/bib/model/docidentifier.rb +33 -0
- data/lib/relaton/bib/model/doctype.rb +14 -0
- data/lib/relaton/bib/model/edition.rb +14 -0
- data/lib/relaton/bib/model/editorial_group.rb +14 -0
- data/lib/relaton/bib/model/ext.rb +29 -0
- data/lib/relaton/bib/model/extent.rb +16 -0
- data/lib/relaton/bib/model/full_name_type.rb +64 -0
- data/lib/relaton/bib/model/fullname.rb +11 -0
- data/lib/relaton/bib/model/ics.rb +14 -0
- data/lib/relaton/bib/model/image.rb +28 -0
- data/lib/relaton/bib/model/item.rb +129 -0
- data/lib/relaton/bib/model/item_base.rb +19 -0
- data/lib/relaton/bib/model/keyword.rb +30 -0
- data/lib/relaton/bib/model/locality.rb +18 -0
- data/lib/relaton/bib/model/locality_stack.rb +14 -0
- data/lib/relaton/bib/model/localized_string.rb +57 -0
- data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
- data/lib/relaton/bib/model/logo.rb +12 -0
- data/lib/relaton/bib/model/medium.rb +22 -0
- data/lib/relaton/bib/model/note.rb +16 -0
- data/lib/relaton/bib/model/organization.rb +13 -0
- data/lib/relaton/bib/model/organization_type.rb +42 -0
- data/lib/relaton/bib/model/person.rb +36 -0
- data/lib/relaton/bib/model/phone.rb +14 -0
- data/lib/relaton/bib/model/place.rb +33 -0
- data/lib/relaton/bib/model/price.rb +14 -0
- data/lib/relaton/bib/model/relation.rb +43 -0
- data/lib/relaton/bib/model/series.rb +32 -0
- data/lib/relaton/bib/model/size.rb +23 -0
- data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
- data/lib/relaton/bib/model/status.rb +27 -0
- data/lib/relaton/bib/model/structured_identifier.rb +48 -0
- data/lib/relaton/bib/model/subdivision.rb +14 -0
- data/lib/relaton/bib/model/technical_committee.rb +14 -0
- data/lib/relaton/bib/model/title.rb +18 -0
- data/lib/relaton/bib/model/uri.rb +18 -0
- data/lib/relaton/bib/model/validity.rb +16 -0
- data/lib/relaton/bib/model/version.rb +14 -0
- data/lib/relaton/bib/model/workgroup.rb +20 -0
- data/lib/relaton/bib/parser/rfc_address.rb +60 -0
- data/lib/relaton/bib/parser/rfc_contacts.rb +35 -0
- data/lib/relaton/bib/parser/rfc_docidentifier.rb +70 -0
- data/lib/relaton/bib/parser/rfc_organization.rb +31 -0
- data/lib/relaton/bib/parser/rfc_person.rb +42 -0
- data/lib/relaton/bib/parser/rfc_reference.rb +143 -0
- data/lib/relaton/bib/parser/rfc_referencegroup.rb +45 -0
- data/lib/relaton/bib/parser/rfc_shared.rb +23 -0
- data/lib/relaton/bib/renderer/bibtex_builder.rb +348 -0
- data/lib/relaton/bib/renderer/rfc.rb +297 -0
- data/lib/relaton/bib/util.rb +18 -0
- data/lib/relaton/bib/version.rb +5 -0
- data/lib/{relaton_bib.rb → relaton/bib.rb} +47 -36
- data/lib/{relaton_bib → relaton}/bibtex_parser.rb +24 -27
- data/lib/{relaton_bib → relaton}/bibxml_parser.rb +43 -46
- data/lib/{relaton_bib → relaton}/hit.rb +3 -3
- data/lib/{relaton_bib → relaton}/hit_collection.rb +2 -2
- data/lib/{relaton_bib → relaton}/workers_pool.rb +1 -1
- data/lib/{relaton_bib → relaton}/xml_parser.rb +49 -51
- data/relaton-bib.gemspec +8 -8
- metadata +95 -74
- data/lib/relaton_bib/bib_item_locality.rb +0 -175
- data/lib/relaton_bib/biblio_note.rb +0 -72
- data/lib/relaton_bib/biblio_version.rb +0 -46
- data/lib/relaton_bib/bibliographic_date.rb +0 -119
- data/lib/relaton_bib/bibliographic_item.rb +0 -668
- data/lib/relaton_bib/bibliographic_size.rb +0 -103
- data/lib/relaton_bib/classification.rb +0 -40
- data/lib/relaton_bib/config.rb +0 -16
- data/lib/relaton_bib/contribution_info.rb +0 -117
- data/lib/relaton_bib/contributor.rb +0 -277
- data/lib/relaton_bib/copyright_association.rb +0 -79
- data/lib/relaton_bib/document_identifier.rb +0 -118
- data/lib/relaton_bib/document_relation.rb +0 -95
- data/lib/relaton_bib/document_relation_collection.rb +0 -57
- data/lib/relaton_bib/document_status.rb +0 -92
- data/lib/relaton_bib/document_type.rb +0 -52
- data/lib/relaton_bib/edition.rb +0 -55
- data/lib/relaton_bib/editorial_group.rb +0 -41
- data/lib/relaton_bib/extent.rb +0 -39
- data/lib/relaton_bib/forename.rb +0 -65
- data/lib/relaton_bib/formatted_ref.rb +0 -17
- data/lib/relaton_bib/formatted_string.rb +0 -133
- data/lib/relaton_bib/full_name.rb +0 -108
- data/lib/relaton_bib/hash_converter.rb +0 -568
- data/lib/relaton_bib/ics.rb +0 -42
- data/lib/relaton_bib/image.rb +0 -95
- data/lib/relaton_bib/localized_string.rb +0 -149
- data/lib/relaton_bib/medium.rb +0 -76
- data/lib/relaton_bib/organization.rb +0 -165
- data/lib/relaton_bib/person.rb +0 -129
- data/lib/relaton_bib/place.rb +0 -203
- data/lib/relaton_bib/renderer/bibtex_builder.rb +0 -312
- data/lib/relaton_bib/renderer/bibxml.rb +0 -296
- data/lib/relaton_bib/series.rb +0 -119
- data/lib/relaton_bib/structured_identifier.rb +0 -173
- data/lib/relaton_bib/technical_committee.rb +0 -34
- data/lib/relaton_bib/typed_title_string.rb +0 -191
- data/lib/relaton_bib/typed_uri.rb +0 -57
- data/lib/relaton_bib/util.rb +0 -16
- data/lib/relaton_bib/validity.rb +0 -52
- data/lib/relaton_bib/version.rb +0 -3
- data/lib/relaton_bib/workgroup.rb +0 -58
- /data/lib/{relaton_bib → relaton}/deep_dup.rb +0 -0
@@ -1,133 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "relaton_bib/localized_string"
|
4
|
-
|
5
|
-
module RelatonBib
|
6
|
-
# Formatted string
|
7
|
-
class FormattedString < LocalizedString
|
8
|
-
FORMATS = %w[text/plain text/html application/docbook+xml
|
9
|
-
application/tei+xml text/x-asciidoc text/markdown
|
10
|
-
application/x-metanorma+xml].freeze
|
11
|
-
|
12
|
-
# @return [String]
|
13
|
-
attr_reader :format
|
14
|
-
|
15
|
-
# @param content [String, Array<RelatonBib::LocalizedString>]
|
16
|
-
# @param language [String, nil] language code Iso639
|
17
|
-
# @param script [String, nil] script code Iso15924
|
18
|
-
# @param format [String] the content type
|
19
|
-
def initialize(content: "", language: nil, script: nil, format: "text/plain")
|
20
|
-
# if format && !FORMATS.include?(format)
|
21
|
-
# raise ArgumentError, %{Format "#{format}" is invalid.}
|
22
|
-
# end
|
23
|
-
|
24
|
-
@format = format
|
25
|
-
super(content, language, script)
|
26
|
-
end
|
27
|
-
|
28
|
-
def ==(other)
|
29
|
-
super && format == other.format
|
30
|
-
end
|
31
|
-
|
32
|
-
# @param builder [Nokogiri::XML::Builder]
|
33
|
-
def to_xml(builder)
|
34
|
-
builder.parent["format"] = format if format
|
35
|
-
super
|
36
|
-
end
|
37
|
-
|
38
|
-
#
|
39
|
-
# Encode content.
|
40
|
-
#
|
41
|
-
# @param [String] cnt content
|
42
|
-
#
|
43
|
-
# @return [String] encoded content
|
44
|
-
#
|
45
|
-
def encode(cnt) # rubocop:disable Metrics/MethodLength
|
46
|
-
return escp(cnt) unless format == "text/html"
|
47
|
-
|
48
|
-
parts = cnt.scan(%r{
|
49
|
-
<(?<tago>\w+)(?<attrs>[^>]*)> | # tag open
|
50
|
-
</(?<tagc>\w+)> | # tag close
|
51
|
-
(?<cmt><!--.*?-->) | # comment
|
52
|
-
(?<cnt>.+?)(?=<|$) # content
|
53
|
-
}x)
|
54
|
-
scan_xml parts
|
55
|
-
end
|
56
|
-
|
57
|
-
#
|
58
|
-
# Scan XML and escape HTML entities.
|
59
|
-
#
|
60
|
-
# @param [Array<Array<String,nil>>] parts XML parts
|
61
|
-
#
|
62
|
-
# @return [String] output string
|
63
|
-
#
|
64
|
-
def scan_xml(parts) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
|
65
|
-
return "" unless parts.any?
|
66
|
-
|
67
|
-
out = ""
|
68
|
-
while parts.any? && (parts.first[3] || parts.first[4])
|
69
|
-
_, _, _, cmt, cnt = parts.shift
|
70
|
-
out += "#{cmt}#{escp(cnt)}"
|
71
|
-
end
|
72
|
-
unless out.empty?
|
73
|
-
out += scan_xml(parts) if parts.any? && parts.first[0]
|
74
|
-
return out
|
75
|
-
end
|
76
|
-
|
77
|
-
tago, attrs, tagc, = parts.shift
|
78
|
-
out = if tago && attrs && attrs[-1] == "/"
|
79
|
-
"<#{tago}#{attrs}>"
|
80
|
-
elsif tago
|
81
|
-
inr = scan_xml parts
|
82
|
-
_, _, tagc, = parts.shift
|
83
|
-
if tago == tagc
|
84
|
-
"<#{tago}#{attrs}>#{inr}</#{tagc}>"
|
85
|
-
else
|
86
|
-
"#{escp("<#{tago}#{attrs}>")}#{inr}#{escp("</#{tagc}>")}"
|
87
|
-
end
|
88
|
-
end
|
89
|
-
out += scan_xml(parts) if parts.any? && (parts.first[0] || parts.first[3] || parts.first[4])
|
90
|
-
out
|
91
|
-
end
|
92
|
-
|
93
|
-
# @return [Hash]
|
94
|
-
def to_hash
|
95
|
-
hash = super
|
96
|
-
return hash unless format
|
97
|
-
|
98
|
-
hash = { "content" => hash } unless hash.is_a? Hash
|
99
|
-
hash["format"] = format
|
100
|
-
hash
|
101
|
-
end
|
102
|
-
|
103
|
-
# @param prefix [String]
|
104
|
-
# @param count [Integer] number of elements
|
105
|
-
# @return [String]
|
106
|
-
def to_asciibib(prefix = "", count = 1, has_attrs = false)
|
107
|
-
has_attrs ||= !(format.nil? || format.empty?)
|
108
|
-
pref = prefix.empty? ? prefix : "#{prefix}."
|
109
|
-
# out = count > 1 ? "#{prefix}::\n" : ""
|
110
|
-
out = super
|
111
|
-
out += "#{pref}format:: #{format}\n" if format
|
112
|
-
out
|
113
|
-
end
|
114
|
-
|
115
|
-
#
|
116
|
-
# Remove HTML tags except <em>, <strong>, <stem>, <sup>, <sub>, <tt>, <br>, <p>.
|
117
|
-
# Replace <i> with <em>, <b> with <strong>.
|
118
|
-
#
|
119
|
-
# @param [String] str content
|
120
|
-
#
|
121
|
-
# @return [String] cleaned content
|
122
|
-
#
|
123
|
-
def cleanup(str)
|
124
|
-
return str unless format == "text/html"
|
125
|
-
|
126
|
-
str.gsub(/(?<=<)\w+:(?=\w+>)/, "").gsub(/(?<=<\/)\w+:(?=\w+>)/, "")
|
127
|
-
.gsub(/<i>/, "<em>").gsub(/<\/i>/, "</em>")
|
128
|
-
.gsub(/<b>/, "<strong>").gsub(/<\/b>/, "</strong>")
|
129
|
-
.gsub(/<(?!\/?(em|strong|stem|sup|sub|tt|br\s?\/|p|ol|ul|li))[^\s!]\/?.*?>/i, "")
|
130
|
-
.gsub(/\s+([.,:;!?<])/, "\\1").strip.squeeze(" ")
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
@@ -1,108 +0,0 @@
|
|
1
|
-
module RelatonBib
|
2
|
-
# Person's full name
|
3
|
-
class FullName
|
4
|
-
include RelatonBib
|
5
|
-
|
6
|
-
# @return [Array<RelatonBib::Forename>]
|
7
|
-
attr_accessor :forename
|
8
|
-
|
9
|
-
# @return [Array<RelatonBib::LocalizedString>]
|
10
|
-
attr_accessor :initials, :addition, :prefix
|
11
|
-
|
12
|
-
# @return [RelatonBib::LocalizedString, nil]
|
13
|
-
attr_accessor :surname, :abbreviation, :completename
|
14
|
-
|
15
|
-
#
|
16
|
-
# Initialize FullName instance
|
17
|
-
#
|
18
|
-
# @param surname [RelatonBib::LocalizedString, nil] surname or completename should be present
|
19
|
-
# @param abbreviation [RelatonBib::LocalizedString, nil] abbreviation
|
20
|
-
# @param forename [Array<RelatonBib::Forename>] forename
|
21
|
-
# @param initials [RelatonBib::LocalizedString, String, nil] string of initials
|
22
|
-
# @param addition [Array<RelatonBib::LocalizedString>] array of additions
|
23
|
-
# @param prefix [Array<RelatonBib::LocalizedString>] array of prefixes
|
24
|
-
# @param completename [RelatonBib::LocalizedString, nil] completename or surname should be present
|
25
|
-
#
|
26
|
-
def initialize(**args) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity
|
27
|
-
unless args[:surname] || args[:completename]
|
28
|
-
raise ArgumentError, "Should be given :surname or :completename"
|
29
|
-
end
|
30
|
-
|
31
|
-
@surname = args[:surname]
|
32
|
-
@abbreviation = args[:abbreviation]
|
33
|
-
@forename = args[:forename] || []
|
34
|
-
@initials = args[:initials].is_a?(String) ? LocalizedString.new(args[:initials]) : args[:initials]
|
35
|
-
@addition = args[:addition] || []
|
36
|
-
@prefix = args[:prefix] || []
|
37
|
-
@completename = args[:completename]
|
38
|
-
end
|
39
|
-
|
40
|
-
def ==(other) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity
|
41
|
-
surname == other.surname && abbreviation == other.abbreviation &&
|
42
|
-
completename == other.completename && forename == other.forename &&
|
43
|
-
initials == other.initials && addition == other.addition &&
|
44
|
-
prefix == other.prefix
|
45
|
-
end
|
46
|
-
|
47
|
-
# @param opts [Hash]
|
48
|
-
# @option opts [Nokogiri::XML::Builder] :builder XML builder
|
49
|
-
# @option opts [String] :lang language
|
50
|
-
def to_xml(**opts) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
51
|
-
opts[:builder].name do |builder|
|
52
|
-
builder.abbreviation { abbreviation.to_xml builder } if abbreviation
|
53
|
-
if completename
|
54
|
-
builder.completename { completename.to_xml builder }
|
55
|
-
else
|
56
|
-
pref = prefix.select { |p| p.language&.include? opts[:lang] }
|
57
|
-
pref = prefix unless pref.any?
|
58
|
-
pref.each { |p| builder.prefix { p.to_xml builder } }
|
59
|
-
frnm = forename.select { |f| f.language&.include? opts[:lang] }
|
60
|
-
frnm = forename unless frnm.any?
|
61
|
-
frnm.each { |f| f.to_xml builder }
|
62
|
-
builder.send(:"formatted-initials") { initials.to_xml builder } if initials
|
63
|
-
builder.surname { surname.to_xml builder }
|
64
|
-
addn = addition.select { |a| a.language&.include? opts[:lang] }
|
65
|
-
addn = addition unless addn.any?
|
66
|
-
addn.each { |a| builder.addition { a.to_xml builder } }
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# @return [Hash]
|
72
|
-
def to_hash # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
|
73
|
-
hash = {}
|
74
|
-
hash["abbreviation"] = abbreviation.to_hash if abbreviation
|
75
|
-
if forename.any? || initials
|
76
|
-
hash["given"] = {}
|
77
|
-
hash["given"]["forename"] = single_element_array(forename) if forename&.any?
|
78
|
-
hash["given"]["formatted_initials"] = initials.to_hash if initials
|
79
|
-
end
|
80
|
-
hash["surname"] = surname.to_hash if surname
|
81
|
-
hash["addition"] = single_element_array(addition) if addition&.any?
|
82
|
-
hash["prefix"] = single_element_array(prefix) if prefix&.any?
|
83
|
-
hash["completename"] = completename.to_hash if completename
|
84
|
-
hash
|
85
|
-
end
|
86
|
-
|
87
|
-
# @param pref [String]
|
88
|
-
# @return [String]
|
89
|
-
def to_asciibib(pref) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
90
|
-
prf = pref.empty? ? pref : "#{pref}."
|
91
|
-
prf += "name"
|
92
|
-
out = ""
|
93
|
-
out += abbreviation.to_asciibib "#{prf}.abbreviation" if abbreviation
|
94
|
-
given = "#{pref}.given"
|
95
|
-
out += forename.map do |fn|
|
96
|
-
fn.to_asciibib given, forename.size
|
97
|
-
end.join
|
98
|
-
out += initials.to_asciibib "#{given}.formatted-initials" if initials
|
99
|
-
out += surname.to_asciibib "#{prf}.surname" if surname
|
100
|
-
addition.each do |ad|
|
101
|
-
out += ad.to_asciibib "#{prf}.addition", addition.size
|
102
|
-
end
|
103
|
-
prefix.each { |pr| out += pr.to_asciibib "#{prf}.prefix", prefix.size }
|
104
|
-
out += completename.to_asciibib "#{prf}.completename" if completename
|
105
|
-
out
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|