ecdict 1.2.alpha4 → 1.2.alpha5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/ecdict +69 -45
- 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: 5d3b7af98d6ca07e5b9228c8ed515af5250f194b74ff1b5b8a15cc4a53418d48
|
4
|
+
data.tar.gz: 0ac17588afaa66aaddc89b65a870ccebf7d8318dfdc8526f1d2ba804d4624897
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8e715abe0412e94f79739a43cbabd063211d50977c4d7d8dbb49851cdedfd51f9ab4847b91d046a817c64c240baff591a37fd00d7ea45ee13c119c9afce61c8
|
7
|
+
data.tar.gz: ab5ec984d53c633ce72f5a557e5f7f7aab91f395cf24d8706562bbeef5a4efd9d3c653879a28170a0b6ea1dc1b05c819022656e29b97c8977e734a5508940d0e
|
data/bin/ecdict
CHANGED
@@ -21,16 +21,19 @@
|
|
21
21
|
# EXit -3: 从CSV生成数据库失败
|
22
22
|
# Exit 1: 无词典
|
23
23
|
# Exit 2: 缺少参数
|
24
|
+
#
|
25
|
+
# 未搜索到结果并不认为是错误
|
24
26
|
# ------------------------------------------------------
|
25
27
|
|
26
28
|
require 'sqlite3'
|
27
29
|
|
28
|
-
ECDICT_STORAGE
|
29
|
-
|
30
|
+
ECDICT_STORAGE = File.expand_path("~/.local/share/ecdict")
|
31
|
+
ECDICT_RAW_DATA = File.join(ECDICT_STORAGE, 'ecdict-csv.7z')
|
32
|
+
|
30
33
|
ECDictDB = File.join(ECDICT_STORAGE, 'ecdict.db')
|
31
34
|
ECDictCSV = File.join(ECDICT_STORAGE, 'ecdict.csv')
|
32
35
|
|
33
|
-
ECDICT_GEM_VERSION = "1.2.
|
36
|
+
ECDICT_GEM_VERSION = "1.2.alpha5"
|
34
37
|
|
35
38
|
# 这个版本是我从上游下载的CSV后自己压缩的
|
36
39
|
# 这个文件的实际创建日期(上游作者创建)是2017/06/04
|
@@ -44,12 +47,12 @@ require 'fileutils'
|
|
44
47
|
FileUtils.mkdir_p(ECDICT_STORAGE)
|
45
48
|
$DB = SQLite3::Database.new ECDictDB
|
46
49
|
|
47
|
-
def
|
50
|
+
def close_db
|
48
51
|
$DB.close if $DB
|
49
52
|
end
|
50
53
|
|
51
|
-
def
|
52
|
-
|
54
|
+
def close_db_and_exit(num = 0)
|
55
|
+
close_db
|
53
56
|
exit num
|
54
57
|
end
|
55
58
|
|
@@ -81,7 +84,8 @@ def cyan(str) "\e[36m#{str}\e[0m" end
|
|
81
84
|
|
82
85
|
def check_download_integrity
|
83
86
|
require 'digest'
|
84
|
-
|
87
|
+
return false if !File.exists?(ECDICT_RAW_DATA)
|
88
|
+
sha256 = Digest::SHA256.file(ECDICT_RAW_DATA).hexdigest
|
85
89
|
if ECDICT_DICT_SHA256 == sha256
|
86
90
|
true
|
87
91
|
else
|
@@ -90,31 +94,47 @@ def check_download_integrity
|
|
90
94
|
end
|
91
95
|
|
92
96
|
|
93
|
-
def
|
97
|
+
def download_ecdict_raw_data
|
94
98
|
|
95
|
-
if File.exists?(
|
96
|
-
puts "=> 已存在原始数据文件#{
|
99
|
+
if File.exists?(ECDICT_RAW_DATA) && check_download_integrity
|
100
|
+
puts "=> 已存在原始数据文件#{ECDICT_RAW_DATA}, 无需再次下载"
|
97
101
|
else
|
98
102
|
|
99
|
-
if File.exists?(
|
100
|
-
puts "=>
|
101
|
-
FileUtils.rm
|
103
|
+
if File.exists?(ECDICT_RAW_DATA)
|
104
|
+
puts "=> 删除已存在但不完整的原始数据文件"
|
105
|
+
FileUtils.rm ECDICT_RAW_DATA
|
106
|
+
end
|
107
|
+
|
108
|
+
# 若已经有拉取的仓库,先检查里面的数据是否可用
|
109
|
+
raw_data_git_dir = File.join(ECDICT_STORAGE, 'ecdict-data')
|
110
|
+
raw_data_git_dir_data = File.join(raw_data_git_dir, 'ecdict-csv.7z')
|
111
|
+
|
112
|
+
if Dir.exists?(raw_data_git_dir)
|
113
|
+
if File.exists?(raw_data_git_dir_data)
|
114
|
+
FileUtils.cp(raw_data_git_dir_data, ECDICT_STORAGE)
|
115
|
+
if check_download_integrity
|
116
|
+
puts "=> 从已经Git pull到的仓库中获取原始数据文件"
|
117
|
+
return true
|
118
|
+
else
|
119
|
+
FileUtils.rm ECDICT_RAW_DATA
|
120
|
+
end
|
121
|
+
end
|
122
|
+
FileUtils.rm_rf(raw_data_git_dir)
|
102
123
|
end
|
103
124
|
|
104
125
|
begin
|
105
126
|
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
|
127
|
+
ret = system("git -C #{ECDICT_STORAGE} clone #{ECDICT_DICT_DOWNLOAD_LINK} ")
|
128
|
+
FileUtils.cp(File.join(ECDICT_STORAGE, 'ecdict-data', 'ecdict-csv.7z'), ECDICT_STORAGE) rescue nil
|
129
|
+
raise "Git拉取仓库过程失败,原始数据文件不完整!" if (ret != true || !check_download_integrity)
|
109
130
|
rescue StandardError => e
|
110
131
|
puts "=> #{e.message}"
|
111
|
-
|
112
|
-
|
132
|
+
FileUtils.rm(ECDICT_RAW_DATA) rescue nil
|
133
|
+
return false
|
113
134
|
else
|
114
135
|
puts "=> 下载完成!"
|
115
136
|
end
|
116
137
|
end
|
117
|
-
|
118
138
|
true
|
119
139
|
end
|
120
140
|
|
@@ -134,12 +154,12 @@ def decompress_7z_to_csv()
|
|
134
154
|
end
|
135
155
|
|
136
156
|
|
137
|
-
File.open(
|
138
|
-
puts "=> 正在解压ecdict-csv.7z(#{file.size/1024/1024}MB)"
|
157
|
+
File.open(ECDICT_RAW_DATA, "rb") do |file|
|
158
|
+
puts "=> 正在解压ecdict-csv.7z(#{ '%.2f' % (file.size/1024.0/1024) }MB)"
|
139
159
|
SevenZipRuby::Reader.extract_all(file, ECDICT_STORAGE)
|
140
160
|
end
|
141
161
|
|
142
|
-
puts "=> 已成功解压出ecdict.csv(#{File.size(ECDictCSV)/1024/1024}MB)"
|
162
|
+
puts "=> 已成功解压出ecdict.csv(#{ '%.2f' % (File.size(ECDictCSV)/1024.0/1024) }MB)"
|
143
163
|
true
|
144
164
|
end
|
145
165
|
|
@@ -233,7 +253,7 @@ EOF
|
|
233
253
|
rescue Exception => e
|
234
254
|
puts "=> #{e.message}"
|
235
255
|
puts "=> 创建数据库文件#{ECDictDB}失败,或表`ecdict`生成失败"
|
236
|
-
|
256
|
+
close_db
|
237
257
|
File.delete(ECDictDB)
|
238
258
|
return false
|
239
259
|
end
|
@@ -298,19 +318,19 @@ EOF
|
|
298
318
|
rescue Exception => e
|
299
319
|
puts "=> #{e.message}"
|
300
320
|
puts "=> 数据库插入信息失败"
|
301
|
-
|
321
|
+
close_db
|
302
322
|
File.delete(ECDictDB)
|
303
323
|
return false
|
304
324
|
end
|
305
325
|
puts
|
306
326
|
puts "=> 数据库#{ECDictDB}已完整生成"
|
307
|
-
|
327
|
+
close_db
|
308
328
|
return true
|
309
329
|
end
|
310
330
|
|
311
331
|
|
312
332
|
def download_and_install_ecdict_data
|
313
|
-
|
333
|
+
download_ecdict_raw_data || ( puts("\e[31m=> 下载失败,安装取消!\e[0m") || exit(-1) )
|
314
334
|
decompress_7z_to_csv || ( puts("\e[31m=> 解压失败,安装取消!\e[0m") || exit(-2) )
|
315
335
|
generate_sqlite_db || ( puts("\e[31m=> 生成数据库失败,安装取消!\e[0m") || exit(-3) )
|
316
336
|
puts
|
@@ -340,7 +360,7 @@ def reply_once(query)
|
|
340
360
|
|
341
361
|
if !check_db_integrity
|
342
362
|
puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
|
343
|
-
|
363
|
+
close_db_and_exit(1)
|
344
364
|
end
|
345
365
|
|
346
366
|
tables = []
|
@@ -360,7 +380,7 @@ def reply_once(query)
|
|
360
380
|
|
361
381
|
if rows.empty?
|
362
382
|
puts "ecdict: 未找到结果,请检查单词拼写是否正确"
|
363
|
-
|
383
|
+
close_db
|
364
384
|
return
|
365
385
|
else
|
366
386
|
line = rows[0]
|
@@ -407,11 +427,11 @@ def chinese_search(cn_word, support_phrase: false)
|
|
407
427
|
|
408
428
|
if cn_word.empty?
|
409
429
|
puts "ecdict: 请输入要查询的中文,或使用`ecdict -h`查看帮助"
|
410
|
-
|
430
|
+
close_db_and_exit(2)
|
411
431
|
end
|
412
432
|
if !check_db_integrity
|
413
433
|
puts "=> 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
|
414
|
-
|
434
|
+
close_db_and_exit(1)
|
415
435
|
end
|
416
436
|
|
417
437
|
if support_phrase
|
@@ -432,7 +452,7 @@ def chinese_search(cn_word, support_phrase: false)
|
|
432
452
|
end
|
433
453
|
if rows.empty?
|
434
454
|
puts "ecdict: 未找到相关英文,请不要输入中文短语或短句,仅支持词的搜索"
|
435
|
-
|
455
|
+
close_db
|
436
456
|
return
|
437
457
|
else
|
438
458
|
# 有的时候并不是没有结果,而是被我们过滤掉了,对此确认一下
|
@@ -486,7 +506,8 @@ def chinese_search(cn_word, support_phrase: false)
|
|
486
506
|
if found_a_word
|
487
507
|
puts
|
488
508
|
else
|
489
|
-
puts "ecdict: 抱歉,为了防止显示内容过多,已将可能的答案过滤了"
|
509
|
+
puts "ecdict: 抱歉,为了防止显示内容过多,已将可能的答案过滤了"
|
510
|
+
puts "ecdict: 您可尝试使用`ecdict -cp`来搜索短语,扩大搜索范围"
|
490
511
|
end
|
491
512
|
# end of else
|
492
513
|
end
|
@@ -556,7 +577,7 @@ def start_ecrepl
|
|
556
577
|
|
557
578
|
if !check_db_integrity
|
558
579
|
puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
|
559
|
-
|
580
|
+
close_db_and_exit(1)
|
560
581
|
end
|
561
582
|
|
562
583
|
begin
|
@@ -571,7 +592,7 @@ def start_ecrepl
|
|
571
592
|
require 'reline'
|
572
593
|
Reline.completion_proc = lambda do |word|
|
573
594
|
if word.strip.empty?
|
574
|
-
return %w{1
|
595
|
+
return %w{1.输入单词并回车查询含义 2.输入单词时按一次tab键反馈搜索建议 3.输入exit或按Ctrl-C或Ctrl-D退出}
|
575
596
|
end
|
576
597
|
|
577
598
|
max_len = word.length + 4
|
@@ -614,7 +635,7 @@ def start_ecrepl
|
|
614
635
|
while line = Reline.readline("\e[32mecdict> \e[0m", true)
|
615
636
|
case word = line.chomp
|
616
637
|
when 'exit'
|
617
|
-
|
638
|
+
close_db
|
618
639
|
return
|
619
640
|
when ''
|
620
641
|
# NOOP
|
@@ -623,9 +644,9 @@ def start_ecrepl
|
|
623
644
|
end
|
624
645
|
end
|
625
646
|
rescue Interrupt
|
626
|
-
puts '^C'
|
647
|
+
# puts '^C'
|
627
648
|
`stty #{stty_save}` if stty_save
|
628
|
-
|
649
|
+
close_db
|
629
650
|
return
|
630
651
|
end
|
631
652
|
|
@@ -636,7 +657,7 @@ end
|
|
636
657
|
# remove everything in #{ECDICT_STORAGE}
|
637
658
|
#
|
638
659
|
def delete_cache
|
639
|
-
|
660
|
+
close_db
|
640
661
|
begin
|
641
662
|
FileUtils.rm_rf(ECDICT_STORAGE)
|
642
663
|
rescue => e
|
@@ -667,12 +688,12 @@ ecdict (v#{ECDICT_GEM_VERSION}): A courteous cli translator.
|
|
667
688
|
|
668
689
|
usage:
|
669
690
|
|
670
|
-
ecdict word => 查询单词
|
671
|
-
ecdict -r => 启动ecdict repl交互式查询,输入exit或Ctrl-C退出
|
672
|
-
ecdict -c 中文 =>
|
673
|
-
ecdict -cp 中文 =>
|
691
|
+
ecdict word => 查询单词word
|
692
|
+
ecdict -r => 启动ecdict repl交互式查询,输入exit或Ctrl-C/D退出
|
693
|
+
ecdict -c 中文 => 搜索中文单词对应的英文单词
|
694
|
+
ecdict -cp 中文 => 搜索中文短语对应的英文短语
|
674
695
|
ecdict -i => 下载ecdict词典数据并安装
|
675
|
-
ecdict -v => 打印此Gem
|
696
|
+
ecdict -v => 打印此Gem版本号
|
676
697
|
ecdict -h => 打印此帮助
|
677
698
|
ecdict -d => 清空词典数据
|
678
699
|
|
@@ -688,10 +709,10 @@ end
|
|
688
709
|
if ARGV.empty?
|
689
710
|
if !check_db_integrity
|
690
711
|
puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
|
691
|
-
|
712
|
+
close_db_and_exit(1)
|
692
713
|
end
|
693
714
|
puts "ecdict: 请输入要查询的词/词组 或使用`ecdict -h`查看帮助"
|
694
|
-
|
715
|
+
close_db_and_exit(2)
|
695
716
|
end
|
696
717
|
|
697
718
|
query = ARGV.shift
|
@@ -706,3 +727,6 @@ when "-cp" then chinese_search(ARGV.join, support_phrase: true)
|
|
706
727
|
else
|
707
728
|
reply_once(query)
|
708
729
|
end
|
730
|
+
|
731
|
+
# ensure close db
|
732
|
+
close_db
|