bool CUniString::TokenizeAsciiEscapedUnicode() { CUString tmp = GetStr(); while( true ) { int idx = tmp.Find( "\\u" ); if( idx < 0 ) { for( int i=0; i<tmp.GetLength(); i++ ) { char ch = tmp.GetAt(i); if( (int)ch >= 0 ) { char buf[4]; sprintf( buf, "%c", ch ); unichar_list.PushBack( buf ); enc_byte += 1; } else { return false; } } break; } else { for( int i=0; i<idx; i++ ) { char ch = tmp.GetAt(i); if( (int)ch >= 0 ) { char buf[4]; sprintf( buf, "%c", ch ); unichar_list.PushBack( buf ); enc_byte += 1; } else { return false; } } CUString uni = tmp.SubStr( idx, idx+6 ); uni = EncodeUTF8( uni ); unichar_list.PushBack( uni ); enc_byte += uni.GetLength(); tmp = tmp.Mid( idx+6 ); } } return true; }
void CLanguage::ParseLanguageFile( const CUString& strFileName ) { BOOL bResult = TRUE; DWORD dwRevision = 0; FILE* pFile = NULL; CUString strFullFileName = m_strLanguageDir + _W("\\lang\\") + strFileName + m_strLangFileExt; CUStringConvert strCnv; pFile = CDexOpenFile( strFullFileName, _W( "r" ) ); if ( NULL != pFile ) { CHAR lpszRead[ 1024 ]; int nStart = 0; int nStop = 0; CUString strRead; memset( lpszRead, 0, sizeof( lpszRead ) ); while ( fgets( lpszRead, sizeof( lpszRead ), pFile ) ) { bool bHasNumber = false; bool bIsMenu = false; bool bIsDialog = false; bool bHasString = false; DWORD nIndex = 0; CLangElement newElement; strRead = _T( "" ); for ( nIndex = 0; nIndex< strlen( lpszRead ); nIndex++ ) { if ( ( lpszRead[ nIndex ] != 0x0A ) && ( lpszRead[ nIndex ] != 0x0D ) ) { strRead += (TCHAR)lpszRead[ nIndex ]; } } TranslateTab( strRead ); nStart = strRead.Find( _T( '#' ) ); if ( nStart >= 0 ) { if ( ( nStart + 1 ) == strRead.Find( _T( 'M' ) ) ) { nStart++; bIsMenu = TRUE; } else if ( ( nStart + 1 ) == strRead.Find( _T( 'D' ) ) ) { nStart++; bIsDialog = TRUE; } nStop = strRead.Find( _T( '#' ), nStart + 1 ); if ( nStop > 2 ) { CUString strID ( strRead.Mid( nStart + 1, nStop - nStart -1 ) ); swscanf( strID, _W( "%x" ), &newElement.nID ); bHasNumber = true; } } else { if ( strRead.Find( CODEPAGETAG ) == 0 ) { m_dwCodePageID = _wtoi( strRead.Mid( CODEPAGETAG.GetLength() ) ); } else if ( strRead.Find( LANGTAG ) == 0 ) { m_dwLangID = _wtoi( strRead.Mid( LANGTAG.GetLength() ) ); } else if ( strRead.Find( SUBLANGTAG ) == 0 ) { m_dwSubLangID = _wtoi( strRead.Mid( SUBLANGTAG.GetLength() ) ); } else if ( strRead.Find( REVISIONTAG ) == 0 ) { int nPos; nPos = strRead.Find( _W( ",v " ) ); if ( nPos >= 0 ) { float fVersion = 1.0f; swscanf( strRead.Mid( nPos+3,4 ), _W( "%f" ), &fVersion ); dwRevision = (DWORD)( 100 * ( fVersion + 0.005 ) ); } } } nStart = strRead.Find( '"' ); if ( nStart >= 0 ) { nStop = strRead.Find( '"', nStart + 1 ); if ( nStop > 2 ) { lpszRead[ 0 ] = '\0'; for ( nIndex = nStart + 1; nIndex < (DWORD)nStop; nIndex++) { lpszRead[ nIndex - nStart - 1] = (CHAR)strRead.GetAt( nIndex ); lpszRead[ nIndex - nStart ] = '\0'; } newElement.strValue = CUString( lpszRead, m_dwCodePageID ); bHasString = true; } } if ( bHasString && bHasNumber ) { if ( bIsMenu ) { m_vMenus.push_back( newElement ); } else if ( bIsDialog ) { m_vDialogs.push_back( newElement ); } else { m_vStrings.push_back( newElement ); } } memset( lpszRead, 0, sizeof( lpszRead ) ); } fclose( pFile ); } #ifdef UNICODE TCHAR* pTest = _wsetlocale( LC_ALL, GetString( 99 ) ); #else TCHAR* pTest = setlocale( LC_ALL, strCnv.ToT( GetString( 99 ) ) ); #endif SetThreadLocale( MAKELCID( m_dwLangID, m_dwSubLangID ) ); setlocale( LC_NUMERIC, "English" ); }
CUString FormatTrackNameString( CUString strFormat, ENUM_FILENAME_CONVERTS nType ) { int i; switch ( nType ) { case FILENAME_CONVERT_NONE: // do noting break; case FILENAME_CONVERT_LOWER: strFormat.MakeLower(); break; case FILENAME_CONVERT_UPPER: strFormat.MakeUpper(); break; case FILENAME_CONVERT_FC_UPPER: strFormat.MakeLower(); if ( strFormat.GetLength() > 0 ) { CUString strTmp( strFormat.Left( 1 ) ); strTmp.MakeUpper(); strFormat.SetAt( 0, strTmp.GetAt( 0 ) ); } break; case FILENAME_CONVERT_FCEW_UPPER: strFormat.MakeLower(); for ( i=0; i < strFormat.GetLength()-1; i++ ) { if ( i == 0 ) { CUString strTmp( strFormat.Mid( 0, 1 ) ); strTmp.MakeUpper(); strFormat.SetAt( 0, strTmp.GetAt( 0 ) ); } else { if ( ( 0 == _istalnum( strFormat.GetAt( i ) ) ) && ( _T( '\'' ) != strFormat.GetAt( i ) ) ) { CUString strTmp( strFormat.Mid( i+1, 1 ) ); strTmp.MakeUpper(); strFormat.SetAt( i+1, strTmp.GetAt( 0 ) ); } } } break; case FILENAME_CONVERT_SWAP_ARTIST_TRACK: i = strFormat.Find( _W( " / " ) ); if ( i > 0 ) { CUString str1; CUString str2; str1 = strFormat.Left( i ); str2 = strFormat.Mid( i + 3 ); strFormat = str2 + _W( " / " ) + str1; } break; default: ASSERT( FALSE ); } return strFormat; }