cr.rb 3.20.0 → 4.0.0.RC.1
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 +4 -4
- data/bin/cr +198 -138
- data/lib/cr.rb +18 -3
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ce431672d430390ccfd417228f9c503c2d76ff8b34ac6b5f9af767f6412fcaa
|
4
|
+
data.tar.gz: 51aa033e497ffa0a6e4c56cf29430951ddb756d1b21511b62cfa3dbd97719681
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d8ddb4c90f742da36e3602444e1fc146080b6f73419d5688496d5414ffb0f54838f2ee6d3eeec3cce36cdf4bcb8d7ca46ac44f527772f54f19b5e0f05db795c
|
7
|
+
data.tar.gz: '029a468f7a80d22b1596be5a284f7e0e98cdf886b9543434720e9f3ad454bfcef29cfe8ddad3f8e66195d4c151ddf7f41ce0d7aa699916d36efb7e17af92178d'
|
data/bin/cr
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# File : cr.rb
|
5
5
|
# Authors : ccmywish <ccmywish@qq.com>
|
6
6
|
# Created on : <2021-07-08>
|
7
|
-
# Last modified : <2022-
|
7
|
+
# Last modified : <2022-11-27>
|
8
8
|
#
|
9
9
|
# cr:
|
10
10
|
#
|
@@ -18,13 +18,62 @@ require 'cr'
|
|
18
18
|
require 'tomlrb'
|
19
19
|
require 'fileutils'
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
CR_DEFAULT_LIBRARY = File.expand_path("~/.cryptic-resolver")
|
22
|
+
|
23
|
+
$CR_DEFAULT_DICTS = [
|
24
|
+
"https://github.com/cryptic-resolver/cryptic_common.git",
|
25
|
+
"https://github.com/cryptic-resolver/cryptic_computer.git",
|
26
|
+
"https://github.com/cryptic-resolver/cryptic_windows.git",
|
27
|
+
"https://github.com/cryptic-resolver/cryptic_linux.git",
|
28
|
+
"https://github.com/cryptic-resolver/cryptic_electronics"
|
29
|
+
]
|
30
|
+
|
31
|
+
# The config file will override the default dicts, but not default library!
|
32
|
+
if ENV['CRYPTIC_RESOLVER_CONFIG']
|
33
|
+
file = ENV['CRYPTIC_RESOLVER_CONFIG']
|
34
|
+
if test('f', file)
|
35
|
+
config = Tomlrb.load_file file
|
36
|
+
|
37
|
+
CR_EXTRA_LIBRARY ||= config['EXTRA_LIBRARY']
|
38
|
+
|
39
|
+
if config['DEFAULT_DICTS']
|
40
|
+
CR_DEFAULT_DICTS = config['DEFAULT_DICTS']
|
41
|
+
else
|
42
|
+
CR_DEFAULT_DICTS = $CR_DEFAULT_DICTS
|
43
|
+
end
|
44
|
+
|
45
|
+
else
|
46
|
+
puts "FATAL: Your CRYPTIC_RESOLVER_CONFIG is NOT a file!"
|
47
|
+
exit 1
|
48
|
+
end
|
49
|
+
|
50
|
+
else
|
51
|
+
# if user doesn't specify, we use the hard-coded defaults
|
52
|
+
CR_EXTRA_LIBRARY = nil
|
53
|
+
CR_DEFAULT_DICTS = $CR_DEFAULT_DICTS
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
# Prevent runtime error
|
58
|
+
if not CR_EXTRA_LIBRARY.nil?
|
59
|
+
if ! test('d', CR_EXTRA_LIBRARY)
|
60
|
+
puts "FATAL: Your CRYPTIC_RESOLVER_CONFIG's option 'EXTRA_LIBRARY' is NOT a legal directory!"
|
61
|
+
exit 1
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
# This is used to display what you are pulling when adding dicts
|
67
|
+
CR_DEFAULT_DICTS_USER_AND_NAMES = CR_DEFAULT_DICTS.map do |e|
|
68
|
+
user, repo = e.split('/').last(2)
|
69
|
+
repo = repo.split('.').first
|
70
|
+
user + '/' + repo
|
71
|
+
end
|
72
|
+
|
73
|
+
# Same with the pulled repo dirs' names in CR_DEFAULT_LIBRARY
|
74
|
+
CR_DEFAULT_DICTS_NAMES = CR_DEFAULT_DICTS.map do |e|
|
75
|
+
e.split('/').last.split('.').first
|
76
|
+
end
|
28
77
|
|
29
78
|
|
30
79
|
####################
|
@@ -46,31 +95,31 @@ def cyan(str) "\e[36m#{str}\e[0m" end
|
|
46
95
|
####################
|
47
96
|
|
48
97
|
def is_there_any_dict?
|
49
|
-
unless Dir.exist?
|
50
|
-
Dir.mkdir
|
98
|
+
unless Dir.exist? CR_DEFAULT_LIBRARY
|
99
|
+
Dir.mkdir CR_DEFAULT_LIBRARY
|
51
100
|
end
|
52
101
|
|
53
|
-
!Dir.empty?
|
102
|
+
!Dir.empty? CR_DEFAULT_LIBRARY
|
54
103
|
end
|
55
104
|
|
56
105
|
|
57
106
|
def add_default_dicts_if_none_exists
|
58
107
|
unless is_there_any_dict?
|
59
|
-
puts "cr: Adding default
|
108
|
+
puts "cr: Adding default dicts..."
|
60
109
|
|
61
110
|
begin
|
62
111
|
if RUBY_PLATFORM.include? "mingw"
|
63
112
|
# Windows doesn't have fork
|
64
|
-
|
65
|
-
puts "cr: Pulling
|
66
|
-
`git -C #{
|
113
|
+
CR_DEFAULT_DICTS_USER_AND_NAMES.each_with_index do |name, i|
|
114
|
+
puts "cr: Pulling #{name}..."
|
115
|
+
`git -C #{CR_DEFAULT_LIBRARY} clone #{CR_DEFAULT_DICTS[i]} -q`
|
67
116
|
end
|
68
117
|
else
|
69
|
-
# *nix
|
70
|
-
|
118
|
+
# *nix-like
|
119
|
+
CR_DEFAULT_DICTS_USER_AND_NAMES.each_with_index do |name, i|
|
71
120
|
fork do
|
72
|
-
puts "cr: Pulling
|
73
|
-
`git -C #{
|
121
|
+
puts "cr: Pulling #{name}..."
|
122
|
+
`git -C #{CR_DEFAULT_LIBRARY} clone #{CR_DEFAULT_DICTS[i]} -q`
|
74
123
|
end
|
75
124
|
end
|
76
125
|
Process.waitall
|
@@ -84,7 +133,7 @@ def add_default_dicts_if_none_exists
|
|
84
133
|
puts "cr: Add done"
|
85
134
|
word_count(p: false)
|
86
135
|
puts
|
87
|
-
puts "#{$
|
136
|
+
puts "#{$TwoLibWordCount} words added"
|
88
137
|
|
89
138
|
# Really added
|
90
139
|
return true
|
@@ -94,26 +143,27 @@ def add_default_dicts_if_none_exists
|
|
94
143
|
end
|
95
144
|
|
96
145
|
|
146
|
+
# Notice that we only update the Default library, not Extra library
|
97
147
|
def update_dicts()
|
98
148
|
return if add_default_dicts_if_none_exists
|
99
149
|
|
100
150
|
word_count(p: false)
|
101
|
-
old_wc =
|
151
|
+
old_wc = $DefaultLibWordCount
|
102
152
|
|
103
|
-
puts "cr: Updating all
|
153
|
+
puts "cr: Updating all dicts in Default library..."
|
104
154
|
|
105
155
|
begin
|
106
|
-
Dir.chdir
|
156
|
+
Dir.chdir CR_DEFAULT_LIBRARY do
|
107
157
|
|
108
158
|
if RUBY_PLATFORM.include? "mingw"
|
109
159
|
# Windows doesn't have fork
|
110
|
-
Dir.children(
|
160
|
+
Dir.children(CR_DEFAULT_LIBRARY).each do |dict|
|
111
161
|
puts "cr: Wait to update #{dict}..."
|
112
162
|
`git -C ./#{dict} pull -q`
|
113
163
|
end
|
114
164
|
else
|
115
165
|
# *nix
|
116
|
-
Dir.children(
|
166
|
+
Dir.children(CR_DEFAULT_LIBRARY).each do |dict|
|
117
167
|
fork do
|
118
168
|
puts "cr: Wait to update #{dict}..."
|
119
169
|
`git -C ./#{dict} pull -q`
|
@@ -129,21 +179,17 @@ def update_dicts()
|
|
129
179
|
exit 1
|
130
180
|
end
|
131
181
|
|
132
|
-
|
133
182
|
puts "cr: Update done"
|
134
183
|
|
135
184
|
# clear
|
136
|
-
$
|
185
|
+
$DefaultLibWordCount = 0
|
137
186
|
# recount
|
138
187
|
word_count(p: false)
|
139
|
-
|
140
|
-
|
141
|
-
new_wc.each_with_index do
|
142
|
-
diff[_2] = _1 - old_wc[_2]
|
143
|
-
end
|
188
|
+
|
189
|
+
new_wc = $DefaultLibWordCount
|
144
190
|
|
145
191
|
puts
|
146
|
-
puts "#{
|
192
|
+
puts "#{new_wc - old_wc} words added in Default library"
|
147
193
|
|
148
194
|
end
|
149
195
|
|
@@ -155,16 +201,20 @@ def add_dict(repo)
|
|
155
201
|
end
|
156
202
|
|
157
203
|
# Ensure the cr home dir exists
|
158
|
-
FileUtils.mkdir_p(
|
204
|
+
FileUtils.mkdir_p(CR_DEFAULT_LIBRARY)
|
159
205
|
|
160
206
|
# Simplify adding dictionary
|
161
207
|
if !repo.start_with?("https://") and !repo.start_with?("git@")
|
162
|
-
|
208
|
+
if repo.include?('/')
|
209
|
+
repo = "https://github.com/#{repo}.git"
|
210
|
+
else
|
211
|
+
repo = "https://github.com/cryptic-resolver/cryptic_#{repo}.git"
|
212
|
+
end
|
163
213
|
end
|
164
214
|
|
165
215
|
begin
|
166
216
|
puts "cr: Adding new dictionary..."
|
167
|
-
`git -C #{
|
217
|
+
`git -C #{CR_DEFAULT_LIBRARY} clone #{repo} -q`
|
168
218
|
rescue Interrupt
|
169
219
|
puts "cr: Cancel add dict"
|
170
220
|
exit 1
|
@@ -176,7 +226,7 @@ def add_dict(repo)
|
|
176
226
|
dict = repo.split('/')[-1].delete_suffix('.git')
|
177
227
|
count_dict_words(dict)
|
178
228
|
puts
|
179
|
-
puts "#$
|
229
|
+
puts "#$TwoLibWordCount words added"
|
180
230
|
|
181
231
|
end
|
182
232
|
|
@@ -186,7 +236,7 @@ def del_dict(repo)
|
|
186
236
|
puts bold(red("cr: Need an argument!"))
|
187
237
|
exit -1
|
188
238
|
end
|
189
|
-
Dir.chdir
|
239
|
+
Dir.chdir CR_DEFAULT_LIBRARY do
|
190
240
|
begin
|
191
241
|
# Dir.rmdir repo # Can't rm a filled dir
|
192
242
|
# FileUtils.rmdir repo # Can't rm a filled dir
|
@@ -194,14 +244,14 @@ def del_dict(repo)
|
|
194
244
|
puts "cr: Delete dictionary #{bold(green(repo))} done"
|
195
245
|
rescue Exception => e
|
196
246
|
puts bold(red("cr: #{e}"))
|
197
|
-
|
247
|
+
list_dicts
|
198
248
|
end
|
199
249
|
end
|
200
250
|
end
|
201
251
|
|
202
252
|
|
203
|
-
def load_sheet(dict, sheet_name)
|
204
|
-
file =
|
253
|
+
def load_sheet(library, dict, sheet_name)
|
254
|
+
file = library + "/#{dict}/#{sheet_name}.toml"
|
205
255
|
|
206
256
|
if File.exist? file
|
207
257
|
return Tomlrb.load_file file # gem 'tomlrb'
|
@@ -251,7 +301,7 @@ def pp_info(info)
|
|
251
301
|
puts
|
252
302
|
end
|
253
303
|
|
254
|
-
# Print default cryptic_
|
304
|
+
# Print default cryptic_ dicts
|
255
305
|
def pp_dict(dict)
|
256
306
|
puts green("From: #{dict}")
|
257
307
|
end
|
@@ -272,14 +322,14 @@ end
|
|
272
322
|
# # category
|
273
323
|
#
|
274
324
|
# [blah]
|
275
|
-
# same = "XDG downloader
|
325
|
+
# same = "XDG downloader =>xdg.Download" # this is correct
|
276
326
|
#
|
277
327
|
# [blah]
|
278
328
|
# name = "BlaH" # You may want to display a better name first
|
279
|
-
# same = "XDG downloader
|
329
|
+
# same = "XDG downloader =>xdg.Download" # this is correct
|
280
330
|
#
|
281
331
|
#
|
282
|
-
def pp_same_info(dict, word, cache_content, same_key, own_name)
|
332
|
+
def pp_same_info(library, dict, word, cache_content, same_key, own_name)
|
283
333
|
|
284
334
|
# If it's a synonym for anther word,
|
285
335
|
# we should lookup into this dict again, but maybe with a different file
|
@@ -298,13 +348,13 @@ def pp_same_info(dict, word, cache_content, same_key, own_name)
|
|
298
348
|
#
|
299
349
|
# 'jump to' will output to user, so this is important not only inside our sheet.
|
300
350
|
#
|
301
|
-
# same = "XDM downloader
|
351
|
+
# same = "XDM downloader=>xdm.Download"
|
302
352
|
#
|
303
|
-
# We split 'same' key into two parts via spaceship symbol
|
353
|
+
# We split 'same' key into two parts via spaceship symbol `=>`, first part will
|
304
354
|
# output to user, the second part is for internal jump.
|
305
355
|
#
|
306
356
|
|
307
|
-
jump_to, same = same_key.split("
|
357
|
+
jump_to, same = same_key.split("=>")
|
308
358
|
same = jump_to if same.nil?
|
309
359
|
|
310
360
|
unless own_name
|
@@ -336,7 +386,7 @@ def pp_same_info(dict, word, cache_content, same_key, own_name)
|
|
336
386
|
# No need to load another dictionary if match
|
337
387
|
sheet_content = cache_content
|
338
388
|
else
|
339
|
-
sheet_content = load_sheet(dict, same.chr.downcase)
|
389
|
+
sheet_content = load_sheet(library, dict, same.chr.downcase)
|
340
390
|
end
|
341
391
|
|
342
392
|
if category.nil?
|
@@ -353,7 +403,7 @@ def pp_same_info(dict, word, cache_content, same_key, own_name)
|
|
353
403
|
# double or more jumps
|
354
404
|
elsif same_key = info['same']
|
355
405
|
own_name = info['name']
|
356
|
-
return pp_same_info(dict, same, cache_content, same_key, own_name)
|
406
|
+
return pp_same_info(library, dict, same, cache_content, same_key, own_name)
|
357
407
|
else
|
358
408
|
pp_info(info)
|
359
409
|
return true
|
@@ -375,8 +425,8 @@ end
|
|
375
425
|
# 2.2 with category specifier
|
376
426
|
# [abcd.tYPe]
|
377
427
|
#
|
378
|
-
def lookup(dict, file, word)
|
379
|
-
sheet_content = load_sheet(dict, file)
|
428
|
+
def lookup(library, dict, file, word)
|
429
|
+
sheet_content = load_sheet(library, dict, file)
|
380
430
|
return false if sheet_content.nil?
|
381
431
|
|
382
432
|
info = sheet_content[word]
|
@@ -391,7 +441,6 @@ def lookup(dict, file, word)
|
|
391
441
|
end
|
392
442
|
|
393
443
|
|
394
|
-
|
395
444
|
# Word with no category specifier
|
396
445
|
# We call this meaning as type 1
|
397
446
|
type_1_exist_flag = false
|
@@ -403,7 +452,7 @@ def lookup(dict, file, word)
|
|
403
452
|
if same_key = info['same']
|
404
453
|
own_name = info['name']
|
405
454
|
pp_dict(dict)
|
406
|
-
pp_same_info(dict, word, sheet_content, same_key, own_name)
|
455
|
+
pp_same_info(library, dict, word, sheet_content, same_key, own_name)
|
407
456
|
# It's also a type 1
|
408
457
|
type_1_exist_flag = true
|
409
458
|
is_jump = true
|
@@ -440,7 +489,7 @@ def lookup(dict, file, word)
|
|
440
489
|
info0 = sheet_content[word][meaning]
|
441
490
|
if same_key = info0['same']
|
442
491
|
own_name = info0['name']
|
443
|
-
pp_same_info(dict, word, sheet_content, same_key, own_name)
|
492
|
+
pp_same_info(library, dict, word, sheet_content, same_key, own_name)
|
444
493
|
else
|
445
494
|
pp_info(info0)
|
446
495
|
end
|
@@ -459,15 +508,16 @@ end
|
|
459
508
|
|
460
509
|
#
|
461
510
|
# The main procedure of `cr`
|
462
|
-
#
|
463
|
-
#
|
511
|
+
#
|
512
|
+
# 1. Search the default library first
|
513
|
+
# 2. Search the extra library if it does exist
|
464
514
|
#
|
465
515
|
# The `search` is done via the `lookup` function. It will print
|
466
516
|
# the info while finding. If `lookup` always return false then
|
467
|
-
# means lacking of this word in our
|
517
|
+
# means lacking of this word in our dicts. So a welcomed
|
468
518
|
# contribution is printed on the screen.
|
469
519
|
#
|
470
|
-
def
|
520
|
+
def resolve_word(word)
|
471
521
|
|
472
522
|
add_default_dicts_if_none_exists
|
473
523
|
|
@@ -476,23 +526,24 @@ def solve_word(word)
|
|
476
526
|
index = word.chr
|
477
527
|
case index
|
478
528
|
when '0'..'9'
|
479
|
-
index = '
|
529
|
+
index = '0-9'
|
480
530
|
end
|
481
|
-
|
482
|
-
# Default's first should be 1st to consider
|
483
|
-
first_dict = "cryptic_" + CRYPTIC_DEFAULT_DICTS.keys[0].to_s # When Ruby3, We can use DICTS.key(0)
|
484
531
|
|
485
|
-
# cache lookup results
|
532
|
+
# cache lookup's results
|
486
533
|
results = []
|
487
|
-
|
488
|
-
#
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
534
|
+
|
535
|
+
# First consider the default library
|
536
|
+
default = Dir.children(CR_DEFAULT_LIBRARY)
|
537
|
+
default.each do |dict|
|
538
|
+
results << lookup(CR_DEFAULT_LIBRARY,dict,index,word)
|
539
|
+
end
|
540
|
+
|
541
|
+
# Then is the extra library
|
542
|
+
if CR_EXTRA_LIBRARY
|
543
|
+
extra = Dir.children(CR_EXTRA_LIBRARY)
|
544
|
+
extra.each do |dict|
|
545
|
+
results << lookup(CR_EXTRA_LIBRARY,dict,index,word)
|
546
|
+
end
|
496
547
|
end
|
497
548
|
|
498
549
|
unless results.include? true
|
@@ -518,7 +569,7 @@ end
|
|
518
569
|
|
519
570
|
|
520
571
|
#
|
521
|
-
#
|
572
|
+
# This `search_word` routine is quite like `resolve_word`
|
522
573
|
# Notice:
|
523
574
|
# We handle two cases
|
524
575
|
#
|
@@ -545,10 +596,10 @@ def search_word(pattern)
|
|
545
596
|
found = false
|
546
597
|
|
547
598
|
#
|
548
|
-
# Try to match every word in all
|
599
|
+
# Try to match every word in all dicts
|
549
600
|
#
|
550
|
-
Dir.children(
|
551
|
-
sheets = Dir.children(File.join(
|
601
|
+
Dir.children(CR_DEFAULT_LIBRARY).each do |dict|
|
602
|
+
sheets = Dir.children(File.join(CR_DEFAULT_LIBRARY, dict)).select do
|
552
603
|
_1.end_with?('.toml')
|
553
604
|
end
|
554
605
|
|
@@ -584,19 +635,21 @@ end
|
|
584
635
|
|
585
636
|
def help
|
586
637
|
word_count(p: false)
|
587
|
-
user_words = $WordCount - $DefaultWordCount
|
588
638
|
puts <<-HELP
|
589
|
-
cr: Cryptic Resolver v#{CR_GEM_VERSION} (#{$
|
639
|
+
cr: Cryptic Resolver v#{CR_GEM_VERSION} (#{$TwoLibWordCount} words: Default lib/#{$DefaultLibWordCount} && Extra lib/#{$ExtraLibWordCount})
|
590
640
|
|
591
|
-
|
641
|
+
Usage:
|
592
642
|
|
593
|
-
cr emacs => Edit macros:
|
643
|
+
cr emacs => Edit macros: A feature-rich editor
|
594
644
|
cr -c => Print word count
|
595
|
-
cr -l => List local
|
596
|
-
cr -u => Update all
|
597
|
-
|
598
|
-
cr -a
|
599
|
-
cr -
|
645
|
+
cr -l => List local dicts and official dicts
|
646
|
+
cr -u => Update all dicts in default library
|
647
|
+
|
648
|
+
cr -a repo.git => Add a new dict
|
649
|
+
cr -a user/repo => Add a new dict from Github
|
650
|
+
cr -a reponame => Add an official dict from Github
|
651
|
+
|
652
|
+
cr -d cryptic_xx => Delete a dict
|
600
653
|
cr -s pattern => Search words matched with pattern
|
601
654
|
cr -v => Print version
|
602
655
|
cr -h => Print this help
|
@@ -613,91 +666,98 @@ def print_version
|
|
613
666
|
end
|
614
667
|
|
615
668
|
|
616
|
-
|
617
|
-
|
618
|
-
|
669
|
+
#
|
670
|
+
# 1. List Default library's dicts
|
671
|
+
# 2. List Extra library's dicts
|
672
|
+
# 3. List official dicts
|
673
|
+
#
|
674
|
+
def list_dicts
|
675
|
+
Dir.chdir CR_DEFAULT_LIBRARY do
|
676
|
+
puts blue("=> Default library: #{CR_DEFAULT_LIBRARY}")
|
677
|
+
Dir.children(CR_DEFAULT_LIBRARY).each_with_index do |dict,i|
|
619
678
|
puts "#{blue(i+1)}. #{bold(green(dict))}"
|
620
679
|
end
|
621
680
|
end
|
681
|
+
|
682
|
+
if CR_EXTRA_LIBRARY
|
683
|
+
puts
|
684
|
+
Dir.chdir CR_EXTRA_LIBRARY do
|
685
|
+
puts blue("=> Extra library: #{CR_EXTRA_LIBRARY}")
|
686
|
+
Dir.children(CR_EXTRA_LIBRARY).each_with_index do |dict,i|
|
687
|
+
puts "#{blue(i+1)}. #{bold(green(dict))}"
|
688
|
+
end
|
689
|
+
end
|
690
|
+
end
|
691
|
+
|
692
|
+
puts
|
693
|
+
puts blue("=> Official dicts: (Add it by 'cr -a xxx')")
|
694
|
+
puts CR_OFFICIAL_DICTS
|
695
|
+
|
622
696
|
end
|
623
697
|
|
624
698
|
|
625
|
-
#
|
626
|
-
$
|
627
|
-
# Default
|
628
|
-
$
|
699
|
+
# Two libraries word count (Default library + Extra library)
|
700
|
+
$TwoLibWordCount = 0
|
701
|
+
# Default library word count
|
702
|
+
$DefaultLibWordCount = 0
|
703
|
+
# Extra library word count
|
704
|
+
$ExtraLibWordCount = 0
|
629
705
|
|
630
|
-
def count_dict_words(dict)
|
706
|
+
def count_dict_words(library, dict)
|
631
707
|
|
632
|
-
dict_dir =
|
708
|
+
dict_dir = library + "/#{dict}"
|
633
709
|
|
634
710
|
wc = 0
|
635
711
|
|
636
712
|
Dir.children(dict_dir).each do |entry|
|
637
713
|
next unless entry.end_with?('.toml')
|
638
|
-
sheet_content = load_sheet(dict, entry.delete_suffix('.toml'))
|
714
|
+
sheet_content = load_sheet(library, dict, entry.delete_suffix('.toml'))
|
639
715
|
count = sheet_content.keys.count
|
640
|
-
|
641
|
-
# puts "#{entry}: #{count}"
|
716
|
+
|
642
717
|
wc = wc + count
|
643
718
|
end
|
644
|
-
|
645
|
-
$WordCount += wc
|
646
|
-
|
647
719
|
return wc
|
648
|
-
|
649
720
|
end
|
650
721
|
|
651
722
|
|
652
723
|
def word_count(p:)
|
653
|
-
|
654
724
|
# Always check before Dir.children (this method creates dir if not exists)
|
655
725
|
is_there_any_dict?
|
656
726
|
|
657
|
-
|
658
|
-
locals = []
|
659
|
-
Dir.children(CRYPTIC_RESOLVER_HOME).each do |dict|
|
660
|
-
locals << dict
|
661
|
-
end
|
727
|
+
default_lib = Dir.children(CR_DEFAULT_LIBRARY)
|
662
728
|
|
663
|
-
#
|
664
|
-
|
665
|
-
"
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
defaults &= locals
|
670
|
-
|
671
|
-
unless defaults.empty?
|
672
|
-
puts(bold(green("Default dicts: "))) if p
|
673
|
-
defaults.each do |s|
|
674
|
-
wc = count_dict_words(s)
|
675
|
-
$DefaultWordCount += wc
|
729
|
+
# Count default library
|
730
|
+
unless default_lib.empty?
|
731
|
+
puts(bold(green("Default library: "))) if p
|
732
|
+
default_lib.each do |s|
|
733
|
+
wc = count_dict_words(CR_DEFAULT_LIBRARY,s)
|
734
|
+
$DefaultLibWordCount += wc
|
676
735
|
# With color, ljust not works, so we disable color
|
677
736
|
puts(" #{s.ljust(17)}: #{wc}") if p
|
678
737
|
end
|
679
738
|
end
|
680
739
|
|
681
|
-
users = locals - defaults
|
682
|
-
user_words = 0
|
683
|
-
unless users.empty?
|
684
|
-
wc = 0
|
685
|
-
puts(bold(blue("\nUser's dict:"))) if p
|
686
|
-
users.each do |s|
|
687
|
-
wc = count_dict_words(s)
|
688
|
-
# no need to add to $WordCount,
|
689
|
-
# because it's done in `count_dict_words` func
|
690
|
-
puts(" #{s.ljust(17)}: #{wc}") if p
|
691
|
-
end
|
692
740
|
|
693
|
-
|
741
|
+
if CR_EXTRA_LIBRARY
|
742
|
+
extra_lib = Dir.children(CR_EXTRA_LIBRARY)
|
743
|
+
# Count extra library
|
744
|
+
unless extra_lib.empty?
|
745
|
+
wc = 0
|
746
|
+
puts(bold(blue("\nExtra library:"))) if p
|
747
|
+
extra_lib.each do |s|
|
748
|
+
wc = count_dict_words(CR_EXTRA_LIBRARY,s)
|
749
|
+
$ExtraLibWordCount += wc
|
750
|
+
puts(" #{s.ljust(17)}: #{wc}") if p
|
751
|
+
end
|
752
|
+
end
|
694
753
|
end
|
754
|
+
$TwoLibWordCount = $DefaultLibWordCount + $ExtraLibWordCount
|
695
755
|
|
696
756
|
if p
|
697
757
|
puts
|
698
|
-
puts "#{$
|
699
|
-
puts "#{
|
700
|
-
puts "#{$
|
758
|
+
puts "#{$DefaultLibWordCount.to_s.rjust(4)} words in Default library"
|
759
|
+
puts "#{$ExtraLibWordCount.to_s.rjust(4) } words in Extra library"
|
760
|
+
puts "#{$TwoLibWordCount.to_s.rjust(4) } words altogether"
|
701
761
|
end
|
702
762
|
end
|
703
763
|
|
@@ -711,7 +771,7 @@ case arg
|
|
711
771
|
when nil then help
|
712
772
|
when '-v' then print_version
|
713
773
|
when '-h' then help
|
714
|
-
when '-l' then
|
774
|
+
when '-l' then list_dicts
|
715
775
|
when '-c' then word_count(p: true)
|
716
776
|
when '-u' then update_dicts
|
717
777
|
when '-s' then search_word ARGV.shift
|
@@ -720,6 +780,6 @@ when '-d' then del_dict ARGV.shift
|
|
720
780
|
when '--help'
|
721
781
|
help
|
722
782
|
else
|
723
|
-
|
783
|
+
resolve_word arg
|
724
784
|
end
|
725
785
|
|
data/lib/cr.rb
CHANGED
@@ -2,12 +2,27 @@
|
|
2
2
|
# File : cr.rb
|
3
3
|
# Authors : ccmywish <ccmywish@qq.com>
|
4
4
|
# Created on : <2022-04-15>
|
5
|
-
# Last modified : <2022-
|
5
|
+
# Last modified : <2022-11-27>
|
6
6
|
#
|
7
7
|
# cr:
|
8
8
|
#
|
9
|
-
# This file is
|
9
|
+
# This file is the lib of `cr.rb``
|
10
10
|
#
|
11
11
|
# ------------------------------------------------------
|
12
12
|
|
13
|
-
CR_GEM_VERSION = "
|
13
|
+
CR_GEM_VERSION = "4.0.0.RC.1"
|
14
|
+
|
15
|
+
|
16
|
+
CR_OFFICIAL_DICTS = <<-EOF
|
17
|
+
Default:
|
18
|
+
common computer windows
|
19
|
+
linux electronics
|
20
|
+
|
21
|
+
Field:
|
22
|
+
economy medicine math
|
23
|
+
mechanical science
|
24
|
+
|
25
|
+
Specific:
|
26
|
+
dos x86 signal
|
27
|
+
|
28
|
+
EOF
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cr.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0.RC.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ccmywish
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tomlrb
|
@@ -66,9 +66,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
66
66
|
version: '0'
|
67
67
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
|
-
- - "
|
69
|
+
- - ">"
|
70
70
|
- !ruby/object:Gem::Version
|
71
|
-
version:
|
71
|
+
version: 1.3.1
|
72
72
|
requirements: []
|
73
73
|
rubygems_version: 3.3.7
|
74
74
|
signing_key:
|