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.
Files changed (123) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/README.adoc +183 -154
  4. data/bin/console +1 -1
  5. data/grammars/basicdoc.rng +1516 -645
  6. data/grammars/biblio-standoc.rng +100 -20
  7. data/grammars/biblio.rng +959 -356
  8. data/grammars/versions.json +10 -10
  9. data/lib/relaton/bib/hash_parser_v1.rb +711 -0
  10. data/lib/relaton/bib/item_data.rb +168 -0
  11. data/lib/relaton/bib/model/address.rb +22 -0
  12. data/lib/relaton/bib/model/affiliation.rb +16 -0
  13. data/lib/relaton/bib/model/bibdata.rb +24 -0
  14. data/lib/relaton/bib/model/bibitem.rb +23 -0
  15. data/lib/relaton/bib/model/contact.rb +18 -0
  16. data/lib/relaton/bib/model/contribution_info.rb +16 -0
  17. data/lib/relaton/bib/model/contributor.rb +71 -0
  18. data/lib/relaton/bib/model/copyright.rb +27 -0
  19. data/lib/relaton/bib/model/date.rb +29 -0
  20. data/lib/relaton/bib/model/depiction.rb +14 -0
  21. data/lib/relaton/bib/model/docidentifier.rb +33 -0
  22. data/lib/relaton/bib/model/doctype.rb +14 -0
  23. data/lib/relaton/bib/model/edition.rb +14 -0
  24. data/lib/relaton/bib/model/editorial_group.rb +14 -0
  25. data/lib/relaton/bib/model/ext.rb +29 -0
  26. data/lib/relaton/bib/model/extent.rb +16 -0
  27. data/lib/relaton/bib/model/full_name_type.rb +64 -0
  28. data/lib/relaton/bib/model/fullname.rb +11 -0
  29. data/lib/relaton/bib/model/ics.rb +14 -0
  30. data/lib/relaton/bib/model/image.rb +28 -0
  31. data/lib/relaton/bib/model/item.rb +129 -0
  32. data/lib/relaton/bib/model/item_base.rb +19 -0
  33. data/lib/relaton/bib/model/keyword.rb +30 -0
  34. data/lib/relaton/bib/model/locality.rb +18 -0
  35. data/lib/relaton/bib/model/locality_stack.rb +14 -0
  36. data/lib/relaton/bib/model/localized_string.rb +57 -0
  37. data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
  38. data/lib/relaton/bib/model/logo.rb +12 -0
  39. data/lib/relaton/bib/model/medium.rb +22 -0
  40. data/lib/relaton/bib/model/note.rb +16 -0
  41. data/lib/relaton/bib/model/organization.rb +13 -0
  42. data/lib/relaton/bib/model/organization_type.rb +42 -0
  43. data/lib/relaton/bib/model/person.rb +36 -0
  44. data/lib/relaton/bib/model/phone.rb +14 -0
  45. data/lib/relaton/bib/model/place.rb +33 -0
  46. data/lib/relaton/bib/model/price.rb +14 -0
  47. data/lib/relaton/bib/model/relation.rb +43 -0
  48. data/lib/relaton/bib/model/series.rb +32 -0
  49. data/lib/relaton/bib/model/size.rb +23 -0
  50. data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
  51. data/lib/relaton/bib/model/status.rb +27 -0
  52. data/lib/relaton/bib/model/structured_identifier.rb +48 -0
  53. data/lib/relaton/bib/model/subdivision.rb +14 -0
  54. data/lib/relaton/bib/model/technical_committee.rb +14 -0
  55. data/lib/relaton/bib/model/title.rb +18 -0
  56. data/lib/relaton/bib/model/uri.rb +18 -0
  57. data/lib/relaton/bib/model/validity.rb +16 -0
  58. data/lib/relaton/bib/model/version.rb +14 -0
  59. data/lib/relaton/bib/model/workgroup.rb +20 -0
  60. data/lib/relaton/bib/parser/rfc_address.rb +60 -0
  61. data/lib/relaton/bib/parser/rfc_contacts.rb +35 -0
  62. data/lib/relaton/bib/parser/rfc_docidentifier.rb +70 -0
  63. data/lib/relaton/bib/parser/rfc_organization.rb +31 -0
  64. data/lib/relaton/bib/parser/rfc_person.rb +42 -0
  65. data/lib/relaton/bib/parser/rfc_reference.rb +143 -0
  66. data/lib/relaton/bib/parser/rfc_referencegroup.rb +45 -0
  67. data/lib/relaton/bib/parser/rfc_shared.rb +23 -0
  68. data/lib/relaton/bib/renderer/bibtex_builder.rb +348 -0
  69. data/lib/relaton/bib/renderer/rfc.rb +297 -0
  70. data/lib/relaton/bib/util.rb +18 -0
  71. data/lib/relaton/bib/version.rb +5 -0
  72. data/lib/{relaton_bib.rb → relaton/bib.rb} +47 -36
  73. data/lib/{relaton_bib → relaton}/bibtex_parser.rb +24 -27
  74. data/lib/{relaton_bib → relaton}/bibxml_parser.rb +43 -46
  75. data/lib/{relaton_bib → relaton}/hit.rb +3 -3
  76. data/lib/{relaton_bib → relaton}/hit_collection.rb +2 -2
  77. data/lib/{relaton_bib → relaton}/workers_pool.rb +1 -1
  78. data/lib/{relaton_bib → relaton}/xml_parser.rb +49 -51
  79. data/relaton-bib.gemspec +8 -8
  80. metadata +95 -74
  81. data/lib/relaton_bib/bib_item_locality.rb +0 -175
  82. data/lib/relaton_bib/biblio_note.rb +0 -72
  83. data/lib/relaton_bib/biblio_version.rb +0 -46
  84. data/lib/relaton_bib/bibliographic_date.rb +0 -119
  85. data/lib/relaton_bib/bibliographic_item.rb +0 -668
  86. data/lib/relaton_bib/bibliographic_size.rb +0 -103
  87. data/lib/relaton_bib/classification.rb +0 -40
  88. data/lib/relaton_bib/config.rb +0 -16
  89. data/lib/relaton_bib/contribution_info.rb +0 -117
  90. data/lib/relaton_bib/contributor.rb +0 -277
  91. data/lib/relaton_bib/copyright_association.rb +0 -79
  92. data/lib/relaton_bib/document_identifier.rb +0 -118
  93. data/lib/relaton_bib/document_relation.rb +0 -95
  94. data/lib/relaton_bib/document_relation_collection.rb +0 -57
  95. data/lib/relaton_bib/document_status.rb +0 -92
  96. data/lib/relaton_bib/document_type.rb +0 -52
  97. data/lib/relaton_bib/edition.rb +0 -55
  98. data/lib/relaton_bib/editorial_group.rb +0 -41
  99. data/lib/relaton_bib/extent.rb +0 -39
  100. data/lib/relaton_bib/forename.rb +0 -65
  101. data/lib/relaton_bib/formatted_ref.rb +0 -17
  102. data/lib/relaton_bib/formatted_string.rb +0 -133
  103. data/lib/relaton_bib/full_name.rb +0 -108
  104. data/lib/relaton_bib/hash_converter.rb +0 -568
  105. data/lib/relaton_bib/ics.rb +0 -42
  106. data/lib/relaton_bib/image.rb +0 -95
  107. data/lib/relaton_bib/localized_string.rb +0 -149
  108. data/lib/relaton_bib/medium.rb +0 -76
  109. data/lib/relaton_bib/organization.rb +0 -165
  110. data/lib/relaton_bib/person.rb +0 -129
  111. data/lib/relaton_bib/place.rb +0 -203
  112. data/lib/relaton_bib/renderer/bibtex_builder.rb +0 -312
  113. data/lib/relaton_bib/renderer/bibxml.rb +0 -296
  114. data/lib/relaton_bib/series.rb +0 -119
  115. data/lib/relaton_bib/structured_identifier.rb +0 -173
  116. data/lib/relaton_bib/technical_committee.rb +0 -34
  117. data/lib/relaton_bib/typed_title_string.rb +0 -191
  118. data/lib/relaton_bib/typed_uri.rb +0 -57
  119. data/lib/relaton_bib/util.rb +0 -16
  120. data/lib/relaton_bib/validity.rb +0 -52
  121. data/lib/relaton_bib/version.rb +0 -3
  122. data/lib/relaton_bib/workgroup.rb +0 -58
  123. /data/lib/{relaton_bib → relaton}/deep_dup.rb +0 -0
