コード例 #1
0
ファイル: Chinese.cpp プロジェクト: jonixfu/tianchi-qtcn
QString Chinese::toPinyin(const QString& Str, bool Tonality)
{
    QString ret;
#ifdef Q_OS_WIN
    IMEEngine imee;
    imee.GetJMorphResult(FELANG_REQ_REV,
                         FELANG_CMODE_PINYIN | FELANG_CMODE_NOINVISIBLECHAR, // ╜Ї┤╒╤▌╩╛╞┤╥Їгм╓╨╝ф▓╗╧╘╩╛┐╒╕ё╖╓╕Ї╖√
                         Str.toStdWString().c_str());
    if ( imee.m_pmorrslt ) // && imee.m_pmorrslt->cchOutput >0 )
    {
        wchar_t*  wsptr = imee.m_pmorrslt->pwchOutput;
        int       len   = imee.m_pmorrslt->cchOutput -1;

        for( int i=0;i<=len;i++ )
        {
            ret += QChar(uint(*wsptr));
            wsptr++;
        }
        if ( ! Tonality )
        {
            //const QString Initial1 = QString::fromWCharArray(L"ибивигидиниоипи░иеижизииийикилими▒и▓и│и┤и╡и╢и╖и╕и╣и║и╗и╝и╜и╛и┐и└");
            const QString Initial1 = QString::fromLocal8Bit("ибивигидиниоипи░иеижизииийикилими▒и▓и│и┤и╡и╢и╖и╕и╣и║и╗и╝и╜и╛и┐и└");
            const QString Initial2 = "aaaaooooeeeeiiiiuuuuvvvvveamnnng";
            for( int i=0;i<Initial1.length();i++ )
            {
                ret.replace(Initial1.at(i), Initial2.at(i));
            }
        }
    }
#endif
    return ret;
}
コード例 #2
0
int main(int argc, char* argv[])
{
	int nRetCode = 0;

	DWORD	dwCMode, dwRequest;
	int nMode, nOutMode, nHideEqual;
	char *strSetLocale, *strIMEEngineName, *strInputFilename, *strOutputFilename;  

	if(argc < 10) {
		printf("usage:\n");
		printf("dwCMode = Mode(196608)\n");
		printf("dwRequest = Request(0)\n");
		printf("nMode = Output Format(1:display 2:read 3:both)\n");
		printf("nOutMode = Output Mode(1:print 2:file 3:both)\n");
		printf("nHideEqual = hide equal display and read(1:hide 0:show)\n");
		printf("strSetLocale = setlocale option(.ACP)\n");
		printf("strIMEEngineName = IME Engine(MSIME.Japan,MSIME.Japan,MSIME.Taiwan,MSIME.Taiwan.ImeBbo)\n");
		printf("strInputFilename = input file name\n");
		printf("strOutputFilename = output file name\n");
		return 0;
	}else{
		dwCMode = atoi(argv[1]);
		dwRequest = atoi(argv[2]);
		nMode = atoi(argv[3]); 
		nOutMode = atoi(argv[4]);
		nHideEqual = atoi(argv[5]); 
		strSetLocale = argv[6]; 
		strIMEEngineName = argv[7]; 
		strInputFilename = argv[8];
		strOutputFilename = argv[9];
	}

	LPTSTR wstrIMEEngine;
	//wstrIMEEngine = strIMEEngineName;
	{
		int nLen = strlen(strIMEEngineName) + 1;
		int nwLen = MultiByteToWideChar(CP_ACP, 0, strIMEEngineName, nLen, NULL, 0); 
		wstrIMEEngine = (LPTSTR)malloc(sizeof(WCHAR) * nwLen);     
		MultiByteToWideChar(CP_ACP, 0, strIMEEngineName, nLen, wstrIMEEngine, nwLen);
		wstrIMEEngine[nwLen - 1] = L'\0';
	}
	m_engine.SetIMEEngine(wstrIMEEngine);

	FILE *fpIn = fopen(strInputFilename, "r");
	FILE *fpOut = fopen(strOutputFilename, "w+");
	if(!fpIn || !fpOut)
	{
		printf("Read input file or write output file failed\n");
		return 0;
	}

	char strLine[4 * 1024];

	LPTSTR	inString;

	while(fgets(strLine,sizeof(strLine),fpIn))
	{
		//inString = (LPTSTR)strLine;
		{
			int nLen = strlen(strLine) + 1;
			int nwLen = MultiByteToWideChar(CP_ACP, 0, strLine, nLen, NULL, 0); 
			inString = (LPTSTR)malloc(sizeof(WCHAR) * nwLen);     
			MultiByteToWideChar(CP_ACP, 0, strLine, nLen, inString, nwLen); 
			inString[nwLen - 1] = L'\0';
		}
		int i;
		if( m_engine.GetJMorphResult( dwRequest, dwCMode, (LPCTSTR)inString ) == S_OK )
		{
			if( m_engine.m_pmorrslt ) 
			{
				//CStringW	tmpString1, tmpString2, tmpString3, tmpString4, tmpString5, tmpString6;
				LPWSTR tmpString2, tmpString4;
				setlocale(LC_ALL, strSetLocale);
				
				tmpString2 = (LPWSTR)malloc(sizeof(WCHAR) * (m_engine.m_pmorrslt->cchOutput + 1));					
				//tmpString1 = m_engine.m_pmorrslt->pwchOutput;
				//tmpString1.Delete(m_engine.m_pmorrslt->cchOutput,tmpString1.GetLength());
				//tmpString2.Format( L"%s", tmpString1);
				_wcsnset(tmpString2, L'\0', m_engine.m_pmorrslt->cchOutput + 1);
				wcsncpy(tmpString2, m_engine.m_pmorrslt->pwchOutput, m_engine.m_pmorrslt->cchOutput);
				if(nMode == 1)
				{					
					if(nOutMode == 1 || nOutMode == 3) wprintf( (LPCWSTR)tmpString2 );
					if(nOutMode == 2 || nOutMode == 3) fwprintf(fpOut, (LPCWSTR)tmpString2 );
				}
				
				tmpString4 = (LPWSTR)malloc(sizeof(WCHAR) * (m_engine.m_pmorrslt->cchRead + 1));		
				//tmpString3 = m_engine.m_pmorrslt->pwchRead;
				//tmpString3.Delete(m_engine.m_pmorrslt->cchRead,tmpString1.GetLength());
				//tmpString4.Format( L"%s", tmpString3 );
				_wcsnset(tmpString4, L'\0', m_engine.m_pmorrslt->cchRead + 1);
				wcsncpy(tmpString4, m_engine.m_pmorrslt->pwchRead, m_engine.m_pmorrslt->cchRead);
				
				if(nMode == 2)
				{
					if(nOutMode == 1 || nOutMode == 3) wprintf( (LPCWSTR)tmpString4 );
					if(nOutMode == 2 || nOutMode == 3) fwprintf(fpOut,(LPCWSTR)tmpString4 );
				}
				if (tmpString2) free(tmpString2);
				if (tmpString4) free(tmpString4);
			}
		}
		if (inString) free(inString);
	}

	fclose(fpIn);
	fclose(fpOut);
	
	return nRetCode;
}