code: def get_pattern_context(pattern, index):
      
  
      last = 0
      current_line = 1
      col = 1
      text = []
      line = 1
  
      # Split pattern by newline and handle the text before the newline
      for m in RE_PATTERN_LINE_SPLIT.finditer(pattern):
          linetext = pattern[last:m.start(0)]
          if not len(m.group(0)) and not len(text):
              indent = ''
              offset = -1
              col = index - last + 1
          elif last <= index < m.end(0):
              indent = '--> '
              offset = (-1 if index > m.start(0) else 0) + 3
              col = index - last + 1
          else:
              indent = '    '
              offset = None
          if len(text):
              # Regardless of whether we are presented with `\r\n`, `\r`, or `\n`,
              # we will render the output with just `\n`. We will still log the column
              # correctly though.
              text.append('\n')
          text.append('{}{}'.format(indent, linetext))
          if offset is not None:
              text.append('\n')
              text.append(' ' * (col + offset) + '^')
              line = current_line
  
          current_line += 1
          last = m.end(0)
  
      return ''.join(text), line, col
docs: Get the pattern context.