process

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