This week only. Pastebin PRO Accounts Christmas Special! Don't miss out!Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Oct 5th, 2012  |  syntax: Ruby  |  size: 0.76 KB  |  views: 28  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. s = "{new {value1 value2 value3}} {old {value2 value1 value1}} {{old school} {value2 value3 value1}}"
  2. os = []
  3. level = 0
  4. pos = 0
  5. str = Struct.new(:key, :values)
  6. value = ""
  7. o = str.new("", [])
  8. for i in 0...s.size
  9.         x = s[i...i+1]
  10.         case x
  11.         when "{"
  12.                 level += 1
  13.         when "}"
  14.                 if level == 2
  15.                         pos = 1
  16.                 end
  17.                 level -= 1
  18.         when " "
  19.                 case level
  20.                 when 0
  21.                         o.values << value
  22.                         os << o.dup
  23.                         o = str.new("", [])
  24.                         value = ""
  25.                         pos = 0
  26.                 when 1
  27.                         if pos == 0
  28.                                 pos = 1
  29.                         else
  30.                                 value = ""
  31.                         end
  32.                 when 2
  33.                         if pos == 0
  34.                                 o.key += x
  35.                         else
  36.                                 o.values << value.dup
  37.                                 value = ""
  38.                         end
  39.                 else
  40.                         raise
  41.                 end
  42.         else
  43.                 if pos == 0
  44.                         o.key += x
  45.                 else
  46.                         value += x
  47.                 end
  48.         end
  49. end
  50. o.values << value
  51. os << o
  52. puts os.inspect
clone this paste RAW Paste Data