docs: def py_syntax_highlight(self, s):
          """
          :param str s:
          :rtype: str
          """
          if not self.enable:
              return s
          state = 0
          spaces = " \t\n"
          ops = ".,;:+-*/%&!=|(){}[]^<>"
          i = 0
          cur_token = ""
          color_args = {0: {}, len(s): {}}  # type: typing.Dict[int,typing.Dict[str]]  # pos in s -> color kwargs
  
          def finish_identifier():
              """
              Reset color to standard for current identifier.
              """
              if cur_token in py_keywords:
                  color_args[max([k for k in color_args.keys() if k < i])] = {"color": self.fg_colors[0]}
  
          while i < len(s):
              c = s[i]
              i += 1
              if c == "\n":
                  if state == 3:
                      finish_identifier()
                  color_args[i] = {}
                  state = 0
              elif state == 0:
                  if c in spaces:
                      pass
                  elif c in ops:
                      color_args[i - 1] = {"color": self.fg_colors[0]}
                      color_args[i] = {}
                  elif c == "#":
                      color_args[i - 1] = {"color": self.fg_colors[3]}
                      state = 6
                  elif c == '"':
                      color_args[i - 1] = {"color": self.fg_colors[2]}
                      state = 1
                  elif c == "'":
                      color_args[i - 1] = {"color": self.fg_colors[2]}
                      state = 2
                  else:
                      cur_token = c
                      color_args[i - 1] = {}
                      state = 3
              elif state == 1:  # string via "
                  if c == "\\":
                      state = 4
                  elif c == "\"":
                      color_args[i] = {}
                      state = 0
              elif state == 2:  # string via '
                  if c == "\\":
                      state = 5
                  elif c == "'":
                      color_args[i] = {}
                      state = 0
              elif state == 3:  # identifier
                  if c in spaces + ops + "#\"'":
                      finish_identifier()
                      color_args[i] = {}
                      state = 0
                      i -= 1
                  else:
                      cur_token += c
              elif state == 4:  # escape in "
                  state = 1
              elif state == 5:  # escape in '
                  state = 2
              elif state == 6:  # comment
                  pass
          if state == 3:
              finish_identifier()
          out = ""
          i = 0
          while i < len(s):
              j = min([k for k in color_args.keys() if k > i])
              out += self.color(s[i:j], **color_args[i])
              i = j
          return out