File: [local] / OpenXM / src / asir-doc / jtexindex / C / Attic / jtexindex.diff (download)
Revision 1.1.1.1 (vendor branch), Wed Dec 8 05:47:43 1999 UTC (24 years, 9 months ago) by noro
Branch: NORO
CVS Tags: maekawa-ipv6, R_1_3_1-2, RELEASE_20000124, RELEASE_1_3_1_13b, RELEASE_1_2_3_12, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, RELEASE_1_2_1, RELEASE_1_1_3, RELEASE_1_1_2, KNOPPIX_2006, DEB_REL_1_2_3-9, ASIR2000 Changes since 1.1: +0 -0
lines
Imported OpenXM/src/asir-doc.
|
Path: kddlab!cs.titech!wnoc-tyo-news!sh.wide!wnoc-kyo!oskgate0.mei!synapse!kgway!manmos
From: manmos@knowledge.co.jp (Hideo "Sir MaNMOS" Morisita)
Newsgroups: fj.sources
Subject: Japanese extention for texindex
Message-ID: <MANMOS.93Jul13113502@kgway.knowledge.co.jp>
Date: 13 Jul 93 02:35:02 GMT
Sender: manmos@kgway.knowledge.co.jp
Followup-To: fj.sources.d
Distribution: fj
Organization: Knowledge. Co., Osaka, Japan
Lines: 643
$B?92<(J $B$*Be41MM(J $B#M#a#N#M#O#S!w%J%l%C%8$G$9!#(J
$B0JA0!"(Jtexinfo$B$NF|K\8l3HD%$,(Jfj$B$KN.$l$^$7$?$,!"$=$lMQ$N(Jtexindex$B$ON.$l$J(J
$B$+$C$?$h$&$G$9$N$G!":n$C$F$_$^$7$?!#(J
texindex.c 1.45$B$N3HD%$H$7$F:n$C$F$"$j$^$9!#(J(texindex.c 1.45$B$O(J
texinfo-2.15 $B$+$i(J texinfo-3.0$B$^$GF1$8$b$N$G$9(J)
$B;HMQJ}K!$O(J
patch < $B$3$N%U%!%$%k(J
$B$H$7!"(JMakefile$B$N(J DEFS$B$N=j$K(J -DEUC or -DSJIS$B$rDj5A$7$F%3%s%Q%$%k$7$F2<(J
$B$5$$!#(J
$B%$%s%G%C%/%9=g$O(J
ASCII$B5-9f(J->ASCII & JIS208 $B?t;z(J -> ASCII & JIS208 $B%"%k%U%!%Y%C%H(J ->
JIS201 & JIS208 $B2>L>(J
$B$K$J$C$F$$$^$9!#(J
$B8+=P$7$O!"2>L>#1J8;z$E$D$K$J$C$F$$$^$9!#!J$"9T$+9T$H$+$G$J$$!"$=$&$9$k(J
$B$N$b%F!<%V%k$r:n$l$PFq$7$/$O$J$$$G$9$,!D!K(J
--------------------------------(cur me)-----------------------------
*** texindex.c Sat Dec 12 01:19:49 1992
--- jtexindex.c Tue Jul 13 11:15:17 1993
***************
*** 1,6 ****
/* Prepare TeX index dribble output into an actual index.
! Version 1.45
Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc.
--- 1,6 ----
/* Prepare TeX index dribble output into an actual index.
! Version 1.45-j1.00
Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc.
***************
*** 607,612 ****
--- 607,618 ----
while (bracelevel)
{
c = *p++;
+ #ifdef SJIS
+ if ( iskanji(c)) {
+ p++;
+ continue;
+ }
+ #endif
if (c == '{')
bracelevel++;
if (c == '}')
***************
*** 650,655 ****
--- 656,667 ----
while (bracelevel)
{
c = *p++;
+ #ifdef SJIS
+ if (iskanji(c)) {
+ p++;
+ continue;
+ }
+ #endif
if (c == '{')
bracelevel++;
if (c == '}')
***************
*** 678,685 ****
/* Vector used to translate characters for comparison.
This is how we make all alphanumerics follow all else,
and ignore case in the first sorting. */
! int char_order[256];
void
init_char_order ()
{
--- 690,1071 ----
/* Vector used to translate characters for comparison.
This is how we make all alphanumerics follow all else,
and ignore case in the first sorting. */
! int char_order[0x10000]; /* japanese */
!
! #ifdef EUC
! #define KANJI
! #endif
!
! #ifdef SJIS
! #define KANJI
! #endif
!
! #ifdef KANJI
!
! #ifndef EUC
! # ifndef SJIS
! # define EUC
! # endif
! #else
! # ifdef SJIS
! # error
! # endif
! #endif
!
! #ifdef EUC
! #define JIS_NUM_0 0xa3b0
! #define JIS_NUM_9 (JIS_NUM_0 + '9'- '0')
! #define JIS_ALPH_A 0xa3c1
! #define JIS_ALPH_Z (JIS_ALPH_A + 'Z'-'A')
! #define JIS_ALPH_a 0xa3e1
! #define JIS_HIRA_SMALL_A 0xa4a1
! #define JIS_HIRA_NN 0xa4f3
! #define JIS_KATA_SMALL_A 0xa5a1
! #define JIS_KATA_SMALL_KE 0xa5f6
! #define JIS_HIRA_U 0xa4a6
! #define JIS_KATA_U 0xa5a6
! #define JIS_KATA_VU 0xa5f4
!
! #define JIS_KATA_UPPER 0xa5
! #define JIS_HIRA_UPPER 0xa4
!
! #define JIS_HIRA_A 0xa4a2
! #define JIS_KATA_A 0xa5a2
!
! #define JIS_DAKUTEN 0xa1ab
! #define JIS_HANDAKUTEN 0xa1ac
! #define JIS_CHOUON 0xa2ac
!
! int kana[] = {
! /* . [ ] , . wo a */
! 0xa1a1, 0xa1a3, 0xa1d6, 0xa1d7, 0xa1a2, 0xa1a6, 0xa5f2, 0xa5a1,
! /* i u e o ya yu yo tsu */
! 0xa5a3, 0xa5a5, 0xa5a7, 0xa5a9, 0xa5e3, 0xa5e5, 0xa5e7, 0xa5c3,
! /* - a i u e o ka ki */
! 0xa1bc, 0xa5a2, 0xa5a4, 0xa5a6, 0xa5a8, 0xa5aa, 0xa5ab, 0xa5ad,
! /* ku ke ko sa si su se so */
! 0xa5af, 0xa5b1, 0xa5b3, 0xa5b5, 0xa5b7, 0xa5b9, 0xa5bb, 0xa5bd,
! /* ta ti tu te to na ni nu */
! 0xa5bf, 0xa5c1, 0xa5c4, 0xa5c6, 0xa5c8, 0xa5ca, 0xa5cb, 0xa5cc,
! /* ne no ha hi hu he ho ma */
! 0xa5cd, 0xa5ce, 0xa5cf, 0xa5d2, 0xa5d5, 0xa5d8, 0xa5db, 0xa5de,
! /* mi mu me mo ya yu yo ra */
! 0xa5df, 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e4, 0xa5e6, 0xa5e8, 0xa5e9,
! /* ri ru re ro wa nn "" maru */
! 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ef, 0xa5f3, JIS_DAKUTEN,JIS_HANDAKUTEN
! };
!
! int daku[] = {0xa5ac, 0xa5ae, 0xa5b0, 0xa5b2, 0xa5b4, /* $B%,(J*/
! 0xa5b6, 0xa5b8, 0xa5ba, 0xa5bc, 0xa5be, /* $B%6(J */
! 0xa5c0, 0xa5c2, 0xa5c5, 0xa5c7, 0xa5c9, /* $B%@(J */
! 0xa5d0, 0xa5d3, 0xa5d6, 0xa5d9, 0xa5dc}; /* $B%P(J */
! int handaku[] = {0xa5d1, 0xa5d4, 0xa5d7, 0xa5da, 0xa5dd}; /* $B%Q(J */
! int dakuall[] = {0xa4ac, 0xa4ae, 0xa4b0, 0xa4b2, 0xa4b4, /* $B$,(J */
! 0xa4b6, 0xa4b8, 0xa4ba, 0xa4bc, 0xa4be, /* $B$6(J */
! 0xa4c0, 0xa4c2, 0xa4c5, 0xa4c7, 0xa4c9, /* $B$@(J */
! 0xa4d0, 0xa4d3, 0xa4d6, 0xa4d9, 0xa4dc, /* $B$P(J */
! 0xa5ac, 0xa5ae, 0xa5b0, 0xa5b2, 0xa5b4, /* $B%,(J */
! 0xa5b6, 0xa5b8, 0xa5ba, 0xa5bc, 0xa5be, /* $B%6(J */
! 0xa5c0, 0xa5c2, 0xa5c5, 0xa5c7, 0xa5c9, /* $B%@(J */
! 0xa5d0, 0xa5d3, 0xa5d6, 0xa5d9, 0xa5dc}; /* $B%P(J */
! int handakuall[] = {0xa4d1, 0xa4d4, 0xa4d7, 0xa4da, 0xa4dd, /* $B$Q(J */
! 0xa5d1, 0xa5d4, 0xa5d7, 0xa5da, 0xa5dd}; /* $B%Q(J */
!
!
! iskanji(c) /* japanses extention */
! int c;
! {
! if ( !(c & 0x80 )) return 0;
! if ( c == 0x8e ) return 0;
! return 1;
! }
!
! is201kana(c) /* japanses extention */
! int c;
! {
! if ( c == 0x8e ) return 1;
! else return 0;
! }
! #else /* SJIS */
! #define JIS_NUM_0 0x824f
! #define JIS_NUM_9 (JIS_NUM_0 + '9'- '0')
! #define JIS_ALPH_A 0x8260
! #define JIS_ALPH_Z (JIS_ALPH_A + 'Z'-'A')
! #define JIS_ALPH_a 0x8281
! #define JIS_HIRA_SMALL_A 0x829f
! #define JIS_HIRA_NN 0x82f1
! #define JIS_KATA_SMALL_A 0x8340
! #define JIS_KATA_SMALL_KE 0x8396
! #define JIS_HIRA_U 0x82a4
! #define JIS_KATA_U 0x83a5
! #define JIS_KATA_VU 0x8394
!
! #define JIS_KATA_UPPER 0x83
! #define JIS_HIRA_UPPER 0x82
!
! #define JIS_HIRA_A 0x82a0
! #define JIS_KATA_A 0x8341
!
! #define JIS_DAKUTEN 0x814a
! #define JIS_HANDAKUTEN 0x814b
! #define JIS_CHOUON 0x815b
!
! int kana[] = {
! /* . [ ] , . wo a */
! 0x813f, 0x8142, 0x8175, 0x8176, 0x8141, 0x8145, 0x8392, 0x8340,
! /* i u e o ya yu yo tsu */
! 0x8342, 0x8344, 0x8346, 0x8348, 0x8383, 0x8385, 0x8387, 0x8362,
! /* - a i u e o ka ki */
! 0x815b, 0x8341, 0x8343, 0x8345, 0x8347, 0x8349, 0x834a, 0x834c,
! /* ku ke ko sa si su se so */
! 0x834e, 0x8350, 0x8352, 0x8354, 0x8356, 0x8358, 0x835a, 0x835c,
! /* ta ti tu te to na ni nu */
! 0x835e, 0x8360, 0x8363, 0x8365, 0x8367, 0x8369, 0x836a, 0x836b,
! /* ne no ha hi hu he ho ma */
! 0x836c, 0x836d, 0x836e, 0x8371, 0x8374, 0x8377, 0x837a, 0x837d,
! /* mi mu me mo ya yu yo ra */
! 0x837e, 0x8380, 0x8381, 0x8382, 0x8384, 0x8386, 0x8388, 0x8389,
! /* ri ru re ro wa nn "" maru */
! 0x838a, 0x838b, 0x838c, 0x838d, 0x838f, 0x8393, JIS_DAKUTEN,JIS_HANDAKUTEN
! };
!
! int daku[] = {0x834b, 0x834d, 0x834f, 0x8351, 0x8353, /* $B%,(J*/
! 0x8355, 0x8357, 0x8359, 0x835b, 0x835d, /* $B%6(J */
! 0x835f, 0x8361, 0x8364, 0x8366, 0x8367, /* $B%@(J */
! 0x836f, 0x8372, 0x8375, 0x8378, 0x837b}; /* $B%P(J */
! int handaku[] = {0x8370, 0x8373, 0x8376, 0x8379, 0x837c}; /* $B%Q(J */
! int dakuall[] = {0x82aa, 0xa2ac, 0x82a3, 0x82b0, 0x82b2, /* $B$,(J */
! 0x82b4, 0x82b6, 0x82b8, 0x82ba, 0x82bc, /* $B$6(J */
! 0x82be, 0x82c0, 0x82c3, 0x82c5, 0x82c7, /* $B$@(J */
! 0x82ce, 0x82d1, 0x82d4, 0x82d7, 0x82da, /* $B$P(J */
!
! 0x834b, 0x834d, 0x834f, 0x8351, 0x8353, /* $B%,(J*/
! 0x8355, 0x8357, 0x8359, 0x835b, 0x835d, /* $B%6(J */
! 0x835f, 0x8361, 0x8364, 0x8366, 0x8367, /* $B%@(J */
! 0x836f, 0x8372, 0x8375, 0x8378, 0x837b}; /* $B%P(J */
! int handakuall[] = {0x82cf, 0x82d2, 0x82d5, 0x82d8, 0x82db, /* $B$Q(J */
! 0x8370, 0x8373, 0x8376, 0x8379, 0x837c}; /* $B%Q(J */
!
! iskanji(c) /* japanses extention */
! int c;
! {
! c &= 0xff;
! if (( c >= 0x81 && c <= 0x9f ) ||
! ( c >= 0xe0 && c <= 0xea )) return 1;
! return 0;
! }
!
! is201kana(c) /* japanses extention */
! int c;
! {
! if ( c >= 0xa0 && c <= 0xdf ) return 1;
! else return 0;
! }
! #endif
!
!
! kana_char_order() /* japanese */
! {
! unsigned int c,i,j,cc;
!
! for ( c = 0x8000 ; c < 0x10000 ; c++ )
! char_order[c] = c;
!
! /* NUMERIC */
! for ( c = JIS_NUM_0 , i = '0' + 512; c <= JIS_NUM_9 ; i++,c++)
! char_order[c] = i;
!
! /* ALPHABET */
! for ( c = JIS_ALPH_A , i = 'a' + 512; c <= JIS_ALPH_Z ; i++,c++) {
! char_order[c] = i;
! char_order[c+JIS_ALPH_a - JIS_ALPH_A] = i;
! }
!
! /* KANA */
! for ( c = JIS_HIRA_SMALL_A ; c <= JIS_HIRA_NN ; c++ ) {
! char_order[c] = c+512;
! cc = c+JIS_KATA_SMALL_A-JIS_HIRA_SMALL_A;
! #ifdef SJIS
! if ( cc > 0x837e ) cc ++;
! #endif
! char_order[cc] = c+512;
! if (isdaku(c) ) {
! char_order[c] = c+512-1;
! char_order[cc] = c+512-1;
! } else if (ishandaku(c) ) {
! char_order[c] = c+512-2;
! char_order[cc] = c+512-2;
! }
! }
! for ( c = JIS_KATA_VU ; c <= JIS_KATA_SMALL_KE ; c++ ) {
! char_order[c] = c+512;
! if (c == JIS_KATA_VU ) {
! char_order[c] = JIS_KATA_U + 512;
! }
! }
! }
!
!
! #ifdef EUC
! #define KANA_BYTES 2
! #else
! #define KANA_BYTES 2
! #endif
+ static convert_htoz(str,ret)
+ unsigned char *str;
+ int *ret;
+ {
+ int c,c2;
+
+ int num = KANA_BYTES;
+
+ #ifdef EUC
+ str++;
+ #endif
+ c = *str++;
+ if (!is201kana(*str)) {
+ if (c >= 0xa0 && c <= 0xdf)
+ *ret = kana[c - 0xa0];
+ else *ret = 0x8e00 + c;
+ return num;
+ }
+ #ifdef EUC
+ str++;
+ #endif
+ num += KANA_BYTES;
+
+ if ( (c2 = *str++) == 0xde) { /* $BByE@(J */
+ if (c >= 0xb6 && c <= 0xba) /* line-ga */
+ c = daku[c - 0xb6];
+ else if (c >= 0xbb && c <= 0xbf) /* line-za */
+ c = daku[c - 0xbb+5];
+ else if (c >= 0xc0 && c <= 0xc4) /* line-da */
+ c = daku[c - 0xc0+10];
+ else if (c >= 0xca && c <= 0xce) /* line-ba */
+ c = daku[c - 0xca+15];
+ else if ( c == 0xb3 ) /* vu */
+ c = JIS_KATA_VU;
+ } else if (c2 == 0xdf) { /* $BH>ByE@(J */
+ if (c >= 0xca && c <= 0xce) /* line-pa */
+ c = handaku[c - 0xca];
+ } else if ( c2 == 0xb1 ) { /* $BD92;(J */
+ if (c >= 0xa0 && c <= 0xdd)
+ *ret = kana[c - 0xa0];
+ else *ret = 0x8e00 + c;
+ }
+ if ( c < 0x100 ) c += 0x8e00;
+
+ return num;
+ }
+
+ isadddaku(c)
+ {
+ int i;
+ for ( i = 0 ; i < sizeof(dakuall) / sizeof(dakuall[1]) ; i++ )
+ if ( dakuall[i]-1 == c ) return 1;
+ return 0;
+ }
+
+ isaddhandaku(c)
+ {
+ int i;
+ for ( i = 0 ; i < sizeof(handakuall) / sizeof(handakuall[1]) ; i++ )
+ if ( handakuall[i]-2 == c ) return 1;
+ return 0;
+ }
+
+ isdaku(c)
+ {
+ int i;
+ for ( i = 0 ; i < sizeof(dakuall) / sizeof(dakuall[1]) ; i++ )
+ if ( dakuall[i] == c ) return 1;
+ return 0;
+ }
+
+ ishandaku(c)
+ {
+ int i;
+ for ( i = 0 ; i < sizeof(handakuall) / sizeof(handakuall[1]) ; i++ )
+ if ( handakuall[i] == c ) return 1;
+ return 0;
+ }
+
+ int mbchar(str,ret)
+ unsigned char *str;
+ int *ret;
+ {
+ int c = *str++;
+ int cc,ccc;
+ if ( !iskanji(c) && !is201kana(c)) {
+ *ret = c & 0xff;
+ return 1;
+ }
+ if ( iskanji (c) ) {
+ cc = ((c & 0xff) << 8) | ((*str++) & 0xff);
+ ccc = (((*str++ ) & 0xff) << 8 ) | ((*str++) & 0xff);
+
+ if ( ccc == JIS_DAKUTEN ) {
+ if ( isadddaku(cc)) cc++;
+ else if ( cc == JIS_KATA_U || cc == JIS_HIRA_U )
+ cc = JIS_KATA_VU;
+ *ret = cc;
+ return 4;
+ } else if ( ccc == JIS_HANDAKUTEN ) {
+ if ( isaddhandaku(cc)) cc+=2;
+ *ret = cc;
+ return 4;
+ } else if ( ccc == JIS_CHOUON ) {
+ *ret = cc;
+ return 4;
+ } else {
+ *ret = cc;
+ return 2;
+ }
+ } else if ( is201kana(c)) {
+ /* EUC */
+ return convert_htoz(str-1,ret);
+ }
+ }
+
+ xinitial(str,c)
+ unsigned char *str;
+ int c;
+ {
+ int up;
+ if (isdaku(c)) c--;
+ else if (ishandaku(c)) c-=2;
+ else if ( c == JIS_KATA_VU ) c = JIS_KATA_U;
+
+ if ((up= (c & 0xff00) >>8) == JIS_KATA_UPPER ) { /* katakana */
+ c += JIS_HIRA_SMALL_A - JIS_KATA_SMALL_A;
+ #ifdef SJIS
+ if ( c > 0x837e ) c ++;
+ #endif
+ }
+ *str++ = (c >> 8 ) & 0xfff;
+ *str++ = c & 0xff;
+ *str= 0;
+ }
+
+ make_initial(src,dst)
+ unsigned char *src,*dst;
+ {
+ int len;
+ int c;
+
+ len = mbchar(src,&c);
+ if ( len == 1 ) {
+ dst[0] =c;
+ dst[1] = 0;
+ } else {
+ xinitial(dst,c);
+ len = 2;
+ }
+ return len;
+ }
+ #endif
+
void
init_char_order ()
{
***************
*** 695,700 ****
--- 1081,1089 ----
char_order[i] = 512 + i;
char_order[i + 'A' - 'a'] = 512 + i;
}
+ #ifdef KANJI
+ kana_char_order(); /* japanese */
+ #endif
}
/* Compare two fields (each specified as a start pointer and a character count)
***************
*** 741,751 ****
if (p1 == e1)
c1 = 0;
else
c1 = *p1++;
if (p2 == e2)
c2 = 0;
else
! c2 = *p2++;
if (char_order[c1] != char_order[c2])
return char_order[c1] - char_order[c2];
--- 1130,1149 ----
if (p1 == e1)
c1 = 0;
else
+ #ifdef KANJI
+ p1 += mbchar(p1,&c1); /* japanese */
+ #else
c1 = *p1++;
+ #endif
+
if (p2 == e2)
c2 = 0;
else
! #ifdef KANJI
! p2 += mbchar(p2,&c2); /* japanese */
! #else
! c2 = *p2++;
! #endif
if (char_order[c1] != char_order[c2])
return char_order[c1] - char_order[c2];
***************
*** 763,777 ****
if (p1 == e1)
c1 = 0;
else
c1 = *p1++;
if (p2 == e2)
c2 = 0;
else
! c2 = *p2++;
!
! if (c1 != c2)
! /* Reverse sign here so upper case comes out last. */
! return c2 - c1;
if (!c1)
break;
}
--- 1161,1194 ----
if (p1 == e1)
c1 = 0;
else
+ #ifdef KANJI
+ p1 += mbchar(p1,&c1); /* japanese */
+ #else
c1 = *p1++;
+ #endif
if (p2 == e2)
c2 = 0;
else
! #ifdef KANJI
! p2 += mbchar(p2,&c2); /* japanese */
! #else
! c2 = *p2++;
! #endif
! #ifdef KANJI
! if ( iskanji(c1) || is201kana(c1)) {
! if (c1 != c2)
! /* Reverse sign here so upper case comes out last. */
! return c2 - c1;
! } else {
! if (c1 != c2)
! return c1 - c2;
! }
! #else
!
! if (c1 != c2)
! /* Reverse sign here so upper case comes out last. */
! return c2 - c1;
! #endif
if (!c1)
break;
}
***************
*** 1135,1141 ****
/* When we need a string of length 1 for the value of lastinitial,
store it here. */
! char lastinitial1[2];
/* Initialize static storage for writing an index. */
--- 1552,1558 ----
/* When we need a string of length 1 for the value of lastinitial,
store it here. */
! char lastinitial1[3]; /* japanese */
/* Initialize static storage for writing an index. */
***************
*** 1168,1174 ****
int nosecondary;
int initiallength;
char *initial;
! char initial1[2];
register char *p;
/* First, analyze the parts of the entry fed to us this time. */
--- 1585,1591 ----
int nosecondary;
int initiallength;
char *initial;
! char initial1[3]; /* japanese */
register char *p;
/* First, analyze the parts of the entry fed to us this time. */
***************
*** 1184,1193 ****
else
{
initial = initial1;
initial1[0] = *p;
initial1[1] = 0;
initiallength = 1;
!
if (initial1[0] >= 'a' && initial1[0] <= 'z')
initial1[0] -= 040;
}
--- 1601,1615 ----
else
{
initial = initial1;
+ #ifdef KANJI
+ initiallength = make_initial(p,initial1); /* japanese */
+ #else
+ initial = initial1;
initial1[0] = *p;
initial1[1] = 0;
initiallength = 1;
! #endif
!
if (initial1[0] >= 'a' && initial1[0] <= 'z')
initial1[0] -= 040;
}
***************
*** 1227,1232 ****
--- 1649,1656 ----
{
lastinitial = lastinitial1;
*lastinitial1 = *initial1;
+ lastinitial1[1] = initial1[1];
+ lastinitial1[2] = initial1[2];
}
else
{
--------------------------------(cur me)-----------------------------
--
___ $B$o$7$O!";3?a?'$N$+$9$F!<$i$,Bg9%$-$G$N$%(J
[[o o]] $B$U$)$C$U$)$C$U$)(J
'J' $B?92<(J $B$*Be41MM(J $B#M#a#N#M#O#S(J $B1QIW!w#k#n#o#w#l#e#d#g#e(J