code: def patch_addContext(self, patch, text):
      
      if len(text) == 0:
        return
      pattern = text[patch.start2 : patch.start2 + patch.length1]
      padding = 0
  
      # Look for the first and last matches of pattern in text.  If two different
      # matches are found, increase the pattern length.
      while (text.find(pattern) != text.rfind(pattern) and (self.Match_MaxBits ==
          0 or len(pattern) < self.Match_MaxBits - self.Patch_Margin -
          self.Patch_Margin)):
        padding += self.Patch_Margin
        pattern = text[max(0, patch.start2 - padding) :
                       patch.start2 + patch.length1 + padding]
      # Add one chunk for good luck.
      padding += self.Patch_Margin
  
      # Add the prefix.
      prefix = text[max(0, patch.start2 - padding) : patch.start2]
      if prefix:
        patch.diffs[:0] = [(self.DIFF_EQUAL, prefix)]
      # Add the suffix.
      suffix = text[patch.start2 + patch.length1 :
                    patch.start2 + patch.length1 + padding]
      if suffix:
        patch.diffs.append((self.DIFF_EQUAL, suffix))
  
      # Roll back the start points.
      patch.start1 -= len(prefix)
      patch.start2 -= len(prefix)
      # Extend lengths.
      patch.length1 += len(prefix) + len(suffix)
      patch.length2 += len(prefix) + len(suffix)
docs: Increase the context until it is unique,
      but don't let the pattern expand beyond Match_MaxBits.
  
      Args:
        patch: The patch to grow.
        text: Source text.