def _coalesce_edit_ranges(self, rng=None): rng_ = self._edit_range if rng is None or rng_ is ALL: rng = None elif rng_ is not None: rng = union_range(rng, rng_) self._edit_range = rng or ALL return (self, rng), {}
def coalesce_edit_ranges(rng=None): nonlocal edit_range rng_ = edit_range if rng is None or rng_ is ALL: rng = None elif rng_ is not None: rng = union_range(rng, rng_) edit_range = rng or ALL return (rng,), {}
def color_text(self, text, minrange=None, timeout=None): if text.editedMask() == ak.NSTextStorageEditedAttributes: return # we don't care if only attributes changed try: cancel = text.__cancel_incomplete_highlight except AttributeError: pass else: del text.__cancel_incomplete_highlight cancelled_range = cancel() if minrange is not None: minrange = union_range(cancelled_range, minrange) store = text.store lang = self.syntaxdef if lang is None or not lang.wordinfo: if not minrange or minrange[0] == 0: rng = (0, len(text)) rem_attribute = store.removeAttribute_range_ rem_attribute(SYNTAX_TOKEN, rng) rem_attribute(SYNTAX_RANGE, rng) fg_name = ak.NSForegroundColorAttributeName add_attribute = store.addAttribute_value_range_ add_attribute(fg_name, self.theme.text_color, rng) return tlen = len(text) if not tlen: return if minrange is not None and self.langs is not None: start = max(minrange[0] - 1, 0) whitespace = lang.whitespace start = max(minrange[0] - 1, 0) while start > 0: if text[start] in whitespace: break start -= 1 long_range = store.attribute_atIndex_longestEffectiveRange_inRange_ token, adjrange = long_range(SYNTAX_TOKEN, start, None, (0, tlen)) #log.debug("%s %s %s -> %s", # minrange, start, tuple(adjrange), # tuple(NSUnionRange(minrange, adjrange))) minrange = NSUnionRange(minrange, adjrange) offset = minrange[0] minend = sum(minrange) #log.debug("%s %s %s %s", token, offset, minend, minrange) else: self.langs = {} offset = 0 minend = tlen self.scan(lang, text, offset, minend, tlen, timeout)