Example #1
0
class SyntaxBLS(EventListener):
	"Автодополнения и проверка синтаксиса bls-файлов"

	def __init__(self):
		self.timer_edit = LastCallTimer(500, self.modified_timeout)

	def show_errors(self, view, ParseErrors):
		key_name = "bls_syntax_err"  # уникальное имя подсветки
		scope	 = 'invalid'         # стиль подветки
		icon	 = ''                # что должно быть на полях доступные значения: (''/dot/circle/bookmark/cross)
		view.erase_regions(key_name)
		reg = []

		for it in ParseErrors:
			line      = it[0] - 1
			offset    = it[1]
			token_len = it[2]
			pt_begin = view.text_point(line, offset)
			if token_len == 0:
				ln = view.line(sublime.Region(pt_begin,pt_begin))
				pt_end = ln.b
			else:
				pt_end = pt_begin + token_len
			reg.append(sublime.Region(pt_begin,pt_end))
		if len(reg) != 0:
			view.add_regions(key_name, reg, scope, icon, sublime.DRAW_EMPTY)

	def modified_timeout(self, view):
		"Функция вызывается через N секунд после каждого изменения bls скрипта"
		text = view.substr(sublime.Region(0, view.size())).encode("cp1251")
		ParseErrors = blsparse.parse_text(text)
		self.show_errors(view, ParseErrors["Errors"])

	def run_check_bls(self, view):
		syntax = view.settings().get("syntax")
		if utils.file_name_by_fullname(syntax) != u"bls":
			return
		self.timer_edit.call(view)

	def on_load(self, view):
		self.run_check_bls(view)

	def on_modified(self, view):
		self.run_check_bls(view)

	def on_query_completions(self, view, prefix, locations):
		if view.match_selector(locations[0], "source.BLS"):
			text = view.substr(sublime.Region(0, view.size())).encode("cp1251")
			return AutoCompletions().generate(view.file_name(), text)
		else:
			return []
Example #2
0
	def __init__(self):
		self.timer_edit = LastCallTimer(500, self.modified_timeout)