anchor.diff:            (1+ i)))))
       (t i)))
   
  +(defun clean-diff-vector (v)
  +  (remove-if #'diff-junk v))
  +
  +(defun diff-junk (text)
  +  "Empty text elements that are being deleted will just mess up the
  +detextification algorithm."
  +  (and (string= (text text) "") (eql (first (properties text)) :del)))
   
   (defun foo-test ()
     (list
  
positive.code:   (diff-vectors (linearize-markup a t) (linearize-markup b t)))
  
  (defun diff-textified-markup (a b)
    (diff-textified-vectors (textify-markup a t) (textify-markup b t)))
  
  (defun diff-textified-vectors (old new)
  
  
negative.code:      '(:p "foo " (:i "quux bar biff") " baz")
       '(:p "foo " (:i "quux baz boom") " baz"))))))
  
  (defun full-file-diff (old new)
    (remove-empties
     (rewrite-adds-and-deletes
      (detextify-markup
       (diff-textified-markup (parse-file old) (parse-file new))))))
  
  (defun remove-empties (tree)
    (labels ((helper (x)
               (cond
                 ((and (consp x) (null (rest x))) nil)
                 ((consp x) (list (mapcan #'helper x)))
                 (t (list x)))))
      (first (helper tree))))
  
  (defun rewrite-adds-and-deletes (tree)
    (cond
  