ecdict 1.2.alpha → 1.2.alpha4
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/ecdict +65 -58
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8bbfbe1dbd141fc1eecda848fa890fd0e4d85001a6d8e090ca735203786b7dd
|
4
|
+
data.tar.gz: c499d33a61ff61d7000538043fcf6691dd34310ccf5076e45c0e4054367708c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8e94e4a5dd550cf36dc3e7820b7920c8b45a743a493ff10e1a68e7940d7a536a53078416efe9a984c7aaadb20e1ffc98414c9474d88bf584ccd48bb4e30167c
|
7
|
+
data.tar.gz: cf720681affcbf4a6233bcb04f5bfd8d036a91133b06d73b0f4c4f4a79f96b350f8fc76189dce4cbecf042595d6f89130cd7a97bc43ed94f4ad0e295d7ac4034
|
data/bin/ecdict
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# File : ecdict.rb
|
4
4
|
# Authors : ccmywish <ccmywish@qq.com>
|
5
5
|
# Created on : <2020-10-18>
|
6
|
-
# Last modified : <2022-03-
|
6
|
+
# Last modified : <2022-03-24>
|
7
7
|
#
|
8
8
|
# ecdict:
|
9
9
|
#
|
@@ -15,6 +15,12 @@
|
|
15
15
|
# 1. ecdict installer
|
16
16
|
# 2. ecdict cmd
|
17
17
|
# 3. ecdict repl
|
18
|
+
#
|
19
|
+
# Exit -1: 下载原始数据失败
|
20
|
+
# Exit -2: 解压原始数据至CSV失败
|
21
|
+
# EXit -3: 从CSV生成数据库失败
|
22
|
+
# Exit 1: 无词典
|
23
|
+
# Exit 2: 缺少参数
|
18
24
|
# ------------------------------------------------------
|
19
25
|
|
20
26
|
require 'sqlite3'
|
@@ -24,14 +30,13 @@ ECDictRAWDATA = File.join(ECDICT_STORAGE, 'ecdict-csv.7z')
|
|
24
30
|
ECDictDB = File.join(ECDICT_STORAGE, 'ecdict.db')
|
25
31
|
ECDictCSV = File.join(ECDICT_STORAGE, 'ecdict.csv')
|
26
32
|
|
27
|
-
ECDICT_GEM_VERSION = "1.2.
|
33
|
+
ECDICT_GEM_VERSION = "1.2.alpha4"
|
28
34
|
|
29
35
|
# 这个版本是我从上游下载的CSV后自己压缩的
|
30
36
|
# 这个文件的实际创建日期(上游作者创建)是2017/06/04
|
31
37
|
# 至2022/03/22,未见更新,估计以后上游维护这个词典的也不会经常更新
|
32
38
|
# 而340万的单词量已经足够,因此我们可以足够长的时间一直停留在此词典版本
|
33
|
-
|
34
|
-
ECDICT_DICT_DOWNLOAD_LINK = "https://gitee.com/ccmywish/ecdict/attach_files/1004013/download/ecdict-csv.7z"
|
39
|
+
ECDICT_DICT_DOWNLOAD_LINK = "https://gitee.com/ccmywish/ecdict-data"
|
35
40
|
ECDICT_DICT_SHA256 = "86782a0e5d05486b482be5a2e5fa99b1a9b2ae51240c853ecfe181886133818a"
|
36
41
|
|
37
42
|
|
@@ -39,6 +44,16 @@ require 'fileutils'
|
|
39
44
|
FileUtils.mkdir_p(ECDICT_STORAGE)
|
40
45
|
$DB = SQLite3::Database.new ECDictDB
|
41
46
|
|
47
|
+
def db_close
|
48
|
+
$DB.close if $DB
|
49
|
+
end
|
50
|
+
|
51
|
+
def db_close_and_exit(num = 0)
|
52
|
+
db_close
|
53
|
+
exit num
|
54
|
+
end
|
55
|
+
|
56
|
+
|
42
57
|
|
43
58
|
####################
|
44
59
|
# helper: for color
|
@@ -66,8 +81,7 @@ def cyan(str) "\e[36m#{str}\e[0m" end
|
|
66
81
|
|
67
82
|
def check_download_integrity
|
68
83
|
require 'digest'
|
69
|
-
|
70
|
-
sha256 = Digest::SHA256.hexdigest(cont)
|
84
|
+
sha256 = Digest::SHA256.file(ECDictRAWDATA).hexdigest
|
71
85
|
if ECDICT_DICT_SHA256 == sha256
|
72
86
|
true
|
73
87
|
else
|
@@ -88,13 +102,13 @@ def download_ecdict_data
|
|
88
102
|
end
|
89
103
|
|
90
104
|
begin
|
91
|
-
puts "=>
|
92
|
-
|
93
|
-
|
94
|
-
raise "
|
105
|
+
puts "=> 使用Git从#{ECDICT_DICT_DOWNLOAD_LINK}获取原始数据库文件"
|
106
|
+
system("git -C #{ECDICT_STORAGE} clone #{ECDICT_DICT_DOWNLOAD_LINK} ")
|
107
|
+
FileUtils.cp(File.join(ECDICT_STORAGE, 'ecdict-data', 'ecdict-csv.7z'), ECDICT_STORAGE)
|
108
|
+
raise "Git拉取仓库数据不完整!" if !check_download_integrity
|
95
109
|
rescue StandardError => e
|
96
110
|
puts "=> #{e.message}"
|
97
|
-
puts "=>
|
111
|
+
puts "=> Git获取原始数据库文件失败"
|
98
112
|
FileUtils.rm(ECDictRAWDATA)
|
99
113
|
else
|
100
114
|
puts "=> 下载完成!"
|
@@ -154,9 +168,6 @@ end
|
|
154
168
|
# 2. create table in the db
|
155
169
|
# 3. insert data from CSV into the table
|
156
170
|
#
|
157
|
-
# exit 1 : create db failed
|
158
|
-
# exit 2 : insert data failed
|
159
|
-
#
|
160
171
|
def generate_sqlite_db()
|
161
172
|
|
162
173
|
# SQLite3::Database.new已经生成了该文件,所以需要提前判断到底是否存在
|
@@ -173,9 +184,6 @@ def generate_sqlite_db()
|
|
173
184
|
end
|
174
185
|
end
|
175
186
|
|
176
|
-
def db_close
|
177
|
-
$DB.close if $DB
|
178
|
-
end
|
179
187
|
|
180
188
|
# 共15个字段,存的时候只需要14个
|
181
189
|
# 1.id 主键,自增
|
@@ -227,7 +235,7 @@ EOF
|
|
227
235
|
puts "=> 创建数据库文件#{ECDictDB}失败,或表`ecdict`生成失败"
|
228
236
|
db_close
|
229
237
|
File.delete(ECDictDB)
|
230
|
-
|
238
|
+
return false
|
231
239
|
end
|
232
240
|
|
233
241
|
|
@@ -290,13 +298,14 @@ EOF
|
|
290
298
|
rescue Exception => e
|
291
299
|
puts "=> #{e.message}"
|
292
300
|
puts "=> 数据库插入信息失败"
|
293
|
-
File.delete(ECDictDB)
|
294
301
|
db_close
|
295
|
-
|
302
|
+
File.delete(ECDictDB)
|
303
|
+
return false
|
296
304
|
end
|
297
305
|
puts
|
298
306
|
puts "=> 数据库#{ECDictDB}已完整生成"
|
299
307
|
db_close
|
308
|
+
return true
|
300
309
|
end
|
301
310
|
|
302
311
|
|
@@ -305,9 +314,11 @@ def download_and_install_ecdict_data
|
|
305
314
|
decompress_7z_to_csv || ( puts("\e[31m=> 解压失败,安装取消!\e[0m") || exit(-2) )
|
306
315
|
generate_sqlite_db || ( puts("\e[31m=> 生成数据库失败,安装取消!\e[0m") || exit(-3) )
|
307
316
|
puts
|
308
|
-
puts "
|
309
|
-
puts "
|
310
|
-
puts "
|
317
|
+
puts "Hooray! 词典数据下载安装完成! 请尝试使用:\n\n"
|
318
|
+
puts " 1. ecdict word 查询单词 "
|
319
|
+
puts " 2. ecdict -r 进入交互式查询REPL"
|
320
|
+
puts " 3. ecdict -c 中文 搜索中文单词"
|
321
|
+
puts " 4. ecdict -cp 中文 搜索中文短语"
|
311
322
|
puts
|
312
323
|
end
|
313
324
|
|
@@ -328,8 +339,8 @@ end
|
|
328
339
|
def reply_once(query)
|
329
340
|
|
330
341
|
if !check_db_integrity
|
331
|
-
puts "
|
332
|
-
|
342
|
+
puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
|
343
|
+
db_close_and_exit(1)
|
333
344
|
end
|
334
345
|
|
335
346
|
tables = []
|
@@ -348,8 +359,9 @@ def reply_once(query)
|
|
348
359
|
end
|
349
360
|
|
350
361
|
if rows.empty?
|
351
|
-
puts "ecdict: 未找到结果,请检查单词拼写是否正确"
|
352
|
-
|
362
|
+
puts "ecdict: 未找到结果,请检查单词拼写是否正确"
|
363
|
+
db_close
|
364
|
+
return
|
353
365
|
else
|
354
366
|
line = rows[0]
|
355
367
|
phonetic,trans,definition,exchange = line[0],line[1],line[2],line[3]
|
@@ -394,12 +406,12 @@ end
|
|
394
406
|
def chinese_search(cn_word, support_phrase: false)
|
395
407
|
|
396
408
|
if cn_word.empty?
|
397
|
-
puts "ecdict: 请输入要查询的中文,或使用`ecdict -h`查看帮助"
|
398
|
-
|
409
|
+
puts "ecdict: 请输入要查询的中文,或使用`ecdict -h`查看帮助"
|
410
|
+
db_close_and_exit(2)
|
399
411
|
end
|
400
412
|
if !check_db_integrity
|
401
|
-
puts "=> 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
|
402
|
-
|
413
|
+
puts "=> 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
|
414
|
+
db_close_and_exit(1)
|
403
415
|
end
|
404
416
|
|
405
417
|
if support_phrase
|
@@ -419,8 +431,9 @@ def chinese_search(cn_word, support_phrase: false)
|
|
419
431
|
end
|
420
432
|
end
|
421
433
|
if rows.empty?
|
422
|
-
puts "ecdict: 未找到相关英文,请不要输入中文短语或短句,仅支持词的搜索"
|
423
|
-
|
434
|
+
puts "ecdict: 未找到相关英文,请不要输入中文短语或短句,仅支持词的搜索"
|
435
|
+
db_close
|
436
|
+
return
|
424
437
|
else
|
425
438
|
# 有的时候并不是没有结果,而是被我们过滤掉了,对此确认一下
|
426
439
|
found_a_word = false
|
@@ -542,13 +555,8 @@ end
|
|
542
555
|
def start_ecrepl
|
543
556
|
|
544
557
|
if !check_db_integrity
|
545
|
-
puts "
|
546
|
-
|
547
|
-
end
|
548
|
-
|
549
|
-
def db_close_and_exit
|
550
|
-
$DB.close if $DB
|
551
|
-
exit 0
|
558
|
+
puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
|
559
|
+
db_close_and_exit(1)
|
552
560
|
end
|
553
561
|
|
554
562
|
begin
|
@@ -606,7 +614,8 @@ def start_ecrepl
|
|
606
614
|
while line = Reline.readline("\e[32mecdict> \e[0m", true)
|
607
615
|
case word = line.chomp
|
608
616
|
when 'exit'
|
609
|
-
|
617
|
+
db_close
|
618
|
+
return
|
610
619
|
when ''
|
611
620
|
# NOOP
|
612
621
|
else
|
@@ -616,7 +625,8 @@ def start_ecrepl
|
|
616
625
|
rescue Interrupt
|
617
626
|
puts '^C'
|
618
627
|
`stty #{stty_save}` if stty_save
|
619
|
-
|
628
|
+
db_close
|
629
|
+
return
|
620
630
|
end
|
621
631
|
|
622
632
|
end
|
@@ -630,10 +640,10 @@ def delete_cache
|
|
630
640
|
begin
|
631
641
|
FileUtils.rm_rf(ECDICT_STORAGE)
|
632
642
|
rescue => e
|
633
|
-
puts "
|
634
|
-
puts "
|
643
|
+
puts "ecdict: #{e.message}"
|
644
|
+
puts "ecdict: 清空词典数据失败"
|
635
645
|
else
|
636
|
-
puts "
|
646
|
+
puts "ecdict: 清空词典数据完成"
|
637
647
|
end
|
638
648
|
puts
|
639
649
|
end
|
@@ -646,8 +656,6 @@ end
|
|
646
656
|
def print_version
|
647
657
|
puts <<EOH
|
648
658
|
ecdict (v#{ECDICT_GEM_VERSION}): A courteous cli translator.
|
649
|
-
|
650
|
-
|
651
659
|
EOH
|
652
660
|
|
653
661
|
end
|
@@ -659,14 +667,14 @@ ecdict (v#{ECDICT_GEM_VERSION}): A courteous cli translator.
|
|
659
667
|
|
660
668
|
usage:
|
661
669
|
|
662
|
-
ecdict word
|
663
|
-
ecdict -r
|
670
|
+
ecdict word => 查询单词 word
|
671
|
+
ecdict -r => 启动ecdict repl交互式查询,输入exit或Ctrl-C退出
|
664
672
|
ecdict -c 中文 => 搜索中文对应的英文单词
|
665
673
|
ecdict -cp 中文 => 搜索中文对应的英文单词以及短语(结果可能很多)
|
666
|
-
ecdict -i
|
667
|
-
ecdict -v
|
668
|
-
ecdict -h
|
669
|
-
ecdict -d
|
674
|
+
ecdict -i => 下载ecdict词典数据并安装
|
675
|
+
ecdict -v => 打印此Gem与词典版本号
|
676
|
+
ecdict -h => 打印此帮助
|
677
|
+
ecdict -d => 清空词典数据
|
670
678
|
|
671
679
|
EOH
|
672
680
|
|
@@ -679,11 +687,11 @@ end
|
|
679
687
|
|
680
688
|
if ARGV.empty?
|
681
689
|
if !check_db_integrity
|
682
|
-
puts "
|
683
|
-
|
690
|
+
puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
|
691
|
+
db_close_and_exit(1)
|
684
692
|
end
|
685
|
-
puts "ecdict: 请输入要查询的词/词组 或使用`ecdict -h`查看帮助"
|
686
|
-
|
693
|
+
puts "ecdict: 请输入要查询的词/词组 或使用`ecdict -h`查看帮助"
|
694
|
+
db_close_and_exit
|
687
695
|
end
|
688
696
|
|
689
697
|
query = ARGV.shift
|
@@ -698,4 +706,3 @@ when "-cp" then chinese_search(ARGV.join, support_phrase: true)
|
|
698
706
|
else
|
699
707
|
reply_once(query)
|
700
708
|
end
|
701
|
-
|