#ifndef ICU_GENJP
#define ICU_GENJP
#include <stdio.h>
#include "unicode/utypes.h"
#include "unicode/uchar.h"
#include "unicode/unorm.h"
#include "ucmpe32.h"
#include "cmemory.h"
static const uint32_t _bufferSize = 256;
static const UChar _vowels[] = { 0x30A1, 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0 }; static const UChar _prolongedSoundMark = 0x30FC;
static const UChar _voicedMark = 0x3099;
static const UChar _hiraganaIterationMark = 0x309D;
static const UChar _hiraganaVoicedIterationMark = 0x309E;
static const UChar _katakanaIterationMark = 0x30FD;
static const UChar _katakanaVoicedIterationMark = 0x30FE;
static const UChar _hiraganaStart = 0x3041;
static const UChar _hiraganaEnd = 0x3094;
static const UChar _katakanaStart = 0x30A1;
static const UChar _katakanaEnd = 0x30FA;
static const char *_tertiaryLess = "\"<<<";
static const char *_equal = " \"=";
class GenJP {
public:
GenJP();
~GenJP();
UChar getHalf(UChar u); UBool isSemivoiced(UChar ch, UErrorCode &status); UBool isVoiced(UChar ch, UErrorCode &status);
void writeHeader(UErrorCode &status);
void processLengthMark(UErrorCode &status); void processIterationMark(UErrorCode &status); void processCompatibility(UErrorCode &status); void equalKatakanaToHiragana(UErrorCode &status); void printOutKanji(UErrorCode &status); void writeFooter(UErrorCode &status);
private:
const char *getRelation();
UChar getHiragana(UChar katakana);
const char *getName(const UChar ch, UErrorCode &status);
char *printUnicodeStuff(UChar *zTStuff, char *resBuf);
void processIterationMark(UChar katakana, UErrorCode &status);
void processVoicedIterationMark(UChar katakana, UErrorCode &status);
void processVoicedKana(UChar katakana, UErrorCode &status);
void processSemivoicedKana(UChar katakana, UErrorCode &status);
CompactEIntArray *kanaToHalf;
FILE *out;
char *nameBuff;
UBool wasReset;
};
inline UChar GenJP::getHiragana(UChar katakana) {
return katakana - (_katakanaStart - _hiraganaStart);
}
#endif