Output UTF-8 in sj4mkdic
This commit is contained in:
parent
052ce4e4d0
commit
eb45d08191
1 changed files with 52 additions and 12 deletions
|
|
@ -38,6 +38,8 @@
|
|||
|
||||
#include "sj4mkdic.h"
|
||||
|
||||
#include "sj_charset.h"
|
||||
|
||||
int cnvyomi(int code) {
|
||||
u_short hh;
|
||||
u_char high;
|
||||
|
|
@ -129,19 +131,36 @@ int codesize(u_char code) {
|
|||
}
|
||||
}
|
||||
|
||||
#define Aprintf(fmt, in) \
|
||||
{ \
|
||||
sprintf(euc + strlen(euc), (fmt), (in)); \
|
||||
}
|
||||
|
||||
#define Aputc(c) \
|
||||
{ \
|
||||
euc[strlen(euc) + 1] = 0; \
|
||||
euc[strlen(euc)] = (c); \
|
||||
}
|
||||
|
||||
void output_knj(FILE* fp, u_char* p, int l) {
|
||||
u_char euc[64];
|
||||
#ifdef UTF8
|
||||
u_char ucs[64];
|
||||
#endif
|
||||
euc[0] = 0;
|
||||
|
||||
while(l > 0) {
|
||||
switch(*p & KANJIMODEMASK) {
|
||||
case ZENHIRAASSYUKU:
|
||||
fprintf(fp, COMPHIRAGANA, (*p++ & 0x0f) + 1);
|
||||
Aprintf(COMPHIRAGANA, (*p++ & 0x0f) + 1);
|
||||
l--;
|
||||
break;
|
||||
case ZENKATAASSYUKU:
|
||||
fprintf(fp, COMPKATAKANA, (*p++ & 0x0f) + 1);
|
||||
Aprintf(COMPKATAKANA, (*p++ & 0x0f) + 1);
|
||||
l--;
|
||||
break;
|
||||
case KANJIASSYUKU:
|
||||
fprintf(fp, COMPKANJI, (*p++ & 0x0f));
|
||||
Aprintf(COMPKANJI, (*p++ & 0x0f));
|
||||
l--;
|
||||
break;
|
||||
case LEADINGHANKAKU:
|
||||
|
|
@ -149,22 +168,22 @@ void output_knj(FILE* fp, u_char* p, int l) {
|
|||
l = 0;
|
||||
fprintf(stderr, COMPWRONG);
|
||||
#else
|
||||
fputc(*p++, fp);
|
||||
Aputc(*p++);
|
||||
l--;
|
||||
fputc(*p++, fp);
|
||||
Aputc(*p++);
|
||||
l--;
|
||||
#endif
|
||||
break;
|
||||
case OFFSETASSYUKU:
|
||||
fprintf(fp, "ofs%1x", (*p++ & 0x0f));
|
||||
Aprintf("ofs%1x", (*p++ & 0x0f));
|
||||
l--;
|
||||
fprintf(fp, "%02x", *p++);
|
||||
Aprintf("%02x", *p++);
|
||||
l--;
|
||||
break;
|
||||
case AIATTRIBUTE:
|
||||
fprintf(fp, COMPATTR, (*p++ & 0x0f));
|
||||
Aprintf(COMPATTR, (*p++ & 0x0f));
|
||||
l--;
|
||||
fprintf(fp, "%02x", *p++);
|
||||
Aprintf("%02x", *p++);
|
||||
l--;
|
||||
break;
|
||||
case KANJISTREND:
|
||||
|
|
@ -173,15 +192,23 @@ void output_knj(FILE* fp, u_char* p, int l) {
|
|||
break;
|
||||
default:
|
||||
if(p[1] & 0x80)
|
||||
fputc(SS3, fp);
|
||||
fputc((*p | 0x80), fp);
|
||||
Aputc(SS3);
|
||||
Aputc((*p | 0x80));
|
||||
l--;
|
||||
p++;
|
||||
fputc((*p | 0x80), fp);
|
||||
Aputc((*p | 0x80));
|
||||
l--;
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef UTF8
|
||||
ucs[sj4_to_utf8(ucs, euc, strlen(euc))] = 0;
|
||||
|
||||
fputs(ucs, fp);
|
||||
#else
|
||||
fputs(euc, fp);
|
||||
#endif
|
||||
}
|
||||
|
||||
void output_str(FILE* fp, char* p) {
|
||||
|
|
@ -260,11 +287,24 @@ int yomi2zen(int code) {
|
|||
void output_yomi(FILE* fp, u_char* p) {
|
||||
int i;
|
||||
char buf[5];
|
||||
#ifdef UTF8
|
||||
u_char euc[2];
|
||||
u_char ucs[64];
|
||||
#endif
|
||||
|
||||
while(*p) {
|
||||
i = yomi2zen(*p++);
|
||||
|
||||
#ifdef UTF8
|
||||
euc[0] = (i >> 8) & 0xff;
|
||||
euc[1] = i & 0xff;
|
||||
|
||||
ucs[sj4_to_utf8(ucs, euc, 2)] = 0;
|
||||
|
||||
fputs(ucs, fp);
|
||||
#else
|
||||
fputc((i >> 8) & 0xff, fp);
|
||||
fputc(i & 0xff, fp);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue