in lib/twitter_cldr/formatters/numbers/rbnf/post_processors/chinese.rb [15:122]
def process(str, rule_set)
buf = str.unpack("U*")
name = rule_set.name
format = RULE_SET_NAMES.find_index { |rule_set_name| rule_set.name == rule_set_name }
long_form = format == 1 || format == 3
if long_form
i = buf.index("*".ord)
while i != -1
buf.delete(i...i + 1)
i = buf.index("*".ord)
end
else
m = MARKERS[format]
0.upto(m.length - 2) do |i|
n = buf.index(m[i])
if n != -1
buf.insert(n + m[i].length, '|'.ord)
end
end
x = buf.index(DIAN)
x = buf.length if x == -1
s = 0
n = -1
ling = MARKERS[format][3]
while x >= 0
m = buf.rindex("|", x)
nn = buf.rindex(ling, x)
ns = 0
if nn > m
ns = (nn > 0 && buf[nn - 1] != '*'.ord) ? 2 : 1
end
x = m - 1
case s * 3 + ns
when 0
s = ns
n = -1
when 1
s = ns
n = nn
when 2
s = ns
n = -1
when 3
s = ns
n = -1
when 4
buf.delete((nn - 1)...(nn + 1))
s = 0
n = -1
when 5
buf.delete((n - 1)...(n + 1))
s = ns
n = -1
when 6
s = ns
n = -1
when 7
buf.delete((nn - 1)...(nn + 1))
s = 0
n = -1
when 8
s = ns
n = -1
else
raise "Illegal state"
end
end
buf.length.downto(0) do |i|
if buf[i] == "*".ord || buf[i] == "|".ord
buf.delete(i...i + 1)
end
end
end
buf.pack("U*")
end