code: def _compute_line(source_code, start, length):
          
          total_length = len(source_code)
          source_code = source_code.splitlines(True)
          counter = 0
          i = 0
          lines = []
          starting_column = None
          ending_column = None
          while counter < total_length:
              # Determine the length of the line, and advance the line number
              lineLength = len(source_code[i])
              i = i + 1
  
              # Determine our column numbers.
              if starting_column is None and counter + lineLength > start:
                  starting_column = (start - counter) + 1
              if starting_column is not None and ending_column is None and counter + lineLength > start + length:
                  ending_column = ((start + length) - counter) + 1
  
              # Advance the current position counter, and determine line numbers.
              counter += lineLength
              if counter > start:
                  lines.append(i)
  
              # If our advanced position for the next line is out of range, stop.
              if counter > start + length:
                  break
  
          return (lines, starting_column, ending_column)
docs: Compute line(s) numbers and starting/ending columns
              from a start/end offset. All numbers start from 1.
  
              Not done in an efficient way