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.
- checksums.yaml +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +7 -0
- data/Rakefile +2 -0
- data/data/kanjidicks.txt +58542 -0
- data/eij.gemspec +23 -0
- data/lib/eij.rb +47 -0
- data/lib/eij/string.rb +32 -0
- data/lib/eij/translator.rb +192 -0
- data/lib/eij/version.rb +3 -0
- data/lib/func.sh +61 -0
- data/notes/design +182 -0
- data/notes/features +706 -0
- data/notes/overview +57 -0
- metadata +86 -0
data/eij.gemspec
ADDED
|
@@ -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
|
data/lib/eij.rb
ADDED
|
@@ -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
|
data/lib/eij/string.rb
ADDED
|
@@ -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
|
data/lib/eij/version.rb
ADDED
data/lib/func.sh
ADDED
|
@@ -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
|
+
}
|
data/notes/design
ADDED
|
@@ -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
|