class SublimeDSL::TextMate::Snippet
Attributes
bundle_uuid[RW]
content[RW]
file_format[W]
key_equivalent[RW]
name[RW]
scope[RW]
semantic_class[RW]
tab_trigger[RW]
to_s[RW]
uuid[RW]
warnings[R]
Public Class Methods
import(file)
click to toggle source
Returns a Snippet
read from file
.
# File lib/sublime_dsl/textmate/snippet.rb, line 9 def self.import(file) Importer.for(file).snippet end
new()
click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 30 def initialize @name = nil @content = nil @tab_trigger = nil @scope = nil @key_equivalent = nil @semantic_class = nil @uuid = nil @bundle_uuid = nil @file_format = nil @warnings = [] end
to_snake_map()
click to toggle source
Hash { attributeName => attribute_name }
# File lib/sublime_dsl/textmate/snippet.rb, line 14 def self.to_snake_map @to_snake_map ||= Hash[ %w( name content scope tabTrigger keyEquivalent semanticClass uuid bundleUUID ).map { |a| [a, a.snake_case] } ] end
Public Instance Methods
c(content)
click to toggle source
HACK: return <![CDATA]>, except if content
is itself <![CDATA[…
# File lib/sublime_dsl/textmate/snippet.rb, line 152 def c(content) content =~ /<!\[CDATA\[/ ? h(content) : "<![CDATA[#{content}]]>" end
complete!()
click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 49 def complete! # assign name from the base name if not given unless name if @basename warnings << 'name assigned from the file name' @name = basename @basename = nil else raise Error, 'the snippet name is required' end end tab_trigger || key_equivalent or warnings << 'no tab trigger nor key equivalent' warnings.each { |w| warn "snippet #{name}: #{w}" } # remove spaces on empty lines @content.gsub!(/^[ \t]+$/, '') end
export(dir)
click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 116 def export(dir) if file_format == :textmate file = "#{dir}/#{basename}.tmSnippet" content = to_plist else file = "#{dir}/#{basename}.sublime-snippet" content = to_xml end File.open(file, 'wb:utf-8') { |f| f.write content } end
file_format()
click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 45 def file_format @file_format || :sublime_text end
h(text)
click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 147 def h(text) text.html_escape(false) end
to_dsl(default_scope)
click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 76 def to_dsl(default_scope) options = '' case scope when NilClass warn "scope missing for snippet #{name.to_source}, set to '#{default_scope}'" warnings << 'missing scope, will be default_scope' when default_scope else options << ", scope: #{scope.to_source}" end options << ", semantic_class: #{semantic_class.to_source}" if semantic_class options << ", uuid: #{uuid.to_source}" if uuid options << ", bundle_uuid: #{bundle_uuid.to_source}" if bundle_uuid options << dsl_file_arg dsl = warnings.map { |w| " # FIXME: #{w}\n" }.join if tab_trigger start = "tab #{tab_trigger.to_source}" options << ", key_equivalent: #{key_equivalent.inspect_dq}" if key_equivalent elsif key_equivalent start = "key #{key_equivalent.inspect_dq}" else start = 'key nil' end if content =~ /[ \t]$/ dsl << " #{start}, #{name.to_source}, #{content.inspect_dq}#{options}\n" else # TODO: use the ruby heredoc mnemonic from default_scope (CPP, RUBY, XML, etc.) dsl << " #{start}, #{name.to_s.to_source}, <<-'TXT'#{options}\n" dsl << content << "\nTXT\n" end dsl end
to_plist()
click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 138 def to_plist h = {} Snippet.to_snake_map.each_pair do |camel, snake| value = send(snake) h[camel] = value if value end PList.dump(h) end
to_xml()
click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 127 def to_xml <<-XML <snippet> \t<content>#{c(content)}</content> \t<tabTrigger>#{h(tab_trigger)}</tabTrigger> \t<scope>#{h(scope)}</scope> \t<description>#{h(name)}</description> </snippet> XML end