bing_dictionary 0.1.4 → 0.1.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dbc50af5b5ddf83a0775fe03469d2fc42bc5d0df
4
- data.tar.gz: 986b3a6e3b531094b82dfce73cdc9600932baad9
3
+ metadata.gz: 5f98c43922d4b8eb91fc37102a51a839a58532f2
4
+ data.tar.gz: 29562da51e61ee74c77ae6202905a0f4fdba8768
5
5
  SHA512:
6
- metadata.gz: 295bcaed92324fc045cecc392cd9d8c2ed1fcd21d1e93118dbe7dbc9a5091db98989051e1e02f59602ee28e4f3e35edb576f13cd3de957ab901af93882ff313f
7
- data.tar.gz: d32676c749a9f616ea190f15b6bb463fe380cd1ca145948dc67570eb70bd2ee8bfe4597c609c94ad5cd4b90e4a246032aca26dfe1450fa91c948bea2e4b784fc
6
+ metadata.gz: b0c7bfbd5134fe649a0be47bb50d29c39416b260ef3c48168e1a42d10c1b08964d9f22f9d4d733075b01d0f27f585c06738d745abc025d2e7dfe1b7fd01e53a7
7
+ data.tar.gz: 8f6a1f96a3afa854e01d581fb89287f777674c90d24c267b6e7f894eaa0718d3f3b609703c0a410ab0b315b6639cf97b09ef7f6082854cb17e57261fdb4cb7d4
data/README.md CHANGED
@@ -49,12 +49,17 @@ Now long sentence is supported
49
49
  单片机发生的讲解,不懂得可以看看!
50
50
  ...
51
51
 
52
+ ## Local cache supported
53
+ All queried word default cached to ~/.bing_dictionary.db.
54
+ So it's much faster when you query the word again.
55
+
52
56
  ## More options
53
57
 
54
58
  $ dict --help
55
59
  Example: dict hello
56
60
  -p, --[no-]pronounce Pronounce the word
57
- -j, --[no-]jump Jump to web page
61
+ -c, --[no-]cache Use cache from ~/.bing_dictionary.db (Default on)
62
+ -j, --jump Jump to web page
58
63
  -v, --version Show the version
59
64
 
60
65
  ## Work with vim
data/bin/dict CHANGED
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bing_dictionary"
4
3
  require 'optparse'
5
4
 
6
5
  options = {}
@@ -9,7 +8,10 @@ option_parser = OptionParser.new do |opts|
9
8
  opts.on("-p", "--[no-]pronounce", "Pronounce the word") do |v|
10
9
  options[:pronounce] = v
11
10
  end
12
- opts.on("-j", "--[no-]jump", "Jump to web page") do |v|
11
+ opts.on("-c", "--[no-]cache", "Use cache from ~/.bing_dictionary.db (Default on)") do |v|
12
+ options[:cache] = v
13
+ end
14
+ opts.on("-j", "--jump", "Jump to web page") do |v|
13
15
  options[:jump] = v
14
16
  end
15
17
  opts.on("-v", "--version", "Show the version") do |v|
@@ -21,11 +23,32 @@ if ARGV.empty?
21
23
  option_parser.parse('--help')
22
24
  else
23
25
  option_parser.parse!
26
+ word = ARGV.join(' ')
24
27
  if options[:version]
28
+ require "bing_dictionary"
25
29
  puts BingDictionary::VERSION
26
30
  elsif options[:jump]
27
- `open http://cn.bing.com/dict/?q=#{CGI::escape(ARGV.join(' '))}`
31
+ `open http://cn.bing.com/dict/?q=#{CGI::escape(word)}`
28
32
  else
29
- BingDictionary::Base.translate(ARGV.join(' '), options)
33
+ require 'dbm'
34
+ DBM.open(File.join(Dir.home, '.bing_dictionary')) do |cache|
35
+ if cache.key?(word) && options[:cache] != false
36
+ puts cache[word]
37
+ else
38
+ require "bing_dictionary"
39
+
40
+ backup = $stdout
41
+ $stdout = StringIO.new
42
+ BingDictionary::Base.translate(word, options)
43
+ out = $stdout.string
44
+ $stdout = backup
45
+
46
+ if out && out.length > 0
47
+ cache[word] = out
48
+ puts out
49
+ end
50
+ end
51
+ end
30
52
  end
31
53
  end
