Sha256: 18c89434518d20bfe556ed58c7759537fec458bf7076dfc157a16b34901637cf

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

require 'plist'

module Ruco
  class TMTheme
    attr_accessor :background, :foreground, :styles

    # TODO maybe later...
    #attr_accessor :name, :uuid, :comment, :line_highlight

    # not supported in Curses ...
    #attr_accessor :invisibles, :caret, :selection

    def initialize(file)
      raw = Plist.parse_xml(file)
      rules = raw['settings']
      @styles = {}

      # set global styles
      global = rules.shift['settings']
      self.background = global['background']
      self.foreground = global['foreground']

      # set scope styles
      rules.each do |rules|
        style = [
          rules['settings']['foreground'],
          rules['settings']['background'],
        ]

        next if style == [nil, nil] # some weird themes have rules without colors...
        next unless scope = rules['scope'] # some weird themes have rules without scopes...

        scope.split(/, ?/).map(&:strip).each do |scope|
          @styles[scope] = style unless nested_scope?(scope)
        end
      end
    end

    private

    def nested_scope?(scope)
      scope.include?(' ')
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ruco-0.2.0.beta lib/ruco/tm_theme.rb