isodoc-i18n 1.1.6 → 1.1.8

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: cf80de5e127891bdd42fef149b032db2649100b48e3903255b8045021d11f8d7
4
- data.tar.gz: cbb3b8f8791089bd9ec2e161a0d268ae02b3768338963181f452812110aa32bf
3
+ metadata.gz: 03d82802ceebe9b649964369efa5a449b5fa528bb317e327a2683ffd1bcdc502
4
+ data.tar.gz: 32001c9565f97ce9b2327ba452e7e745317ce7db56cead17c873e70cdd4f49d3
5
5
  SHA512:
6
- metadata.gz: b6f9db2ae6a42c46dc8b8b6722daaf90b0bcfddd67d3eb244186c9d4e561d76019c837609cce2dcad35d7bf039393c8aaffeeb46e4249688a1c6b1330da2aee1
7
- data.tar.gz: b79476f0ca524c142d0135de71206b6a137055286f214a94bbfc0d125d12a8d18a7357cb2162b6e75e3a8308c6b9d85005bd88bcdffc545c8764c22c55911e22
6
+ metadata.gz: 734f890b5868a2a889f91749167a7ea89d050b3bc58d12e1064242b858776c5ad7f793ecfa1d1f58972bf3f12d314996cc5f9ec0afb32614a96a5f6ea5b35674
7
+ data.tar.gz: 458345fb6eabfc69ec4416444b693ec1b56b07cd28ca994619927ec505c8bba793f161b1f8562a501d42990d56f5a86a1112e5cb9a5af518122696f14f875115
data/isodoc-i18n.gemspec CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
24
24
 
25
25
  spec.add_dependency "htmlentities", "~> 4.3.4"
26
- spec.add_dependency "metanorma-utils", "~> 1.4.0"
26
+ spec.add_dependency "metanorma-utils", ">= 1.5.0"
27
27
  spec.add_dependency "twitter_cldr"
28
28
 
29
29
  spec.add_development_dependency "debug"
@@ -1,5 +1,5 @@
1
1
  module IsoDoc
2
2
  class I18n
3
- VERSION = "1.1.6".freeze
3
+ VERSION = "1.1.8".freeze
4
4
  end
5
5
  end
@@ -0,0 +1,58 @@
1
+ require "yaml"
2
+ require "metanorma-utils"
3
+
4
+ module IsoDoc
5
+ class I18n
6
+ Hash.include Metanorma::Utils::Hash
7
+
8
+ def load_yaml(lang, script, i18nyaml = nil, i18nhash = nil)
9
+ ret = load_yaml1(lang, script)
10
+ i18nyaml and
11
+ return normalise_hash(ret.deep_merge(YAML.load_file(i18nyaml)))
12
+ i18nhash and return normalise_hash(ret.deep_merge(i18nhash))
13
+
14
+ normalise_hash(ret)
15
+ end
16
+
17
+ def normalise_hash(ret)
18
+ case ret
19
+ when Hash
20
+ ret.each do |k, v|
21
+ ret[k] = normalise_hash(v)
22
+ end
23
+ ret
24
+ when Array then ret.map { |n| normalise_hash(n) }
25
+ when String then cleanup_entities(ret.unicode_normalize(:nfc))
26
+ else ret
27
+ end
28
+ end
29
+
30
+ def load_yaml1(lang, script)
31
+ case lang
32
+ when "zh"
33
+ if script == "Hans" then load_yaml2("zh-Hans")
34
+ else load_yaml2("en")
35
+ end
36
+ else
37
+ load_yaml2(lang)
38
+ end
39
+ end
40
+
41
+ # locally defined in calling class
42
+ def load_yaml2(lang)
43
+ YAML.load_file(File.join(File.dirname(__FILE__),
44
+ "../isodoc-yaml/i18n-#{lang}.yaml"))
45
+ rescue StandardError
46
+ YAML.load_file(File.join(File.dirname(__FILE__),
47
+ "../isodoc-yaml/i18n-en.yaml"))
48
+ end
49
+
50
+ def get
51
+ @labels
52
+ end
53
+
54
+ def set(key, val)
55
+ @labels[key] = val
56
+ end
57
+ end
58
+ end
data/lib/isodoc/i18n.rb CHANGED
@@ -1,69 +1,16 @@
1
- require "yaml"
2
1
  require "htmlentities"
3
- require "metanorma-utils"
4
2
  require "twitter_cldr"
5
3
  require_relative "i18n/version"
4
+ require_relative "i18n-yaml"
6
5
 
7
6
  module IsoDoc
8
7
  class I18n
9
- Hash.include Metanorma::Utils::Hash
10
-
11
- def load_yaml(lang, script, i18nyaml = nil, i18nhash = nil)
12
- ret = load_yaml1(lang, script)
13
- i18nyaml and
14
- return normalise_hash(ret.deep_merge(YAML.load_file(i18nyaml)))
15
- i18nhash and return normalise_hash(ret.deep_merge(i18nhash))
16
-
17
- normalise_hash(ret)
18
- end
19
-
20
- def normalise_hash(ret)
21
- case ret
22
- when Hash
23
- ret.each do |k, v|
24
- ret[k] = normalise_hash(v)
25
- end
26
- ret
27
- when Array then ret.map { |n| normalise_hash(n) }
28
- when String then cleanup_entities(ret.unicode_normalize(:nfc))
29
- else ret
30
- end
31
- end
32
-
33
- def load_yaml1(lang, script)
34
- case lang
35
- when "zh"
36
- if script == "Hans" then load_yaml2("zh-Hans")
37
- else load_yaml2("en")
38
- end
39
- else
40
- load_yaml2(lang)
41
- end
42
- end
43
-
44
- # locally defined in calling class
45
- def load_yaml2(lang)
46
- YAML.load_file(File.join(File.dirname(__FILE__),
47
- "../isodoc-yaml/i18n-#{lang}.yaml"))
48
- rescue StandardError
49
- YAML.load_file(File.join(File.dirname(__FILE__),
50
- "../isodoc-yaml/i18n-en.yaml"))
51
- end
52
-
53
- def get
54
- @labels
55
- end
56
-
57
- def set(key, val)
58
- @labels[key] = val
59
- end
60
-
61
8
  def initialize(lang, script, locale: nil, i18nyaml: nil, i18nhash: nil)
62
9
  @lang = lang
63
10
  @script = script
64
11
  @locale = locale
65
- y = load_yaml(lang, script, i18nyaml, i18nhash)
66
- @labels = y
12
+ @c = HTMLEntities.new
13
+ @labels = load_yaml(lang, script, i18nyaml, i18nhash)
67
14
  @labels["language"] = @lang
68
15
  @labels["script"] = @script
69
16
  @labels.each do |k, _v|
@@ -158,6 +105,29 @@ module IsoDoc
158
105
  text.gsub(/^(:\s)/, "#{colonsp}\\1")
159
106
  end
160
107
 
108
+ def self.cjk_extend(text)
109
+ cjk_extend(text)
110
+ end
111
+
112
+ def cjk_extend(title)
113
+ @c.decode(title).chars.map.with_index do |n, i|
114
+ if i.zero? || !interleave_space_cjk?(title[i - 1] + title[i])
115
+ n
116
+ else "\u3000#{n}"
117
+ end
118
+ end.join
119
+ end
120
+
121
+ def interleave_space_cjk?(text)
122
+ text.size == 2 or return
123
+ ["\u2014\u2014", "\u2025\u2025", "\u2026\u2026", "\u22ef\u22ef"].include?(text) ||
124
+ /\d\d|\p{Latin}\p{Latin}|[[:space:]]/.match?(text) ||
125
+ /^[\u2018\u201c(\u3014\[{\u3008\u300a\u300c\u300e\u3010\u2985\u3018\u3016\u00ab\u301d]/.match?(text) ||
126
+ /[\u2019\u201d)\u3015\]}\u3009\u300b\u300d\u300f\u3011\u2986\u3019\u3017\u00bb\u301f]$/.match?(text) ||
127
+ /[\u3002.\u3001,\u30fb:;\u2010\u301c\u30a0\u2013!?\u203c\u2047\u2048\u2049]/.match?(text) and return false
128
+ true
129
+ end
130
+
161
131
  def boolean_conj(list, conn)
162
132
  case list.size
163
133
  when 0 then ""
@@ -177,14 +147,13 @@ module IsoDoc
177
147
  end
178
148
 
179
149
  def cleanup_entities(text, is_xml: true)
180
- c = HTMLEntities.new
181
150
  if is_xml
182
151
  text.split(/([<>])/).each_slice(4).map do |a|
183
- a[0] = c.decode(a[0])
152
+ a[0] = @c.decode(a[0])
184
153
  a
185
154
  end.join
186
155
  else
187
- c.decode(text)
156
+ @c.decode(text)
188
157
  end
189
158
  end
190
159
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isodoc-i18n
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.6
4
+ version: 1.1.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: 2022-11-28 00:00:00.000000000 Z
11
+ date: 2023-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: htmlentities
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: metanorma-utils
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.4.0
33
+ version: 1.5.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.4.0
40
+ version: 1.5.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: twitter_cldr
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -210,6 +210,7 @@ files:
210
210
  - isodoc-i18n.gemspec
211
211
  - lib/isodoc-i18n.rb
212
212
  - lib/isodoc-yaml/i18n-en.yaml
213
+ - lib/isodoc/i18n-yaml.rb
213
214
  - lib/isodoc/i18n.rb
214
215
  - lib/isodoc/i18n/version.rb
215
216
  homepage: https://github.com/metanorma/isodoc-i18n