#include "aribstr.h"
-#define CODE_UNKNOWN 0 // ÉÔÌÀ¤Ê¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È(ÈóÂбþ)
+#define CODE_UNKNOWN 0 // 不明なグラフィックセット(非対応)
#define CODE_KANJI 1 // Kanji
#define CODE_ALPHANUMERIC 2 // Alphanumeric
#define CODE_HIRAGANA 3 // Hiragana
static const DWORD PutKanjiChar(TCHAR *lpszDst, const WORD wCode);
static const DWORD PutAlphanumericChar(TCHAR *lpszDst, const WORD wCode);
+//static const DWORD PutAlphanumericHankakuChar(TCHAR *lpszDst, const WORD wCode);
static const DWORD PutHiraganaChar(TCHAR *lpszDst, const WORD wCode);
static const DWORD PutKatakanaChar(TCHAR *lpszDst, const WORD wCode);
static const DWORD PutJisKatakanaChar(TCHAR *lpszDst, const WORD wCode);
static const bool DesignationGSET(const BYTE byIndexG, const BYTE byCode);
static const bool DesignationDRCS(const BYTE byIndexG, const BYTE byCode);
-static WORD convertjis(DWORD);
-
static const bool abCharSizeTable[] =
{
- false, // CODE_UNKNOWN ÉÔÌÀ¤Ê¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È(ÈóÂбþ)
+ false, // CODE_UNKNOWN 不明なグラフィックセット(非対応)
true, // CODE_KANJI Kanji
false, // CODE_ALPHANUMERIC Alphanumeric
false, // CODE_HIRAGANA Hiragana
true // CODE_ADDITIONAL_SYMBOLS Additional symbols
};
+typedef enum{
+ STR_SMALL = 0, //SSZ
+ STR_MEDIUM, //MSZ
+ STR_NORMAL, //NSZ
+ STR_MICRO, //SZX 0x60
+ STR_HIGH_W, //SZX 0x41
+ STR_WIDTH_W, //SZX 0x44
+ STR_W, //SZX 0x45
+ STR_SPECIAL_1, //SZX 0x6B
+ STR_SPECIAL_2, //SZX 0x64
+} STRING_SIZE;
+
+STRING_SIZE m_emStrSize;
+
+bool IsSmallCharMode(void)
+{
+ bool bRet = false;
+ switch(m_emStrSize){
+ case STR_SMALL:
+ bRet = true;
+ break;
+ case STR_MEDIUM:
+ bRet = true;
+ break;
+ case STR_NORMAL:
+ bRet = false;
+ break;
+ case STR_MICRO:
+ bRet = true;
+ break;
+ case STR_HIGH_W:
+ bRet = false;
+ break;
+ case STR_WIDTH_W:
+ bRet = false;
+ break;
+ case STR_W:
+ bRet = false;
+ break;
+ case STR_SPECIAL_1:
+ bRet = false;
+ break;
+ case STR_SPECIAL_2:
+ bRet = false;
+ break;
+ default:
+ break;
+ }
+ return bRet;
+}
+
int AribToString(
char *lpszDst,
const char *pSrcData,
DWORD dwDstLen = 0UL;
int dwSrcData;
- // ¾õÂÖ½é´üÀßÄê
+ // 状態初期設定
m_byEscSeqCount = 0U;
m_pSingleGL = NULL;
m_pLockingGL = &m_CodeG[0];
m_pLockingGR = &m_CodeG[2];
+ m_emStrSize = STR_NORMAL;
while(dwSrcPos < dwSrcLen){
dwSrcData = pSrcData[dwSrcPos] & 0xFF;
+ //printf("Arib:pos%d:%d:%s\n",dwSrcPos,dwSrcData,lpszDst);
if(!m_byEscSeqCount){
- // GL/GRÎΰè
+ // GL/GR領域
if((dwSrcData >= 0x21U) && (dwSrcData <= 0x7EU)){
- // GLÎΰè
+ // GL領域
const CODE_SET CurCodeSet = (m_pSingleGL)? *m_pSingleGL : *m_pLockingGL;
m_pSingleGL = NULL;
if(abCharSizeTable[CurCodeSet]){
- // 2¥Ð¥¤¥È¥³¡¼¥É
+ // 2バイトコード
if((dwSrcLen - dwSrcPos) < 2UL)break;
dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], ((WORD)pSrcData[dwSrcPos + 0] << 8) | (WORD)pSrcData[dwSrcPos + 1], CurCodeSet);
dwSrcPos++;
}
else{
- // 1¥Ð¥¤¥È¥³¡¼¥É
+ // 1バイトコード
dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], (WORD)dwSrcData, CurCodeSet);
}
}
else if((dwSrcData >= 0xA1U) && (dwSrcData <= 0xFEU)){
- // GRÎΰè
+ // GR領域
const CODE_SET CurCodeSet = *m_pLockingGR;
if(abCharSizeTable[CurCodeSet]){
- // 2¥Ð¥¤¥È¥³¡¼¥É
+ // 2バイトコード
if((dwSrcLen - dwSrcPos) < 2UL)break;
dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], ((WORD)(pSrcData[dwSrcPos + 0] & 0x7FU) << 8) | (WORD)(pSrcData[dwSrcPos + 1] & 0x7FU), CurCodeSet);
dwSrcPos++;
}
else{
- // 1¥Ð¥¤¥È¥³¡¼¥É
+ // 1バイトコード
dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], (WORD)(dwSrcData & 0x7FU), CurCodeSet);
}
}
else{
- // À©¸æ¥³¡¼¥É
+ // 制御コード
switch(dwSrcData){
case 0x0FU : LockingShiftGL(0U); break; // LS0
case 0x0EU : LockingShiftGL(1U); break; // LS1
case 0x19U : SingleShiftGL(2U); break; // SS2
case 0x1DU : SingleShiftGL(3U); break; // SS3
case 0x1BU : m_byEscSeqCount = 1U; break; // ESC
+ case 0x89U : m_emStrSize = STR_MEDIUM; break; // MSZ
+ case 0x8AU : m_emStrSize = STR_NORMAL; break; // NSZ
case 0x20U :
- case 0xA0U : lpszDst[dwDstLen++] = TEXT(' '); break; // SP
- default : break; // ÈóÂбþ
+ case 0xA0U :
+ //SP 空白
+ //空白は文字サイズの影響あり
+ if( IsSmallCharMode() == false ){
+ strcpy(&lpszDst[dwDstLen], " ");
+ dwDstLen += 3U;
+ } else {
+ lpszDst[dwDstLen++] = TEXT(' ');
+ }
+ break;
+ default : break; // 非対応
}
}
}
else{
- // ¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹½èÍý
+ // エスケープシーケンス処理
ProcessEscapeSeq(dwSrcData);
}
dwSrcPos++;
}
- // ½ªÃ¼Ê¸»ú
+ // 終端文字
lpszDst[dwDstLen] = TEXT('\0');
-
return dwDstLen;
}
case CODE_KANJI :
case CODE_JIS_KANJI_PLANE_1 :
case CODE_JIS_KANJI_PLANE_2 :
- // ´Á»ú¥³¡¼¥É½ÐÎÏ
+ // 漢字コード出力
return PutKanjiChar(lpszDst, wCode);
case CODE_ALPHANUMERIC :
case CODE_PROP_ALPHANUMERIC :
- // ±Ñ¿ô»ú¥³¡¼¥É½ÐÎÏ
+ // 英数字コード出力
+ if( IsSmallCharMode() == false ){
+ //全角テーブルコード取得
return PutAlphanumericChar(lpszDst, wCode);
+ } else {
+ //半角はそのまま出力
+ lpszDst[0] = wCode;
+ return 1UL;
+ }
case CODE_HIRAGANA :
case CODE_PROP_HIRAGANA :
- // ¤Ò¤é¤¬¤Ê¥³¡¼¥É½ÐÎÏ
+ // ひらがなコード出力
return PutHiraganaChar(lpszDst, wCode);
case CODE_PROP_KATAKANA :
case CODE_KATAKANA :
- // ¥«¥¿¥«¥Ê¥³¡¼¥É½ÐÎÏ
+ // カタカナコード出力
return PutKatakanaChar(lpszDst, wCode);
case CODE_JIS_X0201_KATAKANA :
- // JIS¥«¥¿¥«¥Ê¥³¡¼¥É½ÐÎÏ
+ // JISカタカナコード出力
return PutJisKatakanaChar(lpszDst, wCode);
-#if 1
+
case CODE_ADDITIONAL_SYMBOLS :
- // Äɲå·¥ó¥Ü¥ë¥³¡¼¥É½ÐÎÏ
+ // 追加シンボルコード出力
return PutSymbolsChar(lpszDst, wCode);
-#endif
+
default :
return 0UL;
}
const DWORD PutKanjiChar(TCHAR *lpszDst, const WORD wCode)
{
- // JIS¢ªShift-JIS´Á»ú¥³¡¼¥ÉÊÑ´¹
- const WORD wShiftJIS = convertjis(wCode);
+ char code[9];
+ char xcode[5];
+ iconv_t cd;
-#ifdef _UNICODE
- // Shift-JIS ¢ª UNICODE
- const char szShiftJIS[3] = {(char)(wShiftJIS >> 8), (char)(wShiftJIS & 0x00FFU), '\0'};
- ::MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, szShiftJIS, 2, lpszDst, 2);
+ size_t inbyte = 8;
+ size_t outbyte = sizeof(xcode);
- return 1UL;
-#else
- // Shift-JIS ¢ª Shift-JIS
- lpszDst[0] = (wShiftJIS >> 8) & 0xFF;
- lpszDst[1] = (char)(wShiftJIS & 0x00FFU);
+ memset(xcode, '\0', sizeof(xcode));
- return 2UL;
-#endif
+ const char *fptr;
+ char *tptr;
+
+ code[0] = 0x1BU;
+ code[1] = 0x24U;
+ code[2] = 0x40U;
+ code[3] = wCode >> 8;
+ code[4] = wCode & 0xFF;
+ code[5] = 0x1BU;
+ code[6] = 0x28U;
+ code[7] = 0x4AU;
+ code[8] = '\0';
+
+ cd = iconv_open("UTF-8","ISO-2022-JP");
+
+ fptr = code;
+ tptr = xcode;
+ iconv(cd, &fptr, &inbyte, &tptr, &outbyte);
+
+ iconv_close(cd);
+
+ strncpy(lpszDst, xcode, strlen(xcode));
+
+ return strlen(lpszDst);
}
const DWORD PutAlphanumericChar(TCHAR *lpszDst, const WORD wCode)
{
- // ±Ñ¿ô»úʸ»ú¥³¡¼¥ÉÊÑ´¹
+ // 英数字全角文字コード変換
static const TCHAR *acAlphanumericTable =
- TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
- TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
- TEXT("¡¡¡ª¡É¡ô¡ð¡ó¡õ¡Ç¡Ê¡Ë¡ö¡Ü¡¤¡Ý¡¥¡¿")
- TEXT("£°£±£²£³£´£µ£¶£·£¸£¹¡§¡¨¡ã¡á¡ä¡©")
- TEXT("¡÷£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï")
- TEXT("£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú¡Î¡ï¡Ï¡°¡²")
- TEXT("¡¡£á£â£ã£ä£å£æ£ç£è£é£ì£ë£ì£í£î£ï")
- TEXT("£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú¡Ð¡Ã¡Ñ¡±¡¡");
+ TEXT(" ")
+ TEXT(" ")
+ TEXT(" !”#$%&’()*+,-./")
+ TEXT("0123456789:;<=>?")
+ TEXT("@ABCDEFGHIJKLMNO")
+ TEXT("PQRSTUVWXYZ[¥]^_")
+ TEXT(" abcdefghijklmno")
+ TEXT("pqrstuvwxyz{|} ̄ ");
#ifdef _UNICODE
- lpszDst[0] = acAlphanumericTable[wCode];
+ lpszDst[0] = acAlphanumericTableZenkaku[wCode];
return 1UL;
#else
- lpszDst[0] = acAlphanumericTable[wCode * 2U + 0U];
- lpszDst[1] = acAlphanumericTable[wCode * 2U + 1U];
+ lpszDst[0] = acAlphanumericTable[wCode * 3U + 0U];
+ lpszDst[1] = acAlphanumericTable[wCode * 3U + 1U];
+ lpszDst[2] = acAlphanumericTable[wCode * 3U + 2U];
- return 2UL;
+ return 3UL;
#endif
}
const DWORD PutHiraganaChar(TCHAR *lpszDst, const WORD wCode)
{
- // ¤Ò¤é¤¬¤Êʸ»ú¥³¡¼¥ÉÊÑ´¹
+ // ひらがな文字コード変換
static const TCHAR *acHiraganaTable =
- TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
- TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
- TEXT("¡¡¤¡¤¢¤£¤¤¤¥¤¦¤§¤¨¤©¤ª¤«¤¬¤¤®¤¯")
- TEXT("¤°¤±¤²¤³¤´¤µ¤¶¤·¤¸¤¹¤º¤»¤¼¤½¤¾¤¿")
- TEXT("¤À¤Á¤Â¤Ã¤Ä¤Å¤Æ¤Ç¤È¤É¤Ê¤Ë¤Ì¤Í¤Î¤Ï")
- TEXT("¤Ð¤Ñ¤Ò¤Ó¤Ô¤Õ¤Ö¤×¤Ø¤Ù¤Ú¤Û¤Ü¤Ý¤Þ¤ß")
- TEXT("¤à¤á¤â¤ã¤ä¤å¤æ¤ç¤è¤é¤ê¤ë¤ì¤í¤î¤ï")
- TEXT("¤ð¤ñ¤ò¤ó¡¡¡¡¡¡¡µ¡¶¡¼¡£¡Ö¡×¡¢¡¦¡¡");
+ TEXT(" ")
+ TEXT(" ")
+ TEXT(" ぁあぃいぅうぇえぉおかがきぎく")
+ TEXT("ぐけげこごさざしじすずせぜそぞた")
+ TEXT("だちぢっつづてでとどなにぬねのは")
+ TEXT("ばぱひびぴふぶぷへべぺほぼぽまみ")
+ TEXT("むめもゃやゅゆょよらりるれろゎわ")
+ TEXT("ゐゑをん ゝゞー。「」、・ ");
#ifdef _UNICODE
lpszDst[0] = acHiraganaTable[wCode];
return 1UL;
#else
- lpszDst[0] = acHiraganaTable[wCode * 2U + 0U];
- lpszDst[1] = acHiraganaTable[wCode * 2U + 1U];
+ lpszDst[0] = acHiraganaTable[wCode * 3U + 0U];
+ lpszDst[1] = acHiraganaTable[wCode * 3U + 1U];
+ lpszDst[2] = acHiraganaTable[wCode * 3U + 2U];
- return 2UL;
+ return 3UL;
#endif
}
const DWORD PutKatakanaChar(TCHAR *lpszDst, const WORD wCode)
{
- // ¥«¥¿¥«¥Ê±Ñ¿ô»úʸ»ú¥³¡¼¥ÉÊÑ´¹
+ // カタカナ英数字文字コード変換
static const TCHAR *acKatakanaTable =
- TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
- TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
- TEXT("¡¡¥¡¥¢¥£¥¤¥¥¥¦¥§¥¨¥©¥ª¥«¥¬¥¥®¥¯")
- TEXT("¥°¥±¥²¥³¥´¥µ¥¶¥·¥¸¥¹¥º¥»¥¼¥½¥¾¥¿")
- TEXT("¥À¥Á¥Â¥Ã¥Ä¥Å¥Æ¥Ç¥È¥É¥Ê¥Ë¥Ì¥Í¥Î¥Ï")
- TEXT("¥Ð¥Ñ¥Ò¥Ó¥Ô¥Õ¥Ö¥×¥Ø¥Ù¥Ú¥Û¥Ü¥Ý¥Þ¥ß")
- TEXT("¥à¥á¥â¥ã¥ä¥å¥æ¥ç¥è¥é¥ê¥ë¥ì¥í¥î¥ï")
- TEXT("¥ð¥ñ¥ò¥ó¥ô¥õ¥ö¡³¡´¡¼¡£¡Ö¡×¡¢¡¦¡¡");
+ TEXT(" ")
+ TEXT(" ")
+ TEXT("ã\80\80ã\82¡ã\82¢ã\82£ã\82¤ã\82¥ã\82¦ã\82§ã\82¨ã\82©ã\82ªã\82«ã\82¬ã\82ã\82®ã\82¯")
+ TEXT("ã\82°ã\82±ã\82²ã\82³ã\82´ã\82µã\82¶ã\82·ã\82¸ã\82¹ã\82ºã\82»ã\82¼ã\82½ã\82¾ã\82¿")
+ TEXT("ダチヂッツヅテデトドナニヌネノハ")
+ TEXT("バパヒビピフブプヘベペホボポマミ")
+ TEXT("ムメモャヤュユョヨラリルレロヮワ")
+ TEXT("ヰヱヲンヴヵヶヽヾー。「」、・ ");
#ifdef _UNICODE
lpszDst[0] = acKatakanaTable[wCode];
return 1UL;
#else
- lpszDst[0] = acKatakanaTable[wCode * 2U + 0U];
- lpszDst[1] = acKatakanaTable[wCode * 2U + 1U];
+ lpszDst[0] = acKatakanaTable[wCode * 3U + 0U];
+ lpszDst[1] = acKatakanaTable[wCode * 3U + 1U];
+ lpszDst[2] = acKatakanaTable[wCode * 3U + 2U];
- return 2UL;
+ return 3UL;
#endif
}
const DWORD PutJisKatakanaChar(TCHAR *lpszDst, const WORD wCode)
{
- // JIS¥«¥¿¥«¥Êʸ»ú¥³¡¼¥ÉÊÑ´¹
+ // JISカタカナ文字コード変換
static const TCHAR *acJisKatakanaTable =
- TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
- TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
- TEXT("¡¡¡£¡Ö¡×¡¢¡¦¥ò¥¡¥£¥¥¥§¥©¥ã¥å¥ç¥Ã")
- TEXT("¡¼¥¢¥¤¥¦¥¨¥ª¥«¥¥¯¥±¥³¥µ¥·¥¹¥»¥½")
- TEXT("¥¿¥Á¥Ä¥Æ¥È¥Ê¥Ë¥Ì¥Í¥Î¥Ï¥Ò¥Õ¥Ø¥Û¥Þ")
- TEXT("¥ß¥à¥á¥â¥ä¥æ¥è¥é¥ê¥ë¥ì¥í¥ï¥ó¡«¡¬")
- TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
- TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡");
+ TEXT(" ")
+ TEXT(" ")
+ TEXT(" 。「」、・ヲァィゥェォャュョッ")
+ TEXT("ã\83¼ã\82¢ã\82¤ã\82¦ã\82¨ã\82ªã\82«ã\82ã\82¯ã\82±ã\82³ã\82µã\82·ã\82¹ã\82»ã\82½")
+ TEXT("タチツテトナニヌネノハヒフヘホマ")
+ TEXT("ミムメモヤユヨラリルレロワン゛゜")
+ TEXT(" ")
+ TEXT(" ");
#ifdef _UNICODE
lpszDst[0] = acJisKatakanaTable[wCode];
return 1UL;
#else
- lpszDst[0] = acJisKatakanaTable[wCode * 2U + 0U];
- lpszDst[1] = acJisKatakanaTable[wCode * 2U + 1U];
+ lpszDst[0] = acJisKatakanaTable[wCode * 3U + 0U];
+ lpszDst[1] = acJisKatakanaTable[wCode * 3U + 1U];
+ lpszDst[2] = acJisKatakanaTable[wCode * 3U + 2U];
- return 2UL;
+ return 3UL;
#endif
}
const DWORD PutSymbolsChar(TCHAR *lpszDst, const WORD wCode)
{
- // Äɲå·¥ó¥Ü¥ëʸ»ú¥³¡¼¥ÉÊÑ´¹(¤È¤ê¤¢¤¨¤ºÉ¬Íפ½¤¦¤Ê¤â¤Î¤À¤±)
+ // 追加シンボル文字コード変換(とりあえず必要そうなものだけ)
static const TCHAR *aszSymbolsTable1[] =
{
- _T("[HV]"), _T("[SD]"), _T("[£Ð]"), _T("[£×]"), _T("[MV]"), _T("[¼ê]"), _T("[»ú]"), _T("[ÁÐ]"), // 0x7A50 - 0x7A57 90/48 - 90/55
- _T("[¥Ç]"), _T("[£Ó]"), _T("[Æó]"), _T("[¿]"), _T("[²ò]"), _T("[SS]"), _T("[£Â]"), _T("[£Î]"), // 0x7A58 - 0x7A5F 90/56 - 90/63
- _T("¢£"), _T("¡ü"), _T("[Å·]"), _T("[¸ò]"), _T("[±Ç]"), _T("[̵]"), _T("[ÎÁ]"), _T("[ǯÎðÀ©¸Â]"), // 0x7A60 - 0x7A67 90/64 - 90/71
- _T("[Á°]"), _T("[¸å]"), _T("[ºÆ]"), _T("[¿·]"), _T("[½é]"), _T("[½ª]"), _T("[À¸]"), _T("[ÈÎ]"), // 0x7A68 - 0x7A6F 90/72 - 90/79
- _T("[À¼]"), _T("[¿á]"), _T("[PPV]"), _T("(Èë)"), _T("¤Û¤«") // 0x7A70 - 0x7A74 90/80 - 90/84
+ _T("[HV]"), _T("[SD]"), _T("[P]"), _T("[W]"), _T("[MV]"), _T("[手]"), _T("[字]"), _T("[双]"), // 0x7A50 - 0x7A57 90/48 - 90/55
+ _T("[デ]"), _T("[S]"), _T("[二]"), _T("[多]"), _T("[解]"), _T("[SS]"), _T("[B]"), _T("[N]"), // 0x7A58 - 0x7A5F 90/56 - 90/63
+ _T("■"), _T("●"), _T("[天]"), _T("[交]"), _T("[映]"), _T("[無]"), _T("[料]"), _T("[年齢制限]"), // 0x7A60 - 0x7A67 90/64 - 90/71
+ _T("[前]"), _T("[後]"), _T("[再]"), _T("[新]"), _T("[初]"), _T("[終]"), _T("[生]"), _T("[販]"), // 0x7A68 - 0x7A6F 90/72 - 90/79
+ _T("[声]"), _T("[吹]"), _T("[PPV]"), _T("(秘)"), _T("ほか") // 0x7A70 - 0x7A74 90/80 - 90/84
};
static const TCHAR *aszSymbolsTable2[] =
{
- _T("¢ª"), _T("¢«"), _T("¢¬"), _T("¢"), _T("¡ü"), _T("¡û"), _T("ǯ"), _T("·î"), // 0x7C21 - 0x7C28 92/01 - 92/08
- _T("Æü"), _T("±ß"), _T("Ö"), _T("ΩÊý£í"), _T("Ñ"), _T("Ê¿ÊýÑ"), _T("ΩÊýÑ"), _T("£°."), // 0x7C29 - 0x7C30 92/09 - 92/16
- _T("£±."), _T("£²."), _T("£³."), _T("£´."), _T("£µ."), _T("£¶."), _T("£·."), _T("£¸."), // 0x7C31 - 0x7C38 92/17 - 92/24
- _T("£¹."), _T("»á"), _T("Éû"), _T("¸µ"), _T("¸Î"), _T("Á°"), _T("¿·"), _T("£°,"), // 0x7C39 - 0x7C40 92/25 - 92/32
- _T("£±,"), _T("£²,"), _T("£³,"), _T("£´,"), _T("£µ,"), _T("£¶,"), _T("£·,"), _T("£¸,"), // 0x7C41 - 0x7C48 92/33 - 92/40
- _T("£¹,"), _T("(¼Ò)"), _T("(ºâ)"), _T("(Í)"), _T("(³ô)"), _T("(Âå)"), _T("(Ìä)"), _T("¡ä"), // 0x7C49 - 0x7C50 92/41 - 92/48
- _T("¡ã"), _T("¡Ú"), _T("¡Û"), _T("¡þ"), _T("^2"), _T("^3"), _T("(CD)"), _T("(vn)"), // 0x7C51 - 0x7C58 92/49 - 92/56
+ _T("→"), _T("←"), _T("↑"), _T("↓"), _T("●"), _T("○"), _T("年"), _T("月"), // 0x7C21 - 0x7C28 92/01 - 92/08
+ _T("日"), _T("円"), _T("㎡"), _T("㎥"), _T("㎝"), _T("㎠"), _T("㎤"), _T("0."), // 0x7C29 - 0x7C30 92/09 - 92/16
+ _T("1."), _T("2."), _T("3."), _T("4."), _T("5."), _T("6."), _T("7."), _T("8."), // 0x7C31 - 0x7C38 92/17 - 92/24
+ _T("9."), _T("氏"), _T("副"), _T("元"), _T("故"), _T("前"), _T("新"), _T("0,"), // 0x7C39 - 0x7C40 92/25 - 92/32
+ _T("1,"), _T("2,"), _T("3,"), _T("4,"), _T("5,"), _T("6,"), _T("7,"), _T("8,"), // 0x7C41 - 0x7C48 92/33 - 92/40
+ _T("9,"), _T("(社)"), _T("(財)"), _T("(有)"), _T("(株)"), _T("(代)"), _T("(問)"), _T("▶"), // 0x7C49 - 0x7C50 92/41 - 92/48
+ _T("◀"), _T("〖"), _T("〗"), _T("⟐"), _T("^2"), _T("^3"), _T("(CD)"), _T("(vn)"), // 0x7C51 - 0x7C58 92/49 - 92/56
_T("(ob)"), _T("(cb)"), _T("(ce"), _T("mb)"), _T("(hp)"), _T("(br)"), _T("(p)"), _T("(s)"), // 0x7C59 - 0x7C60 92/57 - 92/64
_T("(ms)"), _T("(t)"), _T("(bs)"), _T("(b)"), _T("(tb)"), _T("(tp)"), _T("(ds)"), _T("(ag)"), // 0x7C61 - 0x7C68 92/65 - 92/72
_T("(eg)"), _T("(vo)"), _T("(fl)"), _T("(ke"), _T("y)"), _T("(sa"), _T("x)"), _T("(sy"), // 0x7C69 - 0x7C70 92/73 - 92/80
- _T("n)"), _T("(or"), _T("g)"), _T("(pe"), _T("r)"), _T("(R)"), _T("(C)"), _T("(ä·)"), // 0x7C71 - 0x7C78 92/81 - 92/88
- _T("DJ"), _T("[±é]"), _T("Fax") // 0x7C79 - 0x7C7B 92/89 - 92/91
+ _T("n)"), _T("(or"), _T("g)"), _T("(pe"), _T("r)"), _T("(R)"), _T("(C)"), _T("(箏)"), // 0x7C71 - 0x7C78 92/81 - 92/88
+ _T("DJ"), _T("[演]"), _T("Fax") // 0x7C79 - 0x7C7B 92/89 - 92/91
};
static const TCHAR *aszSymbolsTable3[] =
{
- _T("(·î)"), _T("(²Ð)"), _T("(¿å)"), _T("(ÌÚ)"), _T("(¶â)"), _T("(ÅÚ)"), _T("(Æü)"), _T("(½Ë)"), // 0x7D21 - 0x7D28 93/01 - 93/08
- _T("í"), _T("î"), _T("ï"), _T("ß"), _T("â"), _T("ä"), _T("(¢©)"), _T("¡û"), // 0x7D29 - 0x7D30 93/09 - 93/16
- _T("¡ÌËÜ¡Í"), _T("¡Ì»°¡Í"), _T("¡ÌÆó¡Í"), _T("¡Ì°Â¡Í"), _T("¡ÌÅÀ¡Í"), _T("¡ÌÂÇ¡Í"), _T("¡ÌÅð¡Í"), _T("¡Ì¾¡¡Í"), // 0x7D31 - 0x7D38 93/17 - 93/24
- _T("¡ÌÇÔ¡Í"), _T("¡Ì£Ó¡Í"), _T("¡ÎÅê¡Ï"), _T("¡ÎÊá¡Ï"), _T("¡Î°ì¡Ï"), _T("¡ÎÆó¡Ï"), _T("¡Î»°¡Ï"), _T("¡ÎÍ·¡Ï"), // 0x7D39 - 0x7D40 93/25 - 93/32
- _T("¡Îº¸¡Ï"), _T("¡ÎÃæ¡Ï"), _T("¡Î±¦¡Ï"), _T("¡Î»Ø¡Ï"), _T("¡ÎÁö¡Ï"), _T("¡ÎÂÇ¡Ï"), _T("È"), _T("Ô"), // 0x7D41 - 0x7D48 93/33 - 93/40
- _T("Hz"), _T("ha"), _T("km"), _T("Ê¿Êýkm"), _T("hPa"), _T("¡¦"), _T("¡¦"), _T("1/2"), // 0x7D49 - 0x7D50 93/41 - 93/48
+ _T("㈪"), _T("㈫"), _T("㈬"), _T("㈭"), _T("㈮"), _T("㈯"), _T("㈰"), _T("㈷"), // 0x7D21 - 0x7D28 93/01 - 93/08
+ _T("㍾"), _T("㍽"), _T("㍼"), _T("㍻"), _T("№"), _T("℡"), _T("〶"), _T("○"), // 0x7D29 - 0x7D30 93/09 - 93/16
+ _T("〔本〕"), _T("〔三〕"), _T("〔二〕"), _T("〔安〕"), _T("〔点〕"), _T("〔打〕"), _T("〔盗〕"), _T("〔勝〕"), // 0x7D31 - 0x7D38 93/17 - 93/24
+ _T("〔敗〕"), _T("〔S〕"), _T("[投]"), _T("[捕]"), _T("[一]"), _T("[二]"), _T("[三]"), _T("[遊]"), // 0x7D39 - 0x7D40 93/25 - 93/32
+ _T("[左]"), _T("[中]"), _T("[右]"), _T("[指]"), _T("[走]"), _T("[打]"), _T("㍑"), _T("㎏"), // 0x7D41 - 0x7D48 93/33 - 93/40
+ _T("㎐"), _T("ha"), _T("㎞"), _T("㎢"), _T("㍱"), _T("・"), _T("・"), _T("1/2"), // 0x7D49 - 0x7D50 93/41 - 93/48
_T("0/3"), _T("1/3"), _T("2/3"), _T("1/4"), _T("3/4"), _T("1/5"), _T("2/5"), _T("3/5"), // 0x7D51 - 0x7D58 93/49 - 93/56
- _T("4/5"), _T("1/6"), _T("5/6"), _T("1/7"), _T("1/8"), _T("1/9"), _T("1/10"), _T("À²¤ì"), // 0x7D59 - 0x7D60 93/57 - 93/64
- _T("ÆÞ¤ê"), _T("±«"), _T("Àã"), _T("¢¤"), _T("¢¥"), _T("¢¦"), _T("¢§"), _T("¢¡"), // 0x7D61 - 0x7D68 93/65 - 93/72
- _T("¡¦"), _T("¡¦"), _T("¡¦"), _T("¡þ"), _T("¡ý"), _T("!!"), _T("!?"), _T("ÆÞ/À²"), // 0x7D69 - 0x7D70 93/73 - 93/80
- _T("±«"), _T("±«"), _T("Àã"), _T("ÂçÀã"), _T("Íë"), _T("Í뱫"), _T("¡¡"), _T("¡¦"), // 0x7D71 - 0x7D78 93/81 - 93/88
- _T("¡¦"), _T("¢ö"), _T("ä") // 0x7D79 - 0x7D7B 93/89 - 93/91
+ _T("4/5"), _T("1/6"), _T("5/6"), _T("1/7"), _T("1/8"), _T("1/9"), _T("1/10"), _T("☀"), // 0x7D59 - 0x7D60 93/57 - 93/64
+ _T("☁"), _T("☂"), _T("☃"), _T("☖"), _T("☗"), _T("▽"), _T("▼"), _T("♦"), // 0x7D61 - 0x7D68 93/65 - 93/72
+ _T("♥"), _T("♣"), _T("♠"), _T("⌺"), _T("⦿"), _T("‼"), _T("⁉"), _T("(曇/晴)"), // 0x7D69 - 0x7D70 93/73 - 93/80
+ _T("☔"), _T("(雨)"), _T("(雪)"), _T("(大雪)"), _T("⚡"), _T("(雷雨)"), _T(" "), _T("・"), // 0x7D71 - 0x7D78 93/81 - 93/88
+ _T("・"), _T("♬"), _T("☎") // 0x7D79 - 0x7D7B 93/89 - 93/91
};
static const TCHAR *aszSymbolsTable4[] =
{
- _T("µ"), _T("¶"), _T("·"), _T("¸"), _T("¹"), _T("º"), _T("»"), _T("¼"), // 0x7E21 - 0x7E28 94/01 - 94/08
- _T("½"), _T("¾"), _T("XI"), _T("X¶"), _T("±"), _T("²"), _T("³"), _T("´"), // 0x7E29 - 0x7E30 94/09 - 94/16
- _T("(1)"), _T("(2)"), _T("(3)"), _T("(4)"), _T("(5)"), _T("(6)"), _T("(7)"), _T("(8)"), // 0x7E31 - 0x7E38 94/17 - 94/24
- _T("(9)"), _T("(10)"), _T("(11)"), _T("(12)"), _T("(21)"), _T("(22)"), _T("(23)"), _T("(24)"), // 0x7E39 - 0x7E40 94/25 - 94/32
+ _T("Ⅰ"), _T("Ⅱ"), _T("Ⅲ"), _T("Ⅳ"), _T("Ⅴ"), _T("Ⅵ"), _T("Ⅶ"), _T("Ⅷ"), // 0x7E21 - 0x7E28 94/01 - 94/08
+ _T("Ⅸ"), _T("Ⅹ"), _T("Ⅺ"), _T("Ⅻ"), _T("⑰"), _T("⑱"), _T("⑲"), _T("⑳"), // 0x7E29 - 0x7E30 94/09 - 94/16
+ _T("⑴"), _T("⑵"), _T("⑶"), _T("⑷"), _T("⑸"), _T("⑹"), _T("⑺"), _T("⑻"), // 0x7E31 - 0x7E38 94/17 - 94/24
+ _T("⑼"), _T("⑽"), _T("⑾"), _T("⑿"), _T("㉑"), _T("㉒"), _T("㉓"), _T("㉔"), // 0x7E39 - 0x7E40 94/25 - 94/32
_T("(A)"), _T("(B)"), _T("(C)"), _T("(D)"), _T("(E)"), _T("(F)"), _T("(G)"), _T("(H)"), // 0x7E41 - 0x7E48 94/33 - 94/40
_T("(I)"), _T("(J)"), _T("(K)"), _T("(L)"), _T("(M)"), _T("(N)"), _T("(O)"), _T("(P)"), // 0x7E49 - 0x7E50 94/41 - 94/48
_T("(Q)"), _T("(R)"), _T("(S)"), _T("(T)"), _T("(U)"), _T("(V)"), _T("(W)"), _T("(X)"), // 0x7E51 - 0x7E58 94/49 - 94/56
- _T("(Y)"), _T("(Z)"), _T("(25)"), _T("(26)"), _T("(27)"), _T("(28)"), _T("(29)"), _T("(30)"), // 0x7E59 - 0x7E60 94/57 - 94/64
- _T("¡"), _T("¢"), _T("£"), _T("¤"), _T("¥"), _T("¦"), _T("§"), _T("¨"), // 0x7E61 - 0x7E68 94/65 - 94/72
- _T("©"), _T("ª"), _T("«"), _T("¬"), _T(""), _T("®"), _T("¯"), _T("°"), // 0x7E69 - 0x7E70 94/73 - 94/80
- _T("¡"), _T("¢"), _T("£"), _T("¤"), _T("¥"), _T("¦"), _T("§"), _T("¨"), // 0x7E71 - 0x7E78 94/81 - 94/88
- _T("©"), _T("ª"), _T("«"), _T("¬"), _T("(31)") // 0x7E79 - 0x7E7D 94/89 - 94/93
+ _T("(Y)"), _T("(Z)"), _T("㉕"), _T("㉖"), _T("㉗"), _T("㉘"), _T("㉙"), _T("㉚"), // 0x7E59 - 0x7E60 94/57 - 94/64
+ _T("①"), _T("②"), _T("③"), _T("④"), _T("⑤"), _T("⑥"), _T("⑦"), _T("⑧"), // 0x7E61 - 0x7E68 94/65 - 94/72
+ _T("⑨"), _T("⑩"), _T("⑪"), _T("⑫"), _T("⑬"), _T("⑭"), _T("⑮"), _T("⑯"), // 0x7E69 - 0x7E70 94/73 - 94/80
+ _T("❶"), _T("❷"), _T("❸"), _T("❹"), _T("❺"), _T("❻"), _T("❼"), _T("❽"), // 0x7E71 - 0x7E78 94/81 - 94/88
+ _T("❾"), _T("❿"), _T("⓫"), _T("⓬"), _T("㉛") // 0x7E79 - 0x7E7D 94/89 - 94/93
};
- // ¥·¥ó¥Ü¥ë¤òÊÑ´¹¤¹¤ë
+ static const TCHAR *aszSymbolsTable5[] =
+ {
+ _T("㐂"), _T("亭"), _T("份"), _T("仿"), _T("侚"), _T("俉"), _T("傜"), _T("儞"), // 0x7521 - 0x7528 85/01 - 85/08
+ _T("冼"), _T("㔟"), _T("匇"), _T("卡"), _T("卬"), _T("詹"), _T("吉"), _T("呍"), // 0x7529 - 0x7530 85/09 - 85/16
+ _T("咖"), _T("咜"), _T("咩"), _T("唎"), _T("啊"), _T("噲"), _T("囤"), _T("圳"), // 0x7531 - 0x7538 85/17 - 85/24
+ _T("圴"), _T("塚"), _T("墀"), _T("姤"), _T("娣"), _T("婕"), _T("寬"), _T("﨑"), // 0x7539 - 0x7540 85/25 - 85/32
+ _T("㟢"), _T("庬"), _T("弴"), _T("彅"), _T("德"), _T("怗"), _T("恵"), _T("愰"), // 0x7541 - 0x7548 85/33 - 85/40
+ _T("昤"), _T("曈"), _T("曙"), _T("曺"), _T("曻"), _T("桒"), _T("・"), _T("椑"), // 0x7549 - 0x7550 85/41 - 85/48
+ _T("椻"), _T("橅"), _T("檑"), _T("櫛"), _T("・"), _T("・"), _T("・"), _T("毱"), // 0x7551 - 0x7558 85/49 - 85/56
+ _T("泠"), _T("洮"), _T("海"), _T("涿"), _T("淊"), _T("淸"), _T("渚"), _T("潞"), // 0x7559 - 0x7560 85/57 - 85/64
+ _T("濹"), _T("灤"), _T("・"), _T("・"), _T("煇"), _T("燁"), _T("爀"), _T("玟"), // 0x7561 - 0x7568 85/65 - 85/72
+ _T("・"), _T("珉"), _T("珖"), _T("琛"), _T("琡"), _T("琢"), _T("琦"), _T("琪"), // 0x7569 - 0x7570 85/73 - 85/80
+ _T("琬"), _T("琹"), _T("瑋"), _T("㻚"), _T("畵"), _T("疁"), _T("睲"), _T("䂓"), // 0x7571 - 0x7578 85/81 - 85/88
+ _T("磈"), _T("磠"), _T("祇"), _T("禮"), _T("・"), _T("・") // 0x7579 - 0x757E 85/89 - 85/94
+ };
+
+ static const TCHAR *aszSymbolsTable6[] =
+ {
+ _T("・"), _T("秚"), _T("稞"), _T("筿"), _T("簱"), _T("䉤"), _T("綋"), _T("羡"), // 0x7621 - 0x7628 86/01 - 86/08
+ _T("脘"), _T("脺"), _T("・"), _T("芮"), _T("葛"), _T("蓜"), _T("蓬"), _T("蕙"), // 0x7629 - 0x7630 86/09 - 86/16
+ _T("藎"), _T("蝕"), _T("蟬"), _T("蠋"), _T("裵"), _T("角"), _T("諶"), _T("跎"), // 0x7631 - 0x7638 86/17 - 86/24
+ _T("辻"), _T("迶"), _T("郝"), _T("鄧"), _T("鄭"), _T("醲"), _T("鈳"), _T("銈"), // 0x7639 - 0x7640 86/25 - 86/32
+ _T("錡"), _T("鍈"), _T("閒"), _T("雞"), _T("餃"), _T("饀"), _T("髙"), _T("鯖"), // 0x7641 - 0x7648 86/33 - 86/40
+ _T("鷗"), _T("麴"), _T("麵") // 0x7649 - 0x764B 86/41 - 86/43
+ };
+
+ // シンボルを変換する
if((wCode >= 0x7A50U) && (wCode <= 0x7A74U)){
strcpy(lpszDst, aszSymbolsTable1[wCode - 0x7A50U]);
}
else if((wCode >= 0x7E21U) && (wCode <= 0x7E7DU)){
strcpy(lpszDst, aszSymbolsTable4[wCode - 0x7E21U]);
}
+ else if((wCode >= 0x7521U) && (wCode <= 0x757EU)){
+ strcpy(lpszDst, aszSymbolsTable5[wCode - 0x7521U]);
+ }
+ else if((wCode >= 0x7621U) && (wCode <= 0x764BU)){
+ strcpy(lpszDst, aszSymbolsTable6[wCode - 0x7621U]);
+ }
else{
- strcpy(lpszDst, TEXT("¡¦"));
+ strcpy(lpszDst, TEXT("・"));
}
return strlen(lpszDst);
void ProcessEscapeSeq(const BYTE byCode)
{
- // ¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹½èÍý
+ // エスケープシーケンス処理
switch(m_byEscSeqCount){
- // 1¥Ð¥¤¥ÈÌÜ
+ // 1バイト目
case 1U :
switch(byCode){
// Invocation of code elements
case 0x29U : m_byEscSeqIndex = 1U; break;
case 0x2AU : m_byEscSeqIndex = 2U; break;
case 0x2BU : m_byEscSeqIndex = 3U; break;
- default : m_byEscSeqCount = 0U; return; // ¥¨¥é¡¼
+ default : m_byEscSeqCount = 0U; return; // ã\82¨ã\83©ã\83¼
}
break;
- // 2¥Ð¥¤¥ÈÌÜ
+ // 2バイト目
case 2U :
if(DesignationGSET(m_byEscSeqIndex, byCode)){
m_byEscSeqCount = 0U;
case 0x29 : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 1U; break;
case 0x2A : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 2U; break;
case 0x2B : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 3U; break;
- default : m_byEscSeqCount = 0U; return; // ¥¨¥é¡¼
+ default : m_byEscSeqCount = 0U; return; // ã\82¨ã\83©ã\83¼
}
break;
- // 3¥Ð¥¤¥ÈÌÜ
+ // 3バイト目
case 3U :
if(!m_bIsEscSeqDrcs){
if(DesignationGSET(m_byEscSeqIndex, byCode)){
m_bIsEscSeqDrcs = true;
}
else{
- // ¥¨¥é¡¼
+ // ã\82¨ã\83©ã\83¼
m_byEscSeqCount = 0U;
return;
}
break;
- // 4¥Ð¥¤¥ÈÌÜ
+ // 4バイト目
case 4U :
DesignationDRCS(m_byEscSeqIndex, byCode);
m_byEscSeqCount = 0U;
const bool DesignationGSET(const BYTE byIndexG, const BYTE byCode)
{
- // G¤Î¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È¤ò³ä¤êÅö¤Æ¤ë
+ // Gのグラフィックセットを割り当てる
switch(byCode){
case 0x42U : m_CodeG[byIndexG] = CODE_KANJI; return true; // Kanji
case 0x4AU : m_CodeG[byIndexG] = CODE_ALPHANUMERIC; return true; // Alphanumeric
case 0x39U : m_CodeG[byIndexG] = CODE_JIS_KANJI_PLANE_1; return true; // JIS compatible Kanji Plane 1
case 0x3AU : m_CodeG[byIndexG] = CODE_JIS_KANJI_PLANE_2; return true; // JIS compatible Kanji Plane 2
case 0x3BU : m_CodeG[byIndexG] = CODE_ADDITIONAL_SYMBOLS; return true; // Additional symbols
- default : return false; // ÉÔÌÀ¤Ê¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È
+ default : return false; // 不明なグラフィックセット
}
}
const bool DesignationDRCS(const BYTE byIndexG, const BYTE byCode)
{
- // DRCS¤Î¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È¤ò³ä¤êÅö¤Æ¤ë
+ // DRCSのグラフィックセットを割り当てる
switch(byCode){
case 0x40U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-0
case 0x41U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-1
case 0x4EU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-14
case 0x4FU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-15
case 0x70U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // Macro
- default : return false; // ÉÔÌÀ¤Ê¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È
- }
+ default : return false; // 不明なグラフィックセット
}
-
-WORD convertjis(DWORD jiscode) {
- char code[3];
- char xcode[4];
- iconv_t cd;
-
- size_t inbyte = 2;
- size_t outbyte = 4;
-
- const char *fptr;
- char *tptr;
-
- WORD rtn;
-
- code[0] = jiscode >> 8;
- code[1] = jiscode & 0xFF;
- code[3] = '\0';
-
- /*
- cd = iconv_open("ISO-2022-JP","UTF-8");
-
- fptr = code;
- tptr = xcode;
- iconv(cd, &fptr, &inbyte, &tptr, &outbyte);
-
- iconv_close(cd);
- */
-
- xcode[0] = code[0] | 0x80;
- xcode[1] = code[1] | 0x80;
-
- rtn = ((xcode[0] << 8) & 0xFF00) | (xcode[1] & 0xFF);
-
- return rtn;
-
}