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