have to admit ruby is pretty amazing

This commit is contained in:
capitaomorte 2010-04-01 22:35:31 +00:00
parent 92d0c45589
commit faea0dfd7e
2 changed files with 67 additions and 35 deletions

View File

@ -162,9 +162,8 @@ end
# #
class SkipSnippet < RuntimeError; end class SkipSnippet < RuntimeError; end
class TmSnippet class TmSnippet
# unix to the rescue
# def self.known_substitutions; @@known_substitutions; end
# ack -aho '\${\d/[^/]*/[^/]*/}' imported/ruby-mode/ | sort | uniq
@@known_substitutions ={ @@known_substitutions ={
"content" => [ "content" => [
{ {
@ -181,6 +180,12 @@ class TmSnippet
} ], } ],
"binding" => [ {} ] "binding" => [ {} ]
} }
def self.unknown_substitutions; @@unknown_substitutions; end
@@unknown_substitutions = {
"content" => [],
"condition" => [],
"binding" => []
}
# now add some more substitutions # now add some more substitutions
# TODO: find a better way to add more substitutions # TODO: find a better way to add more substitutions
# #
@ -240,8 +245,13 @@ class TmSnippet
content.gsub!(k,v) content.gsub!(k,v)
end end
end end
content.scan(%r'\$\{ [^/\}\{:]* /
[^/]* /
[^/]* /
[^\}]*\}'x) do |match|
@@unknown_substitutions["content"].push [match, @file]
end
end end
content
end end
def condition def condition
@ -348,7 +358,7 @@ if $0 == __FILE__
# #
modename = File.basename Choice.choices.output_dir || "major-mode-name" modename = File.basename Choice.choices.output_dir || "major-mode-name"
menustr = TmSubmenu::main_menu_to_lisp(info_plist, modename) if info_plist menustr = TmSubmenu::main_menu_to_lisp(info_plist, modename) if info_plist
puts menustr unless !menustr or Choice.choices.quiet puts menustr if $DEBUG
# Write some basic .yas-* files # Write some basic .yas-* files
# #
@ -357,14 +367,35 @@ if $0 == __FILE__
FileUtils.mkdir_p Choice.choices.output_dir FileUtils.mkdir_p Choice.choices.output_dir
FileUtils.touch File.join(original_dir, Choice.choices.output_dir, ".yas-make-groups") unless menustr FileUtils.touch File.join(original_dir, Choice.choices.output_dir, ".yas-make-groups") unless menustr
FileUtils.touch File.join(original_dir, Choice.choices.output_dir, ".yas-ignore-filenames-as-triggers") FileUtils.touch File.join(original_dir, Choice.choices.output_dir, ".yas-ignore-filenames-as-triggers")
File.open(File.join(original_dir, Choice.choices.output_dir, ".yas-setup.el"), 'w') do |file| yas_setup_el = File.join(original_dir, Choice.choices.output_dir, ".yas-setup.el")
file.write ";; .yas-setup.el for #{modename}\n"
file.write ";;\n" existing = nil
file.write ";; Automatically translated menu\n" separator = ";; --**--"
file.write(menustr) File.open yas_setup_el, 'r' do |file|
file.write "\n;;\n" existing = file.read.split( ";; --**--")
file.write ";; .yas-setup.el for #{modename} ends here\n" existing = existing[0] || (";; .yas-setup.el for #{modename}\n" +
";; \n")
end
File.open yas_setup_el, 'w' do |file|
file.puts existing
file.puts separator
file.puts ";; Automatically generated code - Translated menu"
file.puts ";; "
file.puts menustr
file.puts
file.puts ";; Unknown content substitutions:"
file.puts ";; "
TmSnippet::unknown_substitutions["content"].reduce([]) do |acc,e1|
# if !acc.index {|e2| e2[0]==e[0]} then acc << e1 end
acc.push e1 unless !acc || acc.index {|e2| e2[0]==e1[0]}
acc
end.each do |pair|
file.puts ";; " + pair[0] + (" " * [1, 50-pair[0].length].max) + "as in '" + pair[1] + "'"
end
file.puts ";; "
file.puts
file.puts ";; .yas-setup.el for #{modename} ends here"
end end
end end
end end

View File

