relaton-bib 1.4.0 → 2.1.7

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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/integration-tests.yml +54 -0
  3. data/.github/workflows/rake.yml +15 -0
  4. data/.github/workflows/release.yml +24 -0
  5. data/.gitignore +4 -1
  6. data/.rubocop.yml +3 -1
  7. data/CLAUDE.md +108 -0
  8. data/Gemfile +11 -0
  9. data/README.adoc +229 -314
  10. data/bin/console +1 -1
  11. data/docs/hash.adoc +132 -83
  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 +386 -0
  18. data/lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb +71 -0
  19. data/lib/relaton/bib/converter/bibxml/to_rfcxml.rb +308 -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 +767 -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 +9 -0
  28. data/lib/relaton/bib/model/bibdata_shared.rb +10 -0
  29. data/lib/relaton/bib/model/bibitem.rb +9 -0
  30. data/lib/relaton/bib/model/bibitem_shared.rb +10 -0
  31. data/lib/relaton/bib/model/contact.rb +14 -0
  32. data/lib/relaton/bib/model/contribution_info.rb +16 -0
  33. data/lib/relaton/bib/model/contributor.rb +29 -0
  34. data/lib/relaton/bib/model/copyright.rb +27 -0
  35. data/lib/relaton/bib/model/date.rb +29 -0
  36. data/lib/relaton/bib/model/depiction.rb +16 -0
  37. data/lib/relaton/bib/model/docidentifier.rb +34 -0
  38. data/lib/relaton/bib/model/doctype.rb +14 -0
  39. data/lib/relaton/bib/model/edition.rb +14 -0
  40. data/lib/relaton/bib/model/ext.rb +35 -0
  41. data/lib/relaton/bib/model/extent.rb +16 -0
  42. data/lib/relaton/bib/model/formattedref.rb +43 -0
  43. data/lib/relaton/bib/model/full_name_type.rb +64 -0
  44. data/lib/relaton/bib/model/fullname.rb +11 -0
  45. data/lib/relaton/bib/model/ics.rb +49 -0
  46. data/lib/relaton/bib/model/image.rb +28 -0
  47. data/lib/relaton/bib/model/item.rb +44 -0
  48. data/lib/relaton/bib/model/item_base.rb +20 -0
  49. data/lib/relaton/bib/model/item_shared.rb +88 -0
  50. data/lib/relaton/bib/model/keyword.rb +30 -0
  51. data/lib/relaton/bib/model/locality.rb +18 -0
  52. data/lib/relaton/bib/model/locality_stack.rb +14 -0
  53. data/lib/relaton/bib/model/localized_string.rb +48 -0
  54. data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
  55. data/lib/relaton/bib/model/logo.rb +14 -0
  56. data/lib/relaton/bib/model/medium.rb +22 -0
  57. data/lib/relaton/bib/model/note.rb +16 -0
  58. data/lib/relaton/bib/model/organization.rb +11 -0
  59. data/lib/relaton/bib/model/organization_type.rb +40 -0
  60. data/lib/relaton/bib/model/person.rb +36 -0
  61. data/lib/relaton/bib/model/phone.rb +14 -0
  62. data/lib/relaton/bib/model/place.rb +33 -0
  63. data/lib/relaton/bib/model/price.rb +14 -0
  64. data/lib/relaton/bib/model/relation.rb +41 -0
  65. data/lib/relaton/bib/model/series.rb +32 -0
  66. data/lib/relaton/bib/model/size.rb +23 -0
  67. data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
  68. data/lib/relaton/bib/model/status.rb +27 -0
  69. data/lib/relaton/bib/model/structured_identifier.rb +48 -0
  70. data/lib/relaton/bib/model/subdivision.rb +16 -0
  71. data/lib/relaton/bib/model/title.rb +56 -0
  72. data/lib/relaton/bib/model/type/plain_date.rb +16 -0
  73. data/lib/relaton/bib/model/type/string_date.rb +48 -0
  74. data/lib/relaton/bib/model/uri.rb +18 -0
  75. data/lib/relaton/bib/model/validity.rb +16 -0
  76. data/lib/relaton/bib/model/version.rb +43 -0
  77. data/lib/relaton/bib/model_autoload.rb +85 -0
  78. data/lib/relaton/bib/namespace_helper.rb +21 -0
  79. data/lib/relaton/bib/sanitizer.rb +74 -0
  80. data/lib/relaton/bib/util.rb +18 -0
  81. data/lib/relaton/bib/version.rb +5 -0
  82. data/lib/relaton/bib/versions.json +35 -0
  83. data/lib/relaton/bib.rb +41 -0
  84. data/relaton-bib.gemspec +12 -16
  85. metadata +118 -129
  86. data/.github/workflows/macos.yml +0 -38
  87. data/.github/workflows/ubuntu.yml +0 -39
  88. data/.github/workflows/windows.yml +0 -41
  89. data/grammars/basicdoc.rng +0 -986
  90. data/grammars/biblio.rng +0 -1237
  91. data/grammars/isodoc.rng +0 -1613
  92. data/grammars/reqt.rng +0 -165
  93. data/lib/relaton_bib/bib_item_locality.rb +0 -107
  94. data/lib/relaton_bib/biblio_note.rb +0 -44
  95. data/lib/relaton_bib/biblio_version.rb +0 -49
  96. data/lib/relaton_bib/bibliographic_date.rb +0 -90
  97. data/lib/relaton_bib/bibliographic_item.rb +0 -726
  98. data/lib/relaton_bib/bibtex_parser.rb +0 -245
  99. data/lib/relaton_bib/classification.rb +0 -40
  100. data/lib/relaton_bib/contribution_info.rb +0 -109
  101. data/lib/relaton_bib/contributor.rb +0 -215
  102. data/lib/relaton_bib/copyright_association.rb +0 -77
  103. data/lib/relaton_bib/deep_dup.rb +0 -30
  104. data/lib/relaton_bib/document_identifier.rb +0 -95
  105. data/lib/relaton_bib/document_relation.rb +0 -94
  106. data/lib/relaton_bib/document_relation_collection.rb +0 -46
  107. data/lib/relaton_bib/document_status.rb +0 -93
  108. data/lib/relaton_bib/editorial_group.rb +0 -41
  109. data/lib/relaton_bib/formatted_ref.rb +0 -17
  110. data/lib/relaton_bib/formatted_string.rb +0 -55
  111. data/lib/relaton_bib/hash_converter.rb +0 -497
  112. data/lib/relaton_bib/hit.rb +0 -46
  113. data/lib/relaton_bib/hit_collection.rb +0 -73
  114. data/lib/relaton_bib/ics.rb +0 -37
  115. data/lib/relaton_bib/localized_string.rb +0 -93
  116. data/lib/relaton_bib/medium.rb +0 -44
  117. data/lib/relaton_bib/organization.rb +0 -135
  118. data/lib/relaton_bib/person.rb +0 -206
  119. data/lib/relaton_bib/place.rb +0 -49
  120. data/lib/relaton_bib/series.rb +0 -134
  121. data/lib/relaton_bib/structured_identifier.rb +0 -171
  122. data/lib/relaton_bib/technical_committee.rb +0 -36
  123. data/lib/relaton_bib/typed_title_string.rb +0 -96
  124. data/lib/relaton_bib/typed_uri.rb +0 -47
  125. data/lib/relaton_bib/validity.rb +0 -52
  126. data/lib/relaton_bib/version.rb +0 -3
  127. data/lib/relaton_bib/workers_pool.rb +0 -43
  128. data/lib/relaton_bib/workgroup.rb +0 -46
  129. data/lib/relaton_bib/xml_parser.rb +0 -463
  130. data/lib/relaton_bib.rb +0 -44
data/grammars/reqt.rng DELETED
@@ -1,165 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
3
- <!--
4
- Presupposes isodoc.rnc, is included in it
5
- include "isodoc.rnc" { }
6
- -->
7
- <define name="requirement">
8
- <element name="requirement">
9
- <ref name="RequirementType"/>
10
- </element>
11
- </define>
12
- <define name="recommendation">
13
- <element name="recommendation">
14
- <ref name="RequirementType"/>
15
- </element>
16
- </define>
17
- <define name="permission">
18
- <element name="permission">
19
- <ref name="RequirementType"/>
20
- </element>
21
- </define>
22
- <define name="RequirementType">
23
- <optional>
24
- <attribute name="obligation">
25
- <ref name="ObligationType"/>
26
- </attribute>
27
- </optional>
28
- <optional>
29
- <attribute name="unnumbered">
30
- <data type="boolean"/>
31
- </attribute>
32
- </optional>
33
- <optional>
34
- <attribute name="subsequence"/>
35
- </optional>
36
- <attribute name="id">
37
- <data type="ID"/>
38
- </attribute>
39
- <optional>
40
- <attribute name="filename"/>
41
- </optional>
42
- <optional>
43
- <ref name="reqtitle"/>
44
- </optional>
45
- <optional>
46
- <ref name="label"/>
47
- </optional>
48
- <optional>
49
- <ref name="subject"/>
50
- </optional>
51
- <optional>
52
- <ref name="reqinherit"/>
53
- </optional>
54
- <zeroOrMore>
55
- <ref name="classification"/>
56
- </zeroOrMore>
57
- <zeroOrMore>
58
- <choice>
59
- <ref name="measurementtarget"/>
60
- <ref name="specification"/>
61
- <ref name="verification"/>
62
- <ref name="import"/>
63
- <ref name="description"/>
64
- </choice>
65
- </zeroOrMore>
66
- <optional>
67
- <ref name="reqt_references"/>
68
- </optional>
69
- <zeroOrMore>
70
- <choice>
71
- <ref name="requirement"/>
72
- <ref name="recommendation"/>
73
- <ref name="permission"/>
74
- </choice>
75
- </zeroOrMore>
76
- </define>
77
- <define name="reqtitle">
78
- <element name="title">
79
- <ref name="FormattedString"/>
80
- </element>
81
- </define>
82
- <define name="label">
83
- <element name="label">
84
- <text/>
85
- </element>
86
- </define>
87
- <define name="subject">
88
- <element name="subject">
89
- <text/>
90
- </element>
91
- </define>
92
- <define name="reqinherit">
93
- <element name="inherit">
94
- <text/>
95
- </element>
96
- </define>
97
- <define name="measurementtarget">
98
- <element name="measurement-target">
99
- <ref name="RequirementSubpart"/>
100
- </element>
101
- </define>
102
- <define name="specification">
103
- <element name="specification">
104
- <ref name="RequirementSubpart"/>
105
- </element>
106
- </define>
107
- <define name="verification">
108
- <element name="verification">
109
- <ref name="RequirementSubpart"/>
110
- </element>
111
- </define>
112
- <define name="import">
113
- <element name="import">
114
- <ref name="RequirementSubpart"/>
115
- </element>
116
- </define>
117
- <define name="description">
118
- <element name="description">
119
- <ref name="RequirementSubpart"/>
120
- </element>
121
- </define>
122
- <define name="reqt_references">
123
- <element name="references">
124
- <oneOrMore>
125
- <ref name="bibitem"/>
126
- </oneOrMore>
127
- </element>
128
- </define>
129
- <define name="RequirementSubpart">
130
- <optional>
131
- <attribute name="type"/>
132
- </optional>
133
- <optional>
134
- <attribute name="exclude">
135
- <data type="boolean"/>
136
- </attribute>
137
- </optional>
138
- <oneOrMore>
139
- <ref name="BasicBlock"/>
140
- </oneOrMore>
141
- </define>
142
- <define name="ObligationType">
143
- <choice>
144
- <value>requirement</value>
145
- <value>recommendation</value>
146
- <value>permission</value>
147
- </choice>
148
- </define>
149
- <define name="classification">
150
- <element name="classification">
151
- <ref name="classification_tag"/>
152
- <ref name="classification_value"/>
153
- </element>
154
- </define>
155
- <define name="classification_tag">
156
- <element name="tag">
157
- <text/>
158
- </element>
159
- </define>
160
- <define name="classification_value">
161
- <element name="value">
162
- <text/>
163
- </element>
164
- </define>
165
- </grammar>
@@ -1,107 +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, NilClass]
11
- attr_reader :reference_to
12
-
13
- # @param type [String]
14
- # @param referenceFrom [String]
15
- # @param referenceTo [String, NilClass]
16
- def initialize(type, reference_from, reference_to = nil)
17
- type_ptrn = %r{section|clause|part|paragraph|chapter|page|whole|table|
18
- annex|figure|note|list|example|volume|issue|time|
19
- locality:[a-zA-Z0-9_]+}x
20
- unless type.match? type_ptrn
21
- warn "[relaton-bib] WARNING: 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
- end
55
-
56
- class Locality < BibItemLocality
57
- # @param builder [Nokogiri::XML::Builder]
58
- def to_xml(builder)
59
- builder.locality { |b| super(b) }
60
- end
61
- end
62
-
63
- class LocalityStack
64
- include RelatonBib
65
-
66
- # @return [Array<RelatonBib::Locality>]
67
- attr_reader :locality
68
-
69
- # @param locality [Array<RelatonBib::Locality>]
70
- def initialize(locality)
71
- @locality = locality
72
- end
73
-
74
- # @param builder [Nokogiri::XML::Builder]
75
- def to_xml(builder)
76
- builder.localityStack do |b|
77
- locality.each { |l| l.to_xml(b) }
78
- end
79
- end
80
-
81
- # @returnt [Hash]
82
- def to_hash
83
- { "locality_stack" => single_element_array(locality) }
84
- end
85
- end
86
-
87
- class SourceLocality < BibItemLocality
88
- # @param builder [Nokogiri::XML::Builder]
89
- def to_xml(builder)
90
- builder.sourceLocality { |b| super(b) }
91
- end
92
- end
93
-
94
- class SourceLocalityStack < LocalityStack
95
- # @param builder [Nokogiri::XML::Builder]
96
- def to_xml(builder)
97
- builder.sourceLocalityStack do |b|
98
- locality.each { |l| l.to_xml(b) }
99
- end
100
- end
101
-
102
- # @returnt [Hash]
103
- def to_hash
104
- { "source_locality_stack" => single_element_array(locality) }
105
- end
106
- end
107
- end
@@ -1,44 +0,0 @@
1
- module RelatonBib
2
- class BiblioNote < FormattedString
3
- # @return [String, NilClass]
4
- attr_reader :type
5
-
6
- # @param content [String]
7
- # @param type [String, NilClass]
8
- # @param language [String, NilClass] language code Iso639
9
- # @param script [String, NilClass] script code Iso15924
10
- # @param format [String, NilClass] the content format
11
- def initialize(content:, type: nil, language: nil, script: nil, format: nil)
12
- @type = type
13
- super content: content, language: language, script: script, format: format
14
- end
15
-
16
- # @param builder [Nokogiri::XML::Builder]
17
- def to_xml(builder)
18
- xml = builder.note { super }
19
- xml[:type] = type if type
20
- xml
21
- end
22
-
23
- # @return [Hash]
24
- def to_hash
25
- hash = super
26
- return hash unless type
27
-
28
- hash = { "content" => hash } if hash.is_a? String
29
- hash["type"] = type
30
- hash
31
- end
32
-
33
- # @param prefix [String]
34
- # @param count [Integer] number of notes
35
- # @return [String]
36
- def to_asciibib(prefix = "", count = 1)
37
- pref = prefix.empty? ? prefix : prefix + "."
38
- out = count > 1 ? "#{pref}biblionote::\n" : ""
39
- out + "#{pref}biblionote.type:: #{type}\n" if type
40
- out += super "#{pref}biblionote"
41
- out
42
- end
43
- end
44
- end
@@ -1,49 +0,0 @@
1
- module RelatonBib
2
- # Version
3
- class BibliographicItem
4
- class Version
5
- include RelatonBib
6
-
7
- # @return [String, NilClass]
8
- attr_reader :revision_date
9
-
10
- # @return [Array<String>]
11
- attr_reader :draft
12
-
13
- # @param revision_date [String, NilClass]
14
- # @param draft [Array<String>]
15
- def initialize(revision_date = nil, draft = [])
16
- @revision_date = revision_date
17
- @draft = draft
18
- end
19
-
20
- # @param builder [Nokogiri::XML::Builder]
21
- def to_xml(builder)
22
- builder.version do
23
- builder.send("revision-date", revision_date) if revision_date
24
- draft.each { |d| builder.draft d }
25
- end
26
- end
27
-
28
- # @return [Hash]
29
- def to_hash
30
- hash = {}
31
- hash["revision_date"] = revision_date if revision_date
32
- hash["draft"] = single_element_array(draft) if draft&.any?
33
- hash
34
- end
35
-
36
- # @param prefix [String]
37
- # @return [String]
38
- def to_asciibib(prefix = "")
39
- pref = prefix.empty? ? prefix : prefix + "."
40
- out = ""
41
- if revision_date
42
- out += "#{pref}version.revision_date:: #{revision_date}\n"
43
- end
44
- draft&.each { |d| out += "#{pref}version.draft:: #{d}\n" }
45
- out
46
- end
47
- end
48
- end
49
- end
@@ -1,90 +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 issued transmitted copied unchanged circulated adapted].freeze
10
-
11
- # @return [String]
12
- attr_reader :type
13
-
14
- # @return [Date]
15
- attr_reader :from
16
-
17
- # @return [Date]
18
- attr_reader :to
19
-
20
- # @return [Date]
21
- attr_reader :on
22
-
23
- # @param type [String] "published", "accessed", "created", "activated"
24
- # @param on [String]
25
- # @param from [String]
26
- # @param to [String]
27
- def initialize(type:, on: nil, from: nil, to: nil)
28
- raise ArgumentError, "expected :on or :from argument" unless on || from
29
-
30
- # raise ArgumentError, "invalid type: #{type}" unless TYPES.include? type
31
-
32
- @type = type
33
- @on = RelatonBib.parse_date on
34
- @from = RelatonBib.parse_date from
35
- @to = RelatonBib.parse_date to
36
- end
37
-
38
- # rubocop:disable Metrics/AbcSize
39
-
40
- # @param builder [Nokogiri::XML::Builder]
41
- # @return [Nokogiri::XML::Builder]
42
- def to_xml(builder, **opts)
43
- builder.date(type: type) do
44
- if on
45
- builder.on(opts[:no_year] ? "--" : date_format(on, opts[:date_format]))
46
- elsif from
47
- builder.from(opts[:no_year] ? "--" : date_format(from, opts[:date_format]))
48
- builder.to date_format(to, opts[:date_format]) if to
49
- end
50
- end
51
- end
52
- # rubocop:enable Metrics/AbcSize
53
-
54
- # @return [Hash]
55
- def to_hash
56
- hash = { "type" => type }
57
- hash["value"] = on.to_s if on
58
- hash["from"] = from.to_s if from
59
- hash["to"] = to.to_s if to
60
- hash
61
- end
62
-
63
- # @param prefix [String]
64
- # @param count [Integer] number of dates
65
- # @return [String]
66
- def to_asciibib(prefix = "", count = 1)
67
- pref = prefix.empty? ? prefix : prefix + "."
68
- out = count > 1 ? "#{pref}date::\n" : ""
69
- out += "#{pref}date.type:: #{type}\n"
70
- out += "#{pref}date.on:: #{on}\n" if on
71
- out += "#{pref}date.from:: #{from}\n" if from
72
- out += "#{pref}date.to:: #{to}\n" if to
73
- out
74
- end
75
-
76
- private
77
-
78
- # Formats date
79
- # @param date [Time]
80
- # @param format [Symbol, nil] :full (yyyy-mm-dd), :short (yyyy-mm) or nil (yyyy)
81
- # @return [String]
82
- def date_format(date, format = nil)
83
- case format
84
- when :short then date.strftime "%Y-%m"
85
- when :full then date.strftime "%Y-%m-%d"
86
- else date.year
87
- end
88
- end
89
- end
90
- end