diff options
Diffstat (limited to 'indexing/upmendex/source/convert.c')
-rw-r--r-- | indexing/upmendex/source/convert.c | 93 |
1 files changed, 40 insertions, 53 deletions
diff --git a/indexing/upmendex/source/convert.c b/indexing/upmendex/source/convert.c index 74d32d7352..a7cae61038 100644 --- a/indexing/upmendex/source/convert.c +++ b/indexing/upmendex/source/convert.c @@ -6,7 +6,6 @@ #include "qsort.h" #include "exkana.h" -#include "ktable.h" #include "exvar.h" #include "kp.h" @@ -25,8 +24,6 @@ static int dlines=0,elines=0; static int dicvalread(const char *filename, struct dictionary *dicval, int line); -#define is_alpha_numeric(a) (((a)>=ALPHATOP && (a)<=ALPHAEND) || (a)==YENSIGN) - UChar * u_xstrdup (const UChar *string) { return u_strcpy(xmalloc((u_strlen(string)+1)*sizeof(UChar)), string); @@ -210,76 +207,66 @@ int convert(UChar *buff1, UChar *buff2) i++; } - else if (buff1[i]<0x80) { + else if (buff1[i]<0x20 && buff1[i]!='\t') { /* ignore control characters */ + i++; + } + + else if (buff1[i]<0x7F) { buff2[j]=buff1[i]; i++; j++; } + else if (buff1[i]<0xA0) { /* ignore control characters */ + i++; + } + else if (is_latin(buff3)||is_cyrillic(buff3)||is_greek(buff3) ||is_jpn_kana(buff3)||is_kor_hngl(buff3)||is_zhuyin(buff3) - ||is_numeric(buff3)||is_devanagari(buff3)||is_thai(buff3) - ||is_comb_diacritical_mark(buff3)) { + ||is_numeric(buff3)==1||is_type_symbol(buff3)==1 + ||is_devanagari(buff3)||is_thai(buff3)||is_arabic(buff3)||is_hebrew(buff3) + ||is_type_mark_or_punct(buff3)) { buff2[j]=buff3[0]; if (wclen==2) buff2[j+1]=buff3[1]; i+=wclen; j+=wclen; } - else if (buff1[i]>=0x80) { - if (is_alpha_numeric(buff3[0])) { -/* alpha-numeric,symbols */ - for (k=0;k<u_strlen(symboltable);k++) { - if (buff3[0]==symboltable[k]) { - buff2[j]=k+0x20; - if ((buff2[j]>='a')&&(buff2[j]<='z')) buff2[j]-=32; - i++; - j+=wclen; - break; - } - } - if (k==u_strlen(symboltable)) { - i++; - buff2[j++]=buff3[0]; + else { + for (k=0;k<dlines;k++) { +/* dictionary table */ + if (u_strncmp(dictable[k].dic[0],&buff1[i],u_strlen(dictable[k].dic[0]))==0) { + u_strncpy(&buff2[j],dictable[k].dic[1],u_strlen(dictable[k].dic[1])); + i+=u_strlen(dictable[k].dic[0]); + j+=u_strlen(dictable[k].dic[1]); + break; } } - - else { - for (k=0;k<dlines;k++) { -/* dictionary table */ - if (u_strncmp(dictable[k].dic[0],&buff1[i],u_strlen(dictable[k].dic[0]))==0) { - u_strncpy(&buff2[j],dictable[k].dic[1],u_strlen(dictable[k].dic[1])); + if ((k==dlines)&&(elines!=0)) { +/* environment dictionary table */ + for (k=0;k<elines;k++) { + if (u_strncmp(envdic[k].dic[0],&buff1[i],u_strlen(envdic[k].dic[0]))==0) { + u_strncpy(&buff2[j],envdic[k].dic[1],u_strlen(envdic[k].dic[1])); i+=u_strlen(dictable[k].dic[0]); - j+=u_strlen(dictable[k].dic[1]); + j+=u_strlen(envdic[k].dic[1]); break; } } - if ((k==dlines)&&(elines!=0)) { -/* environment dictionary table */ - for (k=0;k<elines;k++) { - if (u_strncmp(envdic[k].dic[0],&buff1[i],u_strlen(envdic[k].dic[0]))==0) { - u_strncpy(&buff2[j],envdic[k].dic[1],u_strlen(envdic[k].dic[1])); - i+=u_strlen(dictable[k].dic[0]); - j+=u_strlen(envdic[k].dic[1]); - break; - } - } - } - if (((k==dlines)&&(elines==0))||((k==elines)&&(elines!=0))) { - if (is_hanzi(buff3) || force==1) { + } + if (((k==dlines)&&(elines==0))||((k==elines)&&(elines!=0))) { + if (is_hanzi(buff3) || is_numeric(buff3) || is_type_symbol(buff3) || force==1) { /* forced convert */ - buff2[j]=buff3[0]; - if (wclen==2) buff2[j+1]=buff3[1]; - i+=wclen; - j+=wclen; - } - else { - widechar_to_multibyte(errbuff,BUFFERLEN2,&buff1[i]); - snprintf(errbuff2,BUFFERLEN3,"\nError: %s is no entry in dictionary file ",errbuff); - fputs(errbuff2,efp); - if (efp!=stderr) fputs(errbuff2,stderr); - return -1; - } + buff2[j]=buff3[0]; + if (wclen==2) buff2[j+1]=buff3[1]; + i+=wclen; + j+=wclen; + } + else { + widechar_to_multibyte(errbuff,BUFFERLEN2,&buff1[i]); + snprintf(errbuff2,BUFFERLEN3,"\nError: %s is no entry in dictionary file ",errbuff); + fputs(errbuff2,efp); + if (efp!=stderr) fputs(errbuff2,stderr); + return -1; } } } |