code: def dmp_to_mdiff(diffs):
      
      def yield_buffer(lineno_left, lineno_right):
          while left_buffer or right_buffer:
              if left_buffer:
                  left = lineno_left, '\0-{0}\1'.format(left_buffer.pop(0))
                  lineno_left += 1
              else:
                  left = '', '\n'
              if right_buffer:
                  right = lineno_right, '\0+{0}\1'.format(right_buffer.pop(0))
                  lineno_right += 1
              else:
                  right = '', '\n'
              yield (left, right, True), lineno_left, lineno_right
  
      lineno_left = lineno_right = 1
      left_buffer = []
      right_buffer = []
  
      for op, data in diffs:
          for line in data.splitlines(True):
              if op == DMP.DIFF_EQUAL:
                  for item, lleft, llright in yield_buffer(lineno_left,
                                                           lineno_right):
                      lineno_left = lleft
                      lineno_right = llright
                      yield item
                  yield (lineno_left, line), (lineno_right, line), False
                  lineno_left += 1
                  lineno_right += 1
              elif op == DMP.DIFF_DELETE:
                  left_buffer.append(line)
              elif op == DMP.DIFF_INSERT:
                  right_buffer.append(line)
  
      for item, _, _ in yield_buffer(lineno_left, lineno_right):
          yield item
docs: Convert from diff_match_patch format to _mdiff format.
  
      This is sadly necessary to use the HtmlDiff module.