Function: ediff-setup-fine-diff-regions
ediff-setup-fine-diff-regions is a byte-compiled function defined in
ediff-diff.el.gz.
Signature
(ediff-setup-fine-diff-regions FILE-A FILE-B FILE-C REG-NUM)
Source Code
;; Defined in /usr/src/emacs/lisp/vc/ediff-diff.el.gz
;; If file-A/B/C is nil, do 2-way comparison with the non-nil buffers
;; This function works for diff3 and diff2 jobs
(defun ediff-setup-fine-diff-regions (file-A file-B file-C reg-num)
(or (ediff-buffer-live-p ediff-fine-diff-buffer)
(setq ediff-fine-diff-buffer
(get-buffer-create
(ediff-unique-buffer-name "*ediff-fine-diff" "*"))))
(let (diff3-job diff-program diff-options ok-regexp diff-list)
(setq diff3-job ediff-3way-job
diff-program (if diff3-job ediff-diff3-program ediff-diff-program)
diff-options (if diff3-job
ediff-actual-diff3-options
ediff-actual-diff-options)
ok-regexp (if diff3-job
ediff-diff3-ok-lines-regexp
ediff-diff-ok-lines-regexp))
(ediff-message-if-verbose "Refining difference region %d ..." (1+ reg-num))
(ediff-exec-process diff-program ediff-fine-diff-buffer 'synchronize
diff-options
;; The shuffle below is because we can compare 3-way
;; or in several 2-way fashions, like fA fC, fA fB,
;; or fB fC.
(if file-A file-A file-B)
(if file-B file-B file-A)
(if diff3-job
(if file-C file-C file-B))
) ; exec process
(ediff-prepare-error-list ok-regexp ediff-fine-diff-buffer)
(ediff-message-if-verbose
"")
;; "Refining difference region %d ... done" (1+ reg-num))
(setq diff-list
(if diff3-job
(ediff-extract-diffs3
ediff-fine-diff-buffer '3way-comparison 'word-mode)
(ediff-extract-diffs ediff-fine-diff-buffer 'word-mode)))
;; fixup diff-list
(if diff3-job
(cond ((not file-A)
(mapc (lambda (elt)
(aset elt 0 nil)
(aset elt 1 nil))
(cdr diff-list)))
((not file-B)
(mapc (lambda (elt)
(aset elt 2 nil)
(aset elt 3 nil))
(cdr diff-list)))
((not file-C)
(mapc (lambda (elt)
(aset elt 4 nil)
(aset elt 5 nil))
(cdr diff-list)))
))
(ediff-convert-fine-diffs-to-overlays diff-list reg-num)
))