relaton-bib 1.20.8 → 2.0.0

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 (128) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.rubocop.yml +1 -1
  4. data/CLAUDE.md +96 -0
  5. data/Gemfile +1 -4
  6. data/README.adoc +195 -154
  7. data/bin/console +1 -1
  8. data/grammars/basicdoc.rng +1572 -671
  9. data/grammars/biblio-standoc.rng +107 -46
  10. data/grammars/biblio.rng +1012 -377
  11. data/grammars/versions.json +26 -26
  12. data/lib/relaton/bib/converter/asciibib/to_asciibib.rb +663 -0
  13. data/lib/relaton/bib/converter/asciibib.rb +13 -0
  14. data/lib/relaton/bib/converter/bibtex/from_bibtex.rb +245 -0
  15. data/lib/relaton/bib/converter/bibtex/to_bibtex.rb +341 -0
  16. data/lib/relaton/bib/converter/bibtex.rb +23 -0
  17. data/lib/relaton/bib/converter/bibxml/from_rfcxml.rb +383 -0
  18. data/lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb +71 -0
  19. data/lib/relaton/bib/converter/bibxml/to_rfcxml.rb +305 -0
  20. data/lib/relaton/bib/converter/bibxml/to_rfcxml_referencegroup.rb +52 -0
  21. data/lib/relaton/bib/converter/bibxml.rb +51 -0
  22. data/lib/relaton/bib/hash_parser_v1.rb +754 -0
  23. data/lib/relaton/bib/item_data.rb +229 -0
  24. data/lib/relaton/bib/model/abstract.rb +16 -0
  25. data/lib/relaton/bib/model/address.rb +22 -0
  26. data/lib/relaton/bib/model/affiliation.rb +16 -0
  27. data/lib/relaton/bib/model/bibdata.rb +24 -0
  28. data/lib/relaton/bib/model/bibitem.rb +23 -0
  29. data/lib/relaton/bib/model/contact.rb +18 -0
  30. data/lib/relaton/bib/model/contribution_info.rb +16 -0
  31. data/lib/relaton/bib/model/contributor.rb +71 -0
  32. data/lib/relaton/bib/model/copyright.rb +27 -0
  33. data/lib/relaton/bib/model/date.rb +31 -0
  34. data/lib/relaton/bib/model/depiction.rb +16 -0
  35. data/lib/relaton/bib/model/docidentifier.rb +33 -0
  36. data/lib/relaton/bib/model/doctype.rb +14 -0
  37. data/lib/relaton/bib/model/edition.rb +14 -0
  38. data/lib/relaton/bib/model/ext.rb +26 -0
  39. data/lib/relaton/bib/model/extent.rb +16 -0
  40. data/lib/relaton/bib/model/formattedref.rb +43 -0
  41. data/lib/relaton/bib/model/full_name_type.rb +64 -0
  42. data/lib/relaton/bib/model/fullname.rb +11 -0
  43. data/lib/relaton/bib/model/ics.rb +23 -0
  44. data/lib/relaton/bib/model/image.rb +28 -0
  45. data/lib/relaton/bib/model/item.rb +137 -0
  46. data/lib/relaton/bib/model/item_base.rb +27 -0
  47. data/lib/relaton/bib/model/keyword.rb +30 -0
  48. data/lib/relaton/bib/model/locality.rb +18 -0
  49. data/lib/relaton/bib/model/locality_stack.rb +14 -0
  50. data/lib/relaton/bib/model/localized_string.rb +57 -0
  51. data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
  52. data/lib/relaton/bib/model/logo.rb +14 -0
  53. data/lib/relaton/bib/model/medium.rb +22 -0
  54. data/lib/relaton/bib/model/note.rb +16 -0
  55. data/lib/relaton/bib/model/organization.rb +13 -0
  56. data/lib/relaton/bib/model/organization_type.rb +42 -0
  57. data/lib/relaton/bib/model/person.rb +36 -0
  58. data/lib/relaton/bib/model/phone.rb +14 -0
  59. data/lib/relaton/bib/model/place.rb +33 -0
  60. data/lib/relaton/bib/model/price.rb +14 -0
  61. data/lib/relaton/bib/model/relation.rb +43 -0
  62. data/lib/relaton/bib/model/series.rb +34 -0
  63. data/lib/relaton/bib/model/size.rb +23 -0
  64. data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
  65. data/lib/relaton/bib/model/status.rb +27 -0
  66. data/lib/relaton/bib/model/structured_identifier.rb +48 -0
  67. data/lib/relaton/bib/model/subdivision.rb +16 -0
  68. data/lib/relaton/bib/model/title.rb +56 -0
  69. data/lib/relaton/bib/model/type/string_date.rb +48 -0
  70. data/lib/relaton/bib/model/uri.rb +18 -0
  71. data/lib/relaton/bib/model/validity.rb +16 -0
  72. data/lib/relaton/bib/model/version.rb +14 -0
  73. data/lib/relaton/bib/namespace_helper.rb +21 -0
  74. data/lib/relaton/bib/util.rb +18 -0
  75. data/lib/relaton/bib/version.rb +5 -0
  76. data/lib/relaton/bib.rb +45 -0
  77. data/relaton-bib.gemspec +11 -8
  78. metadata +125 -67
  79. data/lib/relaton_bib/bib_item_locality.rb +0 -175
  80. data/lib/relaton_bib/biblio_note.rb +0 -72
  81. data/lib/relaton_bib/biblio_version.rb +0 -46
  82. data/lib/relaton_bib/bibliographic_date.rb +0 -119
  83. data/lib/relaton_bib/bibliographic_item.rb +0 -668
  84. data/lib/relaton_bib/bibliographic_size.rb +0 -103
  85. data/lib/relaton_bib/bibtex_parser.rb +0 -246
  86. data/lib/relaton_bib/bibxml_parser.rb +0 -422
  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/deep_dup.rb +0 -30
  93. data/lib/relaton_bib/document_identifier.rb +0 -118
  94. data/lib/relaton_bib/document_relation.rb +0 -95
  95. data/lib/relaton_bib/document_relation_collection.rb +0 -57
  96. data/lib/relaton_bib/document_status.rb +0 -92
  97. data/lib/relaton_bib/document_type.rb +0 -52
  98. data/lib/relaton_bib/edition.rb +0 -55
  99. data/lib/relaton_bib/editorial_group.rb +0 -41
  100. data/lib/relaton_bib/extent.rb +0 -39
  101. data/lib/relaton_bib/forename.rb +0 -65
  102. data/lib/relaton_bib/formatted_ref.rb +0 -17
  103. data/lib/relaton_bib/formatted_string.rb +0 -133
  104. data/lib/relaton_bib/full_name.rb +0 -108
  105. data/lib/relaton_bib/hash_converter.rb +0 -568
  106. data/lib/relaton_bib/hit.rb +0 -52
  107. data/lib/relaton_bib/hit_collection.rb +0 -105
  108. data/lib/relaton_bib/ics.rb +0 -42
  109. data/lib/relaton_bib/image.rb +0 -95
  110. data/lib/relaton_bib/localized_string.rb +0 -149
  111. data/lib/relaton_bib/medium.rb +0 -76
  112. data/lib/relaton_bib/organization.rb +0 -165
  113. data/lib/relaton_bib/person.rb +0 -129
  114. data/lib/relaton_bib/place.rb +0 -203
  115. data/lib/relaton_bib/renderer/bibtex_builder.rb +0 -312
  116. data/lib/relaton_bib/renderer/bibxml.rb +0 -296
  117. data/lib/relaton_bib/series.rb +0 -119
  118. data/lib/relaton_bib/structured_identifier.rb +0 -173
  119. data/lib/relaton_bib/technical_committee.rb +0 -34
  120. data/lib/relaton_bib/typed_title_string.rb +0 -191
  121. data/lib/relaton_bib/typed_uri.rb +0 -57
  122. data/lib/relaton_bib/util.rb +0 -16
  123. data/lib/relaton_bib/validity.rb +0 -52
  124. data/lib/relaton_bib/version.rb +0 -3
  125. data/lib/relaton_bib/workers_pool.rb +0 -43
  126. data/lib/relaton_bib/workgroup.rb +0 -58
  127. data/lib/relaton_bib/xml_parser.rb +0 -718
  128. data/lib/relaton_bib.rb +0 -111
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-bib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.20.8
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
@@ -10,7 +10,7 @@ cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
- name: addressable
13
+ name: bibtex-ruby
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
@@ -24,7 +24,7 @@ dependencies:
24
24
  - !ruby/object:Gem::Version
