isodoc-i18n 1.1.7 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12cac5aeb35b5ef95804ecb4ccde36d048613feb1120030518f7b2cc1d8c92b5
4
- data.tar.gz: e91952a59254cc33d11339955ee050f6bc8761d80fa59d91d8c1e0c7f4889cdd
3
+ metadata.gz: e6ff9dd68aee9f2481e2c3b3efb12eb227d534841dd30ac23fa7402f64a3ffd2
4
+ data.tar.gz: 5b6b0bd8eb4b8323cf8650a5dba48c966226f2898ac812beb5f5b3f31cd91b1f
5
5
  SHA512:
6
- metadata.gz: 61311452a113779cbe5c0e5971d5bca2b5f1f14fbfda11056abd073ebcf188aa21cef54620a64ef15f896df0b3016e22df76a1474ba5d71c3fddea8fb2fea16d
7
- data.tar.gz: 84c4275111d86ff51c6547e821e976910766a0803ff38685b8c053197da8259c2ebbb4031e5dc89aeb86ed9fe8f4be9c8bf92c4baab3ae4cc5e5f8b2404a8adf
6
+ metadata.gz: a3333a3f5386017bf62a88d8b82597477702965cf7aa9505b00927dd883420cb3a881363774a07311653703316d2f591ad1bb8b2f21d485b034ad2d9356d6544
7
+ data.tar.gz: b980154492673ddd83d2cd3c90fcde55856a14e055f493df0372cc627ffd2602a197c2e3ccb0680e3c942c058540551634f4c3a7d7c51c0ba9eb77f35d422c18
@@ -1,5 +1,5 @@
1
1
  module IsoDoc
2
2
  class I18n
3
- VERSION = "1.1.7".freeze
3
+ VERSION = "1.1.9".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,29 @@
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"
5
+ require_relative "date"
6
6
 
7
7
  module IsoDoc
8
8
  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
9
+ def initialize(lang, script, locale: nil, i18nyaml: nil, i18nhash: nil)
10
+ @lang = lang
11
+ @script = script
12
+ @locale = locale
13
+ @cal = calendar_data
14
+ @cal_en = TwitterCldr::Shared::Calendar.new(:en)
15
+ @c = HTMLEntities.new
16
+ init_labels(i18nyaml, i18nhash)
42
17
  end
43
18
 
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"))
19
+ def calendar_data
20
+ TwitterCldr::Shared::Calendar.new(tw_cldr_lang)
48
21
  rescue StandardError
49
- YAML.load_file(File.join(File.dirname(__FILE__),
50
- "../isodoc-yaml/i18n-en.yaml"))
22
+ TwitterCldr::Shared::Calendar.new(:en)
51
23
  end
52
24
 
53
- def get
54
- @labels
55
- end
56
-
57
- def set(key, val)
58
- @labels[key] = val
59
- end
60
-
61
- def initialize(lang, script, locale: nil, i18nyaml: nil, i18nhash: nil)
62
- @lang = lang
63
- @script = script
64
- @locale = locale
65
- y = load_yaml(lang, script, i18nyaml, i18nhash)
66
- @labels = y
25
+ def init_labels(i18nyaml, i18nhash)
26
+ @labels = load_yaml(@lang, @script, i18nyaml, i18nhash)
67
27
  @labels["language"] = @lang
68
28
  @labels["script"] = @script
69
29
  @labels.each do |k, _v|
@@ -158,6 +118,29 @@ module IsoDoc
158
118
  text.gsub(/^(:\s)/, "#{colonsp}\\1")
159
119
  end
160
120
 
121
+ def self.cjk_extend(text)
122
+ cjk_extend(text)
123
+ end
124
+
125
+ def cjk_extend(title)
126
+ @c.decode(title).chars.map.with_index do |n, i|
127
+ if i.zero? || !interleave_space_cjk?(title[i - 1] + title[i])
128
+ n
129
+ else "\u3000#{n}"
130
+ end
131
+ end.join
132
+ end
133
+
134
+ def interleave_space_cjk?(text)
135
+ text.size == 2 or return
136
+ ["\u2014\u2014", "\u2025\u2025", "\u2026\u2026", "\u22ef\u22ef"].include?(text) ||
137
+ /\d\d|\p{Latin}\p{Latin}|[[:space:]]/.match?(text) ||
138
+ /^[\u2018\u201c(\u3014\[{\u3008\u300a\u300c\u300e\u3010\u2985\u3018\u3016\u00ab\u301d]/.match?(text) ||
139
+ /[\u2019\u201d)\u3015\]}\u3009\u300b\u300d\u300f\u3011\u2986\u3019\u3017\u00bb\u301f]$/.match?(text) ||
140
+ /[\u3002.\u3001,\u30fb:;\u2010\u301c\u30a0\u2013!?\u203c\u2047\u2048\u2049]/.match?(text) and return false
141
+ true
142
+ end
143
+
161
144
  def boolean_conj(list, conn)
162
145
  case list.size
163
146
  when 0 then ""
@@ -177,14 +160,13 @@ module IsoDoc
177
160
  end
178
161
 
179
162
  def cleanup_entities(text, is_xml: true)
180
- c = HTMLEntities.new
181
163
  if is_xml
182
164
  text.split(/([<>])/).each_slice(4).map do |a|
183
- a[0] = c.decode(a[0])
165
+ a[0] = @c.decode(a[0])
184
166
  a
185
167
  end.join
186
168
  else
187
- c.decode(text)
169
+ @c.decode(text)
188
170
  end
189
171
  end
190
172
 
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.9
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-06-04 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