@@ -1,191 +0,0 @@
1
- module RelatonBib
2
- class TypedTitleStringCollection
3
- extend Forwardable
4
-
5
- def_delegators :@array, :[], :first, :last, :empty?, :any?, :size,
6
- :each, :detect, :map, :reduce, :length
7
-
8
- # @param title [Array<RelatonBib::TypedTitleString, Hash>]
9
- def initialize(title = [])
10
- @array = (title || []).map do |t|
11
- t.is_a?(Hash) ? TypedTitleString.new(**t) : t
12
- end
13
- end
14
-
15
- # @param lang [String, nil] language code Iso639
16
- # @return [RelatonIsoBib::TypedTitleStringCollection]
17
- def lang(lang = nil)
18
- if lang
19
- TypedTitleStringCollection.new select_lang(lang)
20
- else self
21
- end
22
- end
23
-
24
- def delete_title_part!
25
- titles.delete_if { |t| t.type == "title-part" }
26
- end
27
-
28
- # @return [RelatonBib::TypedTitleStringCollection]
29
- def select(&block)
30
- TypedTitleStringCollection.new titles.select(&block)
31
- end
32
-
33
- # @param init [Array, Hash]
34
- # @return [RelatonBib::TypedTitleStringCollection]
35
- # def reduce(init)
36
- # self.class.new @array.reduce(init) { |m, t| yield m, t }
37
- # end
38
-
39
- # @param title [RelatonBib::TypedTitleString]
40
- # @return [self]
41
- def <<(title)
42
- titles << title
43
- self
44
- end
45
-
46
- # @param tcoll [RelatonBib::TypedTitleStringCollection]
47
- # @return [RelatonBib::TypedTitleStringCollection]
48
- def +(tcoll)
49
- TypedTitleStringCollection.new titles + tcoll.titles
50
- end
51
-
52
- def titles
53
- @array
54
- end
55
-
56
- # @param opts [Hash]
57
- # @option opts [Nokogiri::XML::Builder] XML builder
58
- # @option opts [String, Symbol] :lang language
59
- def to_xml(**opts)
60
- tl = select_lang(opts[:lang])
61
- tl = titles unless tl.any?
62
- tl.each { |t| opts[:builder].title { t.to_xml opts[:builder] } }
63
- end
64
-
65
- def to_hash
66
- @array.map(&:to_hash)
67
- end
68
-
69
- #
70
- # Add main title ot bibtex entry
71
- #
72
- # @param [BibTeX::Entry] item bibtex entry
73
- #
74
- def to_bibtex(item)
75
- tl = titles.detect { |t| t.type == "main" } || titles.first
76
- return unless tl
77
-
78
- item.title = tl.title.content
79
- end
80
-
81
- private
82
-
83
- # @param lang [String]
84
- # @return [Array<RelatonBib::TypedTitleString]
85
- def select_lang(lang)
86
- titles.select { |t| t.title.language&.include? lang }
87
- end
88
- end
89
-
90
- class TypedTitleString
91
- ARGS = %i[content language script format].freeze
92
-
93
- # @return [String]
94
- attr_reader :type
95
-
96
- # @return [RelatonBib::FormattedString]
97
- attr_reader :title
98
-
99
- # @param type [String]
100
- # @param title [RelatonBib::FormattedString, Hash]
101
- # @param content [String]
102
- # @param language [String]
103
- # @param script [String]
104
- # @param format [String]
105
- def initialize(**args) # rubocop:disable Metrics/MethodLength
106
- unless args[:title] || args[:content]
107
- raise ArgumentError, %{Keyword "title" or "content" should be passed.}
108
- end
109
-
110
- @type = args[:type]
111
-
112
- case args[:title]
113
- when FormattedString then @title = args[:title]
114
- when Hash then @title = FormattedString.new(**args[:title])
115
- else
116
- fsargs = args.select { |k, _v| ARGS.include? k }
117
- @title = FormattedString.new(**fsargs)
118
- end
119
- end
120
-
121
- #
122
- # Create TypedTitleStringCollection from string
123
- #
124
- # @param title [String] title string
125
- # @param lang [String, nil] language code Iso639
126
- # @param script [String, nil] script code Iso15924
127
- # @param format [String] format text/html, text/plain
128
- #
129
- # @return [TypedTitleStringCollection] collection of TypedTitleString
130
- #
131
- def self.from_string(title, lang = nil, script = nil, format = "text/plain")
132
- types = %w[title-intro title-main title-part]
133
- ttls = split_title(title)
134
- tts = ttls.map.with_index do |p, i|
135
- next unless p
136
-
137
- new type: types[i], content: p, language: lang, script: script, format: format
138
- end.compact
139
- tts << new(type: "main", content: ttls.compact.join(" - "),
140
- language: lang, script: script, format: format)
141
- TypedTitleStringCollection.new tts
142
- end
143
-
144
- # @param title [String]
145
- # @return [Array<String, nil>]
146
- def self.split_title(title)
147
- ttls = title.sub(/\w\.Imp\s?\d+\u00A0:\u00A0/, "").split " - "
148
- case ttls.size
149
- when 0, 1 then [nil, ttls.first.to_s, nil]
150
- else intro_or_part ttls
151
- end
152
- end
153
-
154
- # @param ttls [Array<String>]
155
- # @return [Array<String, nil>]
156
- def self.intro_or_part(ttls)
157
- if /^(Part|Partie) \d+:/.match? ttls[1]
158
- [nil, ttls[0], ttls[1..].join(" -- ")]
159
- else
160
- parts = ttls.slice(2..-1)
161
- part = parts.join " -- " if parts.any?
162
- [ttls[0], ttls[1], part]
163
- end
164
- end
165
-
166
- # @param builder [Nokogiri::XML::Builder]
167
- def to_xml(builder)
168
- builder.parent[:type] = type if type
169
- title.to_xml builder
170
- end
171
-
172
- # @return [Hash]
173
- def to_hash
174
- th = title.to_hash
175
- return th unless type
176
-
177
- th.merge "type" => type
178
- end
179
-
180
- # @param prefix [String]
181
- # @param count [Integer] number of titles
182
- # @return [String]
183
- def to_asciibib(prefix = "", count = 1) # rubocop:disable Metrics/AbcSize
184
- pref = prefix.empty? ? prefix : "#{prefix}."
185
- out = count > 1 ? "#{pref}title::\n" : ""
186
- out += "#{pref}title.type:: #{type}\n" if type
187
- out += title.to_asciibib "#{pref}title", 1, !(type.nil? || type.empty?)
188
- out
189
- end
190
- end
191
- end
@@ -1,57 +0,0 @@
1
- require "addressable"
2
-
3
- module RelatonBib
4
- # Typed URI
5
- class TypedUri
6
- # @return [String, nil]
7
- attr_reader :type, :language, :script
8
- # @retutn [Addressable::URI]
9
- attr_reader :content
10
-
11
- # @param content [String] URL
12
- # @param type [String, nil] src/obp/rss
13
- # @param language [String, nil] language code Iso639 (optional) (default: nil)
14
- # @param script [String, nil] script code Iso15924 (optional) (default: nil)
15
- def initialize(content:, type: nil, language: nil, script: nil)
16
- @type = type
17
- @language = language
18
- @script = script
19
- @content = Addressable::URI.parse content if content
20
- end
21
-
22
- # @param url [String]
23
- def content=(url)
24
- @content = Addressable::URI.parse url
25
- end
26
-
27
- # @param builder [Nokogiri::XML::Builder]
28
- def to_xml(builder)
29
- doc = builder.uri content.to_s
30
- doc[:type] = type if type
31
- doc[:language] = language if language
32
- doc[:script] = script if script
33
- end
34
-
35
- # @return [Hash]
36
- def to_hash
37
- hash = { "content" => content.to_s }
38
- hash["type"] = type.to_s if type
39
- hash["language"] = language if language
40
- hash["script"] = script if script
41
- hash
42
- end
43
-
44
- # @param prefix [String]
45
- # @param count [Integer] number of links
46
- # @return [String]
47
- def to_asciibib(prefix = "", count = 1)
48
- pref = prefix.empty? ? "link" : "#{prefix}.link"
49
- out = count > 1 ? "#{pref}::\n" : ""
50
- out += "#{pref}.type:: #{type}\n" if type
51
- out += "#{pref}.content:: #{content}\n"
52
- out += "#{pref}.language:: #{language}\n" if language
53
- out += "#{pref}.script:: #{script}\n" if script
54
- out
55
- end
56
- end
57
- end
@@ -1,16 +0,0 @@
1
- module RelatonBib
2
- module Util
3
- extend self
4
-
5
- PROGNAME = "relaton-bib".freeze
6
-
7
- def method_missing(method_name, msg = nil, prog = nil, **opts, &block)
8
- prog ||= self::PROGNAME
9
- Relaton.logger_pool.send method_name, msg, prog, **opts, &block
10
- end
11
-
12
- def respond_to_missing?(method_name, include_private = false)
13
- Relaton.logger_pool.respond_to?(method_name) || super
14
- end
15
- end
16
- end
@@ -1,52 +0,0 @@
1
- module RelatonBib
2
- class Validity
3
- FORMAT = "%Y-%m-%d %H:%M".freeze
4
-
5
- # @return [Time, nil]
6
- attr_reader :begins
7
-
8
- # @return [Time, nil]
9
- attr_reader :ends
10
-
11
- # @return [Time, nil]
12
- attr_reader :revision
13
-
14
- # @param begins [Time, nil]
15
- # @param ends [Time, nil]
16
- # @param revision [Time, nil]
17
- def initialize(begins: nil, ends: nil, revision: nil)
18
- @begins = begins
19
- @ends = ends
20
- @revision = revision
21
- end
22
-
23
- # @param [Nokogiri::XML::Builder]
24
- def to_xml(builder)
25
- builder.validity do
26
- builder.validityBegins begins.strftime(FORMAT) if begins
27
- builder.validityEnds ends.strftime(FORMAT) if ends
28
- builder.revision revision.strftime(FORMAT) if revision
29
- end
30
- end
31
-
32
- # @return [Hash]
33
- def to_hash
34
- hash = {}
35
- hash["begins"] = begins.strftime(FORMAT) if begins
36
- hash["ends"] = ends.strftime(FORMAT) if ends
37
- hash["revision"] = revision.strftime(FORMAT) if revision
38
- hash
39
- end
40
-
41
- # @param prefix [String]
42
- # @return [String]
43
- def to_asciibib(prefix = "")
44
- pref = prefix.empty? ? "validity." : "#{prefix}.validity."
45
- out = ""
46
- out += "#{pref}begins:: #{begins.strftime(FORMAT)}\n" if begins
47
- out += "#{pref}ends:: #{ends.strftime(FORMAT)}\n" if ends
48
- out += "#{pref}revision:: #{revision.strftime(FORMAT)}\n" if revision
49
- out
50
- end
51
- end
52
- end
@@ -1,3 +0,0 @@
1
- module RelatonBib
2
- VERSION = "1.20.7".freeze
3
- end
@@ -1,58 +0,0 @@
1
- module RelatonBib
2
- class WorkGroup
3
- # @return [String]
4
- attr_reader :name
5
-
6
- # @return [Integer, nil]
7
- attr_reader :number
8
-
9
- # @return [String, nil]
10
- attr_reader :identifier, :prefix, :type
11
-
12
- # @param name [String]
13
- # @param identifier [String, nil]
14
- # @param prefix [String, nil]
15
- # @param number [Integer, nil]
16
- # @param type [String, nil]
17
- def initialize(name:, identifier: nil, prefix: nil, number: nil, type: nil)
18
- @identifier = identifier
19
- @prefix = prefix
20
- @name = name
21
- @number = number
22
- @type = type
23
- end
24
-
25
- # @param builder [Nokogiri::XML::Builder]
26
- def to_xml(builder) # rubocop:disable Metrics/AbcSize
27
- builder.text name
28
- builder.parent[:number] = number if number
29
- builder.parent[:type] = type if type
30
- builder.parent[:identifier] = identifier if identifier
31
- builder.parent[:prefix] = prefix if prefix
32
- end
33
-
34
- # @return [Hash]
35
- def to_hash
36
- hash = { "name" => name }
37
- hash["number"] = number if number
38
- hash["type"] = type if type
39
- hash["identifier"] = identifier if identifier
40
- hash["prefix"] = prefix if prefix
41
- hash
42
- end
43
-
44
- # @param prfx [String]
45
- # @param count [Integer]
46
- # @return [String]
47
- def to_asciibib(prfx = "", count = 1) # rubocop:disable Metrics/CyclomaticComplexity
48
- pref = prfx.empty? ? prfx : "#{prfx}."
49
- out = count > 1 ? "#{pref}::\n" : ""
50
- out += "#{pref}name:: #{name}\n"
51
- out += "#{pref}number:: #{number}\n" if number
52
- out += "#{pref}type:: #{type}\n" if type
53
- out += "#{pref}identifier:: #{identifier}\n" if identifier
54
- out += "#{pref}prefix:: #{prefix}\n" if prefix
55
- out
56
- end
57
- end
58
- end
File without changes