25
25
  version: '0'
26
26
  - !ruby/object:Gem::Dependency
27
- name: bibtex-ruby
27
+ name: iso639
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - ">="
@@ -38,47 +38,75 @@ dependencies:
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
40
  - !ruby/object:Gem::Dependency
41
- name: htmlentities
41
+ name: isoics
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ">="
44
+ - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '0'
46
+ version: 0.1.0
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ">="
51
+ - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '0'
53
+ version: 0.1.0
54
54
  - !ruby/object:Gem::Dependency
55
- name: iso639
55
+ name: lutaml-model
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.7'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.7'
68
+ - !ruby/object:Gem::Dependency
69
+ name: nokogiri
56
70
  requirement: !ruby/object:Gem::Requirement
57
71
  requirements:
58
72
  - - ">="
59
73
  - !ruby/object:Gem::Version
60
- version: '0'
74
+ version: '1.16'
61
75
  type: :runtime
62
76
  prerelease: false
63
77
  version_requirements: !ruby/object:Gem::Requirement
64
78
  requirements:
65
79
  - - ">="
66
80
  - !ruby/object:Gem::Version
67
- version: '0'
81
+ version: '1.16'
68
82
  - !ruby/object:Gem::Dependency
69
- name: nokogiri
83
+ name: psych
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 5.2.0
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: 5.2.0
96
+ - !ruby/object:Gem::Dependency
97
+ name: relaton-core
70
98
  requirement: !ruby/object:Gem::Requirement
