relaton 3.0.6 → 3.0.8
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.
- checksums.yaml +4 -4
- data/bin/relaton +20 -0
- data/lib/relaton/bib/model/docidentifier.rb +17 -2
- data/lib/relaton/bibcollection.rb +146 -0
- data/lib/relaton/bibdata.rb +92 -0
- data/lib/relaton/bipm/data_outcomes_parser.rb +6 -1
- data/lib/relaton/cli/base_convertor.rb +134 -0
- data/lib/relaton/cli/command.rb +390 -0
- data/lib/relaton/cli/data_fetcher.rb +20 -0
- data/lib/relaton/cli/frontend/dist/404.html +18 -0
- data/lib/relaton/cli/frontend/dist/app.iife.js +1 -0
- data/lib/relaton/cli/frontend/dist/style.css +3 -0
- data/lib/relaton/cli/frontend/index.html +14 -0
- data/lib/relaton/cli/frontend/package-lock.json +2945 -0
- data/lib/relaton/cli/frontend/package.json +29 -0
- data/lib/relaton/cli/frontend/public/404.html +18 -0
- data/lib/relaton/cli/frontend/src/App.test.ts +501 -0
- data/lib/relaton/cli/frontend/src/App.vue +506 -0
- data/lib/relaton/cli/frontend/src/app.ts +90 -0
- data/lib/relaton/cli/frontend/src/components/DocumentDetail.test.ts +142 -0
- data/lib/relaton/cli/frontend/src/components/DocumentDetail.vue +228 -0
- data/lib/relaton/cli/frontend/src/components/DocumentRow.vue +88 -0
- data/lib/relaton/cli/frontend/src/components/Icon.test.ts +44 -0
- data/lib/relaton/cli/frontend/src/components/Icon.vue +55 -0
- data/lib/relaton/cli/frontend/src/components/Pagination.vue +26 -0
- data/lib/relaton/cli/frontend/src/dev/main.ts +100 -0
- data/lib/relaton/cli/frontend/src/dev/sample-data.json +71 -0
- data/lib/relaton/cli/frontend/src/lib/filter.test.ts +88 -0
- data/lib/relaton/cli/frontend/src/lib/filter.ts +95 -0
- data/lib/relaton/cli/frontend/src/lib/hydrate.test.ts +102 -0
- data/lib/relaton/cli/frontend/src/lib/hydrate.ts +55 -0
- data/lib/relaton/cli/frontend/src/lib/shards.test.ts +319 -0
- data/lib/relaton/cli/frontend/src/lib/shards.ts +183 -0
- data/lib/relaton/cli/frontend/src/lib/types.ts +148 -0
- data/lib/relaton/cli/frontend/src/lib/url.test.ts +151 -0
- data/lib/relaton/cli/frontend/src/lib/url.ts +111 -0
- data/lib/relaton/cli/frontend/src/shims-vue.d.ts +5 -0
- data/lib/relaton/cli/frontend/src/styles/index.css +27 -0
- data/lib/relaton/cli/frontend/src/test/fetch.ts +58 -0
- data/lib/relaton/cli/frontend/tsconfig.json +20 -0
- data/lib/relaton/cli/frontend/vite.config.ts +42 -0
- data/lib/relaton/cli/frontend/vitest.config.ts +11 -0
- data/lib/relaton/cli/frontend_assets.rb +58 -0
- data/lib/relaton/cli/full_text_search.rb +98 -0
- data/lib/relaton/cli/i18n.yaml +1 -0
- data/lib/relaton/cli/index_item_normalizer.rb +380 -0
- data/lib/relaton/cli/index_site_generator.rb +1015 -0
- data/lib/relaton/cli/relaton_file.rb +290 -0
- data/lib/relaton/cli/subcommand_collection.rb +263 -0
- data/lib/relaton/cli/subcommand_db.rb +81 -0
- data/lib/relaton/cli/templates/_document.liquid +111 -0
- data/lib/relaton/cli/templates/_index.liquid +61 -0
- data/lib/relaton/cli/templates/index/page.liquid +20 -0
- data/lib/relaton/cli/templates/index-style.css +1017 -0
- data/lib/relaton/cli/util.rb +8 -0
- data/lib/relaton/cli/version.rb +11 -0
- data/lib/relaton/cli/xml_convertor.rb +47 -0
- data/lib/relaton/cli/xml_to_html_renderer.rb +117 -0
- data/lib/relaton/cli/yaml_convertor.rb +102 -0
- data/lib/relaton/cli.rb +113 -0
- data/lib/relaton/doi/CLAUDE.md +1 -1
- data/lib/relaton/element_finder.rb +29 -0
- data/lib/relaton/gb/CLAUDE.md +1 -1
- data/lib/relaton/ietf/CLAUDE.md +1 -1
- data/lib/relaton/iho/CLAUDE.md +3 -3
- data/lib/relaton/iho/bibliography.rb +41 -27
- data/lib/relaton/iho/processor.rb +3 -2
- data/lib/relaton/nist/CLAUDE.md +11 -1
- data/lib/relaton/nist/README.adoc +7 -1
- data/lib/relaton/nist/hit_collection.rb +25 -1
- data/lib/relaton/nist/mods_parser.rb +32 -8
- data/lib/relaton/nist/pubs_export.rb +69 -11
- data/lib/relaton/ogc/CLAUDE.md +1 -1
- data/lib/relaton/omg/CLAUDE.md +1 -1
- data/lib/relaton/plateau/CLAUDE.md +1 -1
- data/lib/relaton/render/general.rb +319 -0
- data/lib/relaton/render/iso690/csl_import.rb +129 -0
- data/lib/relaton/render/iso690/element.rb +153 -0
- data/lib/relaton/render/iso690/elements/access.rb +44 -0
- data/lib/relaton/render/iso690/elements/authorizer.rb +45 -0
- data/lib/relaton/render/iso690/elements/citeid.rb +39 -0
- data/lib/relaton/render/iso690/elements/component_part.rb +97 -0
- data/lib/relaton/render/iso690/elements/creator.rb +267 -0
- data/lib/relaton/render/iso690/elements/edition.rb +97 -0
- data/lib/relaton/render/iso690/elements/extent.rb +71 -0
- data/lib/relaton/render/iso690/elements/identifier.rb +46 -0
- data/lib/relaton/render/iso690/elements/location.rb +73 -0
- data/lib/relaton/render/iso690/elements/medium.rb +32 -0
- data/lib/relaton/render/iso690/elements/numeration.rb +26 -0
- data/lib/relaton/render/iso690/elements/production.rb +111 -0
- data/lib/relaton/render/iso690/elements/pub_date.rb +63 -0
- data/lib/relaton/render/iso690/elements/series.rb +66 -0
- data/lib/relaton/render/iso690/elements/size.rb +45 -0
- data/lib/relaton/render/iso690/elements/status.rb +30 -0
- data/lib/relaton/render/iso690/elements/stddoc.rb +40 -0
- data/lib/relaton/render/iso690/elements/title.rb +56 -0
- data/lib/relaton/render/iso690/elements/updated.rb +38 -0
- data/lib/relaton/render/iso690/elements.rb +67 -0
- data/lib/relaton/render/iso690/fields.rb +142 -0
- data/lib/relaton/render/iso690/i18n/en.yml +48 -0
- data/lib/relaton/render/iso690/i18n/fr.yml +14 -0
- data/lib/relaton/render/iso690/i18n/ja.yml +38 -0
- data/lib/relaton/render/iso690/i18n.rb +83 -0
- data/lib/relaton/render/iso690/identifier_kinds.rb +29 -0
- data/lib/relaton/render/iso690/index_renderer.rb +57 -0
- data/lib/relaton/render/iso690/kinds.rb +53 -0
- data/lib/relaton/render/iso690/renderer.rb +150 -0
- data/lib/relaton/render/iso690/rules/bipm.rb +186 -0
- data/lib/relaton/render/iso690/rules/jis.rb +103 -0
- data/lib/relaton/render/iso690/rules/nist.rb +384 -0
- data/lib/relaton/render/iso690/rules.rb +227 -0
- data/lib/relaton/render/iso690/style/locale.rb +59 -0
- data/lib/relaton/render/iso690/style/name_form.rb +87 -0
- data/lib/relaton/render/iso690/style/scheme.rb +33 -0
- data/lib/relaton/render/iso690/style/sort_rule.rb +25 -0
- data/lib/relaton/render/iso690/style/template_map.rb +40 -0
- data/lib/relaton/render/iso690/style/type_template.rb +45 -0
- data/lib/relaton/render/iso690/style.rb +227 -0
- data/lib/relaton/render/iso690/styles/apa.yml +45 -0
- data/lib/relaton/render/iso690/styles/author-date.yml +31 -0
- data/lib/relaton/render/iso690/styles/chicago.yml +49 -0
- data/lib/relaton/render/iso690/styles/ieee-sa.yml +45 -0
- data/lib/relaton/render/iso690/styles/jis-en.yml +68 -0
- data/lib/relaton/render/iso690/styles/jis-ja.yml +67 -0
- data/lib/relaton/render/iso690/styles/lncs.yml +54 -0
- data/lib/relaton/render/iso690/styles/mla.yml +56 -0
- data/lib/relaton/render/iso690/template.rb +248 -0
- data/lib/relaton/render/iso690.rb +28 -0
- data/lib/relaton/render/version.rb +5 -0
- data/lib/relaton/un/CLAUDE.md +1 -1
- data/lib/relaton/version.rb +1 -1
- data/lib/relaton-cli.rb +17 -0
- data/lib/relaton-render.rb +13 -0
- metadata +192 -21
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Render
|
|
5
|
+
module Iso690
|
|
6
|
+
# A citation template as declared in a style instance: literal text
|
|
7
|
+
# interleaved with {{slot}} placeholders resolved against the ISO 690
|
|
8
|
+
# data element inventory. A leading literal attaches to the first
|
|
9
|
+
# slot, and a literal between two slots to the preceding one, so an
|
|
10
|
+
# absent field never orphans punctuation around it. The last rendered
|
|
11
|
+
# slot gives up its trailing literal in favour of the template
|
|
12
|
+
# terminator, appended once when any field rendered and the output
|
|
13
|
+
# does not already end with it.
|
|
14
|
+
class Template
|
|
15
|
+
SLOT = /\{\{\s*([\w-]+)\s*\}\}/.freeze
|
|
16
|
+
|
|
17
|
+
Field = Struct.new(:present?, :text)
|
|
18
|
+
|
|
19
|
+
def initialize(source)
|
|
20
|
+
@chunks = []
|
|
21
|
+
@terminator = ""
|
|
22
|
+
scan(source.to_s)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# The short cite renders the reference with the first-biblio
|
|
26
|
+
# marker appended to its first component: isodoc's styled
|
|
27
|
+
# references (eref2linkshort) split there (the 1.x
|
|
28
|
+
# fmt-first-biblio-delim)
|
|
29
|
+
def evaluate_short(fields, delim)
|
|
30
|
+
present = present_indices(fields)
|
|
31
|
+
return "" if present.empty?
|
|
32
|
+
|
|
33
|
+
# The split marker follows the leading run of present slots
|
|
34
|
+
# (the 1.x first SEGMENT: "{{creator}}{{role}}" splits after
|
|
35
|
+
# the role), before the first literal that follows it
|
|
36
|
+
lead_slots = []
|
|
37
|
+
@chunks.each_with_index do |(kind, _value), i|
|
|
38
|
+
break if kind != :slot || !present.include?(i)
|
|
39
|
+
|
|
40
|
+
lead_slots << i
|
|
41
|
+
end
|
|
42
|
+
split_at = lead_slots.last ? lead_slots.last + 1 : nil
|
|
43
|
+
|
|
44
|
+
out = +""
|
|
45
|
+
@chunks.each_with_index do |(kind, value), i|
|
|
46
|
+
text =
|
|
47
|
+
case kind
|
|
48
|
+
when :slot
|
|
49
|
+
field = fields[normalise(value)]
|
|
50
|
+
next unless field&.present?
|
|
51
|
+
|
|
52
|
+
field.text
|
|
53
|
+
else
|
|
54
|
+
next unless bridged?(i, present)
|
|
55
|
+
|
|
56
|
+
value
|
|
57
|
+
end
|
|
58
|
+
if split_at == i
|
|
59
|
+
out << fieldless(lead_slots, fields) if false
|
|
60
|
+
out << delim.to_s
|
|
61
|
+
split_at = nil
|
|
62
|
+
end
|
|
63
|
+
out << text unless text.nil?
|
|
64
|
+
end
|
|
65
|
+
out << delim.to_s if split_at == @chunks.length
|
|
66
|
+
terminate(out).rstrip
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# 1.x segment-join semantics: present elements joined with the
|
|
70
|
+
# template's separators — a literal renders only when it
|
|
71
|
+
# separates (a run of absent elements between) two present
|
|
72
|
+
# elements; leading and trailing literals drop with the
|
|
73
|
+
# elements they would have attached to
|
|
74
|
+
def evaluate(fields)
|
|
75
|
+
present = present_indices(fields)
|
|
76
|
+
return "" if present.empty?
|
|
77
|
+
|
|
78
|
+
out = +"".dup
|
|
79
|
+
# Parenthetical groups balance on the template's literal
|
|
80
|
+
# parens alone: data text (a series run "(N.S.)", a host
|
|
81
|
+
# creator's closing paren) carries parens of its own that
|
|
82
|
+
# are no part of the template's group structure
|
|
83
|
+
paren_balance = 0
|
|
84
|
+
@chunks.each_with_index do |(kind, value), i|
|
|
85
|
+
if kind == :slot
|
|
86
|
+
field = fields[normalise(value)]
|
|
87
|
+
out << field.text if field&.present?
|
|
88
|
+
elsif value.to_s.match?(/\A[))]/)
|
|
89
|
+
# Symmetric close: with no pending open the close-paren
|
|
90
|
+
# drops, and any trailing punctuation bridges normally
|
|
91
|
+
closes = value.to_s[/\A[))]+/]
|
|
92
|
+
emitted = [paren_balance, closes.size].min
|
|
93
|
+
if emitted.positive?
|
|
94
|
+
out << closes[0, emitted] +
|
|
95
|
+
value.to_s[closes.size..].to_s
|
|
96
|
+
paren_balance -= emitted
|
|
97
|
+
else
|
|
98
|
+
rest = value.to_s.sub(/\A[))]+/, "")
|
|
99
|
+
# the trailing separator of a dropped group bridges as
|
|
100
|
+
# though the group were never there
|
|
101
|
+
if !rest.empty? && present.any? { |j| j > i } &&
|
|
102
|
+
group_gap?(i, present)
|
|
103
|
+
out << rest
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
elsif value.to_s.match?(/[((]\z/)
|
|
107
|
+
# A literal opening a parenthetical group ("({{series}})",
|
|
108
|
+
# "。({{series}})") attaches its paren to the slot it
|
|
109
|
+
# opens — the pair drops with an absent element, while
|
|
110
|
+
# any leading punctuation bridges normally
|
|
111
|
+
lead, paren = value.to_s.match(/\A(.*)([((])\z/).captures
|
|
112
|
+
out << lead if bridged_text?(i, lead, present)
|
|
113
|
+
if present.include?(i + 1)
|
|
114
|
+
out << paren
|
|
115
|
+
paren_balance += 1
|
|
116
|
+
end
|
|
117
|
+
elsif bridged?(i, present) ||
|
|
118
|
+
(value.include?("<") && present.any? { |j| j < i })
|
|
119
|
+
# markup attaches to the element it closes
|
|
120
|
+
out << value
|
|
121
|
+
elsif close_pending_paren?(out, value)
|
|
122
|
+
out << value
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
terminate(out).rstrip
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
private
|
|
129
|
+
|
|
130
|
+
def scan(source)
|
|
131
|
+
rest = source
|
|
132
|
+
while (slot = SLOT.match(rest))
|
|
133
|
+
@chunks << [:text, rest[0...slot.begin(0)]] if
|
|
134
|
+
slot.begin(0).positive?
|
|
135
|
+
@chunks << [:slot, slot[1]]
|
|
136
|
+
rest = rest[slot.end(0)..]
|
|
137
|
+
end
|
|
138
|
+
@terminator = rest
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def present_indices(fields)
|
|
142
|
+
@chunks.each_index.select do |i|
|
|
143
|
+
kind, value = @chunks[i]
|
|
144
|
+
next false unless kind == :slot
|
|
145
|
+
|
|
146
|
+
field = fields[normalise(value)]
|
|
147
|
+
!field.nil? && field.present?
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# The texts between this close and the last present slot are
|
|
152
|
+
# all parenthetical-group parts (each dropped or partial)
|
|
153
|
+
def group_gap?(index, present)
|
|
154
|
+
left = present.select { |i| i < index }.max
|
|
155
|
+
@chunks[(left + 1)...index].all? do |(_, text)|
|
|
156
|
+
text.to_s.match?(/\A[))]|[((]\z/)
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# The leading punctuation of a paren-opening literal bridges
|
|
161
|
+
# per the segment-join rule (a bare paren has no lead)
|
|
162
|
+
def bridged_text?(index, lead, present)
|
|
163
|
+
return true if lead.empty?
|
|
164
|
+
|
|
165
|
+
first_slot = @chunks.index { |(kind, _)| kind == :slot }
|
|
166
|
+
return present.include?(first_slot) if index < first_slot
|
|
167
|
+
|
|
168
|
+
left = present.select { |i| i < index }.max
|
|
169
|
+
left && present.any? { |i| i > index } &&
|
|
170
|
+
!@chunks[(left + 1)...index].any? do |(kind, _)|
|
|
171
|
+
kind == :text
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# A literal is the trailing separator of the element that
|
|
176
|
+
# precedes it: it renders when that element renders and a
|
|
177
|
+
# later element renders, and it is the FIRST literal of its
|
|
178
|
+
# gap (the 1.x segment join — absent elements between two
|
|
179
|
+
# present ones leave the single separator that follows the
|
|
180
|
+
# earlier present element; an absent slot directly before a
|
|
181
|
+
# present one, as "{{date}}{{disambiguator}}, {{access}}",
|
|
182
|
+
# does not swallow it). A leading literal (no slot precedes
|
|
183
|
+
# it) attaches to the first slot, emitting only when that
|
|
184
|
+
# slot is present.
|
|
185
|
+
def bridged?(index, present)
|
|
186
|
+
first_slot = @chunks.index { |(kind, _)| kind == :slot }
|
|
187
|
+
return present.include?(first_slot) if index < first_slot
|
|
188
|
+
|
|
189
|
+
left = present.select { |i| i < index }.max
|
|
190
|
+
left && present.any? { |i| i > index } &&
|
|
191
|
+
!@chunks[(left + 1)...index].any? do |(kind, _)|
|
|
192
|
+
kind == :text
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
# A template's paired literal ("({{production}})") closes even
|
|
197
|
+
# when nothing follows the present element it wraps. Fullwidth
|
|
198
|
+
# parens (CJK) pair the same way
|
|
199
|
+
def close_pending_paren?(out, value)
|
|
200
|
+
return false unless value.start_with?(")", "\uFF09")
|
|
201
|
+
|
|
202
|
+
opens = out.count("(") + out.count("\uFF08")
|
|
203
|
+
closes = out.count(")") + out.count("\uFF09")
|
|
204
|
+
opens > closes
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def terminate(body)
|
|
208
|
+
# 1.x punctuation cleanup: a sentence period before a spaced
|
|
209
|
+
# comma yields to the comma (", 2013" over ". , 2013"; an
|
|
210
|
+
# initials period before a comma ("P.,") stands, being
|
|
211
|
+
# unspaced), and stacked separators around absent elements
|
|
212
|
+
# collapse into one (". : ." into ". "); an empty pair left
|
|
213
|
+
# by an absent element drops
|
|
214
|
+
body = body.gsub(/:\s*\.\s*/, ": ")
|
|
215
|
+
body = body.gsub(/\.\s+,/, ",")
|
|
216
|
+
body = body.gsub(/(?:[.,:;]\s+)+[.,:;]/, ". ")
|
|
217
|
+
body = body.gsub(/\.\s*\./, ". ")
|
|
218
|
+
body = body.gsub(/:\s*\.\s*/, ": ")
|
|
219
|
+
body = body.gsub(/\(\s*\)/, "")
|
|
220
|
+
body = body.gsub(/ +/, " ").gsub(" ,", ",")
|
|
221
|
+
terminator = unbalanced_close(body, @terminator)
|
|
222
|
+
return body if terminator.strip.empty?
|
|
223
|
+
if terminator !~ /[<\w]/ && body.rstrip.end_with?(terminator.strip)
|
|
224
|
+
return body
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
"#{body}#{terminator}"
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# The terminator's closing parens stand only when the body
|
|
231
|
+
# opened them (their "(" died with an absent element)
|
|
232
|
+
def unbalanced_close(body, terminator)
|
|
233
|
+
return terminator unless terminator.start_with?(")")
|
|
234
|
+
|
|
235
|
+
open = body.count("(") - body.count(")")
|
|
236
|
+
return terminator.sub(/\A\)+/) { |closes| closes[0, open] } if
|
|
237
|
+
open.positive?
|
|
238
|
+
|
|
239
|
+
terminator.sub(/\A\)+/, "")
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def normalise(slot)
|
|
243
|
+
slot.to_s.delete("_").downcase
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Render
|
|
5
|
+
# Citation rendering per the ISO 690 architecture: a style instance
|
|
6
|
+
# places the inventory's data elements (clause 7) in each resource
|
|
7
|
+
# kind's order (clause 8); the engine is a template evaluator over a
|
|
8
|
+
# field resolver and holds no styles, no vocabularies, no i18n.
|
|
9
|
+
# The v1 compatibility facade (relaton-render#90): isodoc's
|
|
10
|
+
# render-isodoc subclasses Relaton::Render::General.
|
|
11
|
+
autoload :General, "relaton/render/general"
|
|
12
|
+
|
|
13
|
+
module Iso690
|
|
14
|
+
autoload :Element, "relaton/render/iso690/element"
|
|
15
|
+
autoload :Elements, "relaton/render/iso690/elements"
|
|
16
|
+
autoload :Fields, "relaton/render/iso690/fields"
|
|
17
|
+
autoload :I18n, "relaton/render/iso690/i18n"
|
|
18
|
+
autoload :IndexRenderer, "relaton/render/iso690/index_renderer"
|
|
19
|
+
autoload :IdentifierKinds, "relaton/render/iso690/identifier_kinds"
|
|
20
|
+
autoload :Kinds, "relaton/render/iso690/kinds"
|
|
21
|
+
autoload :Renderer, "relaton/render/iso690/renderer"
|
|
22
|
+
autoload :Rules, "relaton/render/iso690/rules"
|
|
23
|
+
autoload :Style, "relaton/render/iso690/style"
|
|
24
|
+
autoload :CslImport, "relaton/render/iso690/csl_import"
|
|
25
|
+
autoload :Template, "relaton/render/iso690/template"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
data/lib/relaton/un/CLAUDE.md
CHANGED
|
@@ -88,4 +88,4 @@ Tests are round-trip serialization tests: load a fixture, serialize to XML/YAML,
|
|
|
88
88
|
- **relaton-bib** (~> 2.0.0-alpha.1) — base bibliographic model with LutaML-Model integration
|
|
89
89
|
- **faraday** — HTTP client
|
|
90
90
|
- **ruby-jing** (dev) — RelaxNG schema validation in tests
|
|
91
|
-
- **
|
|
91
|
+
- **canon** (dev) — XML comparison in tests
|
data/lib/relaton/version.rb
CHANGED
data/lib/relaton-cli.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# The per-flavor `autoload` lines live in `relaton.rb`, not `relaton/db`.
|
|
2
|
+
# `index_name_for`/`pubid_class_for` resolve `Relaton::<Flavor>::INDEXFILE`, so
|
|
3
|
+
# without the umbrella every `--pubid-flavor` fails with "no relaton flavor".
|
|
4
|
+
# Declaring autoloads is cheap: no flavor is loaded until it is referenced.
|
|
5
|
+
require "relaton"
|
|
6
|
+
require "relaton/db"
|
|
7
|
+
|
|
8
|
+
module Relaton
|
|
9
|
+
module Cli
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
require_relative "relaton/bibcollection"
|
|
14
|
+
require_relative "relaton/bibdata"
|
|
15
|
+
require_relative "relaton/element_finder"
|
|
16
|
+
require_relative "relaton/cli/yaml_convertor"
|
|
17
|
+
require_relative "relaton/cli"
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "relaton/render/version"
|
|
4
|
+
require "relaton/render/iso690"
|
|
5
|
+
|
|
6
|
+
module Relaton
|
|
7
|
+
module Render
|
|
8
|
+
# A bibliographic item whose style template resolves to nothing: the
|
|
9
|
+
# single-item API raises, the batch API skips
|
|
10
|
+
class Unrenderable < StandardError; end
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: relaton
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.0.
|
|
4
|
+
version: 3.0.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-11-
|
|
11
|
+
date: 2026-11-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: addressable
|
|
@@ -318,6 +318,76 @@ dependencies:
|
|
|
318
318
|
- - "~>"
|
|
319
319
|
- !ruby/object:Gem::Version
|
|
320
320
|
version: 0.3.2
|
|
321
|
+
- !ruby/object:Gem::Dependency
|
|
322
|
+
name: htmlentities
|
|
323
|
+
requirement: !ruby/object:Gem::Requirement
|
|
324
|
+
requirements:
|
|
325
|
+
- - ">="
|
|
326
|
+
- !ruby/object:Gem::Version
|
|
327
|
+
version: '0'
|
|
328
|
+
type: :runtime
|
|
329
|
+
prerelease: false
|
|
330
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
331
|
+
requirements:
|
|
332
|
+
- - ">="
|
|
333
|
+
- !ruby/object:Gem::Version
|
|
334
|
+
version: '0'
|
|
335
|
+
- !ruby/object:Gem::Dependency
|
|
336
|
+
name: twitter_cldr
|
|
337
|
+
requirement: !ruby/object:Gem::Requirement
|
|
338
|
+
requirements:
|
|
339
|
+
- - ">="
|
|
340
|
+
- !ruby/object:Gem::Version
|
|
341
|
+
version: '0'
|
|
342
|
+
type: :runtime
|
|
343
|
+
prerelease: false
|
|
344
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
345
|
+
requirements:
|
|
346
|
+
- - ">="
|
|
347
|
+
- !ruby/object:Gem::Version
|
|
348
|
+
version: '0'
|
|
349
|
+
- !ruby/object:Gem::Dependency
|
|
350
|
+
name: liquid
|
|
351
|
+
requirement: !ruby/object:Gem::Requirement
|
|
352
|
+
requirements:
|
|
353
|
+
- - "~>"
|
|
354
|
+
- !ruby/object:Gem::Version
|
|
355
|
+
version: '5'
|
|
356
|
+
type: :runtime
|
|
357
|
+
prerelease: false
|
|
358
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
359
|
+
requirements:
|
|
360
|
+
- - "~>"
|
|
361
|
+
- !ruby/object:Gem::Version
|
|
362
|
+
version: '5'
|
|
363
|
+
- !ruby/object:Gem::Dependency
|
|
364
|
+
name: thor
|
|
365
|
+
requirement: !ruby/object:Gem::Requirement
|
|
366
|
+
requirements:
|
|
367
|
+
- - ">="
|
|
368
|
+
- !ruby/object:Gem::Version
|
|
369
|
+
version: '0'
|
|
370
|
+
type: :runtime
|
|
371
|
+
prerelease: false
|
|
372
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
373
|
+
requirements:
|
|
374
|
+
- - ">="
|
|
375
|
+
- !ruby/object:Gem::Version
|
|
376
|
+
version: '0'
|
|
377
|
+
- !ruby/object:Gem::Dependency
|
|
378
|
+
name: thor-hollaback
|
|
379
|
+
requirement: !ruby/object:Gem::Requirement
|
|
380
|
+
requirements:
|
|
381
|
+
- - ">="
|
|
382
|
+
- !ruby/object:Gem::Version
|
|
383
|
+
version: '0'
|
|
384
|
+
type: :runtime
|
|
385
|
+
prerelease: false
|
|
386
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
387
|
+
requirements:
|
|
388
|
+
- - ">="
|
|
389
|
+
- !ruby/object:Gem::Version
|
|
390
|
+
version: '0'
|
|
321
391
|
- !ruby/object:Gem::Dependency
|
|
322
392
|
name: mechanize
|
|
323
393
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -408,28 +478,28 @@ dependencies:
|
|
|
408
478
|
requirements:
|
|
409
479
|
- - "~>"
|
|
410
480
|
- !ruby/object:Gem::Version
|
|
411
|
-
version: 1.3.
|
|
481
|
+
version: 1.3.129
|
|
412
482
|
type: :runtime
|
|
413
483
|
prerelease: false
|
|
414
484
|
version_requirements: !ruby/object:Gem::Requirement
|
|
415
485
|
requirements:
|
|
416
486
|
- - "~>"
|
|
417
487
|
- !ruby/object:Gem::Version
|
|
418
|
-
version: 1.3.
|
|
488
|
+
version: 1.3.129
|
|
419
489
|
- !ruby/object:Gem::Dependency
|
|
420
490
|
name: pubid
|
|
421
491
|
requirement: !ruby/object:Gem::Requirement
|
|
422
492
|
requirements:
|
|
423
493
|
- - "~>"
|
|
424
494
|
- !ruby/object:Gem::Version
|
|
425
|
-
version: 2.0.
|
|
495
|
+
version: 2.0.5
|
|
426
496
|
type: :runtime
|
|
427
497
|
prerelease: false
|
|
428
498
|
version_requirements: !ruby/object:Gem::Requirement
|
|
429
499
|
requirements:
|
|
430
500
|
- - "~>"
|
|
431
501
|
- !ruby/object:Gem::Version
|
|
432
|
-
version: 2.0.
|
|
502
|
+
version: 2.0.5
|
|
433
503
|
- !ruby/object:Gem::Dependency
|
|
434
504
|
name: yeptris
|
|
435
505
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -444,20 +514,6 @@ dependencies:
|
|
|
444
514
|
- - "~>"
|
|
445
515
|
- !ruby/object:Gem::Version
|
|
446
516
|
version: 0.6.51
|
|
447
|
-
- !ruby/object:Gem::Dependency
|
|
448
|
-
name: relaton-render
|
|
449
|
-
requirement: !ruby/object:Gem::Requirement
|
|
450
|
-
requirements:
|
|
451
|
-
- - "~>"
|
|
452
|
-
- !ruby/object:Gem::Version
|
|
453
|
-
version: '3.0'
|
|
454
|
-
type: :runtime
|
|
455
|
-
prerelease: false
|
|
456
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
457
|
-
requirements:
|
|
458
|
-
- - "~>"
|
|
459
|
-
- !ruby/object:Gem::Version
|
|
460
|
-
version: '3.0'
|
|
461
517
|
- !ruby/object:Gem::Dependency
|
|
462
518
|
name: rfcxml
|
|
463
519
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -511,17 +567,21 @@ description: |
|
|
|
511
567
|
The CLI (relaton-cli) is a separate gem.
|
|
512
568
|
email:
|
|
513
569
|
- open.source@ribose.com
|
|
514
|
-
executables:
|
|
570
|
+
executables:
|
|
571
|
+
- relaton
|
|
515
572
|
extensions: []
|
|
516
573
|
extra_rdoc_files: []
|
|
517
574
|
files:
|
|
518
575
|
- LICENSE
|
|
519
576
|
- README.adoc
|
|
520
577
|
- bin/console
|
|
578
|
+
- bin/relaton
|
|
521
579
|
- bin/rspec
|
|
522
580
|
- bin/setup
|
|
523
581
|
- data/equivalence/adoption-chains.yaml
|
|
582
|
+
- lib/relaton-cli.rb
|
|
524
583
|
- lib/relaton-core.rb
|
|
584
|
+
- lib/relaton-render.rb
|
|
525
585
|
- lib/relaton.rb
|
|
526
586
|
- lib/relaton/3gpp.rb
|
|
527
587
|
- lib/relaton/3gpp/CLAUDE.md
|
|
@@ -630,6 +690,8 @@ files:
|
|
|
630
690
|
- lib/relaton/bib/sanitizer.rb
|
|
631
691
|
- lib/relaton/bib/util.rb
|
|
632
692
|
- lib/relaton/bib/versions.json
|
|
693
|
+
- lib/relaton/bibcollection.rb
|
|
694
|
+
- lib/relaton/bibdata.rb
|
|
633
695
|
- lib/relaton/bipm.rb
|
|
634
696
|
- lib/relaton/bipm/CLAUDE.md
|
|
635
697
|
- lib/relaton/bipm/README.adoc
|
|
@@ -737,6 +799,60 @@ files:
|
|
|
737
799
|
- lib/relaton/cie/processor.rb
|
|
738
800
|
- lib/relaton/cie/scrapper.rb
|
|
739
801
|
- lib/relaton/cie/util.rb
|
|
802
|
+
- lib/relaton/cli.rb
|
|
803
|
+
- lib/relaton/cli/base_convertor.rb
|
|
804
|
+
- lib/relaton/cli/command.rb
|
|
805
|
+
- lib/relaton/cli/data_fetcher.rb
|
|
806
|
+
- lib/relaton/cli/frontend/dist/404.html
|
|
807
|
+
- lib/relaton/cli/frontend/dist/app.iife.js
|
|
808
|
+
- lib/relaton/cli/frontend/dist/style.css
|
|
809
|
+
- lib/relaton/cli/frontend/index.html
|
|
810
|
+
- lib/relaton/cli/frontend/package-lock.json
|
|
811
|
+
- lib/relaton/cli/frontend/package.json
|
|
812
|
+
- lib/relaton/cli/frontend/public/404.html
|
|
813
|
+
- lib/relaton/cli/frontend/src/App.test.ts
|
|
814
|
+
- lib/relaton/cli/frontend/src/App.vue
|
|
815
|
+
- lib/relaton/cli/frontend/src/app.ts
|
|
816
|
+
- lib/relaton/cli/frontend/src/components/DocumentDetail.test.ts
|
|
817
|
+
- lib/relaton/cli/frontend/src/components/DocumentDetail.vue
|
|
818
|
+
- lib/relaton/cli/frontend/src/components/DocumentRow.vue
|
|
819
|
+
- lib/relaton/cli/frontend/src/components/Icon.test.ts
|
|
820
|
+
- lib/relaton/cli/frontend/src/components/Icon.vue
|
|
821
|
+
- lib/relaton/cli/frontend/src/components/Pagination.vue
|
|
822
|
+
- lib/relaton/cli/frontend/src/dev/main.ts
|
|
823
|
+
- lib/relaton/cli/frontend/src/dev/sample-data.json
|
|
824
|
+
- lib/relaton/cli/frontend/src/lib/filter.test.ts
|
|
825
|
+
- lib/relaton/cli/frontend/src/lib/filter.ts
|
|
826
|
+
- lib/relaton/cli/frontend/src/lib/hydrate.test.ts
|
|
827
|
+
- lib/relaton/cli/frontend/src/lib/hydrate.ts
|
|
828
|
+
- lib/relaton/cli/frontend/src/lib/shards.test.ts
|
|
829
|
+
- lib/relaton/cli/frontend/src/lib/shards.ts
|
|
830
|
+
- lib/relaton/cli/frontend/src/lib/types.ts
|
|
831
|
+
- lib/relaton/cli/frontend/src/lib/url.test.ts
|
|
832
|
+
- lib/relaton/cli/frontend/src/lib/url.ts
|
|
833
|
+
- lib/relaton/cli/frontend/src/shims-vue.d.ts
|
|
834
|
+
- lib/relaton/cli/frontend/src/styles/index.css
|
|
835
|
+
- lib/relaton/cli/frontend/src/test/fetch.ts
|
|
836
|
+
- lib/relaton/cli/frontend/tsconfig.json
|
|
837
|
+
- lib/relaton/cli/frontend/vite.config.ts
|
|
838
|
+
- lib/relaton/cli/frontend/vitest.config.ts
|
|
839
|
+
- lib/relaton/cli/frontend_assets.rb
|
|
840
|
+
- lib/relaton/cli/full_text_search.rb
|
|
841
|
+
- lib/relaton/cli/i18n.yaml
|
|
842
|
+
- lib/relaton/cli/index_item_normalizer.rb
|
|
843
|
+
- lib/relaton/cli/index_site_generator.rb
|
|
844
|
+
- lib/relaton/cli/relaton_file.rb
|
|
845
|
+
- lib/relaton/cli/subcommand_collection.rb
|
|
846
|
+
- lib/relaton/cli/subcommand_db.rb
|
|
847
|
+
- lib/relaton/cli/templates/_document.liquid
|
|
848
|
+
- lib/relaton/cli/templates/_index.liquid
|
|
849
|
+
- lib/relaton/cli/templates/index-style.css
|
|
850
|
+
- lib/relaton/cli/templates/index/page.liquid
|
|
851
|
+
- lib/relaton/cli/util.rb
|
|
852
|
+
- lib/relaton/cli/version.rb
|
|
853
|
+
- lib/relaton/cli/xml_convertor.rb
|
|
854
|
+
- lib/relaton/cli/xml_to_html_renderer.rb
|
|
855
|
+
- lib/relaton/cli/yaml_convertor.rb
|
|
740
856
|
- lib/relaton/cloud.rb
|
|
741
857
|
- lib/relaton/core.rb
|
|
742
858
|
- lib/relaton/core/CLAUDE.md
|
|
@@ -799,6 +915,7 @@ files:
|
|
|
799
915
|
- lib/relaton/ecma/processor.rb
|
|
800
916
|
- lib/relaton/ecma/standard_parser.rb
|
|
801
917
|
- lib/relaton/ecma/util.rb
|
|
918
|
+
- lib/relaton/element_finder.rb
|
|
802
919
|
- lib/relaton/equivalence.rb
|
|
803
920
|
- lib/relaton/etsi.rb
|
|
804
921
|
- lib/relaton/etsi/CLAUDE.md
|
|
@@ -1223,6 +1340,60 @@ files:
|
|
|
1223
1340
|
- lib/relaton/plateau/processor.rb
|
|
1224
1341
|
- lib/relaton/plateau/technical_report_parser.rb
|
|
1225
1342
|
- lib/relaton/plateau/util.rb
|
|
1343
|
+
- lib/relaton/render/general.rb
|
|
1344
|
+
- lib/relaton/render/iso690.rb
|
|
1345
|
+
- lib/relaton/render/iso690/csl_import.rb
|
|
1346
|
+
- lib/relaton/render/iso690/element.rb
|
|
1347
|
+
- lib/relaton/render/iso690/elements.rb
|
|
1348
|
+
- lib/relaton/render/iso690/elements/access.rb
|
|
1349
|
+
- lib/relaton/render/iso690/elements/authorizer.rb
|
|
1350
|
+
- lib/relaton/render/iso690/elements/citeid.rb
|
|
1351
|
+
- lib/relaton/render/iso690/elements/component_part.rb
|
|
1352
|
+
- lib/relaton/render/iso690/elements/creator.rb
|
|
1353
|
+
- lib/relaton/render/iso690/elements/edition.rb
|
|
1354
|
+
- lib/relaton/render/iso690/elements/extent.rb
|
|
1355
|
+
- lib/relaton/render/iso690/elements/identifier.rb
|
|
1356
|
+
- lib/relaton/render/iso690/elements/location.rb
|
|
1357
|
+
- lib/relaton/render/iso690/elements/medium.rb
|
|
1358
|
+
- lib/relaton/render/iso690/elements/numeration.rb
|
|
1359
|
+
- lib/relaton/render/iso690/elements/production.rb
|
|
1360
|
+
- lib/relaton/render/iso690/elements/pub_date.rb
|
|
1361
|
+
- lib/relaton/render/iso690/elements/series.rb
|
|
1362
|
+
- lib/relaton/render/iso690/elements/size.rb
|
|
1363
|
+
- lib/relaton/render/iso690/elements/status.rb
|
|
1364
|
+
- lib/relaton/render/iso690/elements/stddoc.rb
|
|
1365
|
+
- lib/relaton/render/iso690/elements/title.rb
|
|
1366
|
+
- lib/relaton/render/iso690/elements/updated.rb
|
|
1367
|
+
- lib/relaton/render/iso690/fields.rb
|
|
1368
|
+
- lib/relaton/render/iso690/i18n.rb
|
|
1369
|
+
- lib/relaton/render/iso690/i18n/en.yml
|
|
1370
|
+
- lib/relaton/render/iso690/i18n/fr.yml
|
|
1371
|
+
- lib/relaton/render/iso690/i18n/ja.yml
|
|
1372
|
+
- lib/relaton/render/iso690/identifier_kinds.rb
|
|
1373
|
+
- lib/relaton/render/iso690/index_renderer.rb
|
|
1374
|
+
- lib/relaton/render/iso690/kinds.rb
|
|
1375
|
+
- lib/relaton/render/iso690/renderer.rb
|
|
1376
|
+
- lib/relaton/render/iso690/rules.rb
|
|
1377
|
+
- lib/relaton/render/iso690/rules/bipm.rb
|
|
1378
|
+
- lib/relaton/render/iso690/rules/jis.rb
|
|
1379
|
+
- lib/relaton/render/iso690/rules/nist.rb
|
|
1380
|
+
- lib/relaton/render/iso690/style.rb
|
|
1381
|
+
- lib/relaton/render/iso690/style/locale.rb
|
|
1382
|
+
- lib/relaton/render/iso690/style/name_form.rb
|
|
1383
|
+
- lib/relaton/render/iso690/style/scheme.rb
|
|
1384
|
+
- lib/relaton/render/iso690/style/sort_rule.rb
|
|
1385
|
+
- lib/relaton/render/iso690/style/template_map.rb
|
|
1386
|
+
- lib/relaton/render/iso690/style/type_template.rb
|
|
1387
|
+
- lib/relaton/render/iso690/styles/apa.yml
|
|
1388
|
+
- lib/relaton/render/iso690/styles/author-date.yml
|
|
1389
|
+
- lib/relaton/render/iso690/styles/chicago.yml
|
|
1390
|
+
- lib/relaton/render/iso690/styles/ieee-sa.yml
|
|
1391
|
+
- lib/relaton/render/iso690/styles/jis-en.yml
|
|
1392
|
+
- lib/relaton/render/iso690/styles/jis-ja.yml
|
|
1393
|
+
- lib/relaton/render/iso690/styles/lncs.yml
|
|
1394
|
+
- lib/relaton/render/iso690/styles/mla.yml
|
|
1395
|
+
- lib/relaton/render/iso690/template.rb
|
|
1396
|
+
- lib/relaton/render/version.rb
|
|
1226
1397
|
- lib/relaton/sdo.rb
|
|
1227
1398
|
- lib/relaton/sdo/CLAUDE.md
|
|
1228
1399
|
- lib/relaton/sdo/config.rb
|