[Senna-dev 369] ./lib/str.cについて

Back to archive index

島村 優太郎 ml****@ryne*****
2006年 10月 19日 (木) 23:55:31 JST


お久しぶりです、島村です。

携帯向けのコンテンツに使用するため、携帯の絵文 
字の数字を正規化したり、
http://www.mainichi-msn.co.jp/kurashi/katei/news/ 
20061005ddm013100062000c.html
こんな感じで小文字にして投稿される文字を勝手に 
正規化したりしてます。

携帯系は検索に優しくない投稿だらけで、
しかも新しい言葉がどんどんでてくるのでN-GRAMしか 
選択肢がないし、といいことがありません。
ひらがな/カタカナの小文字を大文字にするのもだ 
いぶ無茶なのですが、
携帯系はこれを行った方が逆に良い感じになってい 
ます。

そんなわけで./lib/str.cの方をちょこちょこいじっ 
て、記号の正規化を行っているのですが、
ひとつわからないところがあるのでお力を貸してい 
ただきたいと思い、投稿させていただきます。。

記号の→①これ系のお話です。

sjisで見ているのですが、
①(0x8740)〜⑨(0x8748)までは
switch (c1 & 0x0f)の
case 7 :の部分で
(./lib/str.c:748)

if (0x40 <= c2 && c2 <= 0x48) {
ctype = sen_str_others;
*d = c2 - 0x870f;
                           }

として、半角数字に正規化しているのですが、
⑩〜⑳の間の場合、(例として⑰)
1(0x31)と7(0x37)にわけて*dに入れる時、
sen_str_digitのフラグ等も追加して行かなきゃいけな 
いと思います。

そこら辺がよくわかってないんですが‥
(わかんないならやるな、って感じですが)

else if(0x49 <= c2 && c2 <= 0x53) { // ⑩〜⑳の場合
で、
                 switch(c2){
‥
                 case 0x50:
ここで1(0x31)と7(0x37)と1文字1文字で認識させたい場 
合、
(共にsen_str_digit)どうすればよいのでしょうか?

普通に*d++で入れていくと0x3130という文字になって 
しまいますし、
ここの部分だけがどうあがいてもうまくいかないで 
す。
(*d++とlength++やったりとか、めちゃくちゃしてます)

C言語の基本かもしれないのですが、よろしくお願 
いします。。

/*
余談ですが、
最近は"ごまちゃん"等の"ゃ"をア行にして"ごまちあ 
ん"としたりするのが多くなってます。
ご丁寧にあをカタカナのアにして"ごまちアん"とす 
る人もいるので、
いっそのことカタカナとひらがなも正規化したくな 
ります。
携帯でインターネットが広まるにつれて、日本語が 
どんどんおかしくなってるような。
*/


------------------☆
島村 優太郎
ml****@ryne*****
------------------☆




Senna-dev メーリングリストの案内
Back to archive index