71
99
  requirements:
72
100
  - - "~>"
73
101
  - !ruby/object:Gem::Version
74
- version: '1.18'
102
+ version: 0.0.8
75
103
  type: :runtime
76
104
  prerelease: false
77
105
  version_requirements: !ruby/object:Gem::Requirement
78
106
  requirements:
79
107
  - - "~>"
80
108
  - !ruby/object:Gem::Version
81
- version: '1.18'
109
+ version: 0.0.8
82
110
  - !ruby/object:Gem::Dependency
83
111
  name: relaton-logger
84
112
  requirement: !ruby/object:Gem::Requirement
@@ -93,7 +121,21 @@ dependencies:
93
121
  - - "~>"
94
122
  - !ruby/object:Gem::Version
95
123
  version: 0.2.0
96
- description: 'RelatonBib: Ruby XMLDOC impementation.'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rfcxml
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: 0.2.1
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: 0.2.1
138
+ description: 'Relaton::Bib: Ruby XMLDOC impementation.'
97
139
  email:
98
140
  - open.source@ribose.com
99
141
  executables: []
@@ -108,6 +150,7 @@ files:
108
150
  - ".hound.yml"
109
151
  - ".rspec"
110
152
  - ".rubocop.yml"
153
+ - CLAUDE.md
111
154
  - Gemfile
112
155
  - LICENSE.txt
113
156
  - README.adoc
@@ -121,56 +164,71 @@ files:
121
164
  - grammars/biblio-standoc.rng
122
165
  - grammars/biblio.rng
123
166
  - grammars/versions.json
