ecdict 1.2.alpha4 → 1.2.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/ecdict +82 -50
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 450409babed4eef94062a845a4512ae333460f0cf61712a1adff7b8dbf3f4efa
|
4
|
+
data.tar.gz: 2e1e85623352e3659cc612ff9261876ad23b0bc993b5f3499f03054a988aa845
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4adfb282ca00ddff850f02c6e7b133c802b3c7a3958f94465349be43deab3c4a4805994cadbd7eb2ca2aea3e4907b04b7263a893da8d0cc1ce54863db97712bb
|
7
|
+
data.tar.gz: 27a3a238959cb00294a0a54d5d49c44975762ac009852cc87e68df151495742bfe8d1f41107f6cf1b94dd1a24de9092fdb46db018a54cb931f73bcbbdf01d464
|
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-25>
|
7
7
|
#
|
8
8
|
# ecdict:
|
9
9
|
#
|
@@ -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.1"
|
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
|
@@ -431,8 +451,8 @@ def chinese_search(cn_word, support_phrase: false)
|
|
431
451
|
end
|
432
452
|
end
|
433
453
|
if rows.empty?
|
434
|
-
puts "ecdict:
|
435
|
-
|
454
|
+
puts "ecdict: 抱歉,未找到与之相关的英文"
|
455
|
+
close_db
|
436
456
|
return
|
437
457
|
else
|
438
458
|
# 有的时候并不是没有结果,而是被我们过滤掉了,对此确认一下
|
@@ -447,12 +467,14 @@ def chinese_search(cn_word, support_phrase: false)
|
|
447
467
|
next if trans.include?("\r\n")
|
448
468
|
next if trans.include?("\n")
|
449
469
|
|
450
|
-
|
470
|
+
|
451
471
|
if !support_phrase
|
472
|
+
# 不要搜索词组
|
452
473
|
next if en_word.include?(' ')
|
474
|
+
# 不要搜索连字词
|
475
|
+
next if en_word.include?('-')
|
453
476
|
end
|
454
|
-
|
455
|
-
next if en_word.include?('-')
|
477
|
+
|
456
478
|
|
457
479
|
# filter
|
458
480
|
# "[网络] 微软,认证专家;微软认证产品专家;微软专家认证"
|
@@ -486,7 +508,14 @@ def chinese_search(cn_word, support_phrase: false)
|
|
486
508
|
if found_a_word
|
487
509
|
puts
|
488
510
|
else
|
489
|
-
|
511
|
+
|
512
|
+
if !support_phrase
|
513
|
+
puts "ecdict: 抱歉,为了防止显示内容过多,已将可能的答案过滤了"
|
514
|
+
puts "ecdict: 您可尝试使用`ecdict -cp`来搜索短语,扩大搜索范围"
|
515
|
+
else
|
516
|
+
puts "ecdict: 抱歉,未找到与之相关的英文"
|
517
|
+
end
|
518
|
+
|
490
519
|
end
|
491
520
|
# end of else
|
492
521
|
end
|
@@ -556,7 +585,7 @@ def start_ecrepl
|
|
556
585
|
|
557
586
|
if !check_db_integrity
|
558
587
|
puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
|
559
|
-
|
588
|
+
close_db_and_exit(1)
|
560
589
|
end
|
561
590
|
|
562
591
|
begin
|
@@ -571,7 +600,7 @@ def start_ecrepl
|
|
571
600
|
require 'reline'
|
572
601
|
Reline.completion_proc = lambda do |word|
|
573
602
|
if word.strip.empty?
|
574
|
-
return %w{1
|
603
|
+
return %w{1.输入单词并回车查询含义 2.输入单词时按一次tab键反馈搜索建议 3.输入exit或按Ctrl-C或Ctrl-D退出}
|
575
604
|
end
|
576
605
|
|
577
606
|
max_len = word.length + 4
|
@@ -614,7 +643,7 @@ def start_ecrepl
|
|
614
643
|
while line = Reline.readline("\e[32mecdict> \e[0m", true)
|
615
644
|
case word = line.chomp
|
616
645
|
when 'exit'
|
617
|
-
|
646
|
+
close_db
|
618
647
|
return
|
619
648
|
when ''
|
620
649
|
# NOOP
|
@@ -623,9 +652,9 @@ def start_ecrepl
|
|
623
652
|
end
|
624
653
|
end
|
625
654
|
rescue Interrupt
|
626
|
-
puts '^C'
|
655
|
+
# puts '^C'
|
627
656
|
`stty #{stty_save}` if stty_save
|
628
|
-
|
657
|
+
close_db
|
629
658
|
return
|
630
659
|
end
|
631
660
|
|
@@ -636,7 +665,7 @@ end
|
|
636
665
|
# remove everything in #{ECDICT_STORAGE}
|
637
666
|
#
|
638
667
|
def delete_cache
|
639
|
-
|
668
|
+
close_db
|
640
669
|
begin
|
641
670
|
FileUtils.rm_rf(ECDICT_STORAGE)
|
642
671
|
rescue => e
|
@@ -667,12 +696,12 @@ ecdict (v#{ECDICT_GEM_VERSION}): A courteous cli translator.
|
|
667
696
|
|
668
697
|
usage:
|
669
698
|
|
670
|
-
ecdict word => 查询单词
|
671
|
-
ecdict -r => 启动ecdict repl交互式查询,输入exit或Ctrl-C退出
|
672
|
-
ecdict -c 中文 =>
|
673
|
-
ecdict -cp 中文 =>
|
699
|
+
ecdict word => 查询单词word
|
700
|
+
ecdict -r => 启动ecdict repl交互式查询,输入exit或Ctrl-C/D退出
|
701
|
+
ecdict -c 中文 => 搜索中文单词对应的英文单词
|
702
|
+
ecdict -cp 中文 => 搜索中文短语对应的英文短语
|
674
703
|
ecdict -i => 下载ecdict词典数据并安装
|
675
|
-
ecdict -v => 打印此Gem
|
704
|
+
ecdict -v => 打印此Gem版本号
|
676
705
|
ecdict -h => 打印此帮助
|
677
706
|
ecdict -d => 清空词典数据
|
678
707
|
|
@@ -688,10 +717,10 @@ end
|
|
688
717
|
if ARGV.empty?
|
689
718
|
if !check_db_integrity
|
690
719
|
puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
|
691
|
-
|
720
|
+
close_db_and_exit(1)
|
692
721
|
end
|
693
722
|
puts "ecdict: 请输入要查询的词/词组 或使用`ecdict -h`查看帮助"
|
694
|
-
|
723
|
+
close_db_and_exit(2)
|
695
724
|
end
|
696
725
|
|
697
726
|
query = ARGV.shift
|
@@ -706,3 +735,6 @@ when "-cp" then chinese_search(ARGV.join, support_phrase: true)
|
|
706
735
|
else
|
707
736
|
reply_once(query)
|
708
737
|
end
|
738
|
+
|
739
|
+
# ensure close db
|
740
|
+
close_db
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecdict
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ccmywish
|
@@ -94,9 +94,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
94
|
version: '0'
|
95
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- - "
|
97
|
+
- - ">="
|
98
98
|
- !ruby/object:Gem::Version
|
99
|
-
version:
|
99
|
+
version: '0'
|
100
100
|
requirements: []
|
101
101
|
rubygems_version: 3.3.7
|
102
102
|
signing_key:
|