Mercurial > emacs
comparison lisp/international/quail.el @ 19605:3b700b203cfd
(quail-update-leim-list-file): Make it
handle multiple directories.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Thu, 28 Aug 1997 10:49:48 +0000 |
parents | 1c0ecc266e38 |
children | b033d0b34c71 |
comparison
equal
deleted
inserted
replaced
19604:a647176226bc | 19605:3b700b203cfd |
---|---|
1692 (defvar quail-directory-name "quail" | 1692 (defvar quail-directory-name "quail" |
1693 "Name of Quail directory which cotains Quail packages. | 1693 "Name of Quail directory which cotains Quail packages. |
1694 This is a sub-directory of LEIM directory.") | 1694 This is a sub-directory of LEIM directory.") |
1695 | 1695 |
1696 ;;;###autoload | 1696 ;;;###autoload |
1697 (defun quail-update-leim-list-file (dirname) | 1697 (defun quail-update-leim-list-file (dirname &rest dirnames) |
1698 "Update entries for Quail packages in LEIM list file of directory DIRNAME. | 1698 "Update entries for Quail packages in `LEIM' list file in directory DIRNAME. |
1699 LEIM is a directory containing Emacs input methods; | 1699 DIRNAME is a directory containing Emacs input methods; |
1700 normally, it should specify the `leim' subdirectory | 1700 normally, it should specify the `leim' subdirectory |
1701 of the Emacs source tree." | 1701 of the Emacs source tree. |
1702 | |
1703 It searches for Quail packages under `quail' subdirectory of DIRNAME, | |
1704 and update the file \"leim-list.el\" in DIRNAME. | |
1705 | |
1706 When called from a program, the remaining arguments are additional | |
1707 directory names to search for Quail packages under `quail' subdirectory | |
1708 of each directory." | |
1702 (interactive "FDirectory of LEIM: ") | 1709 (interactive "FDirectory of LEIM: ") |
1703 (setq dirname (file-name-as-directory (expand-file-name dirname))) | 1710 (setq dirname (expand-file-name dirname)) |
1704 (let ((quail-dir (concat dirname quail-directory-name)) | 1711 (let ((leim-list (expand-file-name leim-list-file-name dirname)) |
1705 (filename (concat dirname leim-list-file-name)) | 1712 quail-dirs list-buf pkg-list pkg-buf pos) |
1706 list-buf pkg-list pkg-buf pos) | 1713 (if (not (file-writable-p leim-list)) |
1707 (if (not (file-exists-p quail-dir)) | 1714 (error "Can't write to file \"%s\"" leim-list)) |
1708 nil | 1715 (message "Updating %s ..." leim-list) |
1709 (if (not (file-readable-p quail-dir)) | 1716 (setq list-buf (find-file-noselect leim-list)) |
1710 (message "Can't write to file \"%s\"" filename) | 1717 |
1711 (if (not (file-writable-p filename)) | 1718 ;; At first, clean up the file. |
1712 (message "Can't write to file \"%s\"" filename) | 1719 (save-excursion |
1713 (setq list-buf (find-file-noselect filename)) | 1720 (set-buffer list-buf) |
1714 (setq pkg-list (directory-files quail-dir 'full ".*\\.el$" 'nosort)) | 1721 (goto-char 1) |
1715 (message "Updating %s ..." filename) | 1722 |
1716 | 1723 ;; Insert the correct header. |
1717 ;; At first, clean up the file. | 1724 (if (looking-at (regexp-quote leim-list-header)) |
1718 (save-excursion | 1725 (goto-char (match-end 0)) |
1719 (set-buffer list-buf) | 1726 (insert leim-list-header)) |
1720 (goto-char 1) | 1727 (setq pos (point)) |
1721 | 1728 (if (not (re-search-forward leim-list-entry-regexp nil t)) |
1722 ;; Insert the correct header. | 1729 nil |
1723 (if (looking-at (regexp-quote leim-list-header)) | 1730 |
1724 (goto-char (match-end 0)) | 1731 ;; Remove garbages after the header. |
1725 (insert leim-list-header)) | 1732 (goto-char (match-beginning 0)) |
1726 (setq pos (point)) | 1733 (if (< pos (point)) |
1727 (if (not (re-search-forward leim-list-entry-regexp nil t)) | 1734 (delete-region pos (point))) |
1728 nil | 1735 |
1729 | 1736 ;; Remove all entries for Quail. |
1730 ;; Remove garbages after the header. | 1737 (while (re-search-forward leim-list-entry-regexp nil 'move) |
1738 (goto-char (match-beginning 0)) | |
1739 (setq pos (point)) | |
1740 (condition-case nil | |
1741 (let ((form (read list-buf))) | |
1742 (when (equal (nth 3 form) ''quail-use-package) | |
1743 (if (eolp) (forward-line 1)) | |
1744 (delete-region pos (point)))) | |
1745 (error | |
1746 ;; Delete the remaining contents because it seems that | |
1747 ;; this file is broken. | |
1748 (message "Garbages in %s deleted" leim-list) | |
1749 (delete-region pos (point-max))))))) | |
1750 | |
1751 ;; Search for `quail' subdirector under each DIRNAMES. | |
1752 (setq dirnames (cons dirname dirnames)) | |
1753 (let ((l dirnames)) | |
1754 (while l | |
1755 (setcar l (expand-file-name (car l))) | |
1756 (setq dirname (expand-file-name quail-directory-name (car l))) | |
1757 (if (file-readable-p dirname) | |
1758 (setq quail-dirs (cons dirname quail-dirs)) | |
1759 (message "%s doesn't has `%s' subdirectory, just ignored" | |
1760 (car l) quail-directory-name) | |
1761 (setq quail-dirs (cons nil quail-dirs))) | |
1762 (setq l (cdr l))) | |
1763 (setq quail-dirs (nreverse quail-dirs))) | |
1764 | |
1765 ;; Insert input method registering forms. | |
1766 (while quail-dirs | |
1767 (setq dirname (car quail-dirs)) | |
1768 (when dirname | |
1769 (setq pkg-list (directory-files dirname 'full "\\.el$" 'nosort)) | |
1770 (while pkg-list | |
1771 (message "Checking %s ..." (car pkg-list)) | |
1772 (with-temp-buffer | |
1773 (insert-file-contents (car pkg-list)) | |
1774 (goto-char (point-min)) | |
1775 (while (search-forward "(quail-define-package" nil t) | |
1731 (goto-char (match-beginning 0)) | 1776 (goto-char (match-beginning 0)) |
1732 (if (< pos (point)) | 1777 (condition-case nil |
1733 (delete-region pos (point))) | 1778 (let ((form (read (current-buffer)))) |
1734 | 1779 (save-excursion |
1735 ;; Remove all entries for Quail. | 1780 (set-buffer list-buf) |
1736 (while (re-search-forward leim-list-entry-regexp nil 'move) | 1781 (insert |
1737 (goto-char (match-beginning 0)) | 1782 (format "(register-input-method |
1738 (setq pos (point)) | |
1739 (let ((form (read list-buf))) | |
1740 (if (equal (nth 3 form) ''quail-use-package) | |
1741 (progn | |
1742 (if (eolp) (forward-line 1)) | |
1743 (delete-region pos (point)))))))) | |
1744 | |
1745 ;; Insert entries for Quail. | |
1746 (while pkg-list | |
1747 (message "Checking %s ..." (car pkg-list)) | |
1748 (with-temp-buffer | |
1749 (insert-file-contents (car pkg-list)) | |
1750 (goto-char (point-min)) | |
1751 (while (search-forward "(quail-define-package" nil t) | |
1752 (goto-char (match-beginning 0)) | |
1753 (let ((form (read (current-buffer)))) | |
1754 (save-excursion | |
1755 (set-buffer list-buf) | |
1756 (insert (format "(register-input-method | |
1757 %S %S '%s | 1783 %S %S '%s |
1758 %S %S | 1784 %S %S |
1759 %S)\n" | 1785 %S)\n" |
1760 (nth 1 form) ; PACKAGE-NAME | 1786 (nth 1 form) ; PACKAGE-NAME |
1761 (nth 2 form) ; LANGUAGE | 1787 (nth 2 form) ; LANGUAGE |
1762 'quail-use-package ; ACTIVATE-FUNC | 1788 'quail-use-package ; ACTIVATE-FUNC |
1763 (nth 3 form) ; PACKAGE-TITLE | 1789 (nth 3 form) ; PACKAGE-TITLE |
1764 (progn ; PACKAGE-DESCRIPTION (one line) | 1790 (progn ; PACKAGE-DESCRIPTION (one line) |
1765 (string-match ".*" (nth 5 form)) | 1791 (string-match ".*" (nth 5 form)) |
1766 (match-string 0 (nth 5 form))) | 1792 (match-string 0 (nth 5 form))) |
1767 (file-relative-name ; PACKAGE-FILENAME | 1793 (file-relative-name ; PACKAGE-FILENAME |
1768 (file-name-sans-extension (car pkg-list)) | 1794 (file-name-sans-extension (car pkg-list)) |
1769 dirname))))))) | 1795 (car dirnames)))))) |
1770 (setq pkg-list (cdr pkg-list))) | 1796 (error |
1771 (save-excursion | 1797 ;; Ignore the remaining contents of this file. |
1772 (set-buffer list-buf) | 1798 (goto-char (point-max)) |
1773 (setq buffer-file-coding-system 'iso-2022-7bit) | 1799 (message "Some part of \"%s\" is broken" dirname))))) |
1774 (save-buffer 0)) | 1800 (setq pkg-list (cdr pkg-list))) |
1775 (kill-buffer list-buf) | 1801 (setq quail-dirs (cdr quail-dirs) dirnames (cdr dirnames)))) |
1776 (message "Updating %s ... done" (buffer-file-name list-buf))))))) | 1802 |
1803 ;; At last, write out LEIM list file. | |
1804 (save-excursion | |
1805 (set-buffer list-buf) | |
1806 (setq buffer-file-coding-system 'iso-2022-7bit) | |
1807 (save-buffer 0)) | |
1808 (kill-buffer list-buf) | |
1809 (message "Updating %s ... done" leim-list))) | |
1777 ;; | 1810 ;; |
1778 (provide 'quail) | 1811 (provide 'quail) |
1779 | 1812 |
1780 ;;; quail.el ends here | 1813 ;;; quail.el ends here |