| 1131 | | (set-language-environment lang-env))) |
|---|
| | 1131 | (cond ((eq key 'coding-priority) |
|---|
| | 1132 | (set-language-environment-coding-systems lang-env)) |
|---|
| | 1133 | ((eq key 'input-method) |
|---|
| | 1134 | (set-language-environment-input-method lang-env)) |
|---|
| | 1135 | ((eq key 'nonascii-translation) |
|---|
| | 1136 | (set-language-environment-nonascii-translation lang-env)) |
|---|
| | 1137 | ((eq key 'charset) |
|---|
| | 1138 | (set-language-environment-charset lang-env)) |
|---|
| | 1139 | ((eq key 'overriding-fontspec) |
|---|
| | 1140 | (set-language-environment-fontset lang-env)) |
|---|
| | 1141 | ((and (not default-enable-multibyte-characters) |
|---|
| | 1142 | (or (eq key 'unibyte-syntax) (eq key 'unibyte-display))) |
|---|
| | 1143 | (set-language-environment-unibyte lang-env))))) |
|---|
| 1841 | | (let ((default-eol-type (coding-system-eol-type |
|---|
| 1842 | | default-buffer-file-coding-system))) |
|---|
| 1843 | | (reset-language-environment) |
|---|
| 1844 | | |
|---|
| 1845 | | ;; The features might set up coding systems. |
|---|
| 1846 | | (let ((required-features (get-language-info language-name 'features))) |
|---|
| 1847 | | (while required-features |
|---|
| 1848 | | (require (car required-features)) |
|---|
| 1849 | | (setq required-features (cdr required-features)))) |
|---|
| 1850 | | |
|---|
| 1851 | | (setq current-language-environment language-name) |
|---|
| 1852 | | (set-language-environment-coding-systems language-name default-eol-type)) |
|---|
| 1853 | | (let ((input-method (get-language-info language-name 'input-method))) |
|---|
| 1854 | | (when input-method |
|---|
| 1855 | | (setq default-input-method input-method) |
|---|
| 1856 | | (if input-method-history |
|---|
| 1857 | | (setq input-method-history |
|---|
| 1858 | | (cons input-method |
|---|
| 1859 | | (delete input-method input-method-history)))))) |
|---|
| 1860 | | (let ((nonascii (get-language-info language-name 'nonascii-translation)) |
|---|
| 1861 | | (dos-table |
|---|
| 1862 | | (if (eq window-system 'pc) |
|---|
| 1863 | | (intern |
|---|
| 1864 | | (format "cp%d-nonascii-translation-table" dos-codepage))))) |
|---|
| 1865 | | (cond |
|---|
| 1866 | | ((char-table-p nonascii) |
|---|
| 1867 | | (setq nonascii-translation-table nonascii)) |
|---|
| 1868 | | ((and (eq window-system 'pc) (boundp dos-table)) |
|---|
| 1869 | | ;; DOS terminals' default is to use a special non-ASCII translation |
|---|
| 1870 | | ;; table as appropriate for the installed codepage. |
|---|
| 1871 | | (setq nonascii-translation-table (symbol-value dos-table))) |
|---|
| 1872 | | ((charsetp nonascii) |
|---|
| 1873 | | (setq nonascii-insert-offset (- (make-char nonascii) 128))))) |
|---|
| 1874 | | |
|---|
| 1875 | | ;; Unibyte setups if necessary. |
|---|
| 1876 | | (unless default-enable-multibyte-characters |
|---|
| 1877 | | ;; Syntax and case table. |
|---|
| 1878 | | (let ((syntax (get-language-info language-name 'unibyte-syntax))) |
|---|
| 1879 | | (if syntax |
|---|
| 1880 | | (let ((set-case-syntax-set-multibyte nil)) |
|---|
| 1881 | | (load syntax nil t)) |
|---|
| 1882 | | ;; No information for syntax and case. Reset to the defaults. |
|---|
| 1883 | | (let ((syntax-table (standard-syntax-table)) |
|---|
| 1884 | | (standard-table (standard-case-table)) |
|---|
| 1885 | | (case-table (make-char-table 'case-table)) |
|---|
| 1886 | | (ch (if (eq window-system 'pc) 128 160))) |
|---|
| 1887 | | (while (< ch 256) |
|---|
| 1888 | | (modify-syntax-entry ch " " syntax-table) |
|---|
| 1889 | | (setq ch (1+ ch))) |
|---|
| 1890 | | (dotimes (i 128) |
|---|
| 1891 | | (aset case-table i (aref standard-table i))) |
|---|
| 1892 | | (set-char-table-extra-slot case-table 0 nil) |
|---|
| 1893 | | (set-char-table-extra-slot case-table 1 nil) |
|---|
| 1894 | | (set-char-table-extra-slot case-table 2 nil) |
|---|
| 1895 | | (set-standard-case-table case-table)) |
|---|
| 1896 | | (let ((list (buffer-list))) |
|---|
| 1897 | | (while list |
|---|
| 1898 | | (with-current-buffer (car list) |
|---|
| 1899 | | (set-case-table (standard-case-table))) |
|---|
| 1900 | | (setq list (cdr list)))))) |
|---|
| 1901 | | (set-display-table-and-terminal-coding-system language-name)) |
|---|
| 1902 | | |
|---|
| | 1853 | |
|---|
| | 1854 | (reset-language-environment) |
|---|
| | 1855 | ;; The features might set up coding systems. |
|---|
| 1908 | | ;; Don't invoke fontset-related functions if fontsets aren't |
|---|
| 1909 | | ;; supported in this build of Emacs. |
|---|
| 1910 | | (when (fboundp 'fontset-list) |
|---|
| 1911 | | (let ((overriding-fontspec (get-language-info language-name |
|---|
| 1912 | | 'overriding-fontspec))) |
|---|
| 1913 | | (if overriding-fontspec |
|---|
| 1914 | | (set-overriding-fontspec-internal overriding-fontspec)))) |
|---|
| | 1861 | (setq current-language-environment language-name) |
|---|
| | 1862 | |
|---|
| | 1863 | (set-language-environment-coding-systems language-name) |
|---|
| | 1864 | (set-language-environment-input-method language-name) |
|---|
| | 1865 | (set-language-environment-nonascii-translation language-name) |
|---|
| | 1866 | (set-language-environment-charset language-name) |
|---|
| | 1867 | (set-language-environment-fontset language-name) |
|---|
| | 1868 | ;; Unibyte setups if necessary. |
|---|
| | 1869 | (unless default-enable-multibyte-characters |
|---|
| | 1870 | (set-language-environment-unibyte language-name)) |
|---|
| | 1928 | |
|---|
| | 1929 | (defun set-language-environment-input-method (language-name) |
|---|
| | 1930 | "Do various input method setups for language environment LANGUAGE-NAME." |
|---|
| | 1931 | (let ((input-method (get-language-info language-name 'input-method))) |
|---|
| | 1932 | (when input-method |
|---|
| | 1933 | (setq default-input-method input-method) |
|---|
| | 1934 | (if input-method-history |
|---|
| | 1935 | (setq input-method-history |
|---|
| | 1936 | (cons input-method |
|---|
| | 1937 | (delete input-method input-method-history))))))) |
|---|
| | 1938 | |
|---|
| | 1939 | (defun set-language-environment-nonascii-translation (language-name) |
|---|
| | 1940 | "Do unibyte/multibyte translation setup for language environment LANGUAGE-NAME." |
|---|
| | 1941 | (let ((nonascii (get-language-info language-name 'nonascii-translation)) |
|---|
| | 1942 | (dos-table |
|---|
| | 1943 | (if (eq window-system 'pc) |
|---|
| | 1944 | (intern |
|---|
| | 1945 | (format "cp%d-nonascii-translation-table" dos-codepage))))) |
|---|
| | 1946 | (cond |
|---|
| | 1947 | ((char-table-p nonascii) |
|---|
| | 1948 | (setq nonascii-translation-table nonascii)) |
|---|
| | 1949 | ((and (eq window-system 'pc) (boundp dos-table)) |
|---|
| | 1950 | ;; DOS terminals' default is to use a special non-ASCII translation |
|---|
| | 1951 | ;; table as appropriate for the installed codepage. |
|---|
| | 1952 | (setq nonascii-translation-table (symbol-value dos-table))) |
|---|
| | 1953 | ((charsetp nonascii) |
|---|
| | 1954 | (setq nonascii-insert-offset (- (make-char nonascii) 128)))))) |
|---|
| | 1955 | |
|---|
| | 1956 | (defun set-language-environment-charset (language-name) |
|---|
| | 1957 | "Do various charset setups for language environment LANGUAGE-NAME." |
|---|
| | 1958 | (if (and utf-translate-cjk-mode |
|---|
| | 1959 | (not (eq utf-translate-cjk-lang-env language-name)) |
|---|
| | 1960 | (catch 'tag |
|---|
| | 1961 | (dolist (charset (get-language-info language-name 'charset)) |
|---|
| | 1962 | (if (memq charset utf-translate-cjk-charsets) |
|---|
| | 1963 | (throw 'tag t))) |
|---|
| | 1964 | nil)) |
|---|
| | 1965 | (utf-translate-cjk-load-tables))) |
|---|
| | 1966 | |
|---|
| | 1967 | (defun set-language-environment-fontset (language-name) |
|---|
| | 1968 | "Do various fontset setups for language environment LANGUAGE-NAME." |
|---|
| | 1969 | ;; Don't invoke fontset-related functions if fontsets aren't |
|---|
| | 1970 | ;; supported in this build of Emacs. |
|---|
| | 1971 | (if (fboundp 'fontset-list) |
|---|
| | 1972 | (set-overriding-fontspec-internal |
|---|
| | 1973 | (get-language-info language-name 'overriding-fontspec)))) |
|---|
| | 1974 | |
|---|
| | 1975 | (defun set-language-environment-unibyte (language-name) |
|---|
| | 1976 | "Do various unibyte-mode setups for language environment LANGUAGE-NAME." |
|---|
| | 1977 | ;; Syntax and case table. |
|---|
| | 1978 | (let ((syntax (get-language-info language-name 'unibyte-syntax))) |
|---|
| | 1979 | (if syntax |
|---|
| | 1980 | (let ((set-case-syntax-set-multibyte nil)) |
|---|
| | 1981 | (load syntax nil t)) |
|---|
| | 1982 | ;; No information for syntax and case. Reset to the defaults. |
|---|
| | 1983 | (let ((syntax-table (standard-syntax-table)) |
|---|
| | 1984 | (standard-table (standard-case-table)) |
|---|
| | 1985 | (case-table (make-char-table 'case-table)) |
|---|
| | 1986 | (ch (if (eq window-system 'pc) 128 160))) |
|---|
| | 1987 | (while (< ch 256) |
|---|
| | 1988 | (modify-syntax-entry ch " " syntax-table) |
|---|
| | 1989 | (setq ch (1+ ch))) |
|---|
| | 1990 | (dotimes (i 128) |
|---|
| | 1991 | (aset case-table i (aref standard-table i))) |
|---|
| | 1992 | (set-char-table-extra-slot case-table 0 nil) |
|---|
| | 1993 | (set-char-table-extra-slot case-table 1 nil) |
|---|
| | 1994 | (set-char-table-extra-slot case-table 2 nil) |
|---|
| | 1995 | (set-standard-case-table case-table)) |
|---|
| | 1996 | (let ((list (buffer-list))) |
|---|
| | 1997 | (while list |
|---|
| | 1998 | (with-current-buffer (car list) |
|---|
| | 1999 | (set-case-table (standard-case-table))) |
|---|
| | 2000 | (setq list (cdr list)))))) |
|---|
| | 2001 | (set-display-table-and-terminal-coding-system language-name)) |
|---|