Merge lp:~blueyed/ultisnips/improve-convert-script into lp:~sirver/ultisnips/trunk

Proposed by Daniel Hahler
Status: Merged
Merged at revision: 259
Proposed branch: lp:~blueyed/ultisnips/improve-convert-script
Merge into: lp:~sirver/ultisnips/trunk
Diff against target: 133 lines (+77/-8)
1 file modified
utils/get_tm_snippets.py (+77/-8)
To merge this branch: bzr merge lp:~blueyed/ultisnips/improve-convert-script
Reviewer Review Type Date Requested Status
SirVer Pending
Review via email: mp+52487@code.launchpad.net
To post a comment you must log in.
Revision history for this message
SirVer (sirver) wrote :

Definitivly an improvement. Still a hack the whole script though ;). Thanks for sharing!

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'utils/get_tm_snippets.py'
2--- utils/get_tm_snippets.py 2009-07-30 18:03:56 +0000
3+++ utils/get_tm_snippets.py 2011-03-07 23:01:36 +0000
4@@ -6,6 +6,9 @@
5 from xml.etree import ElementTree
6 from xml.parsers.expat import ExpatError
7 import htmlentitydefs
8+import os
9+import glob
10+
11
12 _UNESCAPE = re.compile(ur'&\w+?;', re.UNICODE)
13 def unescape(s):
14@@ -13,12 +16,43 @@
15 return ""
16 def fixup(m):
17 ent = m.group(0)[1:-1]
18- print ent
19 return unichr(htmlentitydefs.name2codepoint[ent])
20 try:
21- return _UNESCAPE.sub(fixup,s.decode("utf-8")).encode("utf-8")
22+ return _UNESCAPE.sub(fixup,s)
23 except:
24- print repr(s)
25+ print "unescape failed: %s" % repr(s)
26+ raise
27+
28+class UnknownVariable(Exception):
29+ pass
30+
31+class UnsupportedVariableExpression(Exception):
32+ pass
33+
34+def replace_vars(m):
35+ """ Replace vars in 'content' portion.
36+ :m: match object
37+ :returns: string"""
38+ var = m.group(1)
39+ default = m.group(2)
40+
41+ if not re.match(r'\w+$', var):
42+ raise UnsupportedVariableExpression(var)
43+
44+ translate_vars = {
45+ 'TM_PHP_OPEN_TAG_WITH_ECHO': 'g:UltiSnipsOpenTagWithEcho',
46+ 'TM_PHP_OPEN_TAG': 'g:UltiSnipsOpenTag',
47+ 'PHPDOC_AUTHOR': 'g:snips_author',
48+ }
49+ # TODO: TM_SELECTED_TEXT/([\t ]*).*/$1/m
50+
51+ if var in translate_vars:
52+ newvar = translate_vars[var]
53+ else:
54+ # TODO: this could be autogenerated
55+ raise UnknownVariable(var)
56+
57+ return "`!v exists('%s') ? %s : '%s'`" % (newvar, newvar, default)
58
59 def parse_content(c):
60 try:
61@@ -28,12 +62,22 @@
62 for k,v in zip(data[::2], data[1::2]):
63 rv[k.text] = unescape(v.text)
64
65+ if re.search( r'\$\{\D', rv["content"] ):
66+ rv["content"] = re.sub(r'\$\{([^\d}][^}:]*)(?::([^}]*))?\}', replace_vars, rv["content"])
67+
68 return rv
69- except ExpatError:
70- print " Syntax Error"
71+ except (ExpatError, ElementTree.ParseError) as detail:
72+ print " Syntax Error: %s" % (detail,)
73+ print c
74+ return None
75+ except UnknownVariable as detail:
76+ print " Unknown variable: %s" % (detail,)
77+ return None
78+ except UnsupportedVariableExpression as detail:
79+ print " Unsupported variable expression: %s" % (detail,)
80 return None
81
82-def fetch_snippets(name):
83+def fetch_snippets_from_svn(name):
84 base_url = "http://svn.textmate.org/trunk/Bundles/" + name + ".tmbundle/"
85 snippet_idx = base_url + "Snippets/"
86
87@@ -57,6 +101,20 @@
88
89 return rv
90
91+def fetch_snippets_from_dir(path):
92+ """ Fetch snippets from a given path"""
93+
94+ rv = []
95+ for filename in glob.glob(os.path.join(path, '*.tmSnippet')):
96+ print "Reading file %s" % filename
97+ f = open(filename)
98+ content = f.read()
99+
100+ cont = parse_content(content)
101+ if cont:
102+ name = os.path.splitext(os.path.basename(filename))[0]
103+ rv.append((name, cont))
104+ return rv
105
106 def write_snippets(snip_descr, f):
107
108@@ -64,6 +122,10 @@
109 if "tabTrigger" not in d:
110 continue
111
112+ if "content" not in d or d["content"] is None:
113+ print "SKIP: %s (no content)" % (d,)
114+ continue
115+
116 f.write('snippet %s "%s"\n' % (d["tabTrigger"], name))
117 f.write(d["content"].encode("utf-8") + "\n")
118 f.write("endsnippet\n\n")
119@@ -74,6 +136,13 @@
120 import sys
121
122 bundle = sys.argv[1]
123- rv = fetch_snippets(bundle)
124- write_snippets(rv, open("tm_" + bundle.lower() + ".snippets","w"))
125+
126+ if os.path.isdir(bundle):
127+ name = sys.argv[2]
128+ rv = fetch_snippets_from_dir(bundle)
129+ else:
130+ rv = fetch_snippets_from_svn(bundle)
131+ name = bundle.lower()
132+
133+ write_snippets(rv, open("tm_" + name + ".snippets","w"))
134

Subscribers

People subscribed via source and target branches