NiceCode 代码整理软件 源码

代码整理软件。

在百度空间这样不支持代码显示插件的博客里也能够漂亮的显示代码。

下载地址(附源码):http://u.115.com/file/f3df1b2b31

 
  
// done 2011.5.2
#include < iostream >
#include
< string >
#include
< assert.h >
#include
< fstream >
#include
< stdlib.h >
using namespace std;

string _gSelfPos;

const string _MODEL[ 2 ] = { " <span style=\"_D_\"> " , " </span> " };
const string _CHANGE_FLAG = " _D_ " ;
string _gKeyword[ 300 ]; // from ini
string _gChange[ 5 ][ 2 ] = { { " & " , " &amp; " },{ " < " , " &lt; " },{ " > " , " &gt; " },{ " \" " , " &quot; " },{ " " , " &nbsp; " } }; // 转义字符

string _gGlobal[ 2 ]; // from ini
string _gKwColor[ 2 ];
string _gCmtColor[ 2 ];
string _gNumColor[ 2 ];
string _gStrColor[ 2 ];

string _gSplit[ 1000 ];
int _gCntSplit,_gCntKw;

int _fsplit( string str ) // 将字符串分解 保存到_gSplit中 字母数字连续 空格,符号断开
{
_gCntSplit
= 0 ;
int la = 0 ;
for ( int i = 0 ;i < str.length(); ++ i )
{
if ( ( str[i] >= ' a ' && str[i] <= ' z ' ) || ( str[i] >= ' A ' && str[i] <= ' Z ' ) || (str[i] >= ' 0 ' && str[i] <= ' 9 ' ) )
;
// 不断
else
{
if ( la != i ) // 清理前一个
_gSplit[_gCntSplit ++ ] = str.substr( la,i - la );
_gSplit[_gCntSplit
++ ] = str.substr( i, 1 ); // 本身
la = i + 1 ;
}
}
if ( la < str.length() )
_gSplit[_gCntSplit
++ ] = str.substr( la );
return _gCntSplit;
}

/*
ini:
1.Global begin
2.Global end
3.KeyWord color
4.Comment color
5.Number color
6.String color
7.Key word
*/
void _finit( string fn ) // 初始化各种信息 加载ini
{
fn
= _gSelfPos + fn;
for ( int i = 0 ;i < 2 ; ++ i )
_gKwColor[i]
= _gCmtColor[i] = _gNumColor[i] = _gStrColor[i] = _MODEL[i];
ifstream fin(fn.c_str());
getline( fin,_gGlobal[
0 ] );
getline( fin,_gGlobal[
1 ] );

string color;
getline( fin,color );
// keyword's
_gKwColor[ 0 ].replace( _gKwColor[ 0 ].find(_CHANGE_FLAG),_CHANGE_FLAG.length(),color );
getline( fin,color );
_gCmtColor[
0 ].replace( _gCmtColor[ 0 ].find(_CHANGE_FLAG),_CHANGE_FLAG.length(),color );
getline( fin,color );
_gNumColor[
0 ].replace( _gNumColor[ 0 ].find(_CHANGE_FLAG),_CHANGE_FLAG.length(),color );
getline( fin,color );
_gStrColor[
0 ].replace( _gStrColor[ 0 ].find(_CHANGE_FLAG),_CHANGE_FLAG.length(),color );

string tkw;
getline( fin,tkw );
_fsplit( tkw );
_gCntKw
= _gCntSplit;

_gCntKw
= 0 ;
for ( int i = 0 ;i < _gCntSplit; ++ i )
if ( _gSplit[i] != " " ) _gKeyword[_gCntKw ++ ] = _gSplit[i];
fin.close();

/// /------------------------------------------------
// for( int i = 0;i < 2;++i )
// {
// cout << _gGlobal[i] << endl;
// cout << _gKwColor[i] << endl;
// cout << _gCmtColor[i] << endl;
// cout << _gStrColor[i] << endl;
// cout << _gNumColor[i] << endl;
// cout << "----------------------------------" << endl;
// }
// for( int i = 0;i < _gCntKw;++i )
// cout << _gKeyword[i] << ' ';
// cout << endl;
// system("pause");
}

