isodoc-i18n 1.1.7 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12cac5aeb35b5ef95804ecb4ccde36d048613feb1120030518f7b2cc1d8c92b5
4
- data.tar.gz: e91952a59254cc33d11339955ee050f6bc8761d80fa59d91d8c1e0c7f4889cdd
3
+ metadata.gz: 03d82802ceebe9b649964369efa5a449b5fa528bb317e327a2683ffd1bcdc502
4
+ data.tar.gz: 32001c9565f97ce9b2327ba452e7e745317ce7db56cead17c873e70cdd4f49d3
5
5
  SHA512:
6
- metadata.gz: 61311452a113779cbe5c0e5971d5bca2b5f1f14fbfda11056abd073ebcf188aa21cef54620a64ef15f896df0b3016e22df76a1474ba5d71c3fddea8fb2fea16d
7
- data.tar.gz: 84c4275111d86ff51c6547e821e976910766a0803ff38685b8c053197da8259c2ebbb4031e5dc89aeb86ed9fe8f4be9c8bf92c4baab3ae4cc5e5f8b2404a8adf
6
+ metadata.gz: 734f890b5868a2a889f91749167a7ea89d050b3bc58d12e1064242b858776c5ad7f793ecfa1d1f58972bf3f12d314996cc5f9ec0afb32614a96a5f6ea5b35674
7
+ data.tar.gz: 458345fb6eabfc69ec4416444b693ec1b56b07cd28ca994619927ec505c8bba793f161b1f8562a501d42990d56f5a86a1112e5cb9a5af518122696f14f875115
@@ -1,5 +1,5 @@
1
1
  module IsoDoc
2
2
  class I18n
3
- VERSION = "1.1.7".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.7
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: 2023-03-17 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
@@ -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