📄 takechar_c.c
字号:
/****************************************************
Takechar V1.00 Takes out Chinese characters from source code.
Copyright(C) 2007 ShiQizheng(sales@newexperience.51.net)
http://newexperience.51.net
All rights reserved.
Released under GPL. Please see "gpl.txt" for details.
****************************************************/
#include "takechar_c.h"
static FILE *pInputFile;
static char gszInputFileName[ MAX_FILENAME_LENGTH];
static int giDDCounter; // //
static int giDMMDCounter; // /**/
static int giSCounter; // #
static int giStringCounter; // ""
static int giChineseCounter;
static CHARCHAIN *pChain;
int TakeChar_C_Init( int iFunctionNumber, int *piResult)
{
pInputFile = 0;
giDDCounter = 0;
giDMMDCounter = 0;
giSCounter = 0;
giStringCounter = 0;
giChineseCounter = 0;
pInputFile = fopen( gszInputFileName, "rb");
if ( !pInputFile)
{
*piResult = RESULT_FILE_ERROR;
return TAKECHAR_C_DONE;
}
return TAKECHAR_C_P;
}
int TakeChar_C_P( int iFunctionNumber, int *piResult)
{
// +
char cChar;
int iReadResult;
iReadResult = ReadOneByte( pInputFile, &cChar);
switch( iReadResult)
{
case RESULT_FILE_EOF:
return TAKECHAR_C_DONE;
case RESULT_FILE_ERROR:
*piResult = RESULT_FILE_ERROR;
return TAKECHAR_C_DONE;
default:
break;
}
switch ( cChar)
{
case '/':
return TAKECHAR_C_D;
case '"':
return TAKECHAR_C_Q;
default:
return TAKECHAR_C_P;
}
}
int TakeChar_C_D( int iFunctionNumber, int *piResult)
{
// /
char cChar;
int iReadResult;
iReadResult = ReadOneByte( pInputFile, &cChar);
switch( iReadResult)
{
case RESULT_FILE_EOF:
return TAKECHAR_C_DONE;
case RESULT_FILE_ERROR:
*piResult = RESULT_FILE_ERROR;
return TAKECHAR_C_DONE;
default:
break;
}
switch ( cChar)
{
case '/':
// Log ("//");
giDDCounter ++;
return TAKECHAR_C_DD;
case '*':
// Log ("/*");
return TAKECHAR_C_DM;
default:
return TAKECHAR_C_P;
}
}
int TakeChar_C_DD( int iFunctionNumber, int *piResult)
{
// //
char cChar;
int iReadResult;
iReadResult = ReadOneByte( pInputFile, &cChar);
switch( iReadResult)
{
case RESULT_FILE_EOF:
return TAKECHAR_C_DONE;
case RESULT_FILE_ERROR:
*piResult = RESULT_FILE_ERROR;
return TAKECHAR_C_DONE;
default:
break;
}
switch ( cChar)
{
case 0x0a:
// Log ("//End");
return TAKECHAR_C_P;
default:
return TAKECHAR_C_DD;
}
}
int TakeChar_C_DM( int iFunctionNumber, int *piResult)
{
// /*
char cChar;
int iReadResult;
iReadResult = ReadOneByte( pInputFile, &cChar);
switch( iReadResult)
{
case RESULT_FILE_EOF:
return TAKECHAR_C_DONE;
case RESULT_FILE_ERROR:
*piResult = RESULT_FILE_ERROR;
return TAKECHAR_C_DONE;
default:
break;
}
switch ( cChar)
{
case '*':
return TAKECHAR_C_DMM;
default:
return TAKECHAR_C_DM;
}
}
int TakeChar_C_DMM( int iFunctionNumber, int *piResult)
{
// /**
char cChar;
int iReadResult;
iReadResult = ReadOneByte( pInputFile, &cChar);
switch( iReadResult)
{
case RESULT_FILE_EOF:
return TAKECHAR_C_DONE;
case RESULT_FILE_ERROR:
*piResult = RESULT_FILE_ERROR;
return TAKECHAR_C_DONE;
default:
break;
}
switch ( cChar)
{
case '/':
// Log ("*/");
giDMMDCounter ++;
return TAKECHAR_C_P;
case '*':
return TAKECHAR_C_DMM;
default:
return TAKECHAR_C_DM;
}
}
int TakeChar_C_Q( int iFunctionNumber, int *piResult)
{
// "
char cChar;
char cChar2;
int iReadResult;
char szChineseChar[3];
iReadResult = ReadOneByte( pInputFile, &cChar);
switch( iReadResult)
{
case RESULT_FILE_EOF:
return TAKECHAR_C_DONE;
case RESULT_FILE_ERROR:
*piResult = RESULT_FILE_ERROR;
return TAKECHAR_C_DONE;
default:
break;
}
switch ( cChar)
{
case '"':
// Log ("\"\"");
giStringCounter ++;
return TAKECHAR_C_P;
case '\\':
return TAKECHAR_C_QS;
default:
if ( cChar & 0x80)
{
iReadResult = ReadOneByte( pInputFile, &cChar2);
switch( iReadResult)
{
case RESULT_FILE_EOF:
return TAKECHAR_C_DONE;
case RESULT_FILE_ERROR:
*piResult = RESULT_FILE_ERROR;
return TAKECHAR_C_DONE;
default:
if ( cChar2 & 0x80)
{
//Find one Chinese char
szChineseChar[0] = cChar;
szChineseChar[1] = cChar2;
szChineseChar[2] = 0;
Log( "Found one Chinese char:%s", szChineseChar);
giChineseCounter ++;
if ( pChain == 0)
{
if ( CharChain_Init( &pChain, szChineseChar) != CHARCHINA_OK)
{
Log( "ERROR: Can not init char chain.");
*piResult = RESULT_ERROR;
return TAKECHAR_C_DONE;
}
}else
{
if ( CharChain_AddChar( pChain, szChineseChar) != CHARCHINA_OK)
{
Log( "ERROR: Can not add char to chain.");
*piResult = RESULT_ERROR;
return TAKECHAR_C_DONE;
}
}
return TAKECHAR_C_Q;
}else
{
//Other chars
switch ( cChar)
{
case '"':
Log ("\"\"");
giStringCounter ++;
return TAKECHAR_C_P;
case '\\':
return TAKECHAR_C_QS;
default:
return TAKECHAR_C_Q;
}
}
return TAKECHAR_C_Q;
}
}else
{
return TAKECHAR_C_Q;
}
}
}
int TakeChar_C_QS( int iFunctionNumber, int *piResult)
{
// "\
char cChar;
int iReadResult;
iReadResult = ReadOneByte( pInputFile, &cChar);
switch( iReadResult)
{
case RESULT_FILE_EOF:
return TAKECHAR_C_DONE;
case RESULT_FILE_ERROR:
*piResult = RESULT_FILE_ERROR;
return TAKECHAR_C_DONE;
default:
break;
}
return TAKECHAR_C_Q;
}
int TakeChar_C_Done( int iFunctionNumber, int *piResult)
{
if ( pInputFile)
{
fclose( pInputFile);
}
switch( *piResult)
{
case RESULT_DONE:
/*
Log( "giDDCounter=%d", giDDCounter);
Log( "giDMMDCounter=%d", giDMMDCounter);
Log( "giSCounter=%d", giSCounter);
Log( "giStringCounter=%d", giStringCounter);
Log( "giChineseCounter=%d", giChineseCounter);
*/
Log( "Done.");
break;
case RESULT_FILE_ERROR:
Log( "ERROR: Can not read one byte from input file:%s\n", gszInputFileName);
break;
default:
Log( "ERROR.");
break;
}
return TAKECHAR_C_EXIT;
}
int TakeCharFromFile_C( char *pszInputFileName, CHARCHAIN **ppOutputChain)
{
FUNCTIONTABLE Functions[] =
{
{ TAKECHAR_C_INIT, TakeChar_C_Init},
{ TAKECHAR_C_P, TakeChar_C_P},
{ TAKECHAR_C_D, TakeChar_C_D},
{ TAKECHAR_C_DD, TakeChar_C_DD},
{ TAKECHAR_C_DM, TakeChar_C_DM},
{ TAKECHAR_C_DMM, TakeChar_C_DMM},
{ TAKECHAR_C_Q, TakeChar_C_Q},
{ TAKECHAR_C_QS, TakeChar_C_QS},
{ TAKECHAR_C_DONE, TakeChar_C_Done},
{ -1, 0}
};
FUNCTIONTABLE *p;
int iFunctionNumber;
int iResult = RESULT_DONE;
strcpy( gszInputFileName, pszInputFileName);
pChain = *ppOutputChain;
iFunctionNumber = TAKECHAR_C_INIT;
while ( iFunctionNumber != TAKECHAR_C_EXIT)
{
for ( p = ( FUNCTIONTABLE*)Functions; p->pFunction!= 0; p++ )
{
if ( iFunctionNumber == p->iFunctionNumber)
{
iFunctionNumber = ( *p->pFunction)( iFunctionNumber, &iResult);
break;
}
}
if ( p->pFunction == 0 )
{
iFunctionNumber = TAKECHAR_C_EXIT;
}
}
*ppOutputChain = pChain;
return iResult;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -