ecdict 1.2.alpha4 → 1.2.alpha5
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 +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
|