diff options
Diffstat (limited to 'utils/themeeditor/parsetreenode.cpp')
-rw-r--r-- | utils/themeeditor/parsetreenode.cpp | 71 |
1 files changed, 70 insertions, 1 deletions
diff --git a/utils/themeeditor/parsetreenode.cpp b/utils/themeeditor/parsetreenode.cpp index 99fdbd858d..3a20b1e003 100644 --- a/utils/themeeditor/parsetreenode.cpp +++ b/utils/themeeditor/parsetreenode.cpp | |||
@@ -224,6 +224,75 @@ QString ParseTreeNode::genCode() const | |||
224 | return buffer; | 224 | return buffer; |
225 | } | 225 | } |
226 | 226 | ||
227 | /* A more or less random hashing algorithm */ | ||
228 | int ParseTreeNode::genHash() const | ||
229 | { | ||
230 | int hash = 0; | ||
231 | |||
232 | if(element) | ||
233 | { | ||
234 | hash += element->type; | ||
235 | switch(element->type) | ||
236 | { | ||
237 | case VIEWPORT: | ||
238 | case LINE: | ||
239 | case SUBLINES: | ||
240 | case CONDITIONAL: | ||
241 | hash += element->children_count; | ||
242 | break; | ||
243 | |||
244 | case TAG: | ||
245 | for(unsigned int i = 0; i < strlen(element->tag->name); i++) | ||
246 | hash += element->tag->name[i]; | ||
247 | break; | ||
248 | |||
249 | case COMMENT: | ||
250 | case TEXT: | ||
251 | for(unsigned int i = 0; i < strlen(element->text); i++) | ||
252 | { | ||
253 | if(i % 2) | ||
254 | hash += element->text[i] % element->type; | ||
255 | else | ||
256 | hash += element->text[i] % element->type * 2; | ||
257 | } | ||
258 | break; | ||
259 | } | ||
260 | |||
261 | } | ||
262 | |||
263 | if(param) | ||
264 | { | ||
265 | hash += param->type; | ||
266 | switch(param->type) | ||
267 | { | ||
268 | case skin_tag_parameter::DEFAULT: | ||
269 | case skin_tag_parameter::CODE: | ||
270 | break; | ||
271 | |||
272 | case skin_tag_parameter::NUMERIC: | ||
273 | hash += param->data.numeric * (param->data.numeric / 4); | ||
274 | break; | ||
275 | |||
276 | case skin_tag_parameter::STRING: | ||
277 | for(unsigned int i = 0; i < strlen(param->data.text); i++) | ||
278 | { | ||
279 | if(i % 2) | ||
280 | hash += param->data.text[i] * 2; | ||
281 | else | ||
282 | hash += param->data.text[i]; | ||
283 | } | ||
284 | break; | ||
285 | } | ||
286 | } | ||
287 | |||
288 | for(int i = 0; i < children.count(); i++) | ||
289 | { | ||
290 | hash += children[i]->genHash(); | ||
291 | } | ||
292 | |||
293 | return hash; | ||
294 | } | ||
295 | |||
227 | ParseTreeNode* ParseTreeNode::child(int row) | 296 | ParseTreeNode* ParseTreeNode::child(int row) |
228 | { | 297 | { |
229 | if(row < 0 || row >= children.count()) | 298 | if(row < 0 || row >= children.count()) |
@@ -234,7 +303,7 @@ ParseTreeNode* ParseTreeNode::child(int row) | |||
234 | 303 | ||
235 | int ParseTreeNode::numChildren() const | 304 | int ParseTreeNode::numChildren() const |
236 | { | 305 | { |
237 | return children.count(); | 306 | return children.count(); |
238 | } | 307 | } |
239 | 308 | ||
240 | 309 | ||