relaton-bib 1.13.4 → 1.13.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b16ceaaf0f86b9834a58c3a39008309f76d26de2347cb21fd2fef40cabc2fb0d
4
- data.tar.gz: 98348d372d278546dfa04579b80e6f7b1b9fa289ce794c728716cd73b97787e0
3
+ metadata.gz: 0bb1128da936b194ce7e29899a6092f2767e85b4f7e7963306cdb65789af8c65
4
+ data.tar.gz: a3c52753f1459b6898d9780d10899b560708fbbccb5f5a8e168c8b9945bcb5c1
5
5
  SHA512:
6
- metadata.gz: 97b3b1e729dfcae82196f3aff635c92a199cdae6ca0fa5c338321ef0f86bc3412212b83a3871c1aae7585e71d9db5bc6c6406327e1a7c43cb1f2ca1524e11ebb
7
- data.tar.gz: eab637a2d826cfa98d7d1cbda52509d05a59949ef7617ef04e066e1abbe4b9326d9a7313db64495925ee345fb1214f08b2381f66acce9a8b3e5e1a21ce95809d
6
+ metadata.gz: edbdefdccca25da59d741f1013e5008a63ea53beff1350f5a248c52e8810f94ef3d08040a14976005ebdb0c79405b839534784550a893b368866ed6a561c6e33
7
+ data.tar.gz: f0ba59355807104e7915ff731da8bbe55197299af8b10e1ae90c6ba2a23c36e643d356c629dd307bf3fbf5094257c91a4509e908bbaca510cab5f1d65764e896
@@ -31,6 +31,61 @@ module RelatonBib
31
31
  super
32
32
  end
33
33
 
34
+ #
35
+ # Encode content.
36
+ #
37
+ # @param [String] cnt content
38
+ #
39
+ # @return [String] encoded content
40
+ #
41
+ def encode(cnt) # rubocop:disable Metrics/MethodLength
42
+ return escp(cnt) unless format == "text/html"
43
+
44
+ parts = cnt.scan(%r{
45
+ <(?<tago>\w+)(?<attrs>[^>]*)> | # tag open
46
+ </(?<tagc>\w+)> | # tag close
47
+ (?<cmt><!--.*?-->) | # comment
48
+ (?<cnt>.+?)(?=<|$) # content
49
+ }x)
50
+ scan_xml parts
51
+ end
52
+
53
+ #
54
+ # Scan XML and escape HTML entities.
55
+ #
56
+ # @param [Array<Array<String,nil>>] parts XML parts
57
+ #
58
+ # @return [String] output string
59
+ #
60
+ def scan_xml(parts) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
61
+ return "" unless parts.any?
62
+
63
+ out = ""
64
+ while parts.any? && (parts.first[3] || parts.first[4])
65
+ _, _, _, cmt, cnt = parts.shift
66
+ out += "#{cmt}#{escp(cnt)}"
67
+ end
68
+ unless out.empty?
69
+ out += scan_xml(parts) if parts.any? && parts.first[0]
70
+ return out
71
+ end
72
+
73
+ tago, attrs, tagc, = parts.shift
74
+ out = if tago && attrs && attrs[-1] == "/"
75
+ "<#{tago}#{attrs}>"
76
+ elsif tago
77
+ inr = scan_xml parts
78
+ _, _, tagc, = parts.shift
79
+ if tago == tagc
80
+ "<#{tago}#{attrs}>#{inr}</#{tagc}>"
81
+ else
82
+ "#{escp("<#{tago}#{attrs}>")}#{inr}#{escp("</#{tagc}>")}"
83
+ end
84
+ end
85
+ out += scan_xml(parts) if parts.any? && (parts.first[0] || parts.first[3] || parts.first[4])
86
+ out
87
+ end
88
+
34
89
  # @return [Hash]
35
90
  def to_hash
36
91
  hash = super
@@ -46,7 +101,7 @@ module RelatonBib
46
101
  # @return [String]
47
102
  def to_asciibib(prefix = "", count = 1, has_attrs = false)
48
103
  has_attrs ||= !(format.nil? || format.empty?)
49
- pref = prefix.empty? ? prefix : prefix + "."
104
+ pref = prefix.empty? ? prefix : "#{prefix}."
50
105
  # out = count > 1 ? "#{prefix}::\n" : ""
51
106
  out = super
52
107
  out += "#{pref}format:: #{format}\n" if format
@@ -76,51 +76,7 @@ module RelatonBib
76
76
  # @return [String] encoded content
77
77
  #
78
78
  def encode(cnt) # rubocop:disable Metrics/MethodLength
79
- return unless cnt
80
-
81
- parts = cnt.scan(%r{
82
- <(?<tago>\w+)(?<attrs>[^>]*)> | # tag open
83
- </(?<tagc>\w+)> | # tag close
84
- (?<cmt><!--.*?-->) | # comment
85
- (?<cnt>.+?)(?=<|$) # content
86
- }x)
87
- scan_xml parts
88
- end
89
-
90
- #
91
- # Scan XML and escape HTML entities.
92
- #
93
- # @param [Array<Array<String,nil>>] parts XML parts
94
- #
95
- # @return [String] output string
96
- #
97
- def scan_xml(parts) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
98
- return "" unless parts.any?
99
-
100
- out = ""
101
- while parts.any? && (parts.first[3] || parts.first[4])
102
- _, _, _, cmt, cnt = parts.shift
103
- out += "#{cmt}#{escp(cnt)}"
104
- end
105
- unless out.empty?
106
- out += scan_xml(parts) if parts.any? && parts.first[0]
107
- return out
108
- end
109
-
110
- tago, attrs, tagc, = parts.shift
111
- out = if tago && attrs && attrs[-1] == "/"
112
- "<#{tago}#{attrs}>"
113
- elsif tago
114
- inr = scan_xml parts
115
- _, _, tagc, = parts.shift
116
- if tago == tagc
117
- "<#{tago}#{attrs}>#{inr}</#{tagc}>"
118
- else
119
- "#{escp("<#{tago}#{attrs}>")}#{inr}#{escp("</#{tagc}>")}"
120
- end
121
- end
122
- out += scan_xml(parts) if parts.any? && (parts.first[0] || parts.first[3] || parts.first[4])
123
- out
79
+ escp cnt
124
80
  end
125
81
 
126
82
  #
@@ -131,7 +87,9 @@ module RelatonBib
131
87
  # @return [String] output string
132
88
  #
133
89
  def escp(str)
134
- HTMLEntities.new.encode str
90
+ return unless str
91
+
92
+ HTMLEntities.new.encode str.dup.force_encoding("UTF-8")
135
93
  end
136
94
 
137
95
  # @return [Hash]
@@ -1,3 +1,3 @@
1
1
  module RelatonBib
2
- VERSION = "1.13.4".freeze
2
+ VERSION = "1.13.6".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-bib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.4
4
+ version: 1.13.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-16 00:00:00.000000000 Z
11
+ date: 2022-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug