pubid-core 1.15.8 → 1.15.9
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/README.adoc +20 -0
- data/lib/pubid/core/identifier/base.rb +3 -2
- data/lib/pubid/core/renderer/base.rb +59 -7
- data/lib/pubid/core/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9ee18d5ea661ba3c87383873d963bb0ec1c90fa682dfbf324f1af363a15c6a5f
|
|
4
|
+
data.tar.gz: 922cfb88f6e81323c9f8be88a8e7bf09e96ac438de16ffb50aa80f39106d89b0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3d5ea2932415a5f336f7e29dcd3199ee6e7b8593a0d87f11685be119131989683af38e07e39a49e2d9199320bb583d245b3f59102c27901c1faa119c0bcea21d
|
|
7
|
+
data.tar.gz: 4ac1d13c7b2ff1422352b57f692b77f4bb061727381f02b69bfeb2a479fb85b016183a2dc379488da96e9a082e6da9f09a9b14a76fb18a827933571226de4bbb
|
data/README.adoc
CHANGED
|
@@ -29,6 +29,26 @@ pubid.to_h
|
|
|
29
29
|
=> { publisher: "ISO", number: 1, year: 1999 }
|
|
30
30
|
----
|
|
31
31
|
|
|
32
|
+
=== Annotated rendering
|
|
33
|
+
|
|
34
|
+
Use `to_s(annotated: true)` to produce HTML output where each semantic component
|
|
35
|
+
is wrapped in a `<span>` tag with a CSS class. This is useful for styling
|
|
36
|
+
individual parts of an identifier in web UIs.
|
|
37
|
+
|
|
38
|
+
[source,ruby]
|
|
39
|
+
----
|
|
40
|
+
pubid = Identifier.parse("ISO 1234-1:2013")
|
|
41
|
+
pubid.to_s(annotated: true)
|
|
42
|
+
=> '<span class="publisher">ISO</span> <span class="docnumber">1234</span>-<span class="part">1</span>:<span class="year">2013</span>'
|
|
43
|
+
----
|
|
44
|
+
|
|
45
|
+
Available CSS classes: `publisher`, `docnumber`, `part`, `year`, `edition`,
|
|
46
|
+
`amendment`, `corrigendum`, `language`, `doctype`, `stage`, `iteration`,
|
|
47
|
+
`addendum`.
|
|
48
|
+
|
|
49
|
+
The `annotated:` option can be combined with other `to_s` options such as
|
|
50
|
+
`format:` and `lang:`.
|
|
51
|
+
|
|
32
52
|
=== Using #new_edition_of? to compare identifiers
|
|
33
53
|
|
|
34
54
|
[source,ruby]
|
|
@@ -103,8 +103,9 @@ module Pubid::Core
|
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
# Render identifier using default renderer
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
# @param annotated [Boolean] wrap semantic components in <span> tags
|
|
107
|
+
def to_s(annotated: false)
|
|
108
|
+
self.class.get_renderer_class.new(to_h(deep: false)).render(annotated: annotated)
|
|
108
109
|
end
|
|
109
110
|
|
|
110
111
|
def exclude(*args)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require "set"
|
|
2
|
+
|
|
1
3
|
module Pubid::Core::Renderer
|
|
2
4
|
class Base
|
|
3
5
|
attr_accessor :params
|
|
@@ -10,10 +12,58 @@ module Pubid::Core::Renderer
|
|
|
10
12
|
"es" => "S",
|
|
11
13
|
}.freeze
|
|
12
14
|
|
|
15
|
+
SEMANTIC_CLASSES = {
|
|
16
|
+
publisher: "publisher",
|
|
17
|
+
number: "docnumber",
|
|
18
|
+
part: "part",
|
|
19
|
+
year: "year",
|
|
20
|
+
edition: "edition",
|
|
21
|
+
amendments: "amendment",
|
|
22
|
+
corrigendums: "corrigendum",
|
|
23
|
+
language: "language",
|
|
24
|
+
typed_stage: "doctype",
|
|
25
|
+
stage: "stage",
|
|
26
|
+
iteration: "iteration",
|
|
27
|
+
addendum: "addendum",
|
|
28
|
+
}.freeze
|
|
29
|
+
|
|
30
|
+
SEPARATOR_CHARS = Set.new(["-", ":", "/", " ", ",", "."]).freeze
|
|
31
|
+
|
|
13
32
|
def initialize(params)
|
|
14
33
|
@params = params
|
|
15
34
|
end
|
|
16
35
|
|
|
36
|
+
# Wraps rendered value in a <span> tag with a semantic CSS class.
|
|
37
|
+
# Leading/trailing separator characters are preserved outside the span.
|
|
38
|
+
# @param key [Symbol] parameter key (e.g. :publisher, :number)
|
|
39
|
+
# @param rendered_value [String] the rendered string value
|
|
40
|
+
# @return [String] annotated or original value
|
|
41
|
+
def annotate_value(key, rendered_value)
|
|
42
|
+
css_class = SEMANTIC_CLASSES[key]
|
|
43
|
+
return rendered_value if css_class.nil?
|
|
44
|
+
|
|
45
|
+
str = rendered_value.to_s
|
|
46
|
+
return str if str.empty?
|
|
47
|
+
|
|
48
|
+
# Extract leading separators
|
|
49
|
+
leading = ""
|
|
50
|
+
while !str.empty? && SEPARATOR_CHARS.include?(str[0])
|
|
51
|
+
leading << str[0]
|
|
52
|
+
str = str[1..]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Extract trailing separators
|
|
56
|
+
trailing = ""
|
|
57
|
+
while !str.empty? && SEPARATOR_CHARS.include?(str[-1])
|
|
58
|
+
trailing = str[-1] + trailing
|
|
59
|
+
str = str[0..-2]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
return rendered_value if str.empty?
|
|
63
|
+
|
|
64
|
+
"#{leading}<span class=\"#{css_class}\">#{str}</span>#{trailing}"
|
|
65
|
+
end
|
|
66
|
+
|
|
17
67
|
# Prerender parameters and store in @prerendered_params
|
|
18
68
|
# @param opts [Hash] options for render method, eg. { with_language_code: :single, with_date: true }
|
|
19
69
|
# @return [Renderer::Base] self
|
|
@@ -33,11 +83,13 @@ module Pubid::Core::Renderer
|
|
|
33
83
|
def prerender_params(params, opts)
|
|
34
84
|
params.map do |key, value|
|
|
35
85
|
next unless value
|
|
36
|
-
if respond_to?("render_#{key}")
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
86
|
+
rendered = if respond_to?("render_#{key}")
|
|
87
|
+
send("render_#{key}", value, opts, params)
|
|
88
|
+
else
|
|
89
|
+
value
|
|
90
|
+
end
|
|
91
|
+
rendered = annotate_value(key, rendered) if opts[:annotated] && rendered
|
|
92
|
+
[key, rendered]
|
|
41
93
|
end.compact.to_h
|
|
42
94
|
end
|
|
43
95
|
|
|
@@ -78,8 +130,8 @@ module Pubid::Core::Renderer
|
|
|
78
130
|
# Render identifier
|
|
79
131
|
# @param with_date [Boolean] include year in output
|
|
80
132
|
# @param with_language_code [:iso,:single] render document language as 2-letter ISO 639-1 language code or single code
|
|
81
|
-
def render(with_date: true, with_language_code: :iso, **args)
|
|
82
|
-
render_base_identifier(**args.merge({ with_date: with_date, with_language_code: with_language_code})) + @prerendered_params[:language].to_s
|
|
133
|
+
def render(with_date: true, with_language_code: :iso, annotated: false, **args)
|
|
134
|
+
render_base_identifier(**args.merge({ with_date: with_date, with_language_code: with_language_code, annotated: annotated})) + @prerendered_params[:language].to_s
|
|
83
135
|
end
|
|
84
136
|
|
|
85
137
|
def render_identifier(params)
|
data/lib/pubid/core/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pubid-core
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.15.
|
|
4
|
+
version: 1.15.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-03-
|
|
11
|
+
date: 2026-03-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: parslet
|