Commits

Aidan Kehoe committed 258fdeb

Warn about duplicate rules, quail; remove many of same from input methods.

ChangeLog addition;

2013-08-03 Aidan Kehoe <kehoea@parhasard.net>

* quail.el (quail-define-rules):
Check for duplicate rules, warn about same.
GNU silently merges such rules, but XEmacs doesn't, and this is
saner behaviour, it's easier to miss identical rules textually far
away when reading the code.
* quail.el (quail-install-map):
Backslash a parenthesis for the sake of fontification.
* quail/latin-post.el:
Merge duplicates explicitly in latin-1-postfix, spanish-postfix,
turkish-latin-3-postfix, turkish-postfix, and latin-postfix.
Rewrite the code generation for latin-postfix to do more at
compile time, and to check for duplicates and warn.

Comments (0)

Files changed (3)

+2013-08-03  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* quail.el (quail-define-rules):
+	Check for duplicate rules, warn about same.
+	GNU silently merges such rules, but XEmacs doesn't, and this is
+	saner behaviour, it's easier to miss identical rules textually far
+	away when reading the code.
+	* quail.el (quail-install-map):
+	Backslash a parenthesis for the sake of fontification.
+	* quail/latin-post.el:
+	Merge duplicates explicitly in latin-1-postfix, spanish-postfix,
+	turkish-latin-3-postfix, turkish-postfix, and latin-postfix.
+	Rewrite the code generation for latin-postfix to do more at
+	compile time, and to check for duplicates and warn.
+
 2011-06-18  Aidan Kehoe  <kehoea@parhasard.net>
 
 	* leim-list.el: Update to reflect new input method names.
 If it is a vector, each element (string or character) is a candidate
   for the translation.
 In these cases, a key specific Quail map is generated and assigned to KEY.
-(A Quail map is a cons that satisfies `quail-map-p', which see.)
+\(A Quail map is a cons that satisfies `quail-map-p', which see.)
 
 If TRANSLATION is a Quail map it is used to handle KEY.  
 
 	(while l
 	  (quail-defrule-internal (car (car l)) (car (cdr (car l))) map)
 	  (setq l (cdr l)))
+        (mapl
+         (function*
+          (lambda ((rule . rules))
+           (let ((assoc (assoc (car rule) rules)))
+             (and assoc
+                  (warn "rule %S overridden by %S" rule assoc)))))
+         rules)
 	map)))
 
 ;;;###autoload

