diff --git a/Rakefile b/Rakefile index 7f6cb5f..4890328 100644 --- a/Rakefile +++ b/Rakefile @@ -4,7 +4,8 @@ require 'fileutils' desc "generate the bundle file." task :bundle do - sh "tools/compile.py -i yasnippet.el -o yasnippet-bundle.el snippets" + sh 'emacs --batch -l yasnippet.el --eval "(yas/compile-bundle ' + + '\"./yasnippet.el\" \"./yasnippet-bundle.el\" \"./snippets\")"' end desc "create a release package" diff --git a/tools/compile.py b/tools/compile.py deleted file mode 100644 index add6c02..0000000 --- a/tools/compile.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/python - -# Author: pluskid -# X-URL: http://code.google.com/p/yasnippet/ -# A tool to compile yasnippet.el and the snippets into a single -# yasnippet-bundle.elc file. - -import sys -import os -import re -import getopt -import shutil - -options = { - 'emacs' : 'emacs', - 'dest' : '../yasnippet-bundle.el', - 'byte-compile' : True, - 'src' : '../yasnippet.el', - 'dirs' : [] -} -dest_file = None - -def usage(): - message = sys.argv[0] + """ options directory ... - - Scan directories, load the definitions of snippets - and compile them with yasnippet.el to a stand-alone - easy to use bundle. - - Options: - -i The location of yasnippet.el. - Default value is '../yasnippet.el'. - -o The output file. - Default value is '../yasnippet-bundle.el'. - -n Do not byte-compile the result. - -e The location of the emacs executable. - Default value is 'emacs'. - -h Print this message.""" - print >> sys.stderr, message - -def process_args(): - opts, dirs = getopt.gnu_getopt(sys.argv[1:], "nhi:o:e:") - for o, v in opts: - if o == "-h": - usage() - return False - elif o == "-n": - options['byte-compile'] = False - elif o == "-i": - options['src'] = v - elif o == "-o": - options['dest'] = v - elif o == "-e": - options['emacs'] = v - options['dirs'] = dirs - - if not os.path.isfile(options['src']): - print >> sys.stderr, "Can't read " + options['src'] - return False - for dir in dirs: - if not os.path.isdir(dir): - print >> sys.stderr, dir + " is not a existing directory" - return False - return True - -def prepare(): - global dest_file - dest_file = open(options['dest'], 'w+') - dest_file.write(open(options['src']).read()) - dest_file.write(""" - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;; Auto-generated code ;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(yas/initialize) -""") - -def finish(): - dest_file.write("(provide '") - dest_file.write(re.sub('\.[^.]*$', '', os.path.basename(options['dest']))) - dest_file.write(")\n") - dest_file.close() - -def parse_snippet(cont): - rlt = re.search("^# --\n", cont, re.M) - if rlt: - header = cont[0:rlt.start()] - temp = cont[rlt.end():] - rlt = re.search("^#name *: *(.*)$", header, re.M) - if rlt: - return (temp, rlt.group(1)) - return (temp, None) - return (cont, None) - -def quote_string(str): - return '"' + str.replace("\\", "\\\\").replace("\"", "\\\"") + '"' - -def compile_snippet(dir, mode, key): - cont = open(os.path.join(dir, mode, key)).read() - template, name = parse_snippet(cont) - dest_file.write("(yas/define '" + mode + " ") - dest_file.write(quote_string(key) + "\n ") - dest_file.write(quote_string(template) + " ") - dest_file.write(quote_string(name or key) + ")\n") - -def compile_snippets(dir): - modes = [e for e in os.listdir(dir) if e[0] != '.'] - dest_file.write("\n;;; snippets from " + dir + "\n") - for mode in modes: - dest_file.write("\n;; snippets for " + mode + "\n") - keys = [e for e in os.listdir(os.path.join(dir, mode)) \ - if os.path.isfile(os.path.join(dir, mode, e))] - for key in keys: - compile_snippet(dir, mode, key) - -def byte_compile(): - os.system(options['emacs'] + - " --batch" + - " --eval \"(byte-compile-file \\\"" + - options['dest'] + - "\\\")\"") - -if __name__ == '__main__': - if len(sys.argv) < 2: - usage() - sys.exit(1) - if not process_args(): - sys.exit(2) - - prepare() - for dir in options['dirs']: - compile_snippets(dir) - finish() - if options['byte-compile']: - byte_compile()