class SublimeDSL::TextMate::Grammar

A language grammar.

Attributes

bundle_uuid[RW]
comment[RW]
file_types[RW]
first_line_match[RW]
folding_start_marker[RW]
folding_stop_marker[RW]
fragments[RW]
key_equivalent[RW]

TextMate only

name[RW]
patterns[RW]

content

scope[RW]
to_s[RW]
uuid[RW]

Public Class Methods

import(file) click to toggle source

Create from a PList file.

# File lib/sublime_dsl/textmate/grammar.rb, line 17
def self.import(file)
  PListReader.new(file).grammar
end
new(name, scope) click to toggle source
# File lib/sublime_dsl/textmate/grammar.rb, line 40
def initialize(name, scope)

  @name = name
  @scope = scope

  @file_types = nil
  @first_line_match = nil
  @folding_start = nil
  @folding_stop = nil

  @key_equivalent = nil
  @uuid = nil

  @patterns = []
  @fragments = []

end

Public Instance Methods

complete!() click to toggle source
# File lib/sublime_dsl/textmate/grammar.rb, line 60
def complete!
  @repos = fragments.keyed_by(&:name)
  resolve_includes self
  fragments.each { |f| resolve_includes f }
end
export(dir) click to toggle source
# File lib/sublime_dsl/textmate/grammar.rb, line 90
def export(dir)
  file = "#{dir}/#{basename}.tmLanguage"
  PListWriter.new(self).export(file)
end
resolve_includes(parent) click to toggle source
# File lib/sublime_dsl/textmate/grammar.rb, line 66
def resolve_includes(parent)
  parent.patterns.each do |o|
    if o.respond_to? :patterns
      resolve_includes o
    elsif o.is_a?(Include) && o.fragment_name.start_with?('#')
      name = o.fragment_name[1..-1]
      o.fragment = @repos[name]
      if o.fragment
        o.fragment.used = true
      else
        warn "grammar #{self.name}: no such fragment: #{o.fragment_name.inspect}"
      end
    end
  end
end
write(dir) click to toggle source
# File lib/sublime_dsl/textmate/grammar.rb, line 82
def write(dir)
  file = "#{dir}/#{basename}.tmLanguage.rb"
  File.open(file, 'wb:utf-8') do |f|
    f.puts '# encoding: utf-8'
    f.puts "\n" << DSLWriter.new(self).dsl
  end
end