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 "sj4mkdic.h"
|
||||||
|
|
||||||
|
#include "sj_charset.h"
|
||||||
|
|
||||||
int cnvyomi(int code) {
|
int cnvyomi(int code) {
|
||||||
u_short hh;
|
u_short hh;
|
||||||
u_char high;
|
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) {
|
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) {
|
while(l > 0) {
|
||||||
switch(*p & KANJIMODEMASK) {
|
switch(*p & KANJIMODEMASK) {
|
||||||
case ZENHIRAASSYUKU:
|
case ZENHIRAASSYUKU:
|
||||||
fprintf(fp, COMPHIRAGANA, (*p++ & 0x0f) + 1);
|
Aprintf(COMPHIRAGANA, (*p++ & 0x0f) + 1);
|
||||||
l--;
|
l--;
|
||||||
break;
|
break;
|
||||||
case ZENKATAASSYUKU:
|
case ZENKATAASSYUKU:
|
||||||
fprintf(fp, COMPKATAKANA, (*p++ & 0x0f) + 1);
|
Aprintf(COMPKATAKANA, (*p++ & 0x0f) + 1);
|
||||||
l--;
|
l--;
|
||||||
break;
|
break;
|
||||||
case KANJIASSYUKU:
|
case KANJIASSYUKU:
|
||||||
fprintf(fp, COMPKANJI, (*p++ & 0x0f));
|
Aprintf(COMPKANJI, (*p++ & 0x0f));
|
||||||
l--;
|
l--;
|
||||||
break;
|
break;
|
||||||
case LEADINGHANKAKU:
|
case LEADINGHANKAKU:
|
||||||
|
|
@ -149,22 +168,22 @@ void output_knj(FILE* fp, u_char* p, int l) {
|
||||||
l = 0;
|
l = 0;
|
||||||
fprintf(stderr, COMPWRONG);
|
fprintf(stderr, COMPWRONG);
|
||||||
#else
|
#else
|
||||||
fputc(*p++, fp);
|
Aputc(*p++);
|
||||||
l--;
|
l--;
|
||||||
fputc(*p++, fp);
|
Aputc(*p++);
|
||||||
l--;
|
l--;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case OFFSETASSYUKU:
|
case OFFSETASSYUKU:
|
||||||
fprintf(fp, "ofs%1x", (*p++ & 0x0f));
|
Aprintf("ofs%1x", (*p++ & 0x0f));
|
||||||
l--;
|
l--;
|
||||||
fprintf(fp, "%02x", *p++);
|
Aprintf("%02x", *p++);
|
||||||
l--;
|
l--;
|
||||||
break;
|
break;
|
||||||
case AIATTRIBUTE:
|
case AIATTRIBUTE:
|
||||||
fprintf(fp, COMPATTR, (*p++ & 0x0f));
|
Aprintf(COMPATTR, (*p++ & 0x0f));
|
||||||
l--;
|
l--;
|
||||||
fprintf(fp, "%02x", *p++);
|
Aprintf("%02x", *p++);
|
||||||
l--;
|
l--;
|
||||||
break;
|
break;
|
||||||
case KANJISTREND:
|
case KANJISTREND:
|
||||||
|
|
@ -173,15 +192,23 @@ void output_knj(FILE* fp, u_char* p, int l) {
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if(p[1] & 0x80)
|
if(p[1] & 0x80)
|
||||||
fputc(SS3, fp);
|
Aputc(SS3);
|
||||||
fputc((*p | 0x80), fp);
|
Aputc((*p | 0x80));
|
||||||
l--;
|
l--;
|
||||||
p++;
|
p++;
|
||||||
fputc((*p | 0x80), fp);
|
Aputc((*p | 0x80));
|
||||||
l--;
|
l--;
|
||||||
p++;
|
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) {
|
void output_str(FILE* fp, char* p) {
|
||||||
|
|
@ -260,11 +287,24 @@ int yomi2zen(int code) {
|
||||||
void output_yomi(FILE* fp, u_char* p) {
|
void output_yomi(FILE* fp, u_char* p) {
|
||||||
int i;
|
int i;
|
||||||
char buf[5];
|
char buf[5];
|
||||||
|
#ifdef UTF8
|
||||||
|
u_char euc[2];
|
||||||
|
u_char ucs[64];
|
||||||
|
#endif
|
||||||
|
|
||||||
while(*p) {
|
while(*p) {
|
||||||
i = yomi2zen(*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 >> 8) & 0xff, fp);
|
||||||
fputc(i & 0xff, fp);
|
fputc(i & 0xff, fp);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue