-
Notifications
You must be signed in to change notification settings - Fork 0
/
a-b-chi.rb
58 lines (45 loc) · 1.42 KB
/
a-b-chi.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#encoding:utf-8
require 'chinese'
class ArrayChinese < Array
alias array_sort_by! sort_by!
alias array_sort_by sort_by
def initialize
spec = Gem::Specification.find_by_name("a-b-chi")
gem_root = spec.gem_dir
@gem_lib = gem_root + "/lib"
@characters = File.read("#{@gem_lib}/characters.txt").split("\n")
end
def sort
self.array_sort_by { |sort_string| eval(get_sort_query) }
end
def sort!
self.array_sort_by! { |sort_string| eval(get_sort_query) }
end
private
def get_sort_query
sort_query = '['
(0..self.max_by(&:length).length).each { |i| sort_query << " @characters.index(sort_string[#{i}])," }
sort_query.chop!
sort_query << ']'
return sort_query
end
end
class StringChinese < String
def initialize
spec = Gem::Specification.find_by_name("a-b-chi")
gem_root = spec.gem_dir
@gem_lib = gem_root + "/lib"
@characters = File.read("#{@gem_lib}/characters.txt").split("\n")
@bpmf = File.read("#{@gem_lib}/bopomofo.txt").split("\n")
end
def to_ruby_unmarked
unmarked = ''
(0..(self.size-1)).each { |i| unmarked << "#{self[i]}(#{@bpmf[@characters.index(self[i])]})"}
return unmarked
end
def to_ruby_markup
markup = '<p style="writing-mode: tb-rl"><ruby>'
(0..(self.size-1)).each { |i| markup << "<rb>#{self[i]}</rb><rp>(</rp><rt>#{@bpmf[@characters.index(self[i])]}</rt><rp>)</rp>"}
markup << '</p></ruby>'
end
end