OSDN Git Service

sed: Add po4a files
[linuxjm/jm.git] / admin / po-utils.el
1 (defun fuzzy-diff ()
2   "Check a difference in fuzzy contents."
3   (interactive)
4   (let (begin end prevfile newfile diffbuf)
5     (save-excursion
6       (re-search-backward "^$" nil t)
7       (setq begin (point))
8       (re-search-forward "^msgstr " nil t)
9       (beginning-of-line)
10       (setq end (point))
11       (goto-char begin)
12       (if (not (and (re-search-forward "^#| msgid " nil t)
13                     (< (point) end)))
14           (error "Valid fuzzy section not found."))
15       (beginning-of-line)
16       (setq begin (point))
17       ;; cut text from the original buffer
18       (kill-ring-save begin end)
19       ;; previous string
20       (with-temp-buffer
21         (yank)
22         (goto-char (point-min))
23         (re-search-forward "^msgid " nil t)
24         (move-beginning-of-line nil)
25         (kill-region (point) (point-max))
26
27         (goto-char (point-min))
28         (replace-regexp "^#| " "" nil (point-min) (point-max))
29         (replace-regexp "^msgid " "" nil (point-min) (point-max))
30         (replace-regexp "^\"" "" nil (point-min) (point-max))
31         (replace-regexp "\"$" "" nil (point-min) (point-max))
32
33         (setq prevfile (make-temp-file "podiff"))
34         (write-region (point-min) (point-max) prevfile))
35       (with-temp-buffer
36         (yank)
37
38         (goto-char (point-min))
39         (replace-regexp "^msgid " "" nil (point-min) (point-max))
40         (replace-regexp "^\"" "" nil (point-min) (point-max))
41         (replace-regexp "\"$" "" nil (point-min) (point-max))
42
43         (setq newfile (make-temp-file "podiff"))
44         (write-region (point-min) (point-max) newfile))
45
46       (setq diffbuf (diff prevfile newfile "-c" 'no-async))
47       (set-buffer diffbuf)
48       (toggle-read-only t)
49       (set-buffer-modified-p nil)
50       (pop-to-buffer diffbuf)
51       (diff-hunk-next)
52
53       (delete-file prevfile)
54       (delete-file newfile))))
55
56 (provide 'po-utils)