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