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 []
def __init__(self): self.timer_edit = LastCallTimer(500, self.modified_timeout)