1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void print_tabs(ofstream & ofs,int tabs);
void pause();
int main()
{
ofstream fout;
ifstream fin;
int tab_count;
string file_in,file_out;
cout << "enter input filename: ";
getline(cin,file_in,'\n');
cout << "enter output filename: ";
getline(cin,file_out,'\n');
fin.open(file_in.c_str());
fout.open(file_out.c_str());
if (!fin.is_open())
{
cout << "couldn't open input file...\nexiting now..."<< endl;
pause();
return 0;
}
tab_count=0;
char prevc=0, prev2c=0, curc=0, nextc=0;
bool in_char=false;
bool in_string=false;
bool in_new_comment=false;
bool in_old_comment=false;
bool in_comment=false;
while (fin)
{
fin.get(curc);
if (prevc=='\n')
{
in_new_comment=false;
if (!in_old_comment) in_comment=false;
}
if (curc=='{' && !in_string && !in_comment && !in_char)
{
if (prevc!='\n')
{
fout << '\n';
print_tabs(fout,tab_count);
}
fout << '{';
tab_count++;
nextc=fin.peek();
if (nextc!='\n')
{
fout << '\n';
print_tabs(fout,tab_count);
}
}
else if (curc=='}' && !in_string && !in_comment && !in_char)
{
tab_count--;
if (prevc!='\n')
{
fout << '\n';
print_tabs(fout,tab_count);
}
fout << '}';
}
else if (curc=='\n')
{
fout << '\n';
nextc=fin.peek();
if (nextc=='}') print_tabs(fout,tab_count-1);
else print_tabs(fout,tab_count);
}
else
{
fout << curc;
}
if (curc=='\'' && !in_comment && !in_string
&& !(prevc=='\\' && prev2c!='\\') )
{
if (!in_char) in_char=true;
else in_char=false;
}
if (curc=='"' && !in_comment && !in_char)
{
if (!in_string) in_string=true;
else in_string=false;
}
if (curc=='/' && !in_string && !in_char)
{
if (prevc=='/' && !in_comment)
{
in_new_comment=true; in_comment=true;
}
else if (prevc=='*' && in_old_comment)
{
in_old_comment=false; in_comment=false;
}
}
if (curc=='*' && !in_string && !in_char)
{
if (prevc=='/' && !in_comment)
{
in_old_comment=true; in_comment=true;
}
}
prev2c=prevc;
prevc=curc;
}
fin.close();
fout.close();
cout << "sourcecode fixed succesfully!\nexiting now..." << endl;
pause();
return 0;
}
void print_tabs(ofstream & ofs,int tabs)
{
int i;
for (i=0; i<tabs; i++) ofs << '\t';
return;
}
void pause()
{
cout << "hit enter to quit..." << endl;
cin.get();
}
|