54
+
@@ -5,7 +5,7 @@ require "bing_dictionary/version"
5
5
 
6
6
  module BingDictionary
7
7
  class Base
8
- attr_reader :doc
8
+ attr_accessor :doc, :options, :word
9
9
 
10
10
  def self.translate(word, options = {})
11
11
  self.new(word, options).translate
@@ -16,8 +16,9 @@ module BingDictionary
16
16
 
17
17
  def initialize(word, options = {})
18
18
  file = open("http://cn.bing.com/dict/?q=#{CGI::escape(word)}")
19
- @doc = Nokogiri::HTML(file)
20
- @options = options
19
+ self.word = word
20
+ self.doc = Nokogiri::HTML(file)
21
+ self.options = options
21
22
  end
22
23
 
23
24
  def translate
@@ -25,15 +26,15 @@ module BingDictionary
25
26
  machine if doc.at_css('.smt_hw')
26
27
  sentence if doc.at_css('#sentenceSeg .se_li')
27
28
  guess if doc.at_css('.dym_area')
28
- pronounce if doc.at_css('#headword') && @options[:pronounce]
29
+ pronounce if doc.at_css('#headword') && options[:pronounce]
29
30
  end
30
31
 
31
32
  def head
32
33
  puts doc.at_css('#headword').text
33
- puts doc.at_css('.hd_tf_lh').text.green
34
+ puts with_color(doc.at_css('.hd_tf_lh').text, :green)
34
35
  puts
35
36
  doc.at_css('.hd_area').next_sibling.css('li').each do |li|
36
- puts li.at_css('.pos').text.fixed(5).blue + li.at_css('.def').text
37
+ puts with_color(with_fixed(li.at_css('.pos').text, 5), :blue) + li.at_css('.def').text
37
38
  end
38
39
  end
39
40
 
@@ -46,13 +47,13 @@ module BingDictionary
46
47
  def machine
47
48
  puts doc.at_css('.smt_hw').text
48
49
  puts doc.at_css('.p1-10').text
49
- puts doc.at_css('.p1-11').text.green
50
+ puts with_color(doc.at_css('.p1-11').text, :green)
50
51
  end
51
52
 
52
53
  def sentence
53
54
  puts
54
55
  doc.css('#sentenceSeg .se_li').first(4).map do |li|
55
- puts li.css('.sen_en').text
56
+ puts with_highlight(li.css('.sen_en').text, word)
56
57
  puts li.css('.sen_cn').text
57
58
  puts
58
59
  end
@@ -71,24 +72,18 @@ module BingDictionary
71
72
  end
72
73
  end
73
74
 
74
- end
75
-
76
- end
77
-
78
- class String
79
- COLORS = %w(black red green yellow blue magenta cyan white)
80
- COLORS.each_with_index do |color, idx|
81
- define_method color do
82
- $stdout.tty? ? "\e[3#{idx}m" << self.to_s << "\e[0m" : self
75
+ COLORS = %i[ black red green yellow blue magenta cyan white ]
76
+ def with_color(str, color)
77
+ "\e[3#{COLORS.index(color)}m" << str.to_s << "\e[0m"
83
78
  end
84
79
 
85
- define_method "#{color}_bg" do
86
- $stdout.tty? ? "\e[4#{idx}m" << self.to_s << "\e[0m" : self
80
+ def with_fixed(str, width)
81
+ width = width - str.each_char.count { |c| c =~ /\p{Han}/ }
82
+ width > 0 ? ("%-#{width}s" % str) : str
87
83
  end
88
- end
89
84
 
90
- def fixed(width)
91
- width = width - self.each_char.count { |c| c =~ /\p{Han}/ }
92
- width > 0 ? ("%-#{width}s" % self) : self
85
+ def with_highlight(str, keyword)
86
+ str.gsub(/#{keyword}/i) { |s| with_color(s, :yellow) }
87
+ end
93
88
  end
94
89
  end
@@ -1,3 +1,3 @@
1
1
  module BingDictionary
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bing_dictionary
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - lingceng
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-14 00:00:00.000000000 Z
11
+ date: 2017-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -106,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  version: '0'
107
107
  requirements: []
108
108
  rubyforge_project:
109
- rubygems_version: 2.5.1
109
+ rubygems_version: 2.6.8
110
110
  signing_key:
111
111
  specification_version: 4
112
112
  summary: Command line dictionary grabing http://cn.bing.com/