Esempio n. 1
0
    def highlighting(self, left, right, scope_bracket=False):
        """
        Adjust region to highlight.

        This is done after all methods that need
        to know actual bracket region.  At this point, we no longer care about
        the actual bracket's region, and we change the highlight region to something
        completely different.
        """

        if left is not None:
            if scope_bracket:
                bracket = self.rules.scopes[left.scope]["brackets"][left.type]
                bracket_scope = left.scope
            else:
                bracket = self.rules.brackets[left.type]
            bracket_type = left.type
        elif right is not None:
            if scope_bracket:
                bracket = self.rules.scopes[right.scope]["brackets"][right.type]
                bracket_scope = right.scope
            else:
                bracket = self.rules.brackets[right.type]
            bracket_type = right.type
        else:
            return left, right

        if not self.rules.highlighting:
            return left, right

        if bracket.highlighting is not None:
            lbracket, rbracket = bracket.highlighting(
                self.view,
                bracket.name,
                self.bracket_style,
                bh_plugin.BracketRegion(left.begin, left.end) if left is not None else None,
                bh_plugin.BracketRegion(right.begin, right.end) if right is not None else None
            )

            if scope_bracket:
                if lbracket is not None:
                    left = bh_search.ScopeEntry(lbracket.begin, lbracket.end, bracket_scope, bracket_type)
                else:
                    left = None
                if rbracket is not None:
                    right = bh_search.ScopeEntry(rbracket.begin, rbracket.end, bracket_scope, bracket_type)
                else:
                    right = None
            else:
                if lbracket is not None:
                    left = bh_search.BracketEntry(lbracket.begin, lbracket.end, bracket_type)
                else:
                    left = None
                if rbracket is not None:
                    right = bh_search.BracketEntry(rbracket.begin, rbracket.end, bracket_type)
                else:
                    right = None
        return left, right
Esempio n. 2
0
    def post_match(self, left, right, center, scope_bracket=False):
        """
        Peform special logic after a match has been made.
        This function allows bracket plugins to add aditional logic.
        """

        if left is not None:
            if scope_bracket:
                bracket = self.rules.scopes[left.scope]["brackets"][left.type]
                bracket_scope = left.scope
            else:
                bracket = self.rules.brackets[left.type]
            bracket_type = left.type
        elif right is not None:
            if scope_bracket:
                bracket = self.rules.scopes[right.scope]["brackets"][
                    right.type]
                bracket_scope = right.scope
            else:
                bracket = self.rules.brackets[right.type]
            bracket_type = right.type
        else:
            return left, right

        self.bracket_style = bracket.style

        if not self.rules.check_post_match:
            return left, right

        if bracket.post_match is not None:
            try:
                lbracket, rbracket, self.bracket_style = bracket.post_match(
                    self.view, bracket.name, bracket.style,
                    bh_plugin.BracketRegion(left.begin, left.end)
                    if left is not None else None,
                    bh_plugin.BracketRegion(right.begin, right.end)
                    if right is not None else None, center,
                    self.search.get_buffer(), self.search.search_window)

                if scope_bracket:
                    left = bh_search.ScopeEntry(
                        lbracket.begin, lbracket.end, bracket_scope,
                        bracket_type) if lbracket is not None else None
                    right = bh_search.ScopeEntry(
                        rbracket.begin, rbracket.end, bracket_scope,
                        bracket_type) if rbracket is not None else None
                else:
                    left = bh_search.BracketEntry(
                        lbracket.begin, lbracket.end,
                        bracket_type) if lbracket is not None else None
                    right = bh_search.BracketEntry(
                        rbracket.begin, rbracket.end,
                        bracket_type) if rbracket is not None else None
            except:
                log("Plugin Post Match Error:\n%s" %
                    str(traceback.format_exc()))

        return left, right