1 ;;; cyril-util.el --- utilities for Cyrillic scripts
3 ;; Copyright (C) 1997, 2001 Free Software Foundation, Inc.
5 ;; Keywords: mule, multilingual, Cyrillic
7 ;; This file is part of GNU Emacs.
9 ;; GNU Emacs is free software; you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation; either version 2, or (at your option)
14 ;; GNU Emacs is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ;; GNU General Public License for more details.
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with GNU Emacs; see the file COPYING. If not, write to the
21 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
22 ;; Boston, MA 02111-1307, USA.
29 (defun cyrillic-encode-koi8-r-char (char)
30 "Return KOI8-R external character code of CHAR if appropriate."
31 (aref (char-table-extra-slot
32 (get 'cyrillic-koi8-r-nonascii-translation-table 'translation-table)
37 (defun cyrillic-encode-alternativnyj-char (char)
38 "Return ALTERNATIVNYJ external character code of CHAR if appropriate."
39 (aref (char-table-extra-slot
40 (get 'cyrillic-alternativnyj-nonascii-translation-table
48 ;; Written by Valery Alexeev <valery@math.uga.edu>.
50 (defvar cyrillic-language-alist
51 (list '("Belorussian") '("Bulgarian") '("Macedonian")
52 '("Russian") '("Serbo-Croatian") '("Ukrainian"))
53 "List of known cyrillic languages.")
56 (defun standard-display-cyrillic-translit (&optional cyrillic-language)
57 "Display a cyrillic buffer using a transliteration.
58 For readability, the table is slightly
59 different from the one used for the input method `cyrillic-translit'.
61 The argument is a string which specifies which language you are using;
62 that affects the choice of transliterations slightly.
63 Possible values are listed in `cyrillic-language-alist'.
64 If the argument is t, we use the default cyrillic transliteration.
65 If the argument is nil, we return the display table to its standard state."
68 (let* ((completion-ignore-case t))
70 "Cyrillic language (default nil): "
71 cyrillic-language-alist nil t nil nil nil))))
73 (or standard-display-table
74 (setq standard-display-table (make-display-table)))
76 (if (equal cyrillic-language "")
77 (setq cyrillic-language nil))
79 (if (null cyrillic-language)
80 (setq standard-display-table (make-display-table))
81 (aset standard-display-table ?
\e,LP
\e(B [?a])
82 (aset standard-display-table ?
\e,LQ
\e(B [?b])
83 (aset standard-display-table ?
\e,LR
\e(B [?v])
84 (aset standard-display-table ?
\e,LS
\e(B [?g])
85 (aset standard-display-table ?
\e,LT
\e(B [?d])
86 (aset standard-display-table ?
\e,LU
\e(B [?e])
87 (aset standard-display-table ?
\e,Lq
\e(B [?y?o])
88 (aset standard-display-table ?
\e,LV
\e(B [?z?h])
89 (aset standard-display-table ?
\e,LW
\e(B [?z])
90 (aset standard-display-table ?
\e,LX
\e(B [?i])
91 (aset standard-display-table ?
\e,LY
\e(B [?j])
92 (aset standard-display-table ?
\e,LZ
\e(B [?k])
93 (aset standard-display-table ?
\e,L[
\e(B [?l])
94 (aset standard-display-table ?
\e,L\
\e(B [?m])
95 (aset standard-display-table ?
\e,L]
\e(B [?n])
96 (aset standard-display-table ?
\e,L^
\e(B [?o])
97 (aset standard-display-table ?
\e,L_
\e(B [?p])
98 (aset standard-display-table ?
\e,L`
\e(B [?r])
99 (aset standard-display-table ?
\e,La
\e(B [?s])
100 (aset standard-display-table ?
\e,Lb
\e(B [?t])
101 (aset standard-display-table ?
\e,Lc
\e(B [?u])
102 (aset standard-display-table ?
\e,Ld
\e(B [?f])
103 (aset standard-display-table ?
\e,Le
\e(B [?k?h])
104 (aset standard-display-table ?
\e,Lf
\e(B [?t?s])
105 (aset standard-display-table ?
\e,Lg
\e(B [?c?h])
106 (aset standard-display-table ?
\e,Lh
\e(B [?s?h])
107 (aset standard-display-table ?
\e,Li
\e(B [?s?c?h])
108 (aset standard-display-table ?
\e,Lj
\e(B [?~])
109 (aset standard-display-table ?
\e,Lk
\e(B [?y])
110 (aset standard-display-table ?
\e,Ll
\e(B [?'])
111 (aset standard-display-table ?
\e,Lm
\e(B [?e?'])
112 (aset standard-display-table ?
\e,Ln
\e(B [?y?u])
113 (aset standard-display-table ?
\e,Lo
\e(B [?y?a])
115 (aset standard-display-table ?
\e,L0
\e(B [?A])
116 (aset standard-display-table ?
\e,L1
\e(B [?B])
117 (aset standard-display-table ?
\e,L2
\e(B [?V])
118 (aset standard-display-table ?
\e,L3
\e(B [?G])
119 (aset standard-display-table ?
\e,L4
\e(B [?D])
120 (aset standard-display-table ?
\e,L5
\e(B [?E])
121 (aset standard-display-table ?
\e,L!
\e(B [?Y?o])
122 (aset standard-display-table ?
\e,L6
\e(B [?Z?h])
123 (aset standard-display-table ?
\e,L7
\e(B [?Z])
124 (aset standard-display-table ?
\e,L8
\e(B [?I])
125 (aset standard-display-table ?
\e,L9
\e(B [?J])
126 (aset standard-display-table ?
\e,L:
\e(B [?K])
127 (aset standard-display-table ?
\e,L;
\e(B [?L])
128 (aset standard-display-table ?
\e,L<
\e(B [?M])
129 (aset standard-display-table ?
\e,L=
\e(B [?N])
130 (aset standard-display-table ?
\e,L>
\e(B [?O])
131 (aset standard-display-table ?
\e,L?
\e(B [?P])
132 (aset standard-display-table ?
\e,L@
\e(B [?R])
133 (aset standard-display-table ?
\e,LA
\e(B [?S])
134 (aset standard-display-table ?
\e,LB
\e(B [?T])
135 (aset standard-display-table ?
\e,LC
\e(B [?U])
136 (aset standard-display-table ?
\e,LD
\e(B [?F])
137 (aset standard-display-table ?
\e,LE
\e(B [?K?h])
138 (aset standard-display-table ?
\e,LF
\e(B [?T?s])
139 (aset standard-display-table ?
\e,LG
\e(B [?C?h])
140 (aset standard-display-table ?
\e,LH
\e(B [?S?h])
141 (aset standard-display-table ?
\e,LI
\e(B [?S?c?h])
142 (aset standard-display-table ?
\e,LJ
\e(B [?~])
143 (aset standard-display-table ?
\e,LK
\e(B [?Y])
144 (aset standard-display-table ?
\e,LL
\e(B [?'])
145 (aset standard-display-table ?
\e,LM
\e(B [?E?'])
146 (aset standard-display-table ?
\e,LN
\e(B [?Y?u])
147 (aset standard-display-table ?
\e,LO
\e(B [?Y?a])
149 (aset standard-display-table ?
\e,Lt
\e(B [?i?e])
150 (aset standard-display-table ?
\e,Lw
\e(B [?i])
151 (aset standard-display-table ?
\e,L~
\e(B [?u])
152 (aset standard-display-table ?
\e,Lr
\e(B [?d?j])
153 (aset standard-display-table ?
\e,L{
\e(B [?c?h?j])
154 (aset standard-display-table ?
\e,Ls
\e(B [?g?j])
155 (aset standard-display-table ?
\e,Lu
\e(B [?s])
156 (aset standard-display-table ?
\e,L|
\e(B [?k])
157 (aset standard-display-table ?
\e,Lv
\e(B [?i])
158 (aset standard-display-table ?
\e,Lx
\e(B [?j])
159 (aset standard-display-table ?
\e,Ly
\e(B [?l?j])
160 (aset standard-display-table ?
\e,Lz
\e(B [?n?j])
161 (aset standard-display-table ?
\e,L
\7f\e(B [?d?z])
163 (aset standard-display-table ?
\e,L$
\e(B [?Y?e])
164 (aset standard-display-table ?
\e,L'
\e(B [?Y?i])
165 (aset standard-display-table ?
\e,L.
\e(B [?U])
166 (aset standard-display-table ?
\e,L"
\e(B [?D?j])
167 (aset standard-display-table ?
\e,L+
\e(B [?C?h?j])
168 (aset standard-display-table ?
\e,L#
\e(B [?G?j])
169 (aset standard-display-table ?
\e,L%
\e(B [?S])
170 (aset standard-display-table ?
\e,L,
\e(B [?K])
171 (aset standard-display-table ?
\e,L&
\e(B [?I])
172 (aset standard-display-table ?
\e,L(
\e(B [?J])
173 (aset standard-display-table ?
\e,L)
\e(B [?L?j])
174 (aset standard-display-table ?
\e,L*
\e(B [?N?j])
175 (aset standard-display-table ?
\e,L/
\e(B [?D?j])
178 (aset standard-display-table ?
\e$,1(P
\e(B [?a])
179 (aset standard-display-table ?
\e$,1(Q
\e(B [?b])
180 (aset standard-display-table ?
\e$,1(R
\e(B [?v])
181 (aset standard-display-table ?
\e$,1(S
\e(B [?g])
182 (aset standard-display-table ?
\e$,1(T
\e(B [?d])
183 (aset standard-display-table ?
\e$,1(U
\e(B [?e])
184 (aset standard-display-table ?
\e$,1(q
\e(B [?y?o])
185 (aset standard-display-table ?
\e$,1(V
\e(B [?z?h])
186 (aset standard-display-table ?
\e$,1(W
\e(B [?z])
187 (aset standard-display-table ?
\e$,1(X
\e(B [?i])
188 (aset standard-display-table ?
\e$,1(Y
\e(B [?j])
189 (aset standard-display-table ?
\e$,1(Z
\e(B [?k])
190 (aset standard-display-table ?
\e$,1([
\e(B [?l])
191 (aset standard-display-table ?
\e$,1(\
\e(B [?m])
192 (aset standard-display-table ?
\e$,1(]
\e(B [?n])
193 (aset standard-display-table ?
\e$,1(^
\e(B [?o])
194 (aset standard-display-table ?
\e$,1(_
\e(B [?p])
195 (aset standard-display-table ?
\e$,1(`
\e(B [?r])
196 (aset standard-display-table ?
\e$,1(a
\e(B [?s])
197 (aset standard-display-table ?
\e$,1(b
\e(B [?t])
198 (aset standard-display-table ?
\e$,1(c
\e(B [?u])
199 (aset standard-display-table ?
\e$,1(d
\e(B [?f])
200 (aset standard-display-table ?
\e$,1(e
\e(B [?k?h])
201 (aset standard-display-table ?
\e$,1(f
\e(B [?t?s])
202 (aset standard-display-table ?
\e$,1(g
\e(B [?c?h])
203 (aset standard-display-table ?
\e$,1(h
\e(B [?s?h])
204 (aset standard-display-table ?
\e$,1(i
\e(B [?s?c?h])
205 (aset standard-display-table ?
\e$,1(j
\e(B [?~])
206 (aset standard-display-table ?
\e$,1(k
\e(B [?y])
207 (aset standard-display-table ?
\e$,1(l
\e(B [?'])
208 (aset standard-display-table ?
\e$,1(m
\e(B [?e?'])
209 (aset standard-display-table ?
\e$,1(n
\e(B [?y?u])
210 (aset standard-display-table ?
\e$,1(o
\e(B [?y?a])
212 (aset standard-display-table ?
\e$,1(0
\e(B [?A])
213 (aset standard-display-table ?
\e$,1(1
\e(B [?B])
214 (aset standard-display-table ?
\e$,1(2
\e(B [?V])
215 (aset standard-display-table ?
\e$,1(3
\e(B [?G])
216 (aset standard-display-table ?
\e$,1(4
\e(B [?D])
217 (aset standard-display-table ?
\e$,1(5
\e(B [?E])
218 (aset standard-display-table ?
\e$,1(!
\e(B [?Y?o])
219 (aset standard-display-table ?
\e$,1(6
\e(B [?Z?h])
220 (aset standard-display-table ?
\e$,1(7
\e(B [?Z])
221 (aset standard-display-table ?
\e$,1(8
\e(B [?I])
222 (aset standard-display-table ?
\e$,1(9
\e(B [?J])
223 (aset standard-display-table ?
\e$,1(:
\e(B [?K])
224 (aset standard-display-table ?
\e$,1(;
\e(B [?L])
225 (aset standard-display-table ?
\e$,1(<
\e(B [?M])
226 (aset standard-display-table ?
\e$,1(=
\e(B [?N])
227 (aset standard-display-table ?
\e$,1(>
\e(B [?O])
228 (aset standard-display-table ?
\e$,1(?
\e(B [?P])
229 (aset standard-display-table ?
\e$,1(@
\e(B [?R])
230 (aset standard-display-table ?
\e$,1(A
\e(B [?S])
231 (aset standard-display-table ?
\e$,1(B
\e(B [?T])
232 (aset standard-display-table ?
\e$,1(C
\e(B [?U])
233 (aset standard-display-table ?
\e$,1(D
\e(B [?F])
234 (aset standard-display-table ?
\e$,1(E
\e(B [?K?h])
235 (aset standard-display-table ?
\e$,1(F
\e(B [?T?s])
236 (aset standard-display-table ?
\e$,1(G
\e(B [?C?h])
237 (aset standard-display-table ?
\e$,1(H
\e(B [?S?h])
238 (aset standard-display-table ?
\e$,1(I
\e(B [?S?c?h])
239 (aset standard-display-table ?
\e$,1(J
\e(B [?~])
240 (aset standard-display-table ?
\e$,1(K
\e(B [?Y])
241 (aset standard-display-table ?
\e$,1(L
\e(B [?'])
242 (aset standard-display-table ?
\e$,1(M
\e(B [?E?'])
243 (aset standard-display-table ?
\e$,1(N
\e(B [?Y?u])
244 (aset standard-display-table ?
\e$,1(O
\e(B [?Y?a])
246 (aset standard-display-table ?
\e$,1(t
\e(B [?i?e])
247 (aset standard-display-table ?
\e$,1(w
\e(B [?i])
248 (aset standard-display-table ?
\e$,1(~
\e(B [?u])
249 (aset standard-display-table ?
\e$,1(r
\e(B [?d?j])
250 (aset standard-display-table ?
\e$,1({
\e(B [?c?h?j])
251 (aset standard-display-table ?
\e$,1(s
\e(B [?g?j])
252 (aset standard-display-table ?
\e$,1(u
\e(B [?s])
253 (aset standard-display-table ?
\e$,1(|
\e(B [?k])
254 (aset standard-display-table ?
\e$,1(v
\e(B [?i])
255 (aset standard-display-table ?
\e$,1(x
\e(B [?j])
256 (aset standard-display-table ?
\e$,1(y
\e(B [?l?j])
257 (aset standard-display-table ?
\e$,1(z
\e(B [?n?j])
258 (aset standard-display-table ?
\e$,1(
\7f\e(B [?d?z])
260 (aset standard-display-table ?
\e$,1($
\e(B [?Y?e])
261 (aset standard-display-table ?
\e$,1('
\e(B [?Y?i])
262 (aset standard-display-table ?
\e$,1(.
\e(B [?U])
263 (aset standard-display-table ?
\e$,1("
\e(B [?D?j])
264 (aset standard-display-table ?
\e$,1(+
\e(B [?C?h?j])
265 (aset standard-display-table ?
\e$,1(#
\e(B [?G?j])
266 (aset standard-display-table ?
\e$,1(%
\e(B [?S])
267 (aset standard-display-table ?
\e$,1(,
\e(B [?K])
268 (aset standard-display-table ?
\e$,1(&
\e(B [?I])
269 (aset standard-display-table ?
\e$,1((
\e(B [?J])
270 (aset standard-display-table ?
\e$,1()
\e(B [?L?j])
271 (aset standard-display-table ?
\e$,1(*
\e(B [?N?j])
272 (aset standard-display-table ?
\e$,1(/
\e(B [?D?j])
274 (when (equal cyrillic-language "Bulgarian")
275 (aset standard-display-table ?
\e,Li
\e(B [?s?h?t])
276 (aset standard-display-table ?
\e,LI
\e(B [?S?h?t])
277 (aset standard-display-table ?
\e,Ln
\e(B [?i?u])
278 (aset standard-display-table ?
\e,LN
\e(B [?I?u])
279 (aset standard-display-table ?
\e,Lo
\e(B [?i?a])
280 (aset standard-display-table ?
\e,LO
\e(B [?I?a])
282 (aset standard-display-table ?
\e$,1(i
\e(B [?s?h?t])
283 (aset standard-display-table ?
\e$,1(I
\e(B [?S?h?t])
284 (aset standard-display-table ?
\e$,1(n
\e(B [?i?u])
285 (aset standard-display-table ?
\e$,1(N
\e(B [?I?u])
286 (aset standard-display-table ?
\e$,1(o
\e(B [?i?a])
287 (aset standard-display-table ?
\e$,1(O
\e(B [?I?a]))
289 (when (equal cyrillic-language "Ukrainian") ; based on the official
290 ; transliteration table
291 (aset standard-display-table ?
\e,LX
\e(B [?y])
292 (aset standard-display-table ?
\e,L8
\e(B [?Y])
293 (aset standard-display-table ?
\e,LY
\e(B [?i])
294 (aset standard-display-table ?
\e,L9
\e(B [?Y])
295 (aset standard-display-table ?
\e,Ln
\e(B [?i?u])
296 (aset standard-display-table ?
\e,Lo
\e(B [?i?a])
298 (aset standard-display-table ?
\e$,1(X
\e(B [?y])
299 (aset standard-display-table ?
\e$,1(8
\e(B [?Y])
300 (aset standard-display-table ?
\e$,1(Y
\e(B [?i])
301 (aset standard-display-table ?
\e$,1(9
\e(B [?Y])
302 (aset standard-display-table ?
\e$,1(n
\e(B [?i?u])
303 (aset standard-display-table ?
\e$,1(o
\e(B [?i?a]))))
306 (provide 'cyril-util)
309 ;; coding: iso-2022-7bit
312 ;;; cyril-util.el ends here