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)
    ))