Fixes and improvements to snipmate conversion util by Steve McKinney
This commit is contained in:
parent
b56e8991c7
commit
54d917ddd4
@ -1260,6 +1260,7 @@ Contributors listed in chronological order:
|
|||||||
stardiviner - NagatoPain
|
stardiviner - NagatoPain
|
||||||
skeept - Jorge Rodrigues
|
skeept - Jorge Rodrigues
|
||||||
buztard
|
buztard
|
||||||
|
stephenmckinney - Steve McKinney
|
||||||
|
|
||||||
|
|
||||||
7.2 Snippets *UltiSnips-contrisnippets*
|
7.2 Snippets *UltiSnips-contrisnippets*
|
||||||
|
@ -22,9 +22,9 @@ def convert_snippet_file(source):
|
|||||||
# Ignore empty lines
|
# Ignore empty lines
|
||||||
if line.strip() == "":
|
if line.strip() == "":
|
||||||
continue
|
continue
|
||||||
# The rest of the handlig is stateful
|
# The rest of the handling is stateful
|
||||||
if state == 0:
|
if state == 0:
|
||||||
# Find snippet start
|
# Find snippet start. Keep comments.
|
||||||
if line[:8] == "snippet ":
|
if line[:8] == "snippet ":
|
||||||
snippet_info = re.match("(\S+)\s*(.*)", line[8:])
|
snippet_info = re.match("(\S+)\s*(.*)", line[8:])
|
||||||
if not snippet_info:
|
if not snippet_info:
|
||||||
@ -33,6 +33,9 @@ def convert_snippet_file(source):
|
|||||||
retval += 'snippet %s "%s"' % (snippet_info.group(1), snippet_info.group(2) if snippet_info.group(2) else snippet_info.group(1)) + "\n"
|
retval += 'snippet %s "%s"' % (snippet_info.group(1), snippet_info.group(2) if snippet_info.group(2) else snippet_info.group(1)) + "\n"
|
||||||
state = 1
|
state = 1
|
||||||
snippet = ""
|
snippet = ""
|
||||||
|
elif line[:1] == "#":
|
||||||
|
retval += line
|
||||||
|
state = 0
|
||||||
elif state == 1:
|
elif state == 1:
|
||||||
# First line of snippet: Get indentation
|
# First line of snippet: Get indentation
|
||||||
whitespace = re.search("^\s+", line)
|
whitespace = re.search("^\s+", line)
|
||||||
@ -45,10 +48,12 @@ def convert_snippet_file(source):
|
|||||||
snippet += line[len(whitespace):]
|
snippet += line[len(whitespace):]
|
||||||
state = 2
|
state = 2
|
||||||
elif state == 2:
|
elif state == 2:
|
||||||
# In snippet: Check if indentation level is the same. If not, snippet has ended
|
# In snippet: If indentation level is the same, add to snippet. Else end snippet.
|
||||||
if line[:len(whitespace)] != whitespace:
|
if line[:len(whitespace)] == whitespace:
|
||||||
|
snippet += line[len(whitespace):]
|
||||||
|
else:
|
||||||
retval += convert_snippet_contents(snippet) + "endsnippet\n\n"
|
retval += convert_snippet_contents(snippet) + "endsnippet\n\n"
|
||||||
# Copy-paste the section from state=0 so that we don't skip every other snippet
|
#Copy-paste the section from state=0 so that we don't skip every other snippet
|
||||||
if line[:8] == "snippet ":
|
if line[:8] == "snippet ":
|
||||||
snippet_info = re.match("(\S+)\s*(.*)", line[8:])
|
snippet_info = re.match("(\S+)\s*(.*)", line[8:])
|
||||||
if not snippet_info:
|
if not snippet_info:
|
||||||
@ -57,8 +62,9 @@ def convert_snippet_file(source):
|
|||||||
retval += 'snippet %s "%s"' % (snippet_info.group(1), snippet_info.group(2) if snippet_info.group(2) else snippet_info.group(1)) + "\n"
|
retval += 'snippet %s "%s"' % (snippet_info.group(1), snippet_info.group(2) if snippet_info.group(2) else snippet_info.group(1)) + "\n"
|
||||||
state = 1
|
state = 1
|
||||||
snippet = ""
|
snippet = ""
|
||||||
else:
|
elif line[:1] == "#":
|
||||||
snippet += line[len(whitespace):]
|
retval += line
|
||||||
|
state = 0
|
||||||
if state == 2:
|
if state == 2:
|
||||||
retval += convert_snippet_contents(snippet) + "endsnippet\n\n"
|
retval += convert_snippet_contents(snippet) + "endsnippet\n\n"
|
||||||
return retval
|
return retval
|
||||||
@ -85,12 +91,18 @@ if __name__ == '__main__':
|
|||||||
argsp.add_argument("target", help="File to write the resulting snippets into. If omitted, the snippets will be written to stdout.", nargs="?", default="-")
|
argsp.add_argument("target", help="File to write the resulting snippets into. If omitted, the snippets will be written to stdout.", nargs="?", default="-")
|
||||||
args = argsp.parse_args()
|
args = argsp.parse_args()
|
||||||
|
|
||||||
source = args.source
|
source_file_name = args.source
|
||||||
|
tmp_file_name = ''.join([args.target,'.tmp'])
|
||||||
try:
|
try:
|
||||||
target = sys.stdout if args.target == "-" else open(args.target, "w")
|
tmp = sys.stdout if args.target == "-" else open(tmp_file_name, "w")
|
||||||
except IOError:
|
except IOError:
|
||||||
print >> sys.stderr, "Error: Failed to open output file %s for writing" % args.target
|
print >> sys.stderr, "Error: Failed to open output file %s for writing" % tmp_file_name
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
snippets = convert_snippets(source)
|
snippets = convert_snippets(source_file_name)
|
||||||
print >> target, snippets
|
print >> tmp, snippets
|
||||||
|
|
||||||
|
if args.target != "-":
|
||||||
|
if os.access(args.target, os.F_OK):
|
||||||
|
os.remove(args.target)
|
||||||
|
os.rename(tmp_file_name, args.target)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user