+ *)
+ |)
+ ("."
+ =))
+ *))
+
+;; 5th stage
+;; Adjust below characters (U+102F, U+1037, etc)
+
+(category
+ (0x1000 0x107F ?O)
+ (0x200C 0x200D ?O)
+ (0xE000 0xE3FF ?O)
+ (0x1014 ?T) ; tall consonant (substituted)
+ (0x101B ?T)
+ (0x102F 0x1030 ?B) ; below position (substitute tall one)
+ (0x1037 ?b) ; shift to right
+ (0xE01D ?B)
+ (0xE1A1 ?B)
+ (0xE1D1 ?B)
+ (0xE1B1 0xE1BA ?L)
+ (0xE1F1 0xE1F2 ?B)
+ (0xE2F1 0xE2F2 ?L) ; has lower part
+ )
+
+(generator
+ (0
+ (cond
+ (" ([^ ]*) "
+ |
+ (1
+ (cond
+ ("(T)(B)([OL])?(b)?"
+ (1 (cond ((0x1014) 0xE140) ((0x101B) 0xE01B)))
+ (2 =)
+ (3 = *)
+ (4 0xE137))
+ ("([TBL])(O*)?(b)"
+ (1 =) (2 = *) (3 0xE137))
+ ("." =))
+ *)
+ |)
+ ("OO*" = *)
+ ("." =))
+ *))
+
+;; 6th stage
+;; Adjust conbination of normal consonant and wide subconsonant.
+
+(category
+ (0x1000 0x107F ?O)
+ (0x200C 0x200D ?O)
+ (0xE000 0xE3FF ?O)
+ (0x1001 0x1002 ?n)
+ (0x1004 0x1005 ?n)
+ (0x1007 ?n)
+ (0x100E ?n)
+ (0x1012 0x1013 ?n)
+ (0x1015 0x1017 ?n)
+ (0x1019 ?n)
+ (0x101D ?n)
+ (0xE000 ?w)
+ (0xE003 ?w)
+ (0xE006 ?w)
+ (0xE00C ?w)
+ (0xE00F ?w)
+ (0xE010 0xE011 ?w)
+ (0xE018 ?w))
+
+(generator
+ (0
+ (cond
+ (" (n)(w)([^ ]*) "
+ \[ (1 =) (2 Br>17Bl =) (3 = *))
+ (" ([^ ]*) "
+ (1 = *))