]> git.eshelyaron.com Git - emacs.git/commitdiff
Define category `^'. Add Unicode
authorDave Love <fx@gnu.org>
Tue, 20 Nov 2001 16:53:04 +0000 (16:53 +0000)
committerDave Love <fx@gnu.org>
Tue, 20 Nov 2001 16:53:04 +0000 (16:53 +0000)
equivalents for most scripts.  Deal with Latin Extended-B,
Armenian and various miscellaneous unicodes.

lisp/international/characters.el

index 163e550973ddbb8d3a2553d83b31803b90c79a5b..6b8a534f1d960db5aa6e0510bad4cf8c1776813e 100644 (file)
@@ -2,8 +2,9 @@
 
 ;; Copyright (C) 1995, 1997 Electrotechnical Laboratory, JAPAN.
 ;; Licensed to the Free Software Foundation.
+;; Copyright (C) 2001  Free Software Foundation, Inc.
 
-;; Keywords: multibyte character, character set, syntax, category
+;; Keywords: multibyte character, character set, syntax, category, i18n
 
 ;; This file is part of GNU Emacs.
 
@@ -30,6 +31,8 @@
 ;; This file does not define the syntax for Latin-N character sets;
 ;; those are defined by the files latin-N.el.
 
+;;; Code:
+
 ;;; Predefined categories.
 
 ;; For each character set.
@@ -88,6 +91,8 @@
 (define-category ?> "A character which can't be placed at beginning of line.")
 (define-category ?< "A character which can't be placed at end of line.")
 
+;; Combining
+(define-category ?^ "Combining diacritic or mark")
 \f
 ;;; Setting syntax and category.
 
     (modify-syntax-entry (make-char (car charsets)) "w")
     (modify-category-entry (make-char (car charsets)) ?b)
     (setq charsets (cdr charsets))))
+(let ((ch #x600))
+  (while (<= ch #x6ff)
+    (modify-category-entry (decode-char 'ucs ch) ?b)
+    (setq ch (1+ ch)))
+  (setq ch #xfb50)
+  (while (<= ch #xfdff)
+    (modify-category-entry (decode-char 'ucs ch) ?b)
+    (setq ch (1+ ch)))
+  (setq ch #xfe70)
+  (while (<= ch #xfefe)
+    (modify-category-entry (decode-char 'ucs ch) ?b)
+    (setq ch (1+ ch))))
 
 ;; Chinese character set (GB2312)
 
 (modify-syntax-entry ?\\e$A!;\e(B ")\e$A!:\e(B")
 (modify-syntax-entry ?\\e$A!=\e(B ")\e$A!<\e(B")
 (modify-syntax-entry ?\\e$A!?\e(B ")\e$A!>\e(B")
+;; Unicode equivalents of above
+(modify-syntax-entry ?\\e$,2=T\e(B "(\e$,2=U\e(B")
+(modify-syntax-entry ?\\e$,2=H\e(B "(\e$,2=I\e(B")
+(modify-syntax-entry ?\\e$,2=J\e(B "(\e$,2=K\e(B")
+(modify-syntax-entry ?\\e$,2=L\e(B "(\e$,2=M\e(B")
+(modify-syntax-entry ?\\e$,2=N\e(B "(\e$,2=O\e(B")
+(modify-syntax-entry ?\\e$,2=V\e(B "(\e$,2=W\e(B")
+(modify-syntax-entry ?\\e$,2=P\e(B "(\e$,2=Q\e(B")
+(modify-syntax-entry ?\\e$,2=U\e(B ")\e$,2=T\e(B")
+(modify-syntax-entry ?\\e$,2=I\e(B ")\e$,2=H\e(B")
+(modify-syntax-entry ?\\e$,2=K\e(B ")\e$,2=J\e(B")
+(modify-syntax-entry ?\\e$,2=M\e(B ")\e$,2=L\e(B")
+(modify-syntax-entry ?\\e$,2=O\e(B ")\e$,2=N\e(B")
+(modify-syntax-entry ?\\e$,2=W\e(B ")\e$,2=V\e(B")
+(modify-syntax-entry ?\\e$,2=Q\e(B ")\e$,2=P\e(B")
 
 (modify-category-entry (make-char 'chinese-gb2312) ?c)
 (modify-category-entry (make-char 'chinese-gb2312) ?\|)
                  ("\e$(5!3\e(B-\e$(5!X\e(B"        "w"     ?0) ; consonant
                  ("\e$(5!Z\e(B-\e$(5!g\e(B"        "w"     ?8) ; matra
                  ("\e$(5!q\e(B-\e$(5!z\e(B"        "w"     ?6) ; digit
+                 ;; Unicode equivalents
+                 ("\e$,15A5B5C\e(B"      "w"     ?7) ; vowel-modifying diacritical mark
+                                           ; chandrabindu, anuswar, visarga
+                 ("\e$,15E\e(B-\e$,15M\e(B"        "w"     ?1) ; independent vowel
+                 ("\e$,15U\e(B-\e$,15y\e(B"        "w"     ?0) ; consonant
+                 ("\e$,15~\e(B-\e$,16)\e(B"        "w"     ?8) ; matra
+                 ("\e$,16F\e(B-\e$,16O\e(B"        "w"     ?6) ; digit
                  ))
       elm chars len syntax category to ch i)
   (while deflist
 
 (modify-category-entry (make-char 'ethiopic) ?e)
 (modify-syntax-entry (make-char 'ethiopic) "w")
-(let ((chars '(?\e$(3$h\e(B ?\e$(3$i\e(B ?\e$(3$j\e(B ?\e$(3$k\e(B ?\e$(3$l\e(B ?\e$(3$m\e(B ?\e$(3$n\e(B ?\e$(3$o\e(B ?\e$(3%i\e(B ?\e$(3%t\e(B ?\e$(3%u\e(B ?\e$(3%v\e(B ?\e$(3%w\e(B ?\e$(3%x\e(B)))
+(dotimes (i (1+ (- #x137c #x1200)))
+  (modify-category-entry (decode-char 'ucs (+ #x1200 i)) ?e))
+(let ((chars '(?\e$(3$h\e(B ?\e$(3$i\e(B ?\e$(3$j\e(B ?\e$(3$k\e(B ?\e$(3$l\e(B ?\e$(3$m\e(B ?\e$(3$n\e(B ?\e$(3$o\e(B ?\e$(3%i\e(B ?\e$(3%t\e(B ?\e$(3%u\e(B ?\e$(3%v\e(B ?\e$(3%w\e(B ?\e$(3%x\e(B
+              ;; Unicode equivalents of the above:
+              ?\e$,1Q!\e(B ?\e$,1Q"\e(B ?\e$,1Q#\e(B ?\e$,1Q$\e(B ?\e$,1Q%\e(B ?\e$,1Q&\e(B ?\e$,1Q'\e(B ?\e$,1Q(\e(B ?\e$,3op\e(B ?\e$,3o{\e(B ?\e$,3o|\e(B ?\e$,3o}\e(B ?\e$,3o~\e(B ?\e$,3o\7f\e(B)))
   (while chars
     (modify-syntax-entry (car chars) ".")
     (setq chars (cdr chars))))
 ;; Japanese character set (JISX0201-kana, JISX0201-roman, JISX0208, JISX0212)
 
 (modify-category-entry (make-char 'katakana-jisx0201) ?k)
+(modify-category-entry (make-char 'katakana-jisx0201) ?j)
 (modify-category-entry (make-char 'latin-jisx0201) ?r)
 (modify-category-entry (make-char 'japanese-jisx0208) ?j)
 (modify-category-entry (make-char 'japanese-jisx0212) ?j)
 (modify-category-entry (make-char 'japanese-jisx0208) ?\|)
 (modify-category-entry (make-char 'japanese-jisx0212) ?\|)
 
+;; Unicode equivalents of JISX0201-kana
+(let ((c #xff61))
+  (while (<= c #xff9f)
+    (modify-category-entry (decode-char 'ucs c) ?k)
+    (modify-category-entry (decode-char 'ucs c) ?j)
+    (modify-category-entry (decode-char 'ucs c) ?\|)
+    (setq c (1+ c))))
+
+;; Katakana block
+(let ((c #x30a0))
+  (while (<= c #x30ff)
+    ;; ?K is double width, ?k isn't specified
+    (modify-category-entry (decode-char 'ucs c) ?k)
+    (modify-category-entry (decode-char 'ucs c) ?j)
+    (modify-category-entry (decode-char 'ucs c) ?\|) 
+    (setq c (1+ c))))
+
+;; Hiragana block
+(let ((c #x3040))
+  (while (<= c #x309f)
+    ;; ?H is actually defined to be double width
+    (modify-category-entry (decode-char 'ucs c) ?H)
+    ;;(modify-category-entry (decode-char 'ucs c) ?j)
+    (modify-category-entry (decode-char 'ucs c) ?\|) 
+    (setq c (1+ c))))
+
 ;; JISX0208
 (modify-syntax-entry (make-char 'japanese-jisx0208) "w")
 (modify-syntax-entry (make-char 'japanese-jisx0208 33) "_")
 
 ;; JISX0201-Kana
 (modify-syntax-entry (make-char 'katakana-jisx0201) "w")
-(let ((chars '(?\e(I!\e(B ?\e(I"\e(B ?\e(I#\e(B ?\e(I$\e(B ?\e(I%\e(B)))
+(let ((chars '(?\e(I!\e(B ?\e(I$\e(B ?\e(I%\e(B
+              ;; Unicode:
+              ?\e$,3sa\e(B ?\e$,3sd\e(B ?\e$,3se\e(B)))
   (while chars
     (modify-syntax-entry (car chars) ".")
     (setq chars (cdr chars))))
 
+(modify-syntax-entry ?\\e(I"\e(B "(\e(I#\e(B")
+(modify-syntax-entry ?\\e(I#\e(B "(\e(I"\e(B")
+
 ;; Korean character set (KSC5601)
 
 (modify-syntax-entry (make-char 'korean-ksc5601) "w")
 ;; Lao character set
 
 (modify-category-entry (make-char 'lao) ?o)
+(dotimes (i (1+ (- #xeff #xe80)))
+  (modify-category-entry (decode-char 'ucs (+ i #xe80)) ?o))
 
 (let ((deflist '(;; chars      syntax  category
                  ("\e(1!\e(B-\e(1N\e(B"    "w"     ?0) ; consonant
                  ("\e(1\\e(B"            "w"     ?9) ; semivowel lower
                  ("\e(1p\e(B-\e(1y\e(B"    "w"     ?6) ; digit
                  ("\e(1Of\e(B"           "_"     ?5) ; symbol
+                 ;; Unicode equivalents
+                 ("\e$,1D!\e(B-\e$,1DN\e(B"        "w"     ?0) ; consonant
+                 ("\e$,1DPDRDSD]D`\e(B-\e$,1Dd\e(B"        "w"     ?1) ; vowel base
+                 ("\e$,1DQDT\e(B-\e$,1DWD[Dm\e(B"  "w"     ?2) ; vowel upper
+                 ("\e$,1DXDY\e(B"        "w"     ?3) ; vowel lower
+                 ("\e$,1Dh\e(B-\e$,1Dk\e(B"        "w"     ?4) ; tone mark 
+                 ("\e$,1D\D]\e(B"        "w"     ?9) ; semivowel lower
+                 ("\e$,1Dp\e(B-\e$,1Dy\e(B"        "w"     ?6) ; digit
+                 ("\e$,1DODf\e(B"        "_"     ?5) ; symbol
                  ))
       elm chars len syntax category to ch i)
   (while deflist
 ;; Thai character set (TIS620)
 
 (modify-category-entry (make-char 'thai-tis620) ?t)
+(dotimes (i (1+ (- #xe7f #xe00)))
+  (modify-category-entry (decode-char 'ucs (+ i #xe00)) ?t))
 
 (let ((deflist '(;; chars      syntax  category
                  ("\e,T!\e(B-\e,TCEG\e(B-\e,TN\e(B"  "w"     ?0) ; consonant
                  ("\e,Th\e(B-\e,Tm\e(B"    "w"     ?4) ; tone mark 
                  ("\e,Tp\e(B-\e,Ty\e(B"    "w"     ?6) ; digit
                  ("\e,TOf_oz{\e(B"       "_"     ?5) ; symbol
+                 ;; Unicode equivalents
+                 ("\e$,1Ba\e(B-\e$,1C#C%C'\e(B-\e$,1C.\e(B"  "w"     ?0) ; consonant
+                 ("\e$,1C$C&C0C2C3C@\e(B-\e$,1CE\e(B"      "w"     ?1) ; vowel base
+                 ("\e$,1C1C4\e(B-\e$,1C7CGCN\e(B"  "w"     ?2) ; vowel upper
+                 ("\e$,1C8\e(B-\e$,1C:\e(B"        "w"     ?3) ; vowel lower
+                 ("\e$,1CH\e(B-\e$,1CM\e(B"        "w"     ?4) ; tone mark 
+                 ("\e$,1CP\e(B-\e$,1CY\e(B"        "w"     ?6) ; digit
+                 ("\e$,1C/CFC?COCZC[\e(B"        "_"     ?5) ; symbol
                  ))
       elm chars len syntax category to ch i)
   (while deflist
 
 (modify-category-entry (make-char 'tibetan) ?q)
 (modify-category-entry (make-char 'tibetan-1-column) ?q)
+(dotimes (i (1+ (- #xfff #xf00)))
+  (modify-category-entry (decode-char 'ucs (+ i #xf00)) ?q))
 
 (let ((deflist '(;; chars             syntax category
-                 ("\e$(7"!\e(B-\e$(7"J"K\e(B"              "w"     ?0) ; consonant
+                 ("\e4\e$(7"!\e0"!\e1\e(B-\e4\e$(7"J\e0"J\e1\e4"K\e0"K\e1\e(B"              "w"     ?0) ; consonant
                  ("\e$(7#!\e(B-\e$(7#J#K#L#M!"!#\e(B"       "w"     ?0) ;
                  ("\e$(7$!\e(B-\e$(7$e\e(B"              "w"     ?0) ;
                  ("\e$(7%!\e(B-\e$(7%u\e(B"              "w"     ?0) ;
                  ("\e$(8!;!=!?!@!A!D"`\e(B"            "."     ?>) ;
                  ("\e$(7!0\e(B-\e$(7!:!l#R#S"f\e(B"      "."     ?<) ; prohibition
                  ("\e$(7!C!E\e(B-\e$(7!H!J\e(B-\e$(7!O!f!h\e(B-\e$(7!k!n!o#O#P\e(B-\e$(7#`\e(B" "." ?q) ; others
+
+                 ;; Uniocode version (not complete)
+                 ("\e$,1F \e(B-\e$,1FIFJ\e(B"              "w"     ?0) ; consonant
+                 ("\e$,1Fp\e(B-\e$,1G9G:G;G<\e(B"       "w"     ?0) ;
+                 ("\e$,1FRFZF[F\F]F`\e(B"       "w"      ?2) ; upper vowel
+                 ("\e$,1F^FbFcFfFgFhFiFjFk\e(B" "w"      ?2) ; upper modifier
+                 ("\e$,1EYFPFQFTFdEuEw\e(B"       "w"    ?3) ; lowel vowel/modifier
+                 ("\e$,1E`\e(B-\e$,1EiEj\e(B-\e$,1Es\e(B"            "w"     ?6) ; digit
+                 ("\e$,1EKEM\e(B-\e$,1ERETF_\e(B"        "."     ?|) ; line-break char
+                 ("\e$,1EHEKEM\e(B-\e$,1ERETF_E}Et\e(B"  "."     ?>) ; prohibition
+                 ("\e$,1E@\e(B-\e$,1EJE|GAGBFe\e(B"      "."     ?<) ; prohibition
+                 ("\e$,1ESEU\e(B-\e$,1EXEZ\e(B-\e$,1E_EvEx\e(B-\e$,1E{E~E\7fG>G?\e(B-\e$,1GO\e(B" "." ?q) ; others
                  ))
       elm chars len syntax category to ch i)
   (while deflist
   (modify-category-entry upper ?l)     ; latin characters.
   )
 
+;; Unicodes in VISCII
+(mapc (lambda (c)
+       (modify-category-entry c ?v))
+      "\e$,1o o.o0o6o$o&o(o,o<o8o>o@oBoDoFoPoRoToVoXoboZo\o^oJoNoLoHof\e,D]\e$,1od\e,_,\e,AU\e$,1o/o1o7o%o'o)o-o=o9o?oAoCoEoGoQoSoUoW\e(B\
+\e$,1o`!`oYo]o_oKopohojol!ao[!o\e,A@ABC\e$,1o"\e,BC\e$,1o3o5\e,AHIJ\e$,1o:\e,ALM\e,D%\e,_<\e,BP\e$,1oi\e,ARST\e$,1o!owokom\e,AYZ\e$,1oyou\e,A]\e$,1oa!p\e,A`abc\e$,1o#\e,Bc\e$,1ooo+\e,Ahij\e$,1o;\e,Alm\e,D5\e$,1oI\e(B
+\e,Bp\e$,1oq\e,Arstu\e$,1oOoMoe\e,Ayz\e,D}\e$,1og\e,A}\e$,1ocon\e(B")
+
 (let ((tbl (standard-case-table))
       (i 32))
   (while (< i 128)
 ;; Thus we have to check language-environment to handle casing
 ;; correctly.  Currently only I<->i is available.
 
-;; case-syntax-pair's are not yet given for Latin Extendet-B
-
   ;; Latin Extended-A, Latin Extended-B
   (setq c #x0100)
   (while (<= c #x0233)
   (set-case-syntax-pair ?\e$,1!;\e(B ?\e$,1!<\e(B tbl)
   (set-case-syntax-pair ?\e$,1!=\e(B ?\e$,1!>\e(B tbl)
 
+  ;; Latin Extended-B
+  (set-case-syntax-pair ?\e$,1!A\e(B ?\e$,1#S\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!B\e(B ?\e$,1!C\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!D\e(B ?\e$,1!E\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!F\e(B ?\e$,1#T\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!G\e(B ?\e$,1!H\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!I\e(B ?\e$,1#V\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!J\e(B ?\e$,1#W\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!K\e(B ?\e$,1!L\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!N\e(B ?\e$,1"=\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!O\e(B ?\e$,1#Y\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!P\e(B ?\e$,1#[\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!Q\e(B ?\e$,1!R\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!S\e(B ?\e$,1#`\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!T\e(B ?\e$,1#c\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!V\e(B ?\e$,1#i\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!W\e(B ?\e$,1#h\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!X\e(B ?\e$,1!Y\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!\\e(B ?\e$,1#o\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!]\e(B ?\e$,1#r\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!_\e(B ?\e$,1#u\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!`\e(B ?\e$,1!a\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!b\e(B ?\e$,1!c\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!d\e(B ?\e$,1!e\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!f\e(B ?\e$,1$ \e(B tbl)
+  (set-case-syntax-pair ?\e$,1!g\e(B ?\e$,1!h\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!i\e(B ?\e$,1$#\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!l\e(B ?\e$,1!m\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!n\e(B ?\e$,1$(\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!o\e(B ?\e$,1!p\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!q\e(B ?\e$,1$*\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!r\e(B ?\e$,1$+\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!s\e(B ?\e$,1!t\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!u\e(B ?\e$,1!v\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!w\e(B ?\e$,1$2\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!x\e(B ?\e$,1!y\e(B tbl)
+  (set-case-syntax-pair ?\e$,1!|\e(B ?\e$,1!}\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"$\e(B ?\e$,1"&\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"%\e(B ?\e$,1"&\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"'\e(B ?\e$,1")\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"(\e(B ?\e$,1")\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"*\e(B ?\e$,1",\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"+\e(B ?\e$,1",\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"-\e(B ?\e$,1".\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"/\e(B ?\e$,1"0\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"1\e(B ?\e$,1"2\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"3\e(B ?\e$,1"4\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"5\e(B ?\e$,1"6\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"7\e(B ?\e$,1"8\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"9\e(B ?\e$,1":\e(B tbl)
+  (set-case-syntax-pair ?\e$,1";\e(B ?\e$,1"<\e(B tbl)
+  (set-case-syntax-pair ?\e$,1">\e(B ?\e$,1"?\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"@\e(B ?\e$,1"A\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"B\e(B ?\e$,1"C\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"D\e(B ?\e$,1"E\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"F\e(B ?\e$,1"G\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"H\e(B ?\e$,1"I\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"J\e(B ?\e$,1"K\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"L\e(B ?\e$,1"M\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"N\e(B ?\e$,1"O\e(B tbl)
+  ;; 01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON
+  (set-case-syntax-pair ?\e$,1"Q\e(B ?\e$,1"S\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"R\e(B ?\e$,1"S\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"T\e(B ?\e$,1"U\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"V\e(B ?\e$,1!U\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"W\e(B ?\e$,1!\7f\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"X\e(B ?\e$,1"Y\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"Z\e(B ?\e$,1"[\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"\\e(B ?\e$,1"]\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"^\e(B ?\e$,1"_\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"`\e(B ?\e$,1"a\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"b\e(B ?\e$,1"c\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"d\e(B ?\e$,1"e\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"f\e(B ?\e$,1"g\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"h\e(B ?\e$,1"i\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"j\e(B ?\e$,1"k\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"l\e(B ?\e$,1"m\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"n\e(B ?\e$,1"o\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"p\e(B ?\e$,1"q\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"r\e(B ?\e$,1"s\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"t\e(B ?\e$,1"u\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"v\e(B ?\e$,1"w\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"x\e(B ?\e$,1"y\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"z\e(B ?\e$,1"{\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"|\e(B ?\e$,1"}\e(B tbl)
+  (set-case-syntax-pair ?\e$,1"~\e(B ?\e$,1"\7f\e(B tbl)
+  (set-case-syntax-pair ?\e$,1#"\e(B ?\e$,1##\e(B tbl)
+  (set-case-syntax-pair ?\e$,1#$\e(B ?\e$,1#%\e(B tbl)
+  (set-case-syntax-pair ?\e$,1#&\e(B ?\e$,1#'\e(B tbl)
+  (set-case-syntax-pair ?\e$,1#(\e(B ?\e$,1#)\e(B tbl)
+  (set-case-syntax-pair ?\e$,1#*\e(B ?\e$,1#+\e(B tbl)
+  (set-case-syntax-pair ?\e$,1#,\e(B ?\e$,1#-\e(B tbl)
+  (set-case-syntax-pair ?\e$,1#.\e(B ?\e$,1#/\e(B tbl)
+  (set-case-syntax-pair ?\e$,1#0\e(B ?\e$,1#1\e(B tbl)
+  (set-case-syntax-pair ?\e$,1#2\e(B ?\e$,1#3\e(B tbl)
+
   ;; Latin Extended Additional
   (setq c #x1e00)
   (while (<= c #x1ef9)
   (set-case-syntax-pair ?\e$,1&n\e(B ?\e$,1'M\e(B tbl)
   (set-case-syntax-pair ?\e$,1&o\e(B ?\e$,1'N\e(B tbl)
 
+  ;; Armenian
+  (setq c #x531)
+  (while (<= c #x556)
+    (set-case-syntax-pair (decode-char 'ucs c)
+                         (decode-char 'ucs (+ c #x30)) tbl)
+    (setq c (1+ c)))
+
   ;; Greek Extended
   (setq c #x1f00)
   (while (<= c #x1fff)
   (while (<= c #x2027)
     (set-case-syntax c "_" tbl)
     (setq c (1+ c)))
-  )
 
+  ;; Roman numerals
+  (setq c #x2160)
+  (while (<= c #x216f)
+    (set-case-syntax-pair (decode-char 'ucs c)
+                         (decode-char 'ucs (+ c #x10)) tbl)
+    (setq c (1+ c)))
+
+  ;; Circled Latin
+  (setq c #x24b6)
+  (while (<= c #x24cf)
+    (set-case-syntax-pair (decode-char 'ucs c)
+                         (decode-char 'ucs (+ c 26)) tbl)
+    (modify-category-entry (decode-char 'ucs c) ?l)
+    (modify-category-entry (decode-char 'ucs (+ c 26)) ?l)
+    (setq c (1+ c)))
+
+  ;; Fullwidth Latin
+  (setq c #xff21)
+  (while (<= c #xff3a)
+    (set-case-syntax-pair (decode-char 'ucs c)
+                         (decode-char 'ucs (+ c #x20)) tbl)
+    (modify-category-entry (decode-char 'ucs c) ?l)
+    (modify-category-entry (decode-char 'ucs (+ c #x20)) ?l)
+    (setq c (1+ c)))
+
+  ;; Ohm, Kelvin, Angstrom
+  (set-case-syntax-pair ?\e$,1uf\e(B ?\e$,1'I\e(B tbl)
+  (set-case-syntax-pair ?\e$,1uj\e(B ?k tbl)
+  (set-case-syntax-pair ?\e$,1uk\e(B ?\e,Ae\e(B tbl)
+
+  ;; Combining diacritics
+  (setq c #x300)
+  (while (<= c #x362)
+    (modify-category-entry (decode-char 'ucs c) ?^)
+    (setq c (1+ c)))
+
+  ;; Combining marks
+  (setq c #x20d0)
+  (while (<= c #x20e3)
+    (modify-category-entry (decode-char 'ucs c) ?^)
+    (setq c (1+ c)))
+
+  ;; Fixme: syntax for symbols &c
+  )
 \f
 ;;; Setting word boundary.
 
 ;;; coding: iso-2022-7bit
 ;;; End:
 
-;;; end of characters.el
+;;; characters.el ends here