def on_query_completions(self, view, prefix, locations):
# match inside a CSS document and
# match inside the style attribute of HTML tags, incl. just before the quote that closes the attribute value
css_selector_scope = "source.css - meta.selector.css"
html_style_selector_scope = "text.html meta.attribute-with-value.style.html " + \
"string.quoted - punctuation.definition.string.begin.html"
selector_scope = css_selector_scope + ', ' + html_style_selector_scope
prop_name_scope = "meta.property-name.css"
prop_value_scope = "meta.property-value.css"
loc = locations[0]
# When not inside CSS, don’t trigger
if not view.match_selector(loc, selector_scope):
return []
if not self.props:
self.props = parse_css_data()
self.regex = re.compile(r"([a-zA-Z-]+):\s*$")
l = []
if (view.match_selector(loc, prop_value_scope) or
# This will catch scenarios like .foo {font-style: |}
view.match_selector(loc - 1, prop_value_scope)):
alt_loc = loc - len(prefix)
line = view.substr(sublime.Region(view.line(alt_loc).begin(), alt_loc))
match = re.search(self.regex, line)
if match:
prop_name = match.group(1)
if prop_name in self.props:
values = self.props[prop_name]
add_semi_colon = view.substr(sublime.Region(loc, loc + 1)) != ';'
for value in values:
desc = value
snippet = value
if add_semi_colon:
snippet += ";"
if snippet.find("$1") != -1:
desc = desc.replace("$1", "")
l.append((desc, snippet))
return (l, sublime.INHIBIT_WORD_COMPLETIONS)
return None
else:
add_colon = not view.match_selector(loc, prop_name_scope)
for prop in self.props:
if add_colon:
l.append((prop, prop + ": "))
else:
l.append((prop, prop))
return (l, sublime.INHIBIT_WORD_COMPLETIONS)
评论列表
文章目录