class Sublime2yas::SublimeSnippet
Public Class Methods
canonicalize(filename)
click to toggle source
# File lib/sublime2yas.rb, line 223 def self.canonicalize(filename) invalid_char = /[^ a-z_0-9.+=~(){}\/'`&#,-]/i filename. gsub(invalid_char, ''). # remove invalid characters gsub(/ {2,}/,' '). # squeeze repeated spaces into a single one rstrip # remove trailing whitespaces end
extra_substitutions()
click to toggle source
# File lib/sublime2yas.rb, line 115 def self.extra_substitutions; @@extra_substitutions; end
new(file)
click to toggle source
# File lib/sublime2yas.rb, line 134 def initialize(file) @file = file @snippet = SublimeSnippet::read_snippet(open(file)) @@snippets_by_uid[self.uuid] = self; raise SkipSnippet.new "This is not a sublime-snippet, I just do sublime-snippets." unless (@snippet.xpath "//scope") raise RuntimeError.new("Cannot convert this snippet #{file}!") unless @snippet; end
read_snippet(xml)
click to toggle source
# File lib/sublime2yas.rb, line 236 def self.read_snippet(xml) begin parsed = Nokogiri::XML(xml) return parsed if parsed raise ArgumentError.new "Format not recognised as sublime-snippet..." rescue StandardError => e raise RuntimeError.new "Failed to read sublime-snippet - Nokogiri gem is required, make sure it's installed" end end
snippets_by_uid()
click to toggle source
# File lib/sublime2yas.rb, line 132 def self.snippets_by_uid; @@snippets_by_uid; end
unknown_substitutions()
click to toggle source
# File lib/sublime2yas.rb, line 123 def self.unknown_substitutions; @@unknown_substitutions; end
Public Instance Methods
binding()
click to toggle source
# File lib/sublime2yas.rb, line 165 def binding yas_directive "binding" end
condition()
click to toggle source
# File lib/sublime2yas.rb, line 154 def condition yas_directive "condition" end
content()
click to toggle source
# File lib/sublime2yas.rb, line 169 def content known = @@known_substitutions["content"] extra = @@extra_substitutions["content"] if direct = extra[uuid] return direct else ct = (@snippet.xpath "//content").text if ct known.each_pair do |k,v| if v.respond_to? :call ct.gsub!(k) {|match| v.call(uuid, match)} else ct.gsub!(k,v) end end extra.each_pair do |k,v| ct.gsub!(k,v) end # the remaining stuff is an unknown substitution # [ %r'\$\{ [^/\}\{:]* / [^/]* / [^/]* / [^\}]*\}'x , %r'\$\{[^\d][^}]+\}', %r'`[^`]+`', %r'\$TM_[\w_]+', %r'\(yas-multi-line-unknown [^\)]*\)' ].each do |reg| ct.scan(reg) do |match| @@unknown_substitutions["content"][match] = self end end return ct else @@unknown_substitutions["content"][uuid] = self SublimeSubmenu::excluded_items.push(uuid) return "(yas-unimplemented)" end end end
key()
click to toggle source
# File lib/sublime2yas.rb, line 150 def key (@snippet.xpath "//tabTrigger").text end
name()
click to toggle source
# File lib/sublime2yas.rb, line 142 def name (@snippet.xpath "//description").text end
to_yas(opts)
click to toggle source
# File lib/sublime2yas.rb, line 208 def to_yas opts doc = "# -*- mode: snippet -*-\n" doc << "# contributor: Translated to yasnippet by sublime-snippet import\n" doc << (self.type || "") # doc << "# uuid: #{self.uuid}\n" unless self.uuid.empty? doc << "# key: #{self.key}\n" if self.key doc << "# group: #{opts.snippet_group}\n" if opts.snippet_group doc << "# name: #{self.name}\n" doc << (self.binding || "") doc << (self.condition || "") doc << "# --\n" doc << (self.content || "(yas-unimplemented)") doc end
type()
click to toggle source
# File lib/sublime2yas.rb, line 158 def type override = yas_directive "type" if override return override end end
uuid()
click to toggle source
# File lib/sublime2yas.rb, line 146 def uuid (@snippet.xpath "//uuid").text end
yas_file()
click to toggle source
# File lib/sublime2yas.rb, line 232 def yas_file() File.join(SublimeSnippet::canonicalize(@file[0, @file.length-File.extname(@file).length]) + ".yasnippet") end
Private Instance Methods
yas_directive(yas_directive)
click to toggle source
# File lib/sublime2yas.rb, line 249 def yas_directive(yas_directive) # # Merge "known" hardcoded substitution with "extra" substitutions # provided in the .yas-setup.el file. # merged = @@known_substitutions[yas_directive]. merge(@@extra_substitutions[yas_directive]) # # First look for an uuid-based direct substitution for this # directive. # if direct = merged[uuid] return "# #{yas_directive}: "+ direct + "\n" unless direct.empty? else tm_directive = @@yas_to_tm_directives[yas_directive] val = tm_directive && @snippet[tm_directive] if val and !val.delete(" ").empty? then # # Sort merged substitutions by length (bigger ones first, # regexps last), and apply them to the value gotten for plist. # allsubs = merged.sort_by do |what, with| if what.respond_to? :length then -what.length else 0 end end allsubs.each do |sub| if val.gsub!(sub[0],sub[1]) return "# #{yas_directive}: "+ val + "\n" unless val.empty? end end # # If we get here, no substitution matched, so mark this an # unknown substitution. # @@unknown_substitutions[yas_directive][val] = self return "## #{yas_directive}: \""+ val + "\n" end end end