Module: Coloration::Readers::TextMateThemeReader

Included in:
Converters::Textmate2JEditConverter, Converters::Textmate2KatePartConverter, Converters::Textmate2VimConverter
Defined in:
lib/coloration/readers/textmate_theme_reader.rb

Defined Under Namespace

Classes: InvalidThemeError

Instance Method Summary collapse

Instance Method Details

#parse_inputObject

Raises:



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/coloration/readers/textmate_theme_reader.rb', line 9

def parse_input
  begin
    tm_theme = Plist.parse_xml(input.gsub("ustring", "string"))
  rescue
    raise InvalidThemeError
  end
  raise InvalidThemeError if tm_theme.nil?
  self.name = tm_theme["name"]
  settings = tm_theme["settings"]

  self.ui = settings.delete_at(0)["settings"]
  bg = Color::RGB.from_html(ui["background"][0..6])
  ui.each do |key, value|
    ui[key] = Color::RGBA.from_html(value, bg)
  end
  ui["background"] = bg

  items = {}
  settings.each do |rule|
    selectors = rule["scope"]
    style = rule["settings"]
    if font_style = style.delete("fontStyle")
      if font_style.include?("bold")
        style[:bold] = true
      end
      if font_style.include?("italic")
        style[:italic] = true
      end
      if font_style.include?("underline")
        style[:underline] = true
      end
    end
    style = Style.new(style, bg)
    unless selectors.blank? || style.blank?
      selectors.split(",").each do |selector|
        items[selector.strip] = style
      end
    end
  end
  self.items = ItemsLookup.new(items)
end