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>
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.