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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/ecdict +65 -58
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e1996ba567e038df6a09192d756555cc6d412dba27768a1ba8a14e7c7f5b86e
4
- data.tar.gz: 9f629889962c28cbf083aa15a72dbbbe043c8f20f0dd4d222067a44a30af2dfb
3
+ metadata.gz: f8bbfbe1dbd141fc1eecda848fa890fd0e4d85001a6d8e090ca735203786b7dd
4
+ data.tar.gz: c499d33a61ff61d7000538043fcf6691dd34310ccf5076e45c0e4054367708c3
5
5
  SHA512:
6
- metadata.gz: abc14275deab49f24f5500af11872096273d7993370429243dcf5bd6b150ceef2c3052abb1bb6698469f65a81bc378fa3b9fc2a383056e8b43f1b4f5d307290a
7
- data.tar.gz: ca19a7ece452d4f1ac8dd4514d8660dd7284bd7c5cd06a8e9b053f3d19839a76495c8a62218cfc3f551b63a1e60bbc60db3f02c3b51185c13d0c4bb540b2d2c9
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-23>
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.alpha"
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
- ECDICT_DICT_VERSION = "2020.10.19"
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
- cont = File.read(ECDictRAWDATA)
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 "=> 正在从#{ECDICT_DICT_DOWNLOAD_LINK}"
92
- puts "=> 下载原始数据库文件(v#{ECDICT_DICT_VERSION})"
93
- system("curl -L #{ECDICT_DICT_DOWNLOAD_LINK} -o #{ECDictRAWDATA}")
94
- raise "=> 下载数据不完整!" if !check_download_integrity
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
- exit 1
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
- exit 2
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 "=> Hooray! 词典数据下载安装完成! 请尝试使用:"
309
- puts "=> 1. ecdict word 查询单词 "
310
- puts "=> 2. ecdict -r 进入交互式查询REPL"
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 "=> 数据库不存在或数据库不完整,请使用ecdict -i来下载安装词典数据",""
332
- exit -1
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
- exit 2
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
- exit 1
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
- exit -1
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
- exit 2
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 "=> 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据",""
546
- exit -1
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
- db_close_and_exit
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
- db_close_and_exit
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 "=> #{e.message}"
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 => 查询单词 word
663
- ecdict -r => 启动ecdict repl交互式查询,输入exit或Ctrl-C退出
670
+ ecdict word => 查询单词 word
671
+ ecdict -r => 启动ecdict repl交互式查询,输入exit或Ctrl-C退出
664
672
  ecdict -c 中文 => 搜索中文对应的英文单词
665
673
  ecdict -cp 中文 => 搜索中文对应的英文单词以及短语(结果可能很多)
666
- ecdict -i => 下载ecdict词典数据并安装
667
- ecdict -v => 打印此Gem与词典版本号
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 "=> 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据",""
683
- exit -1
690
+ puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
691
+ db_close_and_exit(1)
684
692
  end
685
- puts "ecdict: 请输入要查询的词/词组 或使用`ecdict -h`查看帮助",""
686
- exit 1
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
-
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.alpha
4
+ version: 1.2.alpha4
5
5
  platform: ruby
6
6
  authors:
7
7
  - ccmywish