Subversion Repositories spk

Rev

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

Rev 197 Rev 254
Line -... Line 1...
-
 
1
 
-
 
2
#include <algorithm>
1
 
3
 
2
#include "TextDB.h"
4
#include "TextDB.h"
3
#include "File_IO.h"
5
#include "File_IO.h"
4
 
6
 
5
namespace SPK {
7
namespace SPK {
6
 
8
 
7
CTextDB::CTextDB(void)
9
CTextDB::CTextDB(void) : _iInGame(0),
-
 
10
	m_iInPage(0),
-
 
11
	m_iLang(44),
-
 
12
	_bSortedGames(false)
8
{
13
{
9
	m_iLang = 44;
-
 
10
	m_pTexts = new TextList;
14
	m_pTexts = new TextList;
11
	m_pTextComment = new TextList;
15
	m_pTextComment = new TextList;
12
	m_iInPage = 0;
-
 
13
}
16
}
14
 
17
 
15
CTextDB::~CTextDB(void)
18
CTextDB::~CTextDB(void)
16
{
19
{
17
	if ( m_pTexts ) delete m_pTexts;
20
	if ( m_pTexts ) delete m_pTexts;
Line 27... Line 30...
27
			this->_parseFileLine(iFromPage, iToPage, iLang, File.readEndOfLineStr());
30
			this->_parseFileLine(iFromPage, iToPage, iLang, File.readEndOfLineStr());
28
		}
31
		}
29
		File.close();
32
		File.close();
30
 
33
 
31
	}
34
	}
-
 
35
 
-
 
36
	if (_bSortedGames)
-
 
37
		_sortGames();
-
 
38
 
32
	m_iInPage = 0;
39
	m_iInPage = 0;
33
}
40
}
34
 
41
 
35
void CTextDB::setLanguage(int iLang)
42
void CTextDB::setLanguage(int iLang)
36
{
43
{
Line 87... Line 94...
87
			pos = sNewText.find_first_of(L"{", 0);
94
			pos = sNewText.find_first_of(L"{", 0);
88
		}
95
		}
89
		else
96
		else
90
			pos = sNewText.find_first_of(L"{", pos);
97
			pos = sNewText.find_first_of(L"{", pos);
91
	}
98
	}
-
 
99
 
92
	return sNewText;
100
	return sNewText;
93
}
101
}
94
 
102
 
95
void CTextDB::_parseFileLine(int iFromPage, int iToPage, int iLang, const Utils::WString &sLine)
103
void CTextDB::_parseFileLine(int iFromPage, int iToPage, int iLang, const Utils::WString &sLine)
96
{
104
{
97
	if ( m_iInPage ) {
105
	if ( m_iInPage ) {
98
		// check for end of page
106
		// check for end of page
Line 108... Line 116...
108
		size_t pos = sLine.find(L"<page id=\"");
116
		size_t pos = sLine.find(L"<page id=\"");
109
		if ( pos != Utils::WString::npos ) {
117
		if ( pos != Utils::WString::npos ) {
110
			pos += 10; // move to the end of the search string (after ")
118
			pos += 10; // move to the end of the search string (after ")
111
			size_t endPos = sLine.find(L"\"", pos);
119
			size_t endPos = sLine.find(L"\"", pos);
112
			int iPageID = Utils::WString(sLine.substr(pos, endPos - pos));
120
			int iPageID = Utils::WString(sLine.substr(pos, endPos - pos));
-
 
121
			int iGameID = iPageID / 10000;
113
			iPageID %= 10000; // make sure we remove the game id
122
			iPageID %= 10000; // make sure we remove the game id
114
			//TODO: mark the game id so we can overright if the game id is the same or higher
-
 
115
			if ( iFromPage > 0 && iPageID < iFromPage ) return; // out of range
123
			if ( iFromPage > 0 && iPageID < iFromPage ) return; // out of range
116
			if ( iToPage > 0 && iPageID > iToPage) return; // out of range
124
			if ( iToPage > 0 && iPageID > iToPage) return; // out of range
117
 
125
 
-
 
126
			_iInGame = iGameID;
118
			m_iInPage = iPageID;
127
			m_iInPage = iPageID;
119
		}
128
		}
120
	}
129
	}
121
}
130
}
122
 
131
 
Line 163... Line 172...
163
			}
172
			}
164
		}
173
		}
165
	}
174
	}
166
 
175
 
167
	text.removeEndSpace();
176
	text.removeEndSpace();
-
 
177
 
-
 
178
	_lGames.insert(_iInGame);
-
 
179
	_bSortedGames = false;
168
 
180
 
169
	(*m_pTexts)[_mapID(iLang, m_iInPage, iID)] = text;
181
	(*m_pTexts)[_mapID(iLang, m_iInPage, iID)] = text;
170
	if ( !fullComment.empty() )
182
	if ( !fullComment.empty() )
171
		(*m_pTextComment)[_mapID(iLang, m_iInPage, iID)] = fullComment;
183
		(*m_pTextComment)[_mapID(iLang, m_iInPage, iID)] = fullComment;
172
}
184
}
173
 
185
 
174
Utils::WString CTextDB::_mapID(int iLang, int iPage, int iID) const
186
Utils::WString CTextDB::_mapID(int iLang, int iPage, int iID) const
175
{
187
{
176
	Utils::WString sID;
188
	Utils::WString sID;
177
	sID += (long)iLang;
189
	sID += (long)iLang;
178
	sID += L":";
190
	sID += L":";
179
	sID += (long)iPage;
191
	sID += (long)iPage;
180
	sID += L":";
192
	sID += L":";
181
	sID += (long)iID;
193
	sID += (long)iID;
182
 
194
 
183
	return sID;
195
	return sID;
-
 
196
}
-
 
197
 
-
 
198
void CTextDB::_sortGames()
-
 
199
{
-
 
200
	_lGameOrder.clear();
-
 
201
	_lGameOrder.reserve(_lGames.size());
-
 
202
	std::copy(_lGames.begin(), _lGames.end(), _lGameOrder.begin());
-
 
203
	std::sort(_lGameOrder.begin(), _lGameOrder.end());
-
 
204
	_bSortedGames = true;
184
}
205
}
185
 
206
 
186
}//NAMESPACE
207
}//NAMESPACE