relaton-bib 1.13.4 → 1.13.6

Sign up to get free protection for your applications and to get access to all the features.
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