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,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