string _fchange( string str ) // 转义
{
for ( int i = 0 ;i < 5 ; ++ i )
if ( str.find(_gChange[i][ 0 ]) < str.length() )
str.replace( str.find(_gChange[i][
0 ]),_gChange[i][ 0 ].length(),_gChange[i][ 1 ] );
return str;
}

bool _fisKeyWord( string str )
{
for ( int i = 0 ;i < _gCntKw; ++ i )
if ( _gKeyword[i] == str )
return true ;
return false ;
}

bool _fisNumber( string str )
{
for ( int i = 0 ;i < str.length(); ++ i )
if ( str[i] > ' 9 ' || str[i] < ' 0 ' )
return false ;
return true ;
}

void _fwork( string srFn )
{
string iniFn = srFn.substr(srFn.rfind( ' . ' ) + 1 ) + " .ini " ;
// cout << iniFn << endl;
// system("pause");
_finit(iniFn);

ifstream sfin( srFn.c_str() );
ofstream sfout( (srFn
+ " .html " ).c_str() );

sfout
<< _gGlobal[ 0 ] << endl;

string line;
bool cmt,isstr,ign,lineIgn;
cmt
= isstr = ign = lineIgn = false ;
while ( getline( sfin,line ) )
{
_fsplit(line);
for ( int i = 0 ;i < _gCntSplit; ++ i )
{
string nw = _gSplit[i]; // 保证nw是单个字符或者诺干个字母数字 保证转义顺利进行
string prt = _fchange(nw);
// nw = _fchange(nw);
if ( ign || lineIgn )
{
ign
= false ;
}

else if ( nw == " * " && i + 1 < _gCntSplit && _gSplit[i + 1 ] == " / " ) // end
{
cmt
= false ;
prt
+= _gCmtColor[ 1 ];
}

else if ( cmt ) // in comment
{
;
}

else if ( nw == " / " && i + 1 < _gCntSplit && _gSplit[i + 1 ] == " * " ) // *
{
cmt
= true ;
prt
= _gCmtColor[ 0 ] + prt;
}

else if ( nw == " / " && i + 1 < _gCntSplit && _gSplit[i + 1 ] == " / " ) // ' // '
{
lineIgn
= true ;
prt
= _gCmtColor[ 0 ] + prt;
}

else if ( nw == " \\ " && i + 1 < _gCntSplit )
{
ign
= true ;
}

else if ( isstr || nw == " \" " || nw == " \' " )
{
if ( nw == " \" " || nw == " \' " )
{
isstr
= ! isstr;
if ( isstr )
prt
= _gStrColor[ 0 ] + prt;
else
prt
= prt + _gStrColor[ 1 ];
}
}

else
{
// keyword number
if ( _fisKeyWord(nw) ) prt = _gKwColor[ 0 ] + prt + _gKwColor[ 1 ];
if ( _fisNumber(nw) ) prt = _gNumColor[ 0 ] + prt + _gNumColor[ 1 ];
}

sfout
<< prt;
}
if ( lineIgn )
{
lineIgn
= 0 ;
sfout
<< _gCmtColor[ 1 ];
}
sfout
<< endl;
}
sfout
<< _gGlobal[ 1 ] << endl;

sfin.close();
sfout.close();
}

int main( int argc, char ** argv )
{
if ( argc == 1 )
{
cout
<< " 可以把源文件拖到程序图标来运行程序 " << endl;
system(
" pause " );
return 0 ;
}
_gSelfPos
= argv[ 0 ];
_gSelfPos
= _gSelfPos.substr( 0 ,_gSelfPos.rfind( " \\ " ) + 1 );
// _fwork( "D:\\niceCode.cpp");
_fwork( argv[ 1 ] );
return 0 ;
}

转载于:https://www.cnblogs.com/code-/articles/2034473.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值