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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/ecdict +82 -50
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f8bbfbe1dbd141fc1eecda848fa890fd0e4d85001a6d8e090ca735203786b7dd
4
- data.tar.gz: c499d33a61ff61d7000538043fcf6691dd34310ccf5076e45c0e4054367708c3
3
+ metadata.gz: 450409babed4eef94062a845a4512ae333460f0cf61712a1adff7b8dbf3f4efa
4
+ data.tar.gz: 2e1e85623352e3659cc612ff9261876ad23b0bc993b5f3499f03054a988aa845
5
5
  SHA512:
6
- metadata.gz: c8e94e4a5dd550cf36dc3e7820b7920c8b45a743a493ff10e1a68e7940d7a536a53078416efe9a984c7aaadb20e1ffc98414c9474d88bf584ccd48bb4e30167c
7
- data.tar.gz: cf720681affcbf4a6233bcb04f5bfd8d036a91133b06d73b0f4c4f4a79f96b350f8fc76189dce4cbecf042595d6f89130cd7a97bc43ed94f4ad0e295d7ac4034
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-24>
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 = File.expand_path("~/.local/share/ecdict")
29
- ECDictRAWDATA = File.join(ECDICT_STORAGE, 'ecdict-csv.7z')
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.alpha4"
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 db_close
50
+ def close_db
48
51
  $DB.close if $DB
49
52
  end
50
53
 
51
- def db_close_and_exit(num = 0)
52
- db_close
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
- sha256 = Digest::SHA256.file(ECDictRAWDATA).hexdigest
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 download_ecdict_data
97
+ def download_ecdict_raw_data
94
98
 
95
- if File.exists?(ECDictRAWDATA) && check_download_integrity
96
- puts "=> 已存在原始数据文件#{ECDictRAWDATA}, 无需再次下载"
99
+ if File.exists?(ECDICT_RAW_DATA) && check_download_integrity
100
+ puts "=> 已存在原始数据文件#{ECDICT_RAW_DATA}, 无需再次下载"
97
101
  else
98
102
 
99
- if File.exists?(ECDictRAWDATA)
100
- puts "=> 删除已存在但不完整的数据"
101
- FileUtils.rm ECDictRAWDATA
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拉取仓库数据不完整!" if !check_download_integrity
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
- puts "=> Git获取原始数据库文件失败"
112
- FileUtils.rm(ECDictRAWDATA)
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(ECDictRAWDATA, "rb") do |file|
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
- db_close
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
- db_close
321
+ close_db
302
322
  File.delete(ECDictDB)
303
323
  return false
304
324
  end
305
325
  puts
306
326
  puts "=> 数据库#{ECDictDB}已完整生成"
307
- db_close
327
+ close_db
308
328
  return true
309
329
  end
310
330
 
311
331
 
312
332
  def download_and_install_ecdict_data
313
- download_ecdict_data || ( puts("\e[31m=> 下载失败,安装取消!\e[0m") || exit(-1) )
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
- db_close_and_exit(1)
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
- db_close
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
- db_close_and_exit(2)
430
+ close_db_and_exit(2)
411
431
  end
412
432
  if !check_db_integrity
413
433
  puts "=> 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
414
- db_close_and_exit(1)
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
- db_close
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
- puts "ecdict: 抱歉,为了防止显示内容过多,已将可能的答案过滤了",""
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
- db_close_and_exit(1)
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.输入单词查询 2.输入exit或按Ctrl-C退出}
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
- db_close
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
- db_close
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 => 查询单词 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
- db_close_and_exit(1)
720
+ close_db_and_exit(1)
692
721
  end
693
722
  puts "ecdict: 请输入要查询的词/词组 或使用`ecdict -h`查看帮助"
694
- db_close_and_exit
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.alpha4
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: 1.3.1
99
+ version: '0'
100
100
  requirements: []
101
101
  rubygems_version: 3.3.7
102
102
  signing_key: