in lib/twitter_cldr/shared/bidi.rb [68:113]
def reorder_visually!
raise "No string given!" unless @string_arr
max = 0
lowest_odd = MAX_DEPTH + 1
@levels.each do |level|
max = [level, max].max
lowest_odd = [lowest_odd, level].min unless level.even?
end
max.downto(lowest_odd) do |depth|
start = 0
while start < @levels.size
start += 1 while start < @levels.size && @levels[start] < depth
break if start == @levels.size
finish = start + 1
finish += 1 while finish < @levels.size && @levels[finish] >= depth
((finish - start) / 2).times do |i|
tmpb = @levels[finish - i - 1]
@levels[finish - i - 1] = @levels[start + i]
@levels[start + i] = tmpb
tmpo = @string_arr[finish - i - 1]
@string_arr[finish - i - 1] = @string_arr[start + i]
@string_arr[start + i] = tmpo
end
start = finish + 1
end
end
self
end