コード例 #1
0
    def __init__(self, text_widget, normal_font, bold_font, italic_font):
        self.normal_font = normal_font
        self.italic_font = italic_font
        self.bold_font = bold_font

        self._text = text_widget
        self.redir = WidgetRedirector(self._text)

        self.insert = self.redir.register("insert", self.on_insert)
        self.delete = self.redir.register("delete", self.on_delete)
        self._apply_tags()

        self._re_keyword = re.compile('(' + '|'.join(sql_keywords) + ')$')
        self._re_type = re.compile('(' + '|'.join(sql_types) + ')$')
        self._re_operator = re.compile('(' + '|'.join(sql_operators) + ')$')
コード例 #2
0
  def __init__(self, text_widget, normal_font, bold_font, italic_font):
    self.normal_font = normal_font
    self.italic_font = italic_font
    self.bold_font = bold_font
    
    self._text = text_widget
    self.redir = WidgetRedirector(self._text)

    self.insert = self.redir.register("insert", self.on_insert)
    self.delete = self.redir.register("delete", self.on_delete)
    self._apply_tags()
 
    self._re_keyword = re.compile('(' + '|'.join(sql_keywords) + ')$')
    self._re_type = re.compile('(' + '|'.join(sql_types) + ')$')
    self._re_operator = re.compile('(' + '|'.join(sql_operators) + ')$')
コード例 #3
0
class SqlSyntaxHighlight:
    def __init__(self, text_widget, normal_font, bold_font, italic_font):
        self.normal_font = normal_font
        self.italic_font = italic_font
        self.bold_font = bold_font

        self._text = text_widget
        self.redir = WidgetRedirector(self._text)

        self.insert = self.redir.register("insert", self.on_insert)
        self.delete = self.redir.register("delete", self.on_delete)
        self._apply_tags()

        self._re_keyword = re.compile('(' + '|'.join(sql_keywords) + ')$')
        self._re_type = re.compile('(' + '|'.join(sql_types) + ')$')
        self._re_operator = re.compile('(' + '|'.join(sql_operators) + ')$')

    def on_insert(self, index, chars, tags=None):
        #    print("on_insert (index=%s, chars=%s, tags=%s)" % (str(index), str(chars), str(tags)) )
        self.insert(index, chars, tags)
        self.syntax_highlight()

    def on_delete(self, index1, index2=None):
        #    print("on_delete (index1=%s, index2=%s)" % (str(index1), str(index2)))
        self.delete(index1, index2)

    def syntax_highlight(self):
        index = self._text.search(r'\s', "insert", backwards=True, regexp=True)
        if index == "":
            index = "1.0"
        else:
            index = self._text.index("%s+1c" % index)

        word = self._text.get(index, "insert").lower()
        word_len = len(word)
        if word_len <= 0:
            return

        txt_pattern = "%s+%dc" % (index, word_len)

        # Variables
        if word[0] == ':' or word == 'null':
            self._text.tag_add("variable", index, txt_pattern)
        else:
            self._text.tag_remove("variable", index, txt_pattern)

        # Digits
        if word.isdigit():
            self._text.tag_add("digit", index, txt_pattern)
        else:
            self._text.tag_remove("digit", index, txt_pattern)

        # Keywords
        if self._re_keyword.match(word):
            self._text.tag_add("keyword", index, txt_pattern)
        else:
            self._text.tag_remove("keyword", index, txt_pattern)

        # Types
        if self._re_type.match(word):
            self._text.tag_add("type", index, txt_pattern)
        else:
            self._text.tag_remove("type", index, txt_pattern)

        # Operators
        if self._re_operator.match(word):
            self._text.tag_add("operator", index, txt_pattern)
        else:
            self._text.tag_remove("operator", index, txt_pattern)

    def _apply_tags(self):
        self._text.tag_config("keyword",
                              foreground=colorscheme.blue,
                              font=self.bold_font)
        self._text.tag_config("operator", foreground=colorscheme.cyan)
        self._text.tag_config("variable", foreground=colorscheme.red)
        self._text.tag_config("type", foreground=colorscheme.cyan)
        self._text.tag_config("string", foreground=colorscheme.orange)
        self._text.tag_config("digit", foreground=colorscheme.orange)
        self._text.tag_config("comment",
                              foreground=colorscheme.base1,
                              font=self.italic_font)
コード例 #4
0
class SqlSyntaxHighlight:
  def __init__(self, text_widget, normal_font, bold_font, italic_font):
    self.normal_font = normal_font
    self.italic_font = italic_font
    self.bold_font = bold_font
    
    self._text = text_widget
    self.redir = WidgetRedirector(self._text)

    self.insert = self.redir.register("insert", self.on_insert)
    self.delete = self.redir.register("delete", self.on_delete)
    self._apply_tags()
 
    self._re_keyword = re.compile('(' + '|'.join(sql_keywords) + ')$')
    self._re_type = re.compile('(' + '|'.join(sql_types) + ')$')
    self._re_operator = re.compile('(' + '|'.join(sql_operators) + ')$')

  def on_insert(self, index, chars, tags=None):
#    print("on_insert (index=%s, chars=%s, tags=%s)" % (str(index), str(chars), str(tags)) )
    self.insert(index, chars, tags)
    self.syntax_highlight()

  def on_delete(self, index1, index2=None):
#    print("on_delete (index1=%s, index2=%s)" % (str(index1), str(index2)))
    self.delete(index1, index2)

  def syntax_highlight(self):
    index = self._text.search(r'\s', "insert", backwards=True, regexp=True)
    if index == "":
      index ="1.0"
    else:
      index = self._text.index("%s+1c" % index)

    word = self._text.get(index, "insert").lower()
    word_len = len(word)
    if word_len <= 0:
      return

    txt_pattern = "%s+%dc" % (index, word_len)

    # Variables
    if word[0] == ':' or word == 'null':
      self._text.tag_add("variable", index, txt_pattern)
    else:
      self._text.tag_remove("variable", index, txt_pattern)

    # Digits
    if word.isdigit():
      self._text.tag_add("digit", index, txt_pattern)
    else:
      self._text.tag_remove("digit", index, txt_pattern)
    
    # Keywords
    if self._re_keyword.match(word):
      self._text.tag_add("keyword", index, txt_pattern)
    else:
      self._text.tag_remove("keyword", index, txt_pattern)
    
    # Types
    if self._re_type.match(word):
      self._text.tag_add("type", index, txt_pattern)
    else:
      self._text.tag_remove("type", index, txt_pattern)

    # Operators
    if self._re_operator.match(word):
      self._text.tag_add("operator", index, txt_pattern)
    else:
      self._text.tag_remove("operator", index, txt_pattern)


  def _apply_tags(self):
    self._text.tag_config("keyword", foreground=colorscheme.blue, font=self.bold_font)
    self._text.tag_config("operator", foreground=colorscheme.cyan)
    self._text.tag_config("variable", foreground=colorscheme.red)
    self._text.tag_config("type", foreground=colorscheme.cyan)
    self._text.tag_config("string", foreground=colorscheme.orange)
    self._text.tag_config("digit", foreground=colorscheme.orange)
    self._text.tag_config("comment", foreground=colorscheme.base1, font=self.italic_font)