mirror of
https://github.com/joaotavora/yasnippet.git
synced 2025-10-13 13:13:03 +00:00
replace bundle compile tool with elisp code
This commit is contained in:
parent
52f69ea9a1
commit
5b33a6c8f1
3
Rakefile
3
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"
|
||||
|
135
tools/compile.py
135
tools/compile.py
@ -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()
|
Loading…
x
Reference in New Issue
Block a user