Mercurial > freewnn
view Wnn/romkan/rk_bltinfn.c @ 23:e1aadb6dcbd4
- fixed the build rule for build_stamp.h. keywords in template for hg tip should surrounded by curly braces instead of hash marks.
- fixed usage of libtool in building jlib.V3. newer libtool does not work without mode specifier.
- replaced some libtool related files. (should remove these?)
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Fri, 23 Jan 2009 16:36:13 +0900 |
parents | bbc77ca4def5 |
children | a7ccf412ba02 |
line wrap: on
line source
/* * $Id: rk_bltinfn.c,v 1.6 2005/04/10 15:26:38 aonoto Exp $ */ /* * FreeWnn is a network-extensible Kana-to-Kanji conversion system. * This file is part of FreeWnn. * * Copyright Kyoto University Research Institute for Mathematical Sciences * 1987, 1988, 1989, 1990, 1991, 1992 * Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999 * Copyright ASTEC, Inc. 1987, 1988, 1989, 1990, 1991, 1992 * Copyright FreeWnn Project 1999, 2000, 2002 * * Maintainer: FreeWnn Project <freewnn@tomo.gr.jp> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /*********************************************************************** rk_bltinfn.c 87.12. 6 Äû Êä ÊÑ´¹ÍѤÎÁȤ߹þ¤ß´Ø¿ô¤Î¤¦¤ÁÊ£»¨¤Ê¤â¤Î¤òÄêµÁ¤·¤Æ¤¢¤ë¡£ Á´³Ñ¢«¢ªÈ¾³Ñ¤ÎÊÑ´¹¤¬¼çÂΡ£ ***********************************************************************/ /* Version 3.0 */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #if STDC_HEADERS # include <string.h> #elif HAVE_STRINGS_H # include <strings.h> #endif /* STDC_HEADERS */ #include "commonhd.h" #include "wnn_config.h" #include "rk_header.h" /* Ⱦ³Ñʸ»ú¤Î¥³¡¼¥É¤Îdefine */ #define HKCHOU (HNKAK1 * 0x100 + 0xB0) /* Ž° */ #define HKDKTN (HNKAK1 * 0x100 + 0xDE) /* ŽÞ */ #define HKHNDK (HNKAK1 * 0x100 + 0xDF) /* Žß */ #define HKMARU (HNKAK1 * 0x100 + 0xA1) /* Ž¡ */ #define HKHRKG (HNKAK1 * 0x100 + 0xA2) /* Ž¢ */ #define HKTJKG (HNKAK1 * 0x100 + 0xA3) /* Ž£ */ #define HKTTEN (HNKAK1 * 0x100 + 0xA4) /* Ž¤ */ #define HKNKPT (HNKAK1 * 0x100 + 0xA5) /* Ž¥ */ /* Á´³Ñʸ»ú¤Î¥³¡¼¥É¤Îdefine */ #define CHOUON (0xA1BC) /* ¡¼ */ #define DAKUTN (0xA1AB) /* ¡« */ #define HNDAKU (0xA1AC) /* ¡¬ */ #define MNMARU (0xA1A3) /* ¡£ */ /* ̾Á°¤Ï MaNMARU¡Ê¤Þ¤ó¤Þ¤ë¡Ë¤Îά */ #define HRKKAG (0xA1D6) /* ¡Ö */ #define TJIKAG (0xA1D7) /* ¡× */ #define TOUTEN (0xA1A2) /* ¡¢ */ #define NKPOTU (0xA1A6) /* ¡¦ */ static char _lang[6]; void romkan_set_lang (lang) char *lang; { strncpy (_lang, lang, 5); _lang[5] = 0; } /** ASCIIʸ»ú¢ªÁ´³Ñ */ /* *INDENT-OFF* */ letter to_zenalpha (l) letter l; /* *INDENT-ON* */ { letter retval; static uns_chr *data = (uns_chr *) "¡¡¡ª¡É¡ô¡ð¡ó¡õ¡Ç¡Ê¡Ë¡ö¡Ü¡¤¡Ý¡¥¡¿£°£±£²£³£´£µ£¶£·£¸£¹¡§¡¨¡ã¡á¡ä¡©\ ¡÷£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú¡Î¡ï¡Ï¡°¡²¡®£á£â£ã£ä£å\ £æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú¡Ð¡Ã¡Ñ¡±"; #ifdef CHINESE static uns_chr *data_cn = (uns_chr *) "¡¡£¡¡±££¡ç£¥£¦£§£¨£©¡ù£«£¬¡ª£®£¯£°£±£²£³£´£µ£¶£·£¸£¹£º£»¡´£½¡µ£¿\ £À£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú£Û£¤£Ý£Þ£ß£à£á£â£ã£ä£å\ £æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú£û£ü£ý£þ"; #endif /* CHINESE */ #ifdef KOREAN static uns_chr *data_ko = (uns_chr *) "¡¡£¡£¢£££¤£¥£¦£§£¨£©£ª£«£¬££®£¯£°£±£²£³£´£µ£¶£·£¸£¹£º£»£¼£½£¾£¿\ £À£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú£Û£Ü£Ý£Þ£ß£à£á£â£ã£ä£å\ £æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú£û£ü£ý£þ"; #endif /* KOREAN */ if (' ' <= l && l <= '~') { l = (l - ' ') << 1; #ifdef CHINESE if (!strcmp (_lang, WNN_C_LANG) || !strcmp (_lang, WNN_T_LANG)) { retval = data_cn[l] << 8; retval += data_cn[++l]; } else #endif #ifdef KOREAN if (!strcmp (_lang, WNN_K_LANG)) { retval = data_ko[l] << 8; retval += data_ko[++l]; } else #endif /* KOREAN */ { retval = data[l] << 8; retval += data[++l]; } return (retval); } else return (l); } static char *hankdata[] = { "Ž§", "Ž±", "Ž¨", "Ž²", "Ž©", "Ž³", "Žª", "Ž´", "Ž«", "Žµ", "Ž¶", "Ž¶ŽÞ", "Ž·", "Ž·ŽÞ", "Ž¸", "Ž¸ŽÞ", "Ž¹", "Ž¹ŽÞ", "Žº", "ŽºŽÞ", "Ž»", "Ž»ŽÞ", "Ž¼", "Ž¼ŽÞ", "Ž½", "Ž½ŽÞ", "Ž¾", "Ž¾ŽÞ", "Ž¿", "Ž¿ŽÞ", "ŽÀ", "ŽÀŽÞ", "ŽÁ", "ŽÁŽÞ", "Ž¯", "ŽÂ", "ŽÂŽÞ", "ŽÃ", "ŽÃŽÞ", "ŽÄ", "ŽÄŽÞ", "ŽÅ", "ŽÆ", "ŽÇ", "ŽÈ", "ŽÉ", "ŽÊ", "ŽÊŽÞ", "ŽÊŽß", "ŽË", "ŽËŽÞ", "ŽËŽß", "ŽÌ", "ŽÌŽÞ", "ŽÌŽß", "ŽÍ", "ŽÍŽÞ", "ŽÍŽß", "ŽÎ", "ŽÎŽÞ", "ŽÎŽß", "ŽÏ", "ŽÐ", "ŽÑ", "ŽÒ", "ŽÓ", "Ž¬", "ŽÔ", "Ž", "ŽÕ", "Ž®", "ŽÖ", "Ž×", "ŽØ", "ŽÙ", "ŽÚ", "ŽÛ", "¥î", "ŽÜ", "¥ð", "¥ñ", "Ž¦", "ŽÝ", "Ž³ŽÞ", "¥õ", "¥ö" }; /* Á´³Ñ¤¬º®¤¸¤Ã¤Æ¤ë¤Î¤ÇÃí°Õ */ /** ¾å¤Îhankdata¤¬¡¢¼ÂºÝ¤Ë»È¤¦È¾³Ñ¥³¡¼¥É¤òɽ¤·¤Æ¤¤¤Ê¤¤¤È¤¡¢¼ÂºÝ¤Î¤â¤Î¤Ë ½¤Àµ¤¹¤ë¡£½é´üÀßÄê»þ¤Ë°ì²ó¤À¤±¸Æ¤Ö */ void hank_setup () { int i; char *s, orig_hnkak1; orig_hnkak1 = *hankdata[0]; /* *hankdata[] ¤Ç¤ÎȾ³Ñʸ»ú¤Î£±¥Ð¥¤¥È¤á¡£È¾³Ñʸ»ú¤Î£±¥Ð¥¤¥È¤á¤À¤±¤¬°Û¤Ê¤ë ¤è¤¦¤Ê¾µ¡¼ï¤Ë°Ü¿¢¤¹¤ë¤È¤¤Ï¡¢HNKAK1¤Îdefine¤òÊѤ¨¤ì¤ÐOK¡£Ã¢¤·romkan¤Î ¥½¡¼¥¹Ãæ¤ÎȾ³Ñʸ»ú¡Ê¤³¤Î¥Õ¥¡¥¤¥ë¤Ë¤Î¤ß¸ºß¡Ë¤â¥³¥ó¥Ð¡¼¥È¤·¤Æ¡¢¤½¤Îµ¡¼ï ¤Ë¹ç¤ï¤»¤ë¤Û¤¦¤¬Ë¾¤Þ¤·¤¤¡£¤·¤«¤·¡¢¥¨¥Ç¥£¥¿¤Ç¤³¤Î¥Õ¥¡¥¤¥ë¤ò½¤Àµ¤·¤¿¤ê ¤¹¤ë¾ì¹ç¤Ë¡¢È¾³Ñʸ»ú¤Î°·¤¤¤¬¤¦¤Þ¤¯¤¤¤«¤Ê¤¤¾ì¹ç¤¬¤¢¤ë¤Î¤Ç¡¢ÆÃ¤Ë ¥³¥ó¥Ð¡¼¥È¤ò¤·¤Ê¤¯¤È¤âÆ°ºî¤¹¤ë¤è¤¦¤Ë½èÃ֤Ϥ·¤Æ¤¢¤ë¡£¤½¤ì¤¬¡¢¤³¤Î hank_setup()¤Ç¤¢¤ë¡£hankdata¤Ï¡¢½é´üÀßÄê»þ¤Ë hank_setup()¤Ë¤è¤Ã¤Æ ¼ÂºÝ¤ÎȾ³Ñ¥³¡¼¥É¤Ëľ¤µ¤ì¤ë¡£ */ if (orig_hnkak1 == (char) HNKAK1) return; for (i = 0; i < numberof (hankdata); i++) { for (s = hankdata[i]; *s; s += 2) if (*s == orig_hnkak1) *s = HNKAK1; } } /** ¤«¤Ê¢ªÈ¾³Ñ¥«¥¿¥«¥Ê¡£·ë²Ì¤¬Æóʸ»ú¤Ë¤Ê¤ë¤³¤È¤â¤¢¤ë¡£*/ void to_hankata (in, outp) letter in, **outp; { uns_chr *p, c; letter *out; out = *outp; switch (in) { case CHOUON: *out++ = HKCHOU; break; case DAKUTN: *out++ = HKDKTN; break; case HNDAKU: *out++ = HKHNDK; break; case MNMARU: *out++ = HKMARU; break; case HRKKAG: *out++ = HKHRKG; break; case TJIKAG: *out++ = HKTJKG; break; case TOUTEN: *out++ = HKTTEN; break; case NKPOTU: *out++ = HKNKPT; break; default: if (is_kata (in)) { for (p = (uns_chr *) hankdata[in - KATBGN]; c = *p; p++) *out++ = (c << 8) + *++p; } else if (is_hira (in)) { for (p = (uns_chr *) hankdata[in - HIRBGN]; c = *p; p++) *out++ = (c << 8) + *++p; } else { *out++ = in; } } *out = EOLTTR; *outp = out; } /** Ⱦ³Ñ¥«¥¿¥«¥Ê¢ª¤Ò¤é¤¬¤Ê¡£Ã¢¤·¡¢ÂùÅÀ¤ò»ý¤Äʸ»ú¤ò°ì¤Ä¤Ë¤Þ¤È¤á¤Æ¤Ï ¤¯¤ì¤Ê¤¤¤Î¤ÇÃí°Õ¡£*/ /* *INDENT-OFF* */ letter to_zenhira (l) letter l; /* *INDENT-ON* */ { letter retval; static uns_chr *data = (uns_chr *) "¡£¡Ö¡×¡¢¡¦¤ò¤¡¤£¤¥¤§¤©¤ã¤å¤ç¤Ã¡¼¤¢¤¤¤¦¤¨¤ª¤«¤¤¯¤±¤³¤µ¤·¤¹¤»¤½¤¿\ ¤Á¤Ä¤Æ¤È¤Ê¤Ë¤Ì¤Í¤Î¤Ï¤Ò¤Õ¤Ø¤Û¤Þ¤ß¤à¤á¤â¤ä¤æ¤è¤é¤ê¤ë¤ì¤í¤ï¤ó¡«¡¬"; #ifdef CHINESE static uns_chr *data_cn = (uns_chr *) "¡£¡¸¡¹¡¢¡¤¤ò¤¡¤£¤¥¤§¤©¤ã¤å¤ç¤Ã¡¼¤¢¤¤¤¦¤¨¤ªÂ𤤯¤±¤³¶È¤·¤¹¤»¤½¤¿\ ¤Á¤Ä¤Æ¤È¤Ê¤Ë¤Ì¤ÍµÄ¤Ï¤Ò¤Õ¤Ø¤Û¤Þ¤ß¤à¤áÒ²¤ä¤æ¤è¤é¤ê¤ë¤ì¤í¤ï¤ó¡å¡ã"; #endif /* CHINESE */ if (is_hankata (l)) { l = (l - HKKBGN) << 1; #ifdef CHINESE if (!strcmp (_lang, WNN_C_LANG) || !strcmp (_lang, WNN_T_LANG)) { retval = data_cn[l] << 8; retval += data_cn[++l]; } else #endif { retval = data[l] << 8; retval += data[++l]; } return (retval); } else return (l); } /** Ⱦ³Ñ¥«¥¿¥«¥Ê¢ªÁ´³Ñ¡£Ã¢¤·¡¢ÂùÅÀ¤ò»ý¤Äʸ»ú¤ò°ì¤Ä¤Ë¤Þ¤È¤á¤Æ¤Ï ¤¯¤ì¤Ê¤¤¤Î¤ÇÃí°Õ¡£*/ /* *INDENT-OFF* */ letter to_zenkata (l) letter l; /* *INDENT-ON* */ { return (is_hankata (l) ? (l = to_zenhira (l), to_kata (l)) : l); } /* ¥Ó¥Ã¥È¥Ù¥¯¥¿¤Î¹½À® */ #define bitvec(b0, b1, b2, b3, b4, b5, b6, b7) ( \ (char)b0 | ((char)b1 << 1) | ((char)b2 << 2) | ((char)b3 << 3) | ((char)b4 << 4) | ((char)b5 << 5) | \ ((char)b6 << 6) | ((char)b7 << 7) \ ) /** char¤ÎÇÛÎó h ¤ò¥Ó¥Ã¥È¥Ù¥¯¥¿¤È¸«¤Æ¤½¤ÎÂèi¥Ó¥Ã¥È¤ò¥Á¥§¥Ã¥¯¤¹¤ë */ #define bitlook(h, i) (h[(i) >> 3] & (1 << ((i) & 7))) #define KATRPT 0xA1B3 /* ¡³ */ #define HIRRPT 0xA1B5 /* ¡µ */ #define KATA_U 0xA5A6 /* ¥¦ */ #define KAT_VU 0xA5F4 /* ¥ô */ #define HIR_KA 0xA4AB /* ¤« */ #define HIR_HO 0xA4DB /* ¤Û */ #define KAT_KA 0xA5AB /* ¥« */ #define KAT_HO 0xA5DB /* ¥Û */ #define HIR_HA 0xA4CF /* ¤Ï */ #define KAT_HA 0xA5CF /* ¥Ï */ /** ¸å¤í¤ËȾÂùÅÀ¤ò¤¯¤Ã¤Ä¤±¤ë¡£·ë²Ì¤Ï°ìËô¤ÏÆóʸ»ú¡£*/ void handakuadd (in, outp) letter in, **outp; { if ((HIR_HA <= in && in <= HIR_HO) ? 0 == (in - HIR_HA) % 3 : (KAT_HA <= in && in <= KAT_HO && 0 == (in - KAT_HA) % 3)) { *(*outp)++ = in + 2; } else { *(*outp)++ = in; *(*outp)++ = HNDAKU; } **outp = EOLTTR; } /** ¸å¤í¤ËÂùÅÀ¤ò¤¯¤Ã¤Ä¤±¤ë¡£·ë²Ì¤Ï°ìËô¤ÏÆóʸ»ú¡£*/ void dakuadd (in, outp) letter in, **outp; { static char flgbit[] = { bitvec (1, 0, 1, 0, 1, 0, 1, 0), /* ¤«¤¬¤¤®¤¯¤°¤±¤² */ bitvec (1, 0, 1, 0, 1, 0, 1, 0), /* ¤³¤´¤µ¤¶¤·¤¸¤¹¤º */ bitvec (1, 0, 1, 0, 1, 0, 1, 0), /* ¤»¤¼¤½¤¾¤¿¤À¤Á¤Â */ bitvec (0, 1, 0, 1, 0, 1, 0, 0), /* ¤Ã¤Ä¤Å¤Æ¤Ç¤È¤É¤Ê */ bitvec (0, 0, 0, 0, 1, 0, 0, 1), /* ¤Ë¤Ì¤Í¤Î¤Ï¤Ð¤Ñ¤Ò */ bitvec (0, 0, 1, 0, 0, 1, 0, 0), /* ¤Ó¤Ô¤Õ¤Ö¤×¤Ø¤Ù¤Ú */ bitvec (1, 0, 0, 0, 0, 0, 0, 0) /* ¤Û */ }; letter c; if ((HIR_KA <= in && in <= HIR_HO) ? (c = in - HIR_KA, 1) : (KAT_KA <= in && in <= KAT_HO && (c = in - KAT_KA, 1))) { if (bitlook (flgbit, c)) { *(*outp)++ = in + 1; } else { *(*outp)++ = in; *(*outp)++ = DAKUTN; } } else switch (in) { case KATRPT: case HIRRPT: *(*outp)++ = in + 1; break; case KATA_U: *(*outp)++ = KAT_VU; break; default: *(*outp)++ = in; *(*outp)++ = DAKUTN; } **outp = EOLTTR; } /** in¤ÇÍ¿¤¨¤é¤ì¤¿¥³¡¼¥É¤òbase¿Ê¤Î¿ô»ú¤Ë¤·¤Æoutp¤ËÆþ¤ì¤ë¡£*/ void to_digit (in, base, outp) letter in, base, **outp; { letter c, vtol (); if (c = in, c /= base) to_digit (c, base, outp); *(*outp)++ = vtol (in % base); **outp = EOLTTR; }