quail/latin-post.el

  ("y\"" ?,A(B)
  ("D/" ?,AP(B)
  ("d/" ?,Ap(B)
- ("T/" ?,A^(B)
+ ("T/" [",A^(B"
+        ",D,(B"])
  ("t/" ?,A~(B)
  ("s/" ?,A_(B)
  ("C," ?,AG(B)
  ("O/" ?,DX(B)
  ("R," ?,D#(B)
  ("S~" ?,D)(B)
- ("T/" ?,D,(B)
  ("U," ?,DY(B)
  ("U'" ?,DZ(B)
  ("U^" ?,D[(B)
  ("o'" ?,As(B)
  ("U'" ?,AZ(B)
  ("u'" ?,Az(B)
- ("U\"" ?,C\(B)
- ("u\"" ?,C|(B)
+ ("U\"" [",C\(B" "U\""])
+ ("u\"" [",C|(B" "u\""])
  ("N~" ?,AQ(B)
  ("n~" ?,Aq(B)
  ("?/" ?,A?(B)
  ("o''" ["o'"])
  ("U''" ["U'"])
  ("u''" ["u'"])
- ("U\"" ["U\""])
- ("u\"" ["U\""])
  ("N~~" ["N~"])
  ("n~~" ["n~"])
  ("?//" ["?/"])
  ("G^" ?,C+(B)
  ("g^" ?,C;(B)
  ("I." ?,C)(B)
- ("i" ?,C9(B)
+ ("i" [",C9(B"
+       "i"])
  ("i." ?i)
  ("O\"" ?,CV(B)
  ("o\"" ?,Cv(B)
  ("G^^" ["G^"])
  ("g^^" ["g^"])
  ("I.." ["I."])
- ("i" ["i"])
  ("i.." ["i."])
  ("O\"\"" ["O\""])
  ("o\"\"" ["o\""])
  ("G^" ?,MP(B)
  ("g^" ?,Mp(B)
  ("I." ?,M](B)
- ("i" ?,M}(B)
+ ("i" [",M}(B" "i"])
  ("i." ?i)
  ("O\"" ?,MV(B)
  ("o\"" ?,Mv(B)
  ("G^^" ["G^"])
  ("g^^" ["g^"])
  ("I.." ["I."])
- ("i" ["i"])
  ("i.." ["i."])
  ("O\"\"" ["O\""])
  ("o\"\"" ["o\""])
 " nil t nil nil nil nil nil nil nil nil t)
 
 ;; Fixme: ,A&(B ,A'(B ,A((B ,A)(B ,A,(B ,A-(B ,A.(B ,A/(B ,A1(B ,A2(B ,A3(B ,A4(B ,A5(B ,A6(B ,A7(B ,A8(B ,A9(B ,A<(B ,A=(B ,A>(B ,AW(B ,Aw(B
-(eval
- (append
-  '(quail-define-rules)
-  '((" _" ?,A (B)
-    ("!/" ?,A!(B)
-    ("//" ?,A0(B)
-    ("<<" ?\,A+(B)
-    (">>" ?\,A;(B)
-    ("?/" ?,A?(B)
-    ("$/" ?,A#(B)
-    ("A'" ?,AA(B)
-    ("A," ?,B!(B)
-    ("A-" ?,D@(B)
-    ("A/" ?,AE(B)
-    ("A\"" ?,AD(B)
-    ("A^" ?,AB(B)
-    ("A`" ?,A@(B)
-    ("A~" ?,AC(B)
-    ("A~" ?,BC(B)
-    ("C'" ?,BF(B)
-    ("C," ?,AG(B)
-    ("C." ?,CE(B)
-    ("C^" ?,CF(B)
-    ("C~" ?,BH(B)
-    ("D/" ?,AP(B)
-    ("D/" ?,BP(B)
-    ("D~" ?,BO(B)
-    ("E'" ?,AI(B)
-    ("E," ?,BJ(B)
-    ("E-" ?,D*(B)
-    ("E." ?,DL(B)
-    ("E/" ?,AF(B)
-    ("E\"" ?,AK(B)
-    ("E^" ?,AJ(B)
-    ("E`" ?,AH(B)
-    ("E~" ?,BL(B)
-    ("G," ?,D+(B)
-    ("G." ?,CU(B)
-    ("G^" ?,CX(B)
-    ("G~" ?,C+(B)
-    ("H/" ?,C!(B)
-    ("H^" ?,C&(B)
-    ("I'" ?,AM(B)
-    ("I," ?,DG(B)
-    ("I-" ?,DO(B)
-    ("I." ?,C)(B)
-    ("I\"" ?,AO(B)
-    ("I^" ?,AN(B)
-    ("I`" ?,AL(B)
-    ("I~" ?,D%(B)
-    ("J^" ?,C,(B)
-    ("K," ?,DS(B)
-    ("L'" ?,BE(B)
-    ("L," ?,D&(B)
-    ("L/" ?,B#(B)
-    ("L~" ?,B%(B)
-    ("N'" ?,BQ(B)
-    ("N," ?,DQ(B)
-    ("N/" ?,D=(B)
-    ("N~" ?,AQ(B)
-    ("N~" ?,BR(B)
-    ("O'" ?,AS(B)
-    ("O-" ?,DR(B)
-    ("O/" ?,AX(B)
-    ("O:" ?,BU(B)
-    ("O\"" ?,AV(B)
-    ("O^" ?,AT(B)
-    ("O`" ?,AR(B)
-    ("O~" ?,AU(B)
-    ("R'" ?,B@(B)
-    ("R," ?,D#(B)
-    ("R~" ?,BX(B)
-    ("S'" ?,B&(B)
-    ("S," ?,B*(B)
-    ("S^" ?,C^(B)
-    ("S~" ?,B)(B)
-    ("T," ?,B^(B)
-    ("T/" ?,A^(B)
-    ("T/" ?,D,(B)
-    ("T~" ?,B+(B)
-    ("U'" ?,AZ(B)
-    ("U," ?,DY(B)
-    ("U-" ?,D^(B)
-    ("U." ?,BY(B)
-    ("U:" ?,B[(B)
-    ("U\"" ?,A\(B)
-    ("U^" ?,A[(B)
-    ("U`" ?,AY(B)
-    ("U~" ?,D](B)
-    ("U~" ?,C](B)
-    ("Y'" ?,A](B)
-    ("Y=" ?,A%(B)
-    ("Z'" ?,B,(B)
-    ("Z." ?,B/(B)
-    ("Z~" ?,B.(B)
-    ("a'" ?,Aa(B)
-    ("a," ?,B1(B)
-    ("a-" ?,D`(B)
-    ("a/" ?,Ae(B)
-    ("a\"" ?,Ad(B)
-    ("a^" ?,Ab(B)
-    ("a_" ?,A*(B)
-    ("a`" ?,A`(B)
-    ("a~" ?,Ac(B)
-    ("a~" ?,Bc(B)
-    ("c'" ?,Bf(B)
-    ("c," ?,Ag(B)
-    ("c." ?,Ce(B)
-    ("c^" ?,Cf(B)
-    ("c~" ?,Bh(B)
-    ("c/" ?,A"(B)
-    ("d/" ?,Ap(B)
-    ("d/" ?,Bp(B)
-    ("d~" ?,Bo(B)
-    ("e'" ?,Ai(B)
-    ("e," ?,Bj(B)
-    ("e-" ?,D:(B)
-    ("e." ?,Dl(B)
-    ("e/" ?,Af(B)
-    ("e\"" ?,Ak(B)
-    ("e^" ?,Aj(B)
-    ("e`" ?,Ah(B)
-    ("e~" ?,Bl(B)
-    ("g," ?,D;(B)
-    ("g." ?,Cu(B)
-    ("g^" ?,Cx(B)
-    ("g~" ?,C;(B)
-    ("h/" ?,C1(B)
-    ("h^" ?,C6(B)
-    ("i'" ?,Am(B)
-    ("i," ?,Dg(B)
-    ("i-" ?,Do(B)
-    ("i." ?,C9(B)
-    ("i\"" ?,Ao(B)
-    ("i^" ?,An(B)
-    ("i`" ?,Al(B)
-    ("i~" ?,D5(B)
-    ("j^" ?,C<(B)
-    ("k," ?,Ds(B)
-    ("k/" ?,D"(B)
-    ("l'" ?,Be(B)
-    ("l," ?,D6(B)
-    ("l/" ?,B3(B)
-    ("l~" ?,B5(B)
-    ("n'" ?,Bq(B)
-    ("n," ?,Dq(B)
-    ("n/" ?,D?(B)
-    ("n~" ?,Aq(B)
-    ("n~" ?,Br(B)
-    ("o'" ?,As(B)
-    ("o-" ?,Dr(B)
-    ("o/" ?,Ax(B)
-    ("o:" ?,Bu(B)
-    ("o\"" ?,Av(B)
-    ("o^" ?,At(B)
-    ("o_" ?,A:(B)
-    ("o`" ?,Ar(B)
-    ("o~" ?,Au(B)
-    ("r'" ?,B`(B)
-    ("r," ?,D3(B)
-    ("r~" ?,Bx(B)
-    ("s'" ?,B6(B)
-    ("s," ?,B:(B)
-    ("s/" ?,A_(B)
-    ("s^" ?,C~(B)
-    ("s~" ?,B9(B)
-    ("t," ?,B~(B)
-    ("t/" ?,A~(B)
-    ("t/" ?,D<(B)
-    ("t~" ?,B;(B)
-    ("u'" ?,Az(B)
-    ("u," ?,Dy(B)
-    ("u-" ?,D~(B)
-    ("u." ?,By(B)
-    ("u:" ?,B{(B)
-    ("u\"" ?,A|(B)
-    ("u^" ?,A{(B)
-    ("u`" ?,Ay(B)
-    ("u~" ?,D}(B)
-    ("u~" ?,C}(B)
-    ("y'" ?,A}(B)
-    ("y\"" ?,A(B)
-    ("z'" ?,B<(B)
-    ("z." ?,B?(B)
-    ("z~" ?,B>(B)
+;; XEmacs change; only map some characters if our XEmacs supports them, this
+;; is the idea behind the macrolet.
+(macrolet
+    ((quail-define-latin-postfix (&rest rules)
+       (let ((unicode (prog1
+                          (getf rules :unicode rules)
+                        (remf rules :unicode))))
+         (mapl
+          (function*
+           (lambda ((rule . rules))
+            (let ((assoc (assoc (car rule) rules)))
+              (and assoc
+                   (warn "latin-postfix: rule %S overridden by %S"
+                         rule assoc)))))
+          (append rules unicode))
+         `(quail-install-map
+           (let ((map ',(let ((map (list nil)))
+                             (mapc (function*
+                                    (lambda ((key trans . rest))
+                                     (quail-defrule-internal key trans map)))
+                                   rules)
+                             map)))
+             (when latin-post-decent-xemacs-unicode-support
+               (mapc (function*
+                      (lambda ((key trans . rest))
+                       (setf (aref trans 0)
+                             (string (decode-char 'ucs (aref trans 0))))
+                       (quail-defrule-internal key trans map)))
+                     ',unicode))
+             map)))))
+  (quail-define-latin-postfix
+   :unicode (("$/"  [#x20ac ",A#(B"]) ;; These override earlier rules, which is
+             ("O/"  [#x0152 ",AX(B"]) ;; OK in this limited context.
+             ("Y\"" [#x0178])
+             ("e="  [#x20ac])
+             ("o/"  [#x0153 ",Ax(B"]))
+   (" _" ?,A (B)
+   ("!/" ?,A!(B)
+   ("//" ?,A0(B)
+   ("<<" ?\,A+(B)
+   (">>" ?\,A;(B)
+   ("?/" ?,A?(B)
+   ("$/" ?,A#(B)
+   ("A'" ?,AA(B)
+   ("A," ?,B!(B)
+   ("A-" ?,D@(B)
+   ("A/" ?,AE(B)
+   ("A\"" ?,AD(B)
+   ("A^" ?,AB(B)
+   ("A`" ?,A@(B)
+   ("A~" [",AC(B" ",BC(B"])
+   ("C'" ?,BF(B)
+   ("C," ?,AG(B)
+   ("C." ?,CE(B)
+   ("C^" ?,CF(B)
+   ("C~" ?,BH(B)
+   ("D/" [",AP(B" ",BP(B"])
+   ("D~" ?,BO(B)
+   ("E'" ?,AI(B)
+   ("E," ?,BJ(B)
+   ("E-" ?,D*(B)
+   ("E." ?,DL(B)
+   ("E/" ?,AF(B)
+   ("E\"" ?,AK(B)
+   ("E^" ?,AJ(B)
+   ("E`" ?,AH(B)
+   ("E~" ?,BL(B)
+   ("G," ?,D+(B)
+   ("G." ?,CU(B)
+   ("G^" ?,CX(B)
+   ("G~" ?,C+(B)
+   ("H/" ?,C!(B)
+   ("H^" ?,C&(B)
+   ("I'" ?,AM(B)
+   ("I," ?,DG(B)
+   ("I-" ?,DO(B)
+   ("I." ?,C)(B)
+   ("I\"" ?,AO(B)
+   ("I^" ?,AN(B)
+   ("I`" ?,AL(B)
+   ("I~" ?,D%(B)
+   ("J^" ?,C,(B)
+   ("K," ?,DS(B)
+   ("L'" ?,BE(B)
+   ("L," ?,D&(B)
+   ("L/" ?,B#(B)
+   ("L~" ?,B%(B)
+   ("N'" ?,BQ(B)
+   ("N," ?,DQ(B)
+   ("N/" ?,D=(B)
+   ("N~" [",AQ(B" ",BR(B"])
+   ("O'" ?,AS(B)
+   ("O-" ?,DR(B)
+   ("O/" ?,AX(B)
+   ("O:" ?,BU(B)
+   ("O\"" ?,AV(B)
+   ("O^" ?,AT(B)
+   ("O`" ?,AR(B)
+   ("O~" ?,AU(B)
+   ("R'" ?,B@(B)
+   ("R," ?,D#(B)
+   ("R~" ?,BX(B)
+   ("S'" ?,B&(B)
+   ("S," ?,B*(B)
+   ("S^" ?,C^(B)
+   ("S~" ?,B)(B)
+   ("T," ?,B^(B)
+   ("T/" [",A^(B" ",D,(B"])
+   ("T~" ?,B+(B)
+   ("U'" ?,AZ(B)
+   ("U," ?,DY(B)
+   ("U-" ?,D^(B)
+   ("U." ?,BY(B)
+   ("U:" ?,B[(B)
+   ("U\"" ?,A\(B)
+   ("U^" ?,A[(B)
+   ("U`" ?,AY(B)
+   ("U~" [",D](B" "$(D*f(B"])
+   ("Y'" ?,A](B)
+   ("Y=" ?,A%(B)
+   ("Z'" ?,B,(B)
+   ("Z." ?,B/(B)
+   ("Z~" ?,B.(B)
+   ("a'" ?,Aa(B)
+   ("a," ?,B1(B)
+   ("a-" ?,D`(B)
+   ("a/" ?,Ae(B)
+   ("a\"" ?,Ad(B)
+   ("a^" ?,Ab(B)
+   ("a_" ?,A*(B)
+   ("a`" ?,A`(B)
+   ("a~" [",Ac(B" ",Bc(B"])
+   ("c'" ?,Bf(B)
+   ("c," ?,Ag(B)
+   ("c." ?,Ce(B)
+   ("c^" ?,Cf(B)
+   ("c~" ?,Bh(B)
+   ("c/" ?,A"(B)
+   ("d/" [",Ap(B" ",Bp(B"])
+   ("d~" ?,Bo(B)
+   ("e'" ?,Ai(B)
+   ("e," ?,Bj(B)
+   ("e-" ?,D:(B)
+   ("e." ?,Dl(B)
+   ("e/" ?,Af(B)
+   ("e\"" ?,Ak(B)
+   ("e^" ?,Aj(B)
+   ("e`" ?,Ah(B)
+   ("e~" ?,Bl(B)
+   ("g," ?,D;(B)
+   ("g." ?,Cu(B)
+   ("g^" ?,Cx(B)
+   ("g~" ?,C;(B)
+   ("h/" ?,C1(B)
+   ("h^" ?,C6(B)
+   ("i'" ?,Am(B)
+   ("i," ?,Dg(B)
+   ("i-" ?,Do(B)
+   ("i." ?,C9(B)
+   ("i\"" ?,Ao(B)
+   ("i^" ?,An(B)
+   ("i`" ?,Al(B)
+   ("i~" ?,D5(B)
+   ("j^" ?,C<(B)
+   ("k," ?,Ds(B)
+   ("k/" ?,D"(B)
+   ("l'" ?,Be(B)
+   ("l," ?,D6(B)
+   ("l/" ?,B3(B)
+   ("l~" ?,B5(B)
+   ("n'" ?,Bq(B)
+   ("n," ?,Dq(B)
+   ("n/" ?,D?(B)
+   ("n~" [",Aq(B" ",Br(B"])
+   ("o'" ?,As(B)
+   ("o-" ?,Dr(B)
+   ("o/" ?,Ax(B)
+   ("o:" ?,Bu(B)
+   ("o\"" ?,Av(B)
+   ("o^" ?,At(B)
+   ("o_" ?,A:(B)
+   ("o`" ?,Ar(B)
+   ("o~" ?,Au(B)
+   ("r'" ?,B`(B)
+   ("r," ?,D3(B)
+   ("r~" ?,Bx(B)
+   ("s'" ?,B6(B)
+   ("s," ?,B:(B)
+   ("s/" ?,A_(B)
+   ("s^" ?,C~(B)
+   ("s~" ?,B9(B)
+   ("t," ?,B~(B)
+   ("t/" [",A~(B" ",D<(B"])
+   ("t~" ?,B;(B)
+   ("u'" ?,Az(B)
+   ("u," ?,Dy(B)
+   ("u-" ?,D~(B)
+   ("u." ?,By(B)
+   ("u:" ?,B{(B)
+   ("u\"" ?,A|(B)
+   ("u^" ?,A{(B)
+   ("u`" ?,Ay(B)
+   ("u~" [",D}(B" ",C}(B"])
+   ("y'" ?,A}(B)
+   ("y\"" ?,A(B)
+   ("z'" ?,B<(B)
+   ("z." ?,B?(B)
+   ("z~" ?,B>(B)
 
-    ("!//" ["!/"])
-    ("///" ["//"])
-    ("<<<" ["<<"])
-    (">>>" [">>"])
-    ("?//" ["?/"])
-    ("$//" ["$/"])
-    ("A''" ["A'"])
-    ("A,," ["A,"])
-    ("A--" ["A-"])
-    ("A//" ["A/"])
-    ("A\"\"" ["A\""])
-    ("A^^" ["A^"])
-    ("A``" ["A`"])
-    ("A~~" ["A~"])
-    ("C''" ["C'"])
-    ("C,," ["C,"])
-    ("C.." ["C."])
-    ("C^^" ["C^"])
-    ("C~~" ["C~"])
-    ("D//" ["D/"])
-    ("D~~" ["D~"])
-    ("E''" ["E'"])
-    ("E,," ["E,"])
-    ("E--" ["E-"])
-    ("E.." ["E."])
-    ("E//" ["E/"])
-    ("E\"\"" ["E\""])
-    ("E^^" ["E^"])
-    ("E``" ["E`"])
-    ("E~~" ["E~"])
-    ("G,," ["G,"])
-    ("G.." ["G."])
-    ("G^^" ["G^"])
-    ("G~~" ["G~"])
-    ("H//" ["H/"])
-    ("H^^" ["H^"])
-    ("I''" ["I'"])
-    ("I,," ["I,"])
-    ("I--" ["I-"])
-    ("I.." ["I."])
-    ("I\"\"" ["I\""])
-    ("I^^" ["I^"])
-    ("I``" ["I`"])
-    ("I~~" ["I~"])
-    ("J^^" ["J^"])
-    ("K,," ["K,"])
-    ("L''" ["L'"])
-    ("L,," ["L,"])
-    ("L//" ["L/"])
-    ("L~~" ["L~"])
-    ("N''" ["N'"])
-    ("N,," ["N,"])
-    ("N//" ["N/"])
-    ("N~~" ["N~"])
-    ("O''" ["O'"])
-    ("O--" ["O-"])
-    ("O//" ["O/"])
-    ("O::" ["O:"])
-    ("O\"\"" ["O\""])
-    ("O^^" ["O^"])
-    ("O``" ["O`"])
-    ("O~~" ["O~"])
-    ("R''" ["R'"])
-    ("R,," ["R,"])
-    ("R~~" ["R~"])
-    ("S''" ["S'"])
-    ("S,," ["S,"])
-    ("S^^" ["S^"])
-    ("S~~" ["S~"])
-    ("T,," ["T,"])
-    ("T//" ["T/"])
-    ("T~~" ["T~"])
-    ("U''" ["U'"])
-    ("U,," ["U,"])
-    ("U--" ["U-"])
-    ("U.." ["U."])
-    ("U::" ["U:"])
-    ("U\"\"" ["U\""])
-    ("U^^" ["U^"])
-    ("U``" ["U`"])
-    ("U~~" ["U~"])
-    ("Y''" ["Y'"])
-    ("Y\"\"" ["Y\""])
-    ("Y==" ["Y="])
-    ("Z''" ["Z'"])
-    ("Z.." ["Z."])
-    ("Z~~" ["Z~"])
-    ("a''" ["a'"])
-    ("a,," ["a,"])
-    ("a--" ["a-"])
-    ("a//" ["a/"])
-    ("a\"\"" ["a\""])
-    ("a^^" ["a^"])
-    ("a__" ["a_"])
-    ("a``" ["a`"])
-    ("a~~" ["a~"])
-    ("c''" ["c'"])
-    ("c,," ["c,"])
-    ("c.." ["c."])
-    ("c^^" ["c^"])
-    ("c~~" ["c~"])
-    ("c//" ["c/"])
-    ("d//" ["d/"])
-    ("d~~" ["d~"])
-    ("e''" ["e'"])
-    ("e,," ["e,"])
-    ("e--" ["e-"])
-    ("e.." ["e."])
-    ("e//" ["e/"])
-    ("e\"\"" ["e\""])
-    ("e^^" ["e^"])
-    ("e``" ["e`"])
-    ("e==" ["e="])
-    ("e~~" ["e~"])
-    ("g,," ["g,"])
-    ("g.." ["g."])
-    ("g^^" ["g^"])
-    ("g~~" ["g~"])
-    ("h//" ["h/"])
-    ("h^^" ["h^"])
-    ("i''" ["i'"])
-    ("i,," ["i,"])
-    ("i--" ["i-"])
-    ("i.." ["i."])
-    ("i\"\"" ["i\""])
-    ("i^^" ["i^"])
-    ("i``" ["i`"])
-    ("i~~" ["i~"])
-    ("j^^" ["j^"])
-    ("k,," ["k,"])
-    ("k//" ["k/"])
-    ("l''" ["l'"])
-    ("l,," ["l,"])
-    ("l//" ["l/"])
-    ("l~~" ["l~"])
-    ("n''" ["n'"])
-    ("n,," ["n,"])
-    ("n//" ["n/"])
-    ("n~~" ["n~"])
-    ("o''" ["o'"])
-    ("o--" ["o-"])
-    ("o//" ["o/"])
-    ("o::" ["o:"])
-    ("o\"\"" ["o\""])
-    ("o^^" ["o^"])
-    ("o__" ["o_"])
-    ("o``" ["o`"])
-    ("o~~" ["o~"])
-    ("r''" ["r'"])
-    ("r,," ["r,"])
-    ("r~~" ["r~"])
-    ("s''" ["s'"])
-    ("s,," ["s,"])
-    ("s//" ["s/"])
-    ("s^^" ["s^"])
-    ("s~~" ["s~"])
-    ("t,," ["t,"])
-    ("t//" ["t/"])
-    ("t~~" ["t~"])
-    ("u''" ["u'"])
-    ("u,," ["u,"])
-    ("u--" ["u-"])
-    ("u.." ["u."])
-    ("u::" ["u:"])
-    ("u\"\"" ["u\""])
-    ("u^^" ["u^"])
-    ("u``" ["u`"])
-    ("u~~" ["u~"])
-    ("y''" ["y'"])
-    ("y\"\"" ["y\""])
-    ("z''" ["z'"])
-    ("z.." ["z."])
-    ("z~~" ["z~"]))
-  ;; XEmacs change; only map some characters if our XEmacs supports them.
-  (when latin-post-decent-xemacs-unicode-support
-    (list (list "$/" (decode-char 'ucs #x20ac))
-	  (list "O/" (decode-char 'ucs #x152))
-	  (list "Y\"" (decode-char 'ucs #x178))
-	  (list "e=" (decode-char 'ucs #x20ac))
-	  (list "o/" (decode-char 'ucs #x153))))))
+   ("!//" ["!/"])
+   ("///" ["//"])
+   ("<<<" ["<<"])
+   (">>>" [">>"])
+   ("?//" ["?/"])
+   ("$//" ["$/"])
+   ("A''" ["A'"])
+   ("A,," ["A,"])
+   ("A--" ["A-"])
+   ("A//" ["A/"])
+   ("A\"\"" ["A\""])
+   ("A^^" ["A^"])
+   ("A``" ["A`"])
+   ("A~~" ["A~"])
+   ("C''" ["C'"])
+   ("C,," ["C,"])
+   ("C.." ["C."])
+   ("C^^" ["C^"])
+   ("C~~" ["C~"])
+   ("D//" ["D/"])
+   ("D~~" ["D~"])
+   ("E''" ["E'"])
+   ("E,," ["E,"])
+   ("E--" ["E-"])
+   ("E.." ["E."])
+   ("E//" ["E/"])
+   ("E\"\"" ["E\""])
+   ("E^^" ["E^"])
+   ("E``" ["E`"])
+   ("E~~" ["E~"])
+   ("G,," ["G,"])
+   ("G.." ["G."])
+   ("G^^" ["G^"])
+   ("G~~" ["G~"])
+   ("H//" ["H/"])
+   ("H^^" ["H^"])
+   ("I''" ["I'"])
+   ("I,," ["I,"])
+   ("I--" ["I-"])
+   ("I.." ["I."])
+   ("I\"\"" ["I\""])
+   ("I^^" ["I^"])
+   ("I``" ["I`"])
+   ("I~~" ["I~"])
+   ("J^^" ["J^"])
+   ("K,," ["K,"])
+   ("L''" ["L'"])
+   ("L,," ["L,"])
+   ("L//" ["L/"])
+   ("L~~" ["L~"])
+   ("N''" ["N'"])
+   ("N,," ["N,"])
+   ("N//" ["N/"])
+   ("N~~" ["N~"])
+   ("O''" ["O'"])
+   ("O--" ["O-"])
+   ("O//" ["O/"])
+   ("O::" ["O:"])
+   ("O\"\"" ["O\""])
+   ("O^^" ["O^"])
+   ("O``" ["O`"])
+   ("O~~" ["O~"])
+   ("R''" ["R'"])
+   ("R,," ["R,"])
+   ("R~~" ["R~"])
+   ("S''" ["S'"])
+   ("S,," ["S,"])
+   ("S^^" ["S^"])
+   ("S~~" ["S~"])
+   ("T,," ["T,"])
+   ("T//" ["T/"])
+   ("T~~" ["T~"])
+   ("U''" ["U'"])
+   ("U,," ["U,"])
+   ("U--" ["U-"])
+   ("U.." ["U."])
+   ("U::" ["U:"])
+   ("U\"\"" ["U\""])
+   ("U^^" ["U^"])
+   ("U``" ["U`"])
+   ("U~~" ["U~"])
+   ("Y''" ["Y'"])
+   ("Y\"\"" ["Y\""])
+   ("Y==" ["Y="])
+   ("Z''" ["Z'"])
+   ("Z.." ["Z."])
+   ("Z~~" ["Z~"])
+   ("a''" ["a'"])
+   ("a,," ["a,"])
+   ("a--" ["a-"])
+   ("a//" ["a/"])
+   ("a\"\"" ["a\""])
+   ("a^^" ["a^"])
+   ("a__" ["a_"])
+   ("a``" ["a`"])
+   ("a~~" ["a~"])
+   ("c''" ["c'"])
+   ("c,," ["c,"])
+   ("c.." ["c."])
+   ("c^^" ["c^"])
+   ("c~~" ["c~"])
+   ("c//" ["c/"])
+   ("d//" ["d/"])
+   ("d~~" ["d~"])
+   ("e''" ["e'"])
+   ("e,," ["e,"])
+   ("e--" ["e-"])
+   ("e.." ["e."])
+   ("e//" ["e/"])
+   ("e\"\"" ["e\""])
+   ("e^^" ["e^"])
+   ("e``" ["e`"])
+   ("e==" ["e="])
+   ("e~~" ["e~"])
+   ("g,," ["g,"])
+   ("g.." ["g."])
+   ("g^^" ["g^"])
+   ("g~~" ["g~"])
+   ("h//" ["h/"])
+   ("h^^" ["h^"])
+   ("i''" ["i'"])
+   ("i,," ["i,"])
+   ("i--" ["i-"])
+   ("i.." ["i."])
+   ("i\"\"" ["i\""])
+   ("i^^" ["i^"])
+   ("i``" ["i`"])
+   ("i~~" ["i~"])
+   ("j^^" ["j^"])
+   ("k,," ["k,"])
+   ("k//" ["k/"])
+   ("l''" ["l'"])
+   ("l,," ["l,"])
+   ("l//" ["l/"])
+   ("l~~" ["l~"])
+   ("n''" ["n'"])
+   ("n,," ["n,"])
+   ("n//" ["n/"])
+   ("n~~" ["n~"])
+   ("o''" ["o'"])
+   ("o--" ["o-"])
+   ("o//" ["o/"])
+   ("o::" ["o:"])
+   ("o\"\"" ["o\""])
+   ("o^^" ["o^"])
+   ("o__" ["o_"])
+   ("o``" ["o`"])
+   ("o~~" ["o~"])
+   ("r''" ["r'"])
+   ("r,," ["r,"])
+   ("r~~" ["r~"])
+   ("s''" ["s'"])
+   ("s,," ["s,"])
+   ("s//" ["s/"])
+   ("s^^" ["s^"])
+   ("s~~" ["s~"])
+   ("t,," ["t,"])
+   ("t//" ["t/"])
+   ("t~~" ["t~"])
+   ("u''" ["u'"])
+   ("u,," ["u,"])
+   ("u--" ["u-"])
+   ("u.." ["u."])
+   ("u::" ["u:"])
+   ("u\"\"" ["u\""])
+   ("u^^" ["u^"])
+   ("u``" ["u`"])
+   ("u~~" ["u~"])
+   ("y''" ["y'"])
+   ("y\"\"" ["y\""])
+   ("z''" ["z'"])
+   ("z.." ["z."])
+   ("z~~" ["z~"])))
 
 ;; Derived from Slovenian.kmap from Yudit
 ;; attributed as: 2001-11-11 Roman Maurer <roman.maurer@amis.net>