eij 0.0.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.
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'eij/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "eij"
8
+ spec.version = Eij::VERSION
9
+ spec.authors = ["Kevin Vollmer"]
10
+ spec.email = ["works.kvollmer@gmail.com"]
11
+ spec.summary = %q{Kanjidamage wrapper}
12
+ spec.description = %q{}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+ require 'optparse'
3
+ require './eij/string.rb'
4
+ require './eij/translator.rb'
5
+
6
+ module Eij
7
+
8
+ key = ARGV[0]
9
+ ARGV.shift
10
+
11
+ a = Translator.new(key)
12
+
13
+ if key.contains_cjk? && ARGV.size == 0
14
+ a.jap
15
+ end
16
+
17
+ OptionParser.new { |opts|
18
+ opts.banner = "Usage: #{File.basename($0)} key [-j word] | [-e word] | [-d num[,char]]"
19
+
20
+ opts.on( '-e', '--japanese [word]', Array, 'to english') do |v|
21
+ a.to_eng
22
+ if !v.nil?
23
+ a.grab_item v[1] if v.size == 2
24
+ a.grab_inner_item v[1],v[2] if v.size == 3
25
+ end
26
+ end
27
+
28
+ opts.on( '-j', '--english [word]', Array, 'to japanese') do |v|
29
+ a.to_jap
30
+ if !v.nil?
31
+ a.grab_item v[1] if v.size == 2
32
+ a.grab_inner_item v[1],v[2] if v.size == 3
33
+ end
34
+ end
35
+
36
+ opts.on( '-d', "--list [char]", Array, 'damage') do |v|
37
+ a.lookup
38
+ puts v
39
+ if !v.nil?
40
+ a.grab_item v[1] if v.size == 2
41
+ a.grab_inner_item v[1],v[2] if v.size == 3
42
+ end
43
+ end
44
+
45
+ }.parse!
46
+ print a.out
47
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+ class String
3
+
4
+ def black; "\033[30m#{self}\033[0m" end
5
+ def red; "\033[31m#{self}\033[0m" end
6
+ def green; "\033[32m#{self}\033[0m" end
7
+ def brown; "\033[33m#{self}\033[0m" end
8
+ def blue; "\033[34m#{self}\033[0m" end
9
+ def magenta; "\033[35m#{self}\033[0m" end
10
+ def cyan; "\033[36m#{self}\033[0m" end
11
+ def gray; "\033[37m#{self}\033[0m" end
12
+ def bg_black; "\033[40m#{self}\033[0m" end
13
+ def bg_red; "\033[41m#{self}\033[0m" end
14
+ def bg_green; "\033[42m#{self}\033[0m" end
15
+ def bg_brown; "\033[43m#{self}\033[0m" end
16
+ def bg_blue; "\033[44m#{self}\033[0m" end
17
+ def bg_magenta; "\033[45m#{self}\033[0m" end
18
+ def bg_cyan; "\033[46m#{self}\033[0m" end
19
+ def bg_gray; "\033[47m#{self}\033[0m" end
20
+ def bold; "\033[1m#{self}\033[22m" end
21
+ def reverse_color; "\033[7m#{self}\033[27m" end
22
+
23
+ def colorize(num)
24
+ arr = [magenta, cyan, brown, green]
25
+ arr[num % arr.size]
26
+ end
27
+
28
+ def contains_cjk?
29
+ !!(self =~ /\p{Han}|\p{Katakana}|\p{Hiragana}|\p{Hangul}/)
30
+ end
31
+
32
+ end
@@ -0,0 +1,192 @@
1
+ # encoding: utf-8
2
+ module Eij
3
+ class Translator
4
+
5
+ def initialize(key)
6
+ @col = %x{bash -lic 'echo $COLUMNS'}
7
+ @msg = key
8
+ @res = Hash.new { |h,k| h[k] = Hash.new(&h.default_proc) }
9
+ ch_reset
10
+ end
11
+
12
+ def ch_reset
13
+ @ch = 'a'
14
+ end
15
+
16
+ def exit_msg(res)
17
+ "Results: #{res}. Search query too vague!\n"
18
+ end
19
+
20
+ def jap
21
+ @msg = %x{bash -lic "source ./func.sh; jj #{@msg}"}
22
+ format_jp
23
+ end
24
+
25
+ def to_eng
26
+ @msg = %x{bash -lic "source ./func.sh; je #{@msg}"}
27
+ format_jp
28
+ end
29
+
30
+ def to_jap
31
+ if @msg.contains_cjk?
32
+ jap
33
+ else
34
+ @msg = %x{bash -lic 'source ./func.sh; ej #{@msg}'}
35
+ format_jp
36
+ end
37
+ end
38
+
39
+ def grab_item(key)
40
+ ch_reset
41
+ if @res[key].size > 1
42
+ @msg = @res[key].map do |x|
43
+ "#{x[0]}#{x[1]}"
44
+ end
45
+ @msg = @msg.join
46
+ else
47
+ @msg = @res[key][1]
48
+ end
49
+ end
50
+
51
+ def grab_inner_item(key, i)
52
+ ch_reset
53
+ @msg = @res[key][i.to_i]
54
+ end
55
+
56
+ def out
57
+ print @msg.strip + "\n"
58
+ end
59
+
60
+ def format_jp
61
+ @msg = @msg.gsub(":@;", "\n")
62
+ @msg.strip!
63
+ @msg = @msg.gsub(" \n", "")
64
+
65
+ divs = @msg.split(/\n/)
66
+ prim = divs[1..-1]
67
+ prim_list = []
68
+ offset = 0
69
+
70
+ if prim.count > 52
71
+ print exit_msg prim.count
72
+ exit
73
+ end
74
+ prim.each_with_index do |str, index|
75
+ @ch = 'A' if @ch.ord == 123
76
+ chm = "{#{@ch}} "
77
+ if !str.include? "-->"
78
+ prim_list[index] = "#{chm.colorize(index-offset)}#{str}"
79
+
80
+ indx = 0
81
+ str.split(/\d\./).each do |split|
82
+ if split.split.size > 0
83
+ indx += 1
84
+ @res[@ch][indx] = "#{split}"
85
+ end
86
+ end
87
+ @ch = @ch.ord.next.chr
88
+ else
89
+ prim_list[index] = "#{str}"
90
+ offset += 1
91
+ end
92
+ end
93
+ prim_merge = prim_list.join("\n")
94
+ prim_merge += "\n"
95
+ @msg.sub!(@msg, prim_merge)
96
+ end
97
+
98
+ def print_num_lines
99
+ lst = {}
100
+ @msg.split("\n").each_with_index do |str, index|
101
+ if index > 0
102
+ print "#{(index).to_s.rjust(2).colorize(index)}#{str}\n"
103
+ lst[(index).to_s] = str.split(" ")[0]
104
+ end
105
+ end
106
+
107
+ print "#: "
108
+ begin
109
+ @msg = lst[gets.strip]
110
+ rescue Exception => e
111
+ exit
112
+ end
113
+ lookup
114
+ end
115
+
116
+ def lookup
117
+ @msg = %x{bash -lic 'source ./func.sh; dfind #{@msg}'}
118
+ divs = @msg.split(":;!;")
119
+ @msg = divs[0]
120
+ @msg = @msg.gsub(":@;", "\n")
121
+ @msg.strip!
122
+ if @msg.include? "No matches found:"
123
+ print exit_msg 0
124
+ exit
125
+ elsif @msg.include? "Disambiguation required:"
126
+ print "Disambiguation required:\n"
127
+ print_num_lines
128
+ else
129
+ @msg += "\n"
130
+ lookup_prims divs[1] if divs[1].size > 0
131
+ lookup_jukugo divs[2] if divs[2].size > 0
132
+ lookup_usedin divs[3] if divs[3].size > 0
133
+ end
134
+ end
135
+
136
+ def lookup_prims(div)
137
+ prim_list = []
138
+ div.split("+").each_with_index do |str, index|
139
+ chm = ":#{index+1}:"
140
+ prim_list[index] = chm.colorize(index) + str.strip
141
+ @res[@ch][index+1] = " " + str.strip + " "
142
+ end
143
+ prim_merge = prim_list.join(", ")
144
+ @msg.sub!(div, "\n{#{@ch}} ".blue + prim_merge)
145
+ end
146
+
147
+ def lookup_jukugo(div)
148
+ prim_list = []
149
+ @ch = @ch.ord.next.chr
150
+ offset = 0
151
+ div.split("\n").each_with_index do |str, index|
152
+ chm = "{#{@ch}} "
153
+ if str[0].to_s.contains_cjk?
154
+ prim_list[index] = "#{chm.colorize(index-offset)}#{str}"
155
+ @res[@ch][1] = str.strip
156
+ @ch = @ch.ord.next.chr
157
+ else
158
+ prim_list[index] = str
159
+ offset += 1
160
+ end
161
+ end
162
+ prim_merge = prim_list.join("\n")
163
+ @msg.sub!(div, prim_merge)
164
+ end
165
+
166
+ def lookup_usedin(div)
167
+ prim_list = []
168
+ offset = 0
169
+ strsize = 0
170
+ div.split("\n").each_with_index do |str, index|
171
+ @ch = 'A' if @ch.ord == 123
172
+ chm = "{#{@ch}}"
173
+ if str == "USED IN:"
174
+ prim_list[index] = "\n" + str.strip + "\n"
175
+ offset += 1
176
+ elsif str.strip.size > 0
177
+ if strsize + str.size * 2 >= @col.to_i
178
+ newl = "\n"
179
+ strsize = 0
180
+ end
181
+ prim_list[index] = "#{chm.colorize(index-offset)}#{str.strip}#{newl}"
182
+ @res[@ch][1] = str.strip
183
+ strsize += str.size
184
+ @ch = @ch.ord.next.chr
185
+ end
186
+ end
187
+ prim_merge = prim_list.join("")
188
+ prim_merge.gsub!(", , ", "")
189
+ @msg.sub!(div, prim_merge)
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,3 @@
1
+ module Eij
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,61 @@
1
+ #! /bin/bash
2
+
3
+ FILE=../data/kanjidicks.txt
4
+
5
+ sdcv_lookup()
6
+ {
7
+ m=$(sdcv -n --data-dir $1 $2)
8
+ m=$(echo "$m" | sed 's/$/:@;\n/' | sed '/-->[jJ]/d')
9
+ echo $m
10
+ }
11
+
12
+ dic()
13
+ {
14
+ sdcv_lookup "/usr/share/stardict/dic" $@
15
+ }
16
+
17
+ # jp (romaji) -> en (romaji)
18
+ je()
19
+ {
20
+ m=$(sdcv_lookup "/usr/share/stardict/je/" $1)
21
+ echo $m
22
+ }
23
+
24
+ # internal use (CJK)
25
+ jj()
26
+ {
27
+ m=$(sdcv_lookup "/usr/share/stardict/jj/" $1)
28
+ echo $m
29
+ }
30
+
31
+ # en -> jp
32
+ ej()
33
+ {
34
+ m=$(sdcv_lookup "/usr/share/stardict/ej/" $1)
35
+ echo $m
36
+ }
37
+
38
+ # find kanjidamage record given a key
39
+ dfind()
40
+ {
41
+ m=$(grep -A 1 'Number:' $FILE | grep "$1")
42
+ c=$(echo "$m" | wc -l)
43
+ if [[ $c -gt 1 ]]; then
44
+ echo "Disambiguation required:"
45
+ echo "$m" | sed 's/^/ /'
46
+ elif [[ -n $m && $c -eq 1 ]]; then
47
+ f=$(awk "/$m/{p=1}/Number:/{p=0}p" $FILE)
48
+ p=$(awk "/$m/{p=1}/MUTANTS:|ONYOMI:/{p=0}p" $FILE)
49
+ j=$(echo "$f" | awk "/JUKUGO:/{p=1}/USED IN:|LOOKALIKES:/{p=0}p")
50
+ u=$(echo "$f" | sed -n '/USED IN:/,$p')
51
+ echo "$f"
52
+ echo ":;!;"
53
+ echo "$p" | tail -1
54
+ echo ":;!;"
55
+ echo "$j"
56
+ echo ":;!;"
57
+ echo "$u"
58
+ else
59
+ echo "No matches found: '$1'."
60
+ fi
61
+ }
@@ -0,0 +1,182 @@
1
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2
+ ━━━━━━━━━━━━━━━━━━━━━━━━━(EIJ)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
3
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
4
+
5
+ EDict and Kandidamage wrapped together into one with color
6
+ indication.
7
+
8
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
9
+ ━━━━━━━━━━━━━━━━━━━━━━━(Examples)━━━━━━━━━━━━━━━━━━━━━━━━━━━
10
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
11
+
12
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
13
+ A)━━━━━━━━━━━━━━━━━━━━━━(Kanji)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
14
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
15
+
16
+ $eij flower -j
17
+ >1 草花
18
+ >(くさばな)
19
+ >2 精華
20
+ >(せいか)
21
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
22
+ $eij flower -j 2
23
+ >精華
24
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
25
+ $eij flower -j 1 b
26
+ >花
27
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
28
+ $eij hana -e
29
+ >1 花 flower
30
+ >2 華 flower, petal
31
+ >3 端 edge, tip, point, end
32
+ >4 鼻 nose
33
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
34
+ $eij hana -e 2
35
+ >華 flower, petal
36
+ #defaults to [a]
37
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
38
+ $eij hana -e 2 b
39
+ >flower
40
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
41
+ $eij hana -e 2 c
42
+ >petal
43
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
44
+ $eij hana -e 2 a -j
45
+ >1 草花
46
+ >(くさばな)
47
+ >2 精華
48
+ >(せいか)
49
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
50
+ B)━━━━━━━━━━━━━━━━━━━━━━(Damage)━━━━━━━━━━━━━━━━━━━━━━━━━━━━
51
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
52
+
53
+ $eij hana 1 -d
54
+ >Number: 65
55
+ >花 flower
56
+ >Star-16Star-16Star-16Star-16Star-16
57
+ >7 strokes
58
+ >MR, PN, DUPE
59
+ >1 Flower A (flowertop) + 化 B (transform) (Same-ON)
60
+ >MUTANTS:
61
+ >
62
+ >Flower
63
+ > flowertop
64
+ >
65
+ >ONYOMI: KA
66
+ >
67
+ >You can think of the top part as the bottom of your nose,
68
+ >with 2 little puffs of pollen going in as you smell the flower.
69
+ >
70
+ >the Wizard transforms your CAR into a flower. (Actually the
71
+ >wizard's kind of a hater.)
72
+ >
73
+ >KUNYOMI:
74
+ >
75
+ >はな
76
+ > flower
77
+ > Star-16Star-16Star-16Star-16Star-16
78
+ >
79
+ >JUKUGO:
80
+ >
81
+ >2 見 ( はなみ )
82
+ > cherry-blossom looking-at-and-getting-bombed parties (KUNKUN)
83
+ > 花 (flower) + 見 (look) = 花見 (sakura-viewing party)
84
+ > Star-16Star-16Star-16
85
+ >3 花火 ( はなび )
86
+ > fireworks (KUNKUN)
87
+ > 花 (flower) + 火 (fire) = 花火 (fireworks)
88
+ > Star-16Star-16
89
+ >
90
+ >LOOKALIKES:
91
+ > Meaning Hint Radical
92
+ >4 花 flower POLLEN Horny
93
+ >5 死 death EVENING 夕
94
+ >
95
+ >For the sake of this mnemonic, let's call the 2 vertical
96
+ >strokes on the flower's top radical . . . 2 spores of pollen.
97
+ >
98
+ >The poison flower has POLLEN that you're breathing,
99
+ >
100
+ >and then it makes you die in the EVENING.
101
+ >USED IN:
102
+ >
103
+ >6 花
104
+ >7 苦
105
+ >8 草
106
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
107
+ $eij hana 1 -d 3
108
+ >花火
109
+ #grabs first group after number
110
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
111
+ $eij hana 1 -d 7
112
+ >苦
113
+ #grabs first group after number
114
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
115
+ $eij hana 1 -d 3 b
116
+ >火
117
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
118
+ $eij hana 1 -d 3 b -d
119
+ >Number: 47
120
+ >火 fire
121
+ >Star-16Star-16Star-16Star-16Star-16
122
+ >1 人 (person) + 丶 (dot)
123
+ ...
124
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
125
+ $eij hana 1 -d 3 3 -d 1
126
+ >人 (person)
127
+ #split not specified. default [a] used
128
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
129
+ $eij hana 1 -d 2 2 -d a 2
130
+ >person
131
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
132
+ $eij hana 1 -d 2 2 -d a 2 -k
133
+ >Number: 61
134
+ >人 person
135
+ >Star-16Star-16Star-16Star-16Star-16
136
+ >2 strokes
137
+
138
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
139
+ C)━━━━━━━━━━━━━━━━━━━━━━(Color)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
140
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
141
+
142
+ numbers all uniform color with bg
143
+ inner-selectable item unique color each without bg
144
+ punctuation on inner-select line as default color
145
+
146
+
147
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
148
+ D)━━━━━━━━━━━━━━━━━━━━━━(Problems)━━━━━━━━━━━━━━━━━━━━━━━━━━
149
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
150
+
151
+ P-1) find selected kanji
152
+ S-1) regex line between '^number*.$' and '^star*.$'
153
+ first word is kanji. second word is keyword
154
+ S-1a) map numbers to kanji and keywords
155
+ show number when
156
+
157
+ P-2) mutant keywords
158
+ S-2) regex changes from '^number*.$' to 'mutants:\n(*.*)\n'
159
+
160
+ P-3) iterative options
161
+
162
+ P-4) colorization
163
+ S-4)
164
+ ```
165
+ class String
166
+ # colorization
167
+ def colorize(color_code)
168
+ "\e[#{color_code}m#{self}\e[0m"
169
+ end
170
+
171
+ def red
172
+ colorize(31)
173
+ end
174
+ end
175
+ ```
176
+ P-5) autodetect cjk so kanji input doesnt need another option
177
+ S-5)
178
+ class String
179
+ def contains_cjk?
180
+ !!(self =~ /\p{Han}|\p{Katakana}|\p{Hiragana}|\p{Hangul}/)
181
+ end
182
+ end