124
- - lib/relaton_bib.rb
125
- - lib/relaton_bib/bib_item_locality.rb
126
- - lib/relaton_bib/biblio_note.rb
127
- - lib/relaton_bib/biblio_version.rb
128
- - lib/relaton_bib/bibliographic_date.rb
129
- - lib/relaton_bib/bibliographic_item.rb
130
- - lib/relaton_bib/bibliographic_size.rb
131
- - lib/relaton_bib/bibtex_parser.rb
132
- - lib/relaton_bib/bibxml_parser.rb
133
- - lib/relaton_bib/classification.rb
134
- - lib/relaton_bib/config.rb
135
- - lib/relaton_bib/contribution_info.rb
136
- - lib/relaton_bib/contributor.rb
137
- - lib/relaton_bib/copyright_association.rb
138
- - lib/relaton_bib/deep_dup.rb
139
- - lib/relaton_bib/document_identifier.rb
140
- - lib/relaton_bib/document_relation.rb
141
- - lib/relaton_bib/document_relation_collection.rb
142
- - lib/relaton_bib/document_status.rb
143
- - lib/relaton_bib/document_type.rb
144
- - lib/relaton_bib/edition.rb
145
- - lib/relaton_bib/editorial_group.rb
146
- - lib/relaton_bib/extent.rb
147
- - lib/relaton_bib/forename.rb
148
- - lib/relaton_bib/formatted_ref.rb
149
- - lib/relaton_bib/formatted_string.rb
150
- - lib/relaton_bib/full_name.rb
151
- - lib/relaton_bib/hash_converter.rb
152
- - lib/relaton_bib/hit.rb
153
- - lib/relaton_bib/hit_collection.rb
154
- - lib/relaton_bib/ics.rb
155
- - lib/relaton_bib/image.rb
156
- - lib/relaton_bib/localized_string.rb
157
- - lib/relaton_bib/medium.rb
158
- - lib/relaton_bib/organization.rb
159
- - lib/relaton_bib/person.rb
160
- - lib/relaton_bib/place.rb
161
- - lib/relaton_bib/renderer/bibtex_builder.rb
162
- - lib/relaton_bib/renderer/bibxml.rb
163
- - lib/relaton_bib/series.rb
164
- - lib/relaton_bib/structured_identifier.rb
165
- - lib/relaton_bib/technical_committee.rb
166
- - lib/relaton_bib/typed_title_string.rb
167
- - lib/relaton_bib/typed_uri.rb
168
- - lib/relaton_bib/util.rb
169
- - lib/relaton_bib/validity.rb
170
- - lib/relaton_bib/version.rb
171
- - lib/relaton_bib/workers_pool.rb
172
- - lib/relaton_bib/workgroup.rb
173
- - lib/relaton_bib/xml_parser.rb
167
+ - lib/relaton/bib.rb
168
+ - lib/relaton/bib/converter/asciibib.rb
169
+ - lib/relaton/bib/converter/asciibib/to_asciibib.rb
170
+ - lib/relaton/bib/converter/bibtex.rb
171
+ - lib/relaton/bib/converter/bibtex/from_bibtex.rb
172
+ - lib/relaton/bib/converter/bibtex/to_bibtex.rb
173
+ - lib/relaton/bib/converter/bibxml.rb
174
+ - lib/relaton/bib/converter/bibxml/from_rfcxml.rb
175
+ - lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb
176
+ - lib/relaton/bib/converter/bibxml/to_rfcxml.rb
177
+ - lib/relaton/bib/converter/bibxml/to_rfcxml_referencegroup.rb
178
+ - lib/relaton/bib/hash_parser_v1.rb
179
+ - lib/relaton/bib/item_data.rb
180
+ - lib/relaton/bib/model/abstract.rb
181
+ - lib/relaton/bib/model/address.rb
182
+ - lib/relaton/bib/model/affiliation.rb
183
+ - lib/relaton/bib/model/bibdata.rb
184
+ - lib/relaton/bib/model/bibitem.rb
185
+ - lib/relaton/bib/model/contact.rb
186
+ - lib/relaton/bib/model/contribution_info.rb
187
+ - lib/relaton/bib/model/contributor.rb
188
+ - lib/relaton/bib/model/copyright.rb
189
+ - lib/relaton/bib/model/date.rb
190
+ - lib/relaton/bib/model/depiction.rb
191
+ - lib/relaton/bib/model/docidentifier.rb
192
+ - lib/relaton/bib/model/doctype.rb
193
+ - lib/relaton/bib/model/edition.rb
194
+ - lib/relaton/bib/model/ext.rb
195
+ - lib/relaton/bib/model/extent.rb
196
+ - lib/relaton/bib/model/formattedref.rb
197
+ - lib/relaton/bib/model/full_name_type.rb
198
+ - lib/relaton/bib/model/fullname.rb
199
+ - lib/relaton/bib/model/ics.rb
200
+ - lib/relaton/bib/model/image.rb
201
+ - lib/relaton/bib/model/item.rb
202
+ - lib/relaton/bib/model/item_base.rb
203
+ - lib/relaton/bib/model/keyword.rb
204
+ - lib/relaton/bib/model/locality.rb
205
+ - lib/relaton/bib/model/locality_stack.rb
206
+ - lib/relaton/bib/model/localized_string.rb
207
+ - lib/relaton/bib/model/localized_string_attrs.rb
208
+ - lib/relaton/bib/model/logo.rb
209
+ - lib/relaton/bib/model/medium.rb
210
+ - lib/relaton/bib/model/note.rb
211
+ - lib/relaton/bib/model/organization.rb
212
+ - lib/relaton/bib/model/organization_type.rb
213
+ - lib/relaton/bib/model/person.rb
214
+ - lib/relaton/bib/model/phone.rb
215
+ - lib/relaton/bib/model/place.rb
216
+ - lib/relaton/bib/model/price.rb
217
+ - lib/relaton/bib/model/relation.rb
218
+ - lib/relaton/bib/model/series.rb
219
+ - lib/relaton/bib/model/size.rb
220
+ - lib/relaton/bib/model/source_locality_stack.rb
221
+ - lib/relaton/bib/model/status.rb
222
+ - lib/relaton/bib/model/structured_identifier.rb
223
+ - lib/relaton/bib/model/subdivision.rb
224
+ - lib/relaton/bib/model/title.rb
225
+ - lib/relaton/bib/model/type/string_date.rb
226
+ - lib/relaton/bib/model/uri.rb
227
+ - lib/relaton/bib/model/validity.rb
228
+ - lib/relaton/bib/model/version.rb
229
+ - lib/relaton/bib/namespace_helper.rb
230
+ - lib/relaton/bib/util.rb
231
+ - lib/relaton/bib/version.rb
174
232
  - relaton-bib.gemspec