@ -15,28 +15,29 @@ class TmSnippet
%q@${3/(^.*?\S.*)|.*/(?1:\()/}@ => '${3:$(and (string-match "[^\s\t]" yas/text) "(" )}', %q@${3/(^.*?\S.*)|.*/(?1:\()/}@ => '${3:$(and (string-match "[^\s\t]" yas/text) "(" )}',
%q@${3/(^.*?\S.*)|.*/(?1:\))/}@ => '${3:$(and (string-match "[^\s\t]" yas/text) ")" )}', %q@${3/(^.*?\S.*)|.*/(?1:\))/}@ => '${3:$(and (string-match "[^\s\t]" yas/text) ")" )}',
%q@${2/^\s*$|(.*\S.*)/(?1: )/}@ => '${2:$(and (string-match "[^\s\t]" yas/text) " " )}', %q@${2/^\s*$|(.*\S.*)/(?1: )/}@ => '${2:$(and (string-match "[^\s\t]" yas/text) " " )}',
%q@${3/^\s*$|(.*\S.*)/(?1: )/}@ => '${3:$(and (string-match "[^\s\t]" yas/text) " " )}', %q@${3/^\s*$|(.*\S.*)/(?1: )/}@ => '${3:$(and (string-match "[^\s\t]" yas/text) " " )}'
%q@${3/(^[rwab+]+$)|.*/(?1:")/}@ => '${}', # %q@${3/(^[rwab+]+$)|.*/(?1:")/}@ => '${}',
%q@${3/(^[rwab+]+$)|.*/(?1:, ")/}@ => '${}', # %q@${3/(^[rwab+]+$)|.*/(?1:, ")/}@ => '${}',
%q@${3/^\s*$|(.*\S.*)/(?1:, )/}@ => '${}', # %q@${3/^\s*$|(.*\S.*)/(?1:, )/}@ => '${}',
%q@${1:"${2:path/or/url/or/pipe}@ => '${}', # %q@${1:"${2:path/or/url/or/pipe}@ => '${}',
%q@${2:${1/([\w&&[^_]]+)|./\u$1/g}@ => '${}', # %q@${2:${1/([\w&&[^_]]+)|./\u$1/g}@ => '${}',
%q@${TM_SELECTED_TEXT/([\t ]*).*/$1/m}@ => '${}', # %q@${TM_SELECTED_TEXT/([\t ]*).*/$1/m}@ => '${}',
%q@${1:"${2:path/to/file}"}${3/(^[rwab+]+$)|.*/(?1:, ")/}@ => '${}', # %q@${1:"${2:path/to/file}"}${3/(^[rwab+]+$)|.*/(?1:, ")/}@ => '${}',
%q@${3:${TM_SELECTED_TEXT/(\A.*)|(.+)|\n\z/(?1:$0:(?2:\t$0))/g}@ => '${}', # %q@${3:${TM_SELECTED_TEXT/(\A.*)|(.+)|\n\z/(?1:$0:(?2:\t$0))/g}@ => '${}',
%q@${1:${TM_FILENAME/(?:\A|_)([A-Za-z0-9]+)(?:\.rb)?/(?2::\u$1)/g}@ => '${}', # %q@${1:${TM_FILENAME/(?:\A|_)([A-Za-z0-9]+)(?:\.rb)?/(?2::\u$1)/g}@ => '${}',
%q@${1/(^(?<var>\s*[a-z_][a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:|)/}@ => '${}', # %q@${1/(^(?<var>\s*[a-z_][a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:|)/}@ => '${}',
%q@${1/(^(?<var>\s*[a-z_][a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1: |)/}@ => '${}', # %q@${1/(^(?<var>\s*[a-z_][a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1: |)/}@ => '${}',
%q@${1/(^(?<var>\s*[a-z_][a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:| )/}@ => '${}', # %q@${1/(^(?<var>\s*[a-z_][a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:| )/}@ => '${}',
%q@${2/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:|)/}@ => '${}', # %q@${2/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:|)/}@ => '${}',
%q@${1/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:|)/}@ => '${}', # %q@${1/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:|)/}@ => '${}',
%q@${2/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:|)/}@ => '${}', # %q@${2/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:|)/}@ => '${}',
%q@${1/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:|)/}@ => '${}', # %q@${1/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:|)/}@ => '${}',
%q@${2/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:| )/}@ => '${}', # %q@${2/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:| )/}@ => '${}',
%q@${1/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:| )/}@ => '${}', # %q@${1/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:| )/}@ => '${}',
%q@${2/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:| )/}@ => '${}', # %q@${2/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:| )/}@ => '${}',
%q@${1/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:| )/}@ => '${}', # %q@${1/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:| )/}@ => '${}',
%q@${2/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:| )/}@ => '${}' # %q@${2/(^(?<var>\s*(?:\*|\*?[a-z_])[a-zA-Z0-9_]*\s*)(,\g<var>)*,?\s*$)|.*/(?1:| )/}@ => '${}'
} }
] ]
end end