replace bundle compile tool with elisp code

This commit is contained in:
Zhang Chiyuan 2008-03-08 04:48:03 +00:00
parent 52f69ea9a1
commit 5b33a6c8f1
2 changed files with 2 additions and 136 deletions

View File

@ -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"

View File

@ -1,135 +0,0 @@
#!/usr/bin/python
# Author: pluskid <pluskid@gmail.com>
# 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()