reorder_visually!

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