175
233
  homepage: https://github.com/relaton/relaton-bib
176
234
  licenses:
@@ -183,7 +241,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
183
241
  requirements:
184
242
  - - ">="
185
243
  - !ruby/object:Gem::Version
186
- version: 2.7.0
244
+ version: 3.2.0
187
245
  required_rubygems_version: !ruby/object:Gem::Requirement
188
246
  requirements:
189
247
  - - ">="
@@ -192,5 +250,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
192
250
  requirements: []
193
251
  rubygems_version: 3.6.9
194
252
  specification_version: 4
195
- summary: 'RelatonBib: Ruby XMLDOC impementation.'
253
+ summary: 'Relaton::Bib: Ruby XMLDOC impementation.'
196
254
  test_files: []
@@ -1,175 +0,0 @@
1
- module RelatonBib
2
- # Bibliographic item locality.
3
- class BibItemLocality
4
- # @return [String]
5
- attr_reader :type
6
-
7
- # @return [String]
8
- attr_reader :reference_from
9
-
10
- # @return [String, nil]
11
- attr_reader :reference_to
12
-
13
- # @param type [String]
14
- # @param referenceFrom [String]
15
- # @param referenceTo [String, nil]
16
- def initialize(type, reference_from, reference_to = nil)
17
- type_ptrn = %r{section|clause|part|paragraph|chapter|page|title|line|
18
- whole|table|annex|figure|note|list|example|volume|issue|time|anchor|
19
- locality:[a-zA-Z0-9_]+}x
20
- unless type&.match? type_ptrn
21
- Util.warn "Invalid locality type: `#{type}`"
22
- end
23
-
24
- @type = type
25
- @reference_from = reference_from
26
- @reference_to = reference_to
27
- end
28
-
29
- # @param builder [Nokogiri::XML::Builder]
30
- def to_xml(builder)
31
- builder.parent[:type] = type
32
- builder.referenceFrom reference_from # { reference_from.to_xml(builder) }
33
- builder.referenceTo reference_to if reference_to
34
- end
35
-
36
- # @return [Hash]
37
- def to_hash
38
- hash = { "type" => type, "reference_from" => reference_from }
39
- hash["reference_to"] = reference_to if reference_to
40
- hash
41
- end
42
-
43
- # @param prefix [String]
44
- # @param count [Integeg] number of localities
45
- # @return [String]
46
- def to_asciibib(prefix = "", count = 1)
47
- pref = prefix.empty? ? prefix : "#{prefix}."
48
- out = count > 1 ? "#{prefix}::\n" : ""
49
- out += "#{pref}type:: #{type}\n"
50
- out += "#{pref}reference_from:: #{reference_from}\n"
51
- out += "#{pref}reference_to:: #{reference_to}\n" if reference_to
52
- out
53
- end
54
-
55
- #
56
- # Render locality as BibTeX.
57
- #
58
- # @param [BibTeX::Entry] item BibTeX entry.
59
- #
60
- def to_bibtex(item)
61
- case type
62
- when "chapter" then item.chapter = reference_from
63
- when "page"
64
- value = reference_from
65
- value += "--#{reference_to}" if reference_to
66
- item.pages = value
67
- when "volume" then item.volume = reference_from
68
- when "issue" then item.number = reference_from
69
- end
70
- end
71
- end
72
-
73
- class Locality < BibItemLocality
74
- # @param builder [Nokogiri::XML::Builder]
75
- def to_xml(builder)
76
- builder.locality { |b| super(b) }
77
- end
78
-
79
- #
80
- # Render locality as hash.
81
- #
82
- # @return [Hash] locality as hash.
83
- #
84
- def to_hash
85
- { "locality" => super }
86
- end
87
-
88
- #
89
- # Render locality as AsciiBib.
90
- #
91
- # @param [String] prefix prefix of locality
92
- # @param [Integer] count number of localities
93
- #
94
- # @return [String] AsciiBib.
95
- #
96
- def to_asciibib(prefix = "", count = 1)
97
- pref = prefix.empty? ? "locality" : "#{prefix}.locality"
98
- super(pref, count)
99
- end
100
- end
101
-
102
- class LocalityStack
103
- include RelatonBib
104
-
105
- # @return [Array<RelatonBib::Locality>]
106
- attr_reader :locality
107
-
108
- # @param locality [Array<RelatonBib::Locality>]
109
- def initialize(locality)
110
- @locality = locality
111
- end
112
-
113
- # @param builder [Nokogiri::XML::Builder]
114
- def to_xml(builder)
115
- builder.localityStack do |b|
116
- locality.each { |l| l.to_xml(b) }
117
- end
118
- end
119
-
120
- # @returnt [Hash]
121
- def to_hash
122
- hash = Hash.new { |h, k| h[k] = [] }
123
- locality.each_with_object(hash) do |l, obj|
124
- k, v = l.to_hash.first
125
- obj[k] << v
126
- end
127
- { "locality_stack" => hash }
128
- end
129
-
130
- #
131
- # Render locality stack as AsciiBib.
132
- #
133
- # @param [String] prefix <description>
134
- # @param [Integer] size size of locality stack
135
- #
136
- # @return [String] AsciiBib.
137
- #
138
- def to_asciibib(prefix = "", size = 1)
139
- pref = prefix.empty? ? "locality_stack" : "#{prefix}.locality_stack"
140
- out = ""
141
- out << "#{pref}::\n" if size > 1
142
- out << locality.map { |l| l.to_asciibib(pref, locality.size) }.join
143
- end
144
-
145
- #
146
- # Render locality stack as BibTeX.
147
- #
148
- # @param [BibTeX::Entry] item BibTeX entry.
149
- #
150
- def to_bibtex(item)
151
- locality.each { |l| l.to_bibtex(item) }
152
- end
153
- end
154
-
155
- class SourceLocality < BibItemLocality
156
- # @param builder [Nokogiri::XML::Builder]
157
- def to_xml(builder)
158
- builder.sourceLocality { |b| super(b) }
159
- end
160
- end
161
-
162
- class SourceLocalityStack < LocalityStack
163
- # @param builder [Nokogiri::XML::Builder]
164
- def to_xml(builder)
165
- builder.sourceLocalityStack do |b|
166
- locality.each { |l| l.to_xml(b) }
167
- end
168
- end
169
-
170
- # @returnt [Hash]
171
- def to_hash
172
- { "source_locality_stack" => single_element_array(locality) }
173
- end
174
- end
175
- end
@@ -1,72 +0,0 @@
1
- module RelatonBib
2
- class BiblioNoteCollection
3
- extend Forwardable
4
-
5
- def_delegators :@array, :[], :first, :last, :empty?, :any?, :size,
6
- :each, :map, :reduce, :detect, :length
7
-
8
- def initialize(notes)
9
- @array = notes
10
- end
11
-
12
- # @param bibnote [RelatonBib::BiblioNote]
13
- # @return [self]
14
- def <<(bibnote)
15
- @array << bibnote
16
- self
17
- end
18
-
19
- # @param opts [Hash]
20
- # @option opts [Nokogiri::XML::Builder] XML builder
21
- # @option opts [String] :lang language
22
- def to_xml(**opts)
23
- bnc = @array.select { |bn| bn.language&.include? opts[:lang] }
24
- bnc = @array unless bnc.any?
25
- bnc.each { |bn| bn.to_xml opts[:builder] }
26
- end
27
- end
28
-
29
- class BiblioNote < FormattedString
30
- # @return [String, nil]
31
- attr_reader :type
32
-
33
- # @param content [String]
34
- # @param type [String, nil]
35
- # @param language [String, nil] language code Iso639
36
- # @param script [String, nil] script code Iso15924
37
- # @param format [String, nil] the content format
38
- def initialize(content:, type: nil, language: nil, script: nil, format: nil)
39
- @type = type
40
- super content: content, language: language, script: script, format: format
41
- end
42
-
43
- # @param builder [Nokogiri::XML::Builder]
44
- def to_xml(builder)
45
- xml = builder.note { super }
46
- xml[:type] = type if type
47
- xml
48
- end
49
-
50
- # @return [Hash]
51
- def to_hash
52
- hash = super
53
- return hash unless type
54
-
55
- hash = { "content" => hash } if hash.is_a? String
56
- hash["type"] = type
57
- hash
58
- end
59
-
60
- # @param prefix [String]
61
- # @param count [Integer] number of notes
62
- # @return [String]
63
- def to_asciibib(prefix = "", count = 1)
64
- pref = prefix.empty? ? prefix : prefix + "."
65
- has_attrs = !(type.nil? || type.empty?)
66
- out = count > 1 && has_attrs ? "#{pref}biblionote::\n" : ""
67
- out += "#{pref}biblionote.type:: #{type}\n" if type
68
- out += super "#{pref}biblionote", 1, has_attrs
69
- out
70
- end
71
- end
72
- end
@@ -1,46 +0,0 @@
1
- module RelatonBib
2
- # Version
3
- class BibliographicItem
4
- class Version
5
- include RelatonBib
6
-
7
- # @return [String, nil]
8
- attr_reader :revision_date, :draft
9
-
10
- # @param revision_date [String, nil]
11
- # @param draft [String, nil]
12
- def initialize(revision_date = nil, draft = nil)
13
- @revision_date = revision_date
14
- @draft = draft
15
- end
16
-
17
- # @param builder [Nokogiri::XML::Builder]
18
- def to_xml(builder)
19
- builder.version do
20
- builder.send(:"revision-date", revision_date) if revision_date
21
- builder.draft draft if draft
22
- end
23
- end
24
-
25
- # @return [Hash]
26
- def to_hash
27
- hash = {}
28
- hash["revision_date"] = revision_date if revision_date
29
- hash["draft"] = draft if draft
30
- hash
31
- end
32
-
33
- # @param prefix [String]
34
- # @return [String]
35
- def to_asciibib(prefix = "", count = 1)
36
- pref = prefix.empty? ? prefix : "#{prefix}."
37
- out = count > 1 ? "#{prefix}version::\n" : ""
38
- if revision_date
39
- out += "#{pref}version.revision_date:: #{revision_date}\n"
40
- end
41
- out += "#{pref}version.draft:: #{draft}\n" if draft
42
- out
43
- end
44
- end
45
- end
46
- end
@@ -1,119 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "time"
4
-
5
- module RelatonBib
6
- # Bibliographic date.
7
- class BibliographicDate
8
- TYPES = %w[published accessed created implemented obsoleted confirmed
9
- updated corrected issued transmitted copied unchanged circulated adapted
10
- vote-started vote-ended announced stable-until].freeze
11
-
12
- # @return [String]
13
- attr_reader :type
14
-
15
- # @param type [String] "published", "accessed", "created", "activated"
16
- # @param on [String]
17
- # @param from [String]
18
- # @param to [String]
19
- def initialize(type:, on: nil, from: nil, to: nil)
20
- raise ArgumentError, "expected :on or :from argument" unless on || from
21
-
22
- # raise ArgumentError, "invalid type: #{type}" unless TYPES.include? type
23
-
24
- @type = type
25
- @on = RelatonBib.parse_date on
26
- @from = RelatonBib.parse_date from
27
- @to = RelatonBib.parse_date to
28
- end
29
-
30
- # @param part [Symbol] :year, :month, :day, :date
31
- # @return [String, Date, nil]
32
- def from(part = nil) # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
33
- d = instance_variable_get "@#{__callee__}".to_sym
34
- return d unless part && d
35
-
36
- # date = parse_date(d)
37
- # return date if part == :date
38
-
39
- parts = d.split "-"
40
- case part
41
- when :year then parts[0]&.to_i
42
- when :month then parts[1]&.to_i
43
- when :day then parts[2]&.to_i
44
- when :date then parse_date(d)
45
- else d
46
- end
47
-
48
- # date.is_a?(Date) ? date.send(part) : date
49
- end
50
-
51
- alias_method :to, :from
52
- alias_method :on, :from
53
-
54
- # rubocop:disable Metrics/AbcSize
55
-
56
- # @param builder [Nokogiri::XML::Builder]
57
- # @return [Nokogiri::XML::Builder]
58
- def to_xml(builder, **opts)
59
- builder.date(type: type) do
60
- if on
61
- builder.on(opts[:no_year] ? "--" : date_format(on, opts[:date_format]))
62
- elsif from
63
- builder.from(opts[:no_year] ? "--" : date_format(from, opts[:date_format]))
64
- builder.to date_format(to, opts[:date_format]) if to
65
- end
66
- end
67
- end
68
- # rubocop:enable Metrics/AbcSize
69
-
70
- # @return [Hash]
71
- def to_hash
72
- hash = { "type" => type }
73
- hash["value"] = on.to_s if on
74
- hash["from"] = from.to_s if from
75
- hash["to"] = to.to_s if to
76
- hash
77
- end
78
-
79
- # @param prefix [String]
80
- # @param count [Integer] number of dates
81
- # @return [String]
82
- def to_asciibib(prefix = "", count = 1)
83
- pref = prefix.empty? ? prefix : "#{prefix}."
84
- out = count > 1 ? "#{pref}date::\n" : ""
85
- out += "#{pref}date.type:: #{type}\n"
86
- out += "#{pref}date.on:: #{on}\n" if on
87
- out += "#{pref}date.from:: #{from}\n" if from
88
- out += "#{pref}date.to:: #{to}\n" if to
89
- out
90
- end
91
-
92
- private
93
-
94
- # Formats date
95
- # @param date [String]
96
- # @param format [Symbol, nil] :full (yyyy-mm-dd), :short (yyyy-mm) or nil
97
- # @return [String]
98
- def date_format(date, format = nil)
99
- tmplt = case format
100
- when :short then "%Y-%m"
101
- when :full then "%Y-%m-%d"
102
- else return date
103
- end
104
- d = parse_date(date)
105
- d.is_a?(Date) ? d.strftime(tmplt) : d
106
- end
107
-
108
- # @param date [String]
109
- # @return [Date]
110
- def parse_date(date)
111
- case date
112
- when /^\d{4}-\d{1,2}-\d{1,2}/ then Date.parse(date) # 2012-02-11
113
- when /^\d{4}-\d{1,2}/ then Date.strptime(date, "%Y-%m") # 2012-02
114
- when /^\d{4}/ then Date.strptime(date, "%Y") # 2012
115
- else date
116
- end
117
- end
118
- end
119
- end