Subversion Repositories spk

Rev

Rev 197 | Rev 224 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 197 Rev 223
Line 220... Line 220...
220
	SDiffFile *diffFile = new SDiffFile;
220
	SDiffFile *diffFile = new SDiffFile;
221
	diffFile->sFile = fileType;
221
	diffFile->sFile = fileType;
222
 
222
 
223
	// read both files and compare them
223
	// read both files and compare them
224
	CFileIO Base(baseFile);
224
	CFileIO Base(baseFile);
225
	std::vector<Utils::String> baseLines;
225
	std::vector<Utils::WString> baseLines;
226
	if(Base.readLines(baseLines))
226
	if(Base.readLines(baseLines))
227
	{
227
	{
228
		CFileIO Mod(modFile);
228
		CFileIO Mod(modFile);
229
		std::vector<Utils::String> lines;
229
		std::vector<Utils::WString> lines;
230
		if(Mod.readLines(lines))
230
		if(Mod.readLines(lines))
231
		{
231
		{
232
			int id = -1;
232
			int id = -1;
233
			std::vector<Utils::String>::iterator node[2];
233
			std::vector<Utils::WString>::iterator node[2];
234
			node[0] = baseLines.begin();
234
			node[0] = baseLines.begin();
235
			node[1] = lines.begin();
235
			node[1] = lines.begin();
236
			std::vector<Utils::String>::iterator endNode[2];
236
			std::vector<Utils::WString>::iterator endNode[2];
237
			endNode[0] = baseLines.end();
237
			endNode[0] = baseLines.end();
238
			endNode[1] = lines.end();
238
			endNode[1] = lines.end();
239
 
239
 
240
			Utils::String prev[2];
240
			Utils::WString prev[2];
241
 
241
 
242
			while (node[0] != endNode[0] || node[1] != endNode[1])
242
			while (node[0] != endNode[0] || node[1] != endNode[1])
243
			{
243
			{
244
				Utils::String str[2];
244
				Utils::WString str[2];
245
 
245
 
246
				for ( int i = 0; i < 2; i++ )
246
				for ( int i = 0; i < 2; i++ )
247
				{
247
				{
248
					while (node[i] != endNode[i])
248
					while (node[i] != endNode[i])
249
					{
249
					{
250
						Utils::String l = *node[i];
250
						Utils::WString l = *node[i];
251
						node[i]++;
251
						node[i]++;
252
 
252
 
253
						l.removeFirstSpace();
253
						l.removeFirstSpace();
254
						l.removeChar('\r');
254
						l.removeChar('\r');
255
						if ( !l.empty() && l.left(1) != "/") {
255
						if ( !l.empty() && l.left(1) != L"/") {
256
							str[i] += l;
256
							str[i] += l;
257
							if ( _isLineComplete(str[i], fileType, (id == -1) ? true : false) ) 
257
							if ( _isLineComplete(str[i], fileType, (id == -1) ? true : false) ) 
258
								break;
258
								break;
259
						}
259
						}
260
					}
260
					}
Line 267... Line 267...
267
					// first check for mismatch amount, one of the nodes will be empty
267
					// first check for mismatch amount, one of the nodes will be empty
268
					if ( str[0].empty() && !str[1].empty() ) // mod file has more entries (these must be additions)
268
					if ( str[0].empty() && !str[1].empty() ) // mod file has more entries (these must be additions)
269
					{
269
					{
270
						SDiffEntryAddition *entry = new SDiffEntryAddition;
270
						SDiffEntryAddition *entry = new SDiffEntryAddition;
271
						entry->iID = id;
271
						entry->iID = id;
272
						entry->sEntry = str[1].toWString();
272
						entry->sEntry = str[1];
273
						diffFile->m_lEntries.push_back(entry);
273
						diffFile->m_lEntries.push_back(entry);
274
					}
274
					}
275
					else if ( str[1].empty() && !str[0].empty() ) // mod file has less entries (must have removed some)
275
					else if ( str[1].empty() && !str[0].empty() ) // mod file has less entries (must have removed some)
276
					{
276
					{
277
						SDiffEntry *entry = new SDiffEntryRemoval;
277
						SDiffEntry *entry = new SDiffEntryRemoval;
Line 388... Line 388...
388
	Clean();
388
	Clean();
389
 
389
 
390
	CFileIO File(file);
390
	CFileIO File(file);
391
	if ( !File.exists() ) return false;
391
	if ( !File.exists() ) return false;
392
 
392
 
393
	std::vector<Utils::String> lines;
393
	std::vector<Utils::WString> lines;
394
	if(File.readLines(lines))
394
	if(File.readLines(lines))
395
	{
395
	{
396
		SDiffFile *diffFile = NULL;
396
		SDiffFile *diffFile = NULL;
397
		for(auto itr = lines.begin(); itr != lines.end(); itr++)
397
		for(auto itr = lines.begin(); itr != lines.end(); itr++)
398
		{
398
		{
399
			if (itr->left(2).Compare("$$") )
399
			if (itr->left(2).Compare(L"$$") )
400
			{
400
			{
401
				diffFile = new SDiffFile;
401
				diffFile = new SDiffFile;
402
				m_lFiles.push_back(diffFile);
402
				m_lFiles.push_back(diffFile);
403
				diffFile->sFile = itr->right(-2).toWString();
403
				diffFile->sFile = itr->right(-2);
404
			}
404
			}
405
			else if ( diffFile )
405
			else if ( diffFile )
406
			{
406
			{
407
				if ( itr->left(4).Compare("+++:") )
407
				if ( itr->left(4).Compare(L"+++:") )
408
				{
408
				{
409
					SDiffEntryAddition *addition = new SDiffEntryAddition;
409
					SDiffEntryAddition *addition = new SDiffEntryAddition;
410
					addition->iID = itr->token(":", 2).toInt();
410
					addition->iID = itr->token(L":", 2).toInt();
411
					addition->sEntry = itr->tokens(":", 3).toWString();
411
					addition->sEntry = itr->tokens(L":", 3);
412
					diffFile->m_lEntries.push_back(addition);
412
					diffFile->m_lEntries.push_back(addition);
413
				}
413
				}
414
				else if ( itr->left(4).Compare("---:") )
414
				else if ( itr->left(4).Compare(L"---:") )
415
				{
415
				{
416
					SDiffEntryRemoval *entry = new SDiffEntryRemoval;
416
					SDiffEntryRemoval *entry = new SDiffEntryRemoval;
417
					entry->iID = itr->token(":", 2).toInt();
417
					entry->iID = itr->token(L":", 2).toInt();
418
					diffFile->m_lEntries.push_back(entry);
418
					diffFile->m_lEntries.push_back(entry);
419
				}
419
				}
420
				else if (itr->left(4).Compare("///:") )
420
				else if (itr->left(4).Compare(L"///:") )
421
				{
421
				{
422
					SDiffEntryChange *entry = new SDiffEntryChange;
422
					SDiffEntryChange *entry = new SDiffEntryChange;
423
					entry->iID = itr->token(":", 2).toInt();
423
					entry->iID = itr->token(L":", 2).toInt();
424
					entry->iPos = itr->token(":", 3).toInt();
424
					entry->iPos = itr->token(L":", 3).toInt();
425
					entry->sEntry = itr->tokens(":", 4).toWString();
425
					entry->sEntry = itr->tokens(L":", 4);
426
					diffFile->m_lEntries.push_back(entry);
426
					diffFile->m_lEntries.push_back(entry);
427
				}
427
				}
428
			}
428
			}
429
		}
429
		}
430
 
430
 
Line 468... Line 468...
468
			for ( CListNode<SDiffEntry> *eNode = f->m_lEntries.Front(); eNode; eNode = eNode->next() )
468
			for ( CListNode<SDiffEntry> *eNode = f->m_lEntries.Front(); eNode; eNode = eNode->next() )
469
			{
469
			{
470
				switch ( eNode->Data()->iType )
470
				switch ( eNode->Data()->iType )
471
				{
471
				{
472
					case DIFFTYPE_ADDITION:
472
					case DIFFTYPE_ADDITION:
473
						writeLines.pushBack(((SDiffEntryAddition *)eNode->Data())->sEntry.toString());
473
						writeLines.pushBack(((SDiffEntryAddition *)eNode->Data())->sEntry);
474
						break;
474
						break;
475
					case DIFFTYPE_REMOVAL:
475
					case DIFFTYPE_REMOVAL:
476
						writeLines.removeAt(eNode->Data()->iID);
476
						writeLines.removeAt(eNode->Data()->iID);
477
						break;
477
						break;
478
					case DIFFTYPE_CHANGE:
478
					case DIFFTYPE_CHANGE: