3 // Copyright (c) 2002 Iain Murray
5 #include "../Common/Common.h"
8 using namespace Dasher
;
10 using namespace expat
;
12 // Track memory leaks on Windows to the line that new'd the memory
15 #define DEBUG_NEW new( _NORMAL_BLOCK, THIS_FILE, __LINE__ )
18 static char THIS_FILE
[] = __FILE__
;
22 // TODO: Share information with AlphIO class?
24 CColourIO::CColourIO(std::string SystemLocation
, std::string UserLocation
, std::vector
<std::string
> Filenames
)
25 :BlankInfo(), SystemLocation(SystemLocation
), UserLocation(UserLocation
), Filenames(Filenames
), LoadMutable(false), CData("") {
29 ParseFile(SystemLocation
+ "colour.xml");
30 if(Filenames
.size() > 0) {
31 for(unsigned int i
= 0; i
< Filenames
.size(); i
++) {
32 ParseFile(SystemLocation
+ Filenames
[i
]);
36 ParseFile(UserLocation
+ "colour.xml");
37 if(Filenames
.size() > 0) {
38 for(unsigned int i
= 0; i
< Filenames
.size(); i
++) {
39 ParseFile(UserLocation
+ Filenames
[i
]);
44 void CColourIO::ParseFile(std::string Filename
) {
46 if((Input
= fopen(Filename
.c_str(), "r")) == (FILE *) 0) {
47 // could not open file
51 XML_Parser Parser
= XML_ParserCreate(NULL
);
53 // Members passed as callbacks must be static, so don't have a "this" pointer.
54 // We give them one through horrible casting so they can effect changes.
55 XML_SetUserData(Parser
, this);
57 XML_SetElementHandler(Parser
, XML_StartElement
, XML_EndElement
);
58 XML_SetCharacterDataHandler(Parser
, XML_CharacterData
);
60 const unsigned int BufferSize
= 1024;
61 char Buffer
[BufferSize
];
64 size_t len
= fread(Buffer
, 1, sizeof(Buffer
), Input
);
65 Done
= len
< sizeof(Buffer
);
66 if(XML_Parse(Parser
, Buffer
, len
, Done
) == XML_STATUS_ERROR
) {
71 XML_ParserFree(Parser
);
75 void CColourIO::GetColours(std::vector
<std::string
>*ColourList
) const {
78 typedef std::map
< std::string
, ColourInfo
>::const_iterator CI
;
79 CI End
= Colours
.end();
81 for(CI Cur
= Colours
.begin(); Cur
!= End
; Cur
++)
82 ColourList
->push_back((*Cur
).second
.ColourID
);
85 const CColourIO::ColourInfo
& CColourIO::GetInfo(const std::string
&ColourID
) {
86 if(ColourID
== "") // return Default if no colour scheme is specified
87 return Colours
["Default"];
89 if(Colours
.count(ColourID
) != 0) {
90 Colours
[ColourID
].ColourID
= ColourID
; // Ensure consistency
91 return Colours
[ColourID
];
94 // if we don't have the colour scheme they asked for, return default
95 return Colours
["Default"];
100 void CColourIO::SetInfo(const ColourInfo
&NewInfo
) {
101 Colours
[NewInfo
.ColourID
] = NewInfo
;
102 Save(NewInfo
.ColourID
);
105 void CColourIO::Delete(const std::string
&ColourID
) {
106 if(Colours
.find(ColourID
) != Colours
.end()) {
107 Colours
.erase(ColourID
);
112 void CColourIO::Save(const std::string
&ColourID
) {
113 // Write an XML file containing all the colours that have been defined.
114 // I am not going to indent the XML file as it will just bloat it, and it
115 // is very simple. There are line breaks though as it is very hard to read
116 // without. I'm going to ignore ColourID and save all alphabets as the
117 // overhead doesn't seem to matter and it makes things much easier.
120 std::string Filename
= UserLocation
+ "colours.xml";
121 if((Output
= fopen(Filename
.c_str(), "w")) == (FILE *) 0) {
122 // could not open file
125 fwrite("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n", sizeof(char), 39, Output
);
126 fwrite("<!DOCTYPE alphabets SYSTEM \"colours.dtd\">\n", sizeof(char), 43, Output
);
127 fwrite("<?xml-stylesheet type=\"text/xsl\" href=\"colours.xsl\"?>\n", sizeof(char), 55, Output
);
128 fwrite("<colours>\n", sizeof(char), 12, Output
);
132 void CColourIO::CreateDefault() {
133 // TODO: Urgh - replace with a table
135 ColourInfo
& Default
= Colours
["Default"];
136 Default
.ColourID
= "Default";
137 Default
.Mutable
= false;
138 Default
.Reds
.push_back(255);
139 Default
.Greens
.push_back(255);
140 Default
.Blues
.push_back(255);
141 Default
.Reds
.push_back(255);
142 Default
.Greens
.push_back(0);
143 Default
.Blues
.push_back(0);
144 Default
.Reds
.push_back(0);
145 Default
.Greens
.push_back(0);
146 Default
.Blues
.push_back(0);
147 Default
.Reds
.push_back(218);
148 Default
.Greens
.push_back(218);
149 Default
.Blues
.push_back(218);
150 Default
.Reds
.push_back(0);
151 Default
.Greens
.push_back(0);
152 Default
.Blues
.push_back(0);
153 Default
.Reds
.push_back(0);
154 Default
.Greens
.push_back(0);
155 Default
.Blues
.push_back(0);
156 Default
.Reds
.push_back(0);
157 Default
.Greens
.push_back(0);
158 Default
.Blues
.push_back(0);
159 Default
.Reds
.push_back(180);
160 Default
.Greens
.push_back(238);
161 Default
.Blues
.push_back(180);
162 Default
.Reds
.push_back(80);
163 Default
.Greens
.push_back(80);
164 Default
.Blues
.push_back(80);
165 Default
.Reds
.push_back(235);
166 Default
.Greens
.push_back(235);
167 Default
.Blues
.push_back(235);
168 Default
.Reds
.push_back(0);
169 Default
.Greens
.push_back(255);
170 Default
.Blues
.push_back(255);
171 Default
.Reds
.push_back(180);
172 Default
.Greens
.push_back(238);
173 Default
.Blues
.push_back(180);
174 Default
.Reds
.push_back(155);
175 Default
.Greens
.push_back(205);
176 Default
.Blues
.push_back(155);
177 Default
.Reds
.push_back(0);
178 Default
.Greens
.push_back(255);
179 Default
.Blues
.push_back(255);
180 Default
.Reds
.push_back(180);
181 Default
.Greens
.push_back(238);
182 Default
.Blues
.push_back(180);
183 Default
.Reds
.push_back(155);
184 Default
.Greens
.push_back(205);
185 Default
.Blues
.push_back(155);
186 Default
.Reds
.push_back(0);
187 Default
.Greens
.push_back(255);
188 Default
.Blues
.push_back(255);
189 Default
.Reds
.push_back(180);
190 Default
.Greens
.push_back(238);
191 Default
.Blues
.push_back(180);
192 Default
.Reds
.push_back(155);
193 Default
.Greens
.push_back(205);
194 Default
.Blues
.push_back(155);
195 Default
.Reds
.push_back(0);
196 Default
.Greens
.push_back(255);
197 Default
.Blues
.push_back(255);
198 Default
.Reds
.push_back(180);
199 Default
.Greens
.push_back(238);
200 Default
.Blues
.push_back(180);
201 Default
.Reds
.push_back(155);
202 Default
.Greens
.push_back(205);
203 Default
.Blues
.push_back(155);
204 Default
.Reds
.push_back(0);
205 Default
.Greens
.push_back(255);
206 Default
.Blues
.push_back(255);
207 Default
.Reds
.push_back(180);
208 Default
.Greens
.push_back(238);
209 Default
.Blues
.push_back(180);
210 Default
.Reds
.push_back(155);
211 Default
.Greens
.push_back(205);
212 Default
.Blues
.push_back(155);
213 Default
.Reds
.push_back(0);
214 Default
.Greens
.push_back(255);
215 Default
.Blues
.push_back(255);
216 Default
.Reds
.push_back(180);
217 Default
.Greens
.push_back(238);
218 Default
.Blues
.push_back(180);
219 Default
.Reds
.push_back(155);
220 Default
.Greens
.push_back(205);
221 Default
.Blues
.push_back(155);
222 Default
.Reds
.push_back(0);
223 Default
.Greens
.push_back(255);
224 Default
.Blues
.push_back(255);
225 Default
.Reds
.push_back(180);
226 Default
.Greens
.push_back(238);
227 Default
.Blues
.push_back(180);
228 Default
.Reds
.push_back(155);
229 Default
.Greens
.push_back(205);
230 Default
.Blues
.push_back(155);
231 Default
.Reds
.push_back(0);
232 Default
.Greens
.push_back(255);
233 Default
.Blues
.push_back(255);
234 Default
.Reds
.push_back(180);
235 Default
.Greens
.push_back(238);
236 Default
.Blues
.push_back(180);
237 Default
.Reds
.push_back(155);
238 Default
.Greens
.push_back(205);
239 Default
.Blues
.push_back(155);
240 Default
.Reds
.push_back(0);
241 Default
.Greens
.push_back(255);
242 Default
.Blues
.push_back(255);
243 Default
.Reds
.push_back(180);
244 Default
.Greens
.push_back(238);
245 Default
.Blues
.push_back(180);
246 Default
.Reds
.push_back(155);
247 Default
.Greens
.push_back(205);
248 Default
.Blues
.push_back(155);
249 Default
.Reds
.push_back(0);
250 Default
.Greens
.push_back(255);
251 Default
.Blues
.push_back(255);
252 Default
.Reds
.push_back(180);
253 Default
.Greens
.push_back(238);
254 Default
.Blues
.push_back(180);
255 Default
.Reds
.push_back(155);
256 Default
.Greens
.push_back(205);
257 Default
.Blues
.push_back(155);
258 Default
.Reds
.push_back(0);
259 Default
.Greens
.push_back(255);
260 Default
.Blues
.push_back(255);
261 Default
.Reds
.push_back(180);
262 Default
.Greens
.push_back(238);
263 Default
.Blues
.push_back(180);
264 Default
.Reds
.push_back(155);
265 Default
.Greens
.push_back(205);
266 Default
.Blues
.push_back(155);
267 Default
.Reds
.push_back(0);
268 Default
.Greens
.push_back(255);
269 Default
.Blues
.push_back(255);
270 Default
.Reds
.push_back(180);
271 Default
.Greens
.push_back(238);
272 Default
.Blues
.push_back(180);
273 Default
.Reds
.push_back(155);
274 Default
.Greens
.push_back(205);
275 Default
.Blues
.push_back(155);
276 Default
.Reds
.push_back(0);
277 Default
.Greens
.push_back(255);
278 Default
.Blues
.push_back(255);
279 Default
.Reds
.push_back(180);
280 Default
.Greens
.push_back(238);
281 Default
.Blues
.push_back(180);
282 Default
.Reds
.push_back(155);
283 Default
.Greens
.push_back(205);
284 Default
.Blues
.push_back(155);
285 Default
.Reds
.push_back(0);
286 Default
.Greens
.push_back(255);
287 Default
.Blues
.push_back(255);
288 Default
.Reds
.push_back(180);
289 Default
.Greens
.push_back(238);
290 Default
.Blues
.push_back(180);
291 Default
.Reds
.push_back(155);
292 Default
.Greens
.push_back(205);
293 Default
.Blues
.push_back(155);
294 Default
.Reds
.push_back(0);
295 Default
.Greens
.push_back(255);
296 Default
.Blues
.push_back(255);
297 Default
.Reds
.push_back(180);
298 Default
.Greens
.push_back(238);
299 Default
.Blues
.push_back(180);
300 Default
.Reds
.push_back(155);
301 Default
.Greens
.push_back(205);
302 Default
.Blues
.push_back(155);
303 Default
.Reds
.push_back(0);
304 Default
.Greens
.push_back(255);
305 Default
.Blues
.push_back(255);
306 Default
.Reds
.push_back(180);
307 Default
.Greens
.push_back(238);
308 Default
.Blues
.push_back(180);
309 Default
.Reds
.push_back(155);
310 Default
.Greens
.push_back(205);
311 Default
.Blues
.push_back(155);
312 Default
.Reds
.push_back(0);
313 Default
.Greens
.push_back(255);
314 Default
.Blues
.push_back(255);
315 Default
.Reds
.push_back(180);
316 Default
.Greens
.push_back(238);
317 Default
.Blues
.push_back(180);
318 Default
.Reds
.push_back(155);
319 Default
.Greens
.push_back(205);
320 Default
.Blues
.push_back(155);
321 Default
.Reds
.push_back(0);
322 Default
.Greens
.push_back(255);
323 Default
.Blues
.push_back(255);
324 Default
.Reds
.push_back(180);
325 Default
.Greens
.push_back(238);
326 Default
.Blues
.push_back(180);
327 Default
.Reds
.push_back(155);
328 Default
.Greens
.push_back(205);
329 Default
.Blues
.push_back(155);
330 Default
.Reds
.push_back(0);
331 Default
.Greens
.push_back(255);
332 Default
.Blues
.push_back(255);
333 Default
.Reds
.push_back(180);
334 Default
.Greens
.push_back(238);
335 Default
.Blues
.push_back(180);
336 Default
.Reds
.push_back(155);
337 Default
.Greens
.push_back(205);
338 Default
.Blues
.push_back(155);
339 Default
.Reds
.push_back(0);
340 Default
.Greens
.push_back(255);
341 Default
.Blues
.push_back(255);
342 Default
.Reds
.push_back(180);
343 Default
.Greens
.push_back(238);
344 Default
.Blues
.push_back(180);
345 Default
.Reds
.push_back(155);
346 Default
.Greens
.push_back(205);
347 Default
.Blues
.push_back(155);
348 Default
.Reds
.push_back(0);
349 Default
.Greens
.push_back(255);
350 Default
.Blues
.push_back(255);
351 Default
.Reds
.push_back(180);
352 Default
.Greens
.push_back(238);
353 Default
.Blues
.push_back(180);
354 Default
.Reds
.push_back(155);
355 Default
.Greens
.push_back(205);
356 Default
.Blues
.push_back(155);
357 Default
.Reds
.push_back(0);
358 Default
.Greens
.push_back(255);
359 Default
.Blues
.push_back(255);
360 Default
.Reds
.push_back(180);
361 Default
.Greens
.push_back(238);
362 Default
.Blues
.push_back(180);
363 Default
.Reds
.push_back(155);
364 Default
.Greens
.push_back(205);
365 Default
.Blues
.push_back(155);
366 Default
.Reds
.push_back(0);
367 Default
.Greens
.push_back(255);
368 Default
.Blues
.push_back(255);
369 Default
.Reds
.push_back(180);
370 Default
.Greens
.push_back(238);
371 Default
.Blues
.push_back(180);
372 Default
.Reds
.push_back(155);
373 Default
.Greens
.push_back(205);
374 Default
.Blues
.push_back(155);
375 Default
.Reds
.push_back(0);
376 Default
.Greens
.push_back(255);
377 Default
.Blues
.push_back(255);
378 Default
.Reds
.push_back(180);
379 Default
.Greens
.push_back(238);
380 Default
.Blues
.push_back(180);
381 Default
.Reds
.push_back(155);
382 Default
.Greens
.push_back(205);
383 Default
.Blues
.push_back(155);
384 Default
.Reds
.push_back(0);
385 Default
.Greens
.push_back(255);
386 Default
.Blues
.push_back(255);
387 Default
.Reds
.push_back(180);
388 Default
.Greens
.push_back(238);
389 Default
.Blues
.push_back(180);
390 Default
.Reds
.push_back(155);
391 Default
.Greens
.push_back(205);
392 Default
.Blues
.push_back(155);
393 Default
.Reds
.push_back(0);
394 Default
.Greens
.push_back(255);
395 Default
.Blues
.push_back(255);
396 Default
.Reds
.push_back(180);
397 Default
.Greens
.push_back(238);
398 Default
.Blues
.push_back(180);
399 Default
.Reds
.push_back(155);
400 Default
.Greens
.push_back(205);
401 Default
.Blues
.push_back(155);
402 Default
.Reds
.push_back(0);
403 Default
.Greens
.push_back(255);
404 Default
.Blues
.push_back(255);
405 Default
.Reds
.push_back(180);
406 Default
.Greens
.push_back(238);
407 Default
.Blues
.push_back(180);
408 Default
.Reds
.push_back(155);
409 Default
.Greens
.push_back(205);
410 Default
.Blues
.push_back(155);
411 Default
.Reds
.push_back(0);
412 Default
.Greens
.push_back(255);
413 Default
.Blues
.push_back(255);
414 Default
.Reds
.push_back(180);
415 Default
.Greens
.push_back(238);
416 Default
.Blues
.push_back(180);
417 Default
.Reds
.push_back(155);
418 Default
.Greens
.push_back(205);
419 Default
.Blues
.push_back(155);
420 Default
.Reds
.push_back(0);
421 Default
.Greens
.push_back(255);
422 Default
.Blues
.push_back(255);
423 Default
.Reds
.push_back(180);
424 Default
.Greens
.push_back(238);
425 Default
.Blues
.push_back(180);
426 Default
.Reds
.push_back(155);
427 Default
.Greens
.push_back(205);
428 Default
.Blues
.push_back(155);
429 Default
.Reds
.push_back(0);
430 Default
.Greens
.push_back(255);
431 Default
.Blues
.push_back(255);
432 Default
.Reds
.push_back(180);
433 Default
.Greens
.push_back(238);
434 Default
.Blues
.push_back(180);
435 Default
.Reds
.push_back(155);
436 Default
.Greens
.push_back(205);
437 Default
.Blues
.push_back(155);
438 Default
.Reds
.push_back(0);
439 Default
.Greens
.push_back(255);
440 Default
.Blues
.push_back(255);
441 Default
.Reds
.push_back(180);
442 Default
.Greens
.push_back(238);
443 Default
.Blues
.push_back(180);
444 Default
.Reds
.push_back(155);
445 Default
.Greens
.push_back(205);
446 Default
.Blues
.push_back(155);
447 Default
.Reds
.push_back(0);
448 Default
.Greens
.push_back(255);
449 Default
.Blues
.push_back(255);
450 Default
.Reds
.push_back(180);
451 Default
.Greens
.push_back(238);
452 Default
.Blues
.push_back(180);
453 Default
.Reds
.push_back(155);
454 Default
.Greens
.push_back(205);
455 Default
.Blues
.push_back(155);
456 Default
.Reds
.push_back(0);
457 Default
.Greens
.push_back(255);
458 Default
.Blues
.push_back(255);
459 Default
.Reds
.push_back(180);
460 Default
.Greens
.push_back(238);
461 Default
.Blues
.push_back(180);
462 Default
.Reds
.push_back(155);
463 Default
.Greens
.push_back(205);
464 Default
.Blues
.push_back(155);
465 Default
.Reds
.push_back(0);
466 Default
.Greens
.push_back(255);
467 Default
.Blues
.push_back(255);
468 Default
.Reds
.push_back(255);
469 Default
.Greens
.push_back(0);
470 Default
.Blues
.push_back(0);
471 Default
.Reds
.push_back(255);
472 Default
.Greens
.push_back(255);
473 Default
.Blues
.push_back(0);
474 Default
.Reds
.push_back(0);
475 Default
.Greens
.push_back(200);
476 Default
.Blues
.push_back(0);
477 Default
.Reds
.push_back(255);
478 Default
.Greens
.push_back(0);
479 Default
.Blues
.push_back(0);
480 Default
.Reds
.push_back(255);
481 Default
.Greens
.push_back(255);
482 Default
.Blues
.push_back(0);
483 Default
.Reds
.push_back(0);
484 Default
.Greens
.push_back(200);
485 Default
.Blues
.push_back(0);
486 Default
.Reds
.push_back(255);
487 Default
.Greens
.push_back(0);
488 Default
.Blues
.push_back(0);
489 Default
.Reds
.push_back(255);
490 Default
.Greens
.push_back(255);
491 Default
.Blues
.push_back(0);
492 Default
.Reds
.push_back(0);
493 Default
.Greens
.push_back(200);
494 Default
.Blues
.push_back(0);
495 Default
.Reds
.push_back(255);
496 Default
.Greens
.push_back(0);
497 Default
.Blues
.push_back(0);
498 Default
.Reds
.push_back(255);
499 Default
.Greens
.push_back(255);
500 Default
.Blues
.push_back(0);
501 Default
.Reds
.push_back(0);
502 Default
.Greens
.push_back(200);
503 Default
.Blues
.push_back(0);
504 Default
.Reds
.push_back(255);
505 Default
.Greens
.push_back(0);
506 Default
.Blues
.push_back(0);
507 Default
.Reds
.push_back(255);
508 Default
.Greens
.push_back(255);
509 Default
.Blues
.push_back(0);
510 Default
.Reds
.push_back(0);
511 Default
.Greens
.push_back(200);
512 Default
.Blues
.push_back(0);
513 Default
.Reds
.push_back(255);
514 Default
.Greens
.push_back(0);
515 Default
.Blues
.push_back(0);
516 Default
.Reds
.push_back(255);
517 Default
.Greens
.push_back(255);
518 Default
.Blues
.push_back(0);
519 Default
.Reds
.push_back(0);
520 Default
.Greens
.push_back(200);
521 Default
.Blues
.push_back(0);
522 Default
.Reds
.push_back(255);
523 Default
.Greens
.push_back(0);
524 Default
.Blues
.push_back(0);
525 Default
.Reds
.push_back(255);
526 Default
.Greens
.push_back(255);
527 Default
.Blues
.push_back(0);
528 Default
.Reds
.push_back(0);
529 Default
.Greens
.push_back(0);
530 Default
.Blues
.push_back(0);
531 Default
.Reds
.push_back(0);
532 Default
.Greens
.push_back(0);
533 Default
.Blues
.push_back(0);
534 Default
.Reds
.push_back(0);
535 Default
.Greens
.push_back(0);
536 Default
.Blues
.push_back(0);
537 Default
.Reds
.push_back(0);
538 Default
.Greens
.push_back(0);
539 Default
.Blues
.push_back(0);
540 Default
.Reds
.push_back(0);
541 Default
.Greens
.push_back(0);
542 Default
.Blues
.push_back(0);
543 Default
.Reds
.push_back(0);
544 Default
.Greens
.push_back(0);
545 Default
.Blues
.push_back(0);
546 Default
.Reds
.push_back(0);
547 Default
.Greens
.push_back(0);
548 Default
.Blues
.push_back(0);
549 Default
.Reds
.push_back(0);
550 Default
.Greens
.push_back(0);
551 Default
.Blues
.push_back(0);
552 Default
.Reds
.push_back(80);
553 Default
.Greens
.push_back(80);
554 Default
.Blues
.push_back(80);
555 Default
.Reds
.push_back(255);
556 Default
.Greens
.push_back(255);
557 Default
.Blues
.push_back(255);
558 Default
.Reds
.push_back(135);
559 Default
.Greens
.push_back(206);
560 Default
.Blues
.push_back(255);
561 Default
.Reds
.push_back(255);
562 Default
.Greens
.push_back(174);
563 Default
.Blues
.push_back(185);
564 Default
.Reds
.push_back(255);
565 Default
.Greens
.push_back(187);
566 Default
.Blues
.push_back(255);
567 Default
.Reds
.push_back(135);
568 Default
.Greens
.push_back(206);
569 Default
.Blues
.push_back(255);
570 Default
.Reds
.push_back(255);
571 Default
.Greens
.push_back(174);
572 Default
.Blues
.push_back(185);
573 Default
.Reds
.push_back(255);
574 Default
.Greens
.push_back(187);
575 Default
.Blues
.push_back(255);
576 Default
.Reds
.push_back(135);
577 Default
.Greens
.push_back(206);
578 Default
.Blues
.push_back(255);
579 Default
.Reds
.push_back(255);
580 Default
.Greens
.push_back(174);
581 Default
.Blues
.push_back(185);
582 Default
.Reds
.push_back(255);
583 Default
.Greens
.push_back(187);
584 Default
.Blues
.push_back(255);
585 Default
.Reds
.push_back(135);
586 Default
.Greens
.push_back(206);
587 Default
.Blues
.push_back(255);
588 Default
.Reds
.push_back(255);
589 Default
.Greens
.push_back(174);
590 Default
.Blues
.push_back(185);
591 Default
.Reds
.push_back(255);
592 Default
.Greens
.push_back(187);
593 Default
.Blues
.push_back(255);
594 Default
.Reds
.push_back(135);
595 Default
.Greens
.push_back(206);
596 Default
.Blues
.push_back(255);
597 Default
.Reds
.push_back(255);
598 Default
.Greens
.push_back(174);
599 Default
.Blues
.push_back(185);
600 Default
.Reds
.push_back(255);
601 Default
.Greens
.push_back(187);
602 Default
.Blues
.push_back(255);
603 Default
.Reds
.push_back(135);
604 Default
.Greens
.push_back(206);
605 Default
.Blues
.push_back(255);
606 Default
.Reds
.push_back(255);
607 Default
.Greens
.push_back(174);
608 Default
.Blues
.push_back(185);
609 Default
.Reds
.push_back(255);
610 Default
.Greens
.push_back(187);
611 Default
.Blues
.push_back(255);
612 Default
.Reds
.push_back(135);
613 Default
.Greens
.push_back(206);
614 Default
.Blues
.push_back(255);
615 Default
.Reds
.push_back(255);
616 Default
.Greens
.push_back(174);
617 Default
.Blues
.push_back(185);
618 Default
.Reds
.push_back(255);
619 Default
.Greens
.push_back(187);
620 Default
.Blues
.push_back(255);
621 Default
.Reds
.push_back(135);
622 Default
.Greens
.push_back(206);
623 Default
.Blues
.push_back(255);
624 Default
.Reds
.push_back(255);
625 Default
.Greens
.push_back(174);
626 Default
.Blues
.push_back(185);
627 Default
.Reds
.push_back(255);
628 Default
.Greens
.push_back(187);
629 Default
.Blues
.push_back(255);
630 Default
.Reds
.push_back(135);
631 Default
.Greens
.push_back(206);
632 Default
.Blues
.push_back(255);
633 Default
.Reds
.push_back(255);
634 Default
.Greens
.push_back(174);
635 Default
.Blues
.push_back(185);
636 Default
.Reds
.push_back(255);
637 Default
.Greens
.push_back(187);
638 Default
.Blues
.push_back(255);
639 Default
.Reds
.push_back(135);
640 Default
.Greens
.push_back(206);
641 Default
.Blues
.push_back(255);
642 Default
.Reds
.push_back(255);
643 Default
.Greens
.push_back(174);
644 Default
.Blues
.push_back(185);
645 Default
.Reds
.push_back(255);
646 Default
.Greens
.push_back(187);
647 Default
.Blues
.push_back(255);
648 Default
.Reds
.push_back(135);
649 Default
.Greens
.push_back(206);
650 Default
.Blues
.push_back(255);
651 Default
.Reds
.push_back(255);
652 Default
.Greens
.push_back(174);
653 Default
.Blues
.push_back(185);
654 Default
.Reds
.push_back(255);
655 Default
.Greens
.push_back(187);
656 Default
.Blues
.push_back(255);
657 Default
.Reds
.push_back(135);
658 Default
.Greens
.push_back(206);
659 Default
.Blues
.push_back(255);
660 Default
.Reds
.push_back(255);
661 Default
.Greens
.push_back(174);
662 Default
.Blues
.push_back(185);
663 Default
.Reds
.push_back(255);
664 Default
.Greens
.push_back(187);
665 Default
.Blues
.push_back(255);
666 Default
.Reds
.push_back(135);
667 Default
.Greens
.push_back(206);
668 Default
.Blues
.push_back(255);
669 Default
.Reds
.push_back(255);
670 Default
.Greens
.push_back(174);
671 Default
.Blues
.push_back(185);
672 Default
.Reds
.push_back(255);
673 Default
.Greens
.push_back(187);
674 Default
.Blues
.push_back(255);
675 Default
.Reds
.push_back(135);
676 Default
.Greens
.push_back(206);
677 Default
.Blues
.push_back(255);
678 Default
.Reds
.push_back(255);
679 Default
.Greens
.push_back(174);
680 Default
.Blues
.push_back(185);
681 Default
.Reds
.push_back(255);
682 Default
.Greens
.push_back(187);
683 Default
.Blues
.push_back(255);
684 Default
.Reds
.push_back(135);
685 Default
.Greens
.push_back(206);
686 Default
.Blues
.push_back(255);
687 Default
.Reds
.push_back(255);
688 Default
.Greens
.push_back(174);
689 Default
.Blues
.push_back(185);
690 Default
.Reds
.push_back(255);
691 Default
.Greens
.push_back(187);
692 Default
.Blues
.push_back(255);
693 Default
.Reds
.push_back(135);
694 Default
.Greens
.push_back(206);
695 Default
.Blues
.push_back(255);
696 Default
.Reds
.push_back(255);
697 Default
.Greens
.push_back(174);
698 Default
.Blues
.push_back(185);
699 Default
.Reds
.push_back(255);
700 Default
.Greens
.push_back(187);
701 Default
.Blues
.push_back(255);
702 Default
.Reds
.push_back(135);
703 Default
.Greens
.push_back(206);
704 Default
.Blues
.push_back(255);
705 Default
.Reds
.push_back(255);
706 Default
.Greens
.push_back(174);
707 Default
.Blues
.push_back(185);
708 Default
.Reds
.push_back(255);
709 Default
.Greens
.push_back(187);
710 Default
.Blues
.push_back(255);
711 Default
.Reds
.push_back(135);
712 Default
.Greens
.push_back(206);
713 Default
.Blues
.push_back(255);
714 Default
.Reds
.push_back(255);
715 Default
.Greens
.push_back(174);
716 Default
.Blues
.push_back(185);
717 Default
.Reds
.push_back(255);
718 Default
.Greens
.push_back(187);
719 Default
.Blues
.push_back(255);
720 Default
.Reds
.push_back(135);
721 Default
.Greens
.push_back(206);
722 Default
.Blues
.push_back(255);
723 Default
.Reds
.push_back(255);
724 Default
.Greens
.push_back(174);
725 Default
.Blues
.push_back(185);
726 Default
.Reds
.push_back(255);
727 Default
.Greens
.push_back(187);
728 Default
.Blues
.push_back(255);
729 Default
.Reds
.push_back(135);
730 Default
.Greens
.push_back(206);
731 Default
.Blues
.push_back(255);
732 Default
.Reds
.push_back(255);
733 Default
.Greens
.push_back(174);
734 Default
.Blues
.push_back(185);
735 Default
.Reds
.push_back(255);
736 Default
.Greens
.push_back(187);
737 Default
.Blues
.push_back(255);
738 Default
.Reds
.push_back(135);
739 Default
.Greens
.push_back(206);
740 Default
.Blues
.push_back(255);
741 Default
.Reds
.push_back(255);
742 Default
.Greens
.push_back(174);
743 Default
.Blues
.push_back(185);
744 Default
.Reds
.push_back(255);
745 Default
.Greens
.push_back(187);
746 Default
.Blues
.push_back(255);
747 Default
.Reds
.push_back(135);
748 Default
.Greens
.push_back(206);
749 Default
.Blues
.push_back(255);
750 Default
.Reds
.push_back(255);
751 Default
.Greens
.push_back(174);
752 Default
.Blues
.push_back(185);
753 Default
.Reds
.push_back(255);
754 Default
.Greens
.push_back(187);
755 Default
.Blues
.push_back(255);
756 Default
.Reds
.push_back(135);
757 Default
.Greens
.push_back(206);
758 Default
.Blues
.push_back(255);
759 Default
.Reds
.push_back(255);
760 Default
.Greens
.push_back(174);
761 Default
.Blues
.push_back(185);
762 Default
.Reds
.push_back(255);
763 Default
.Greens
.push_back(187);
764 Default
.Blues
.push_back(255);
765 Default
.Reds
.push_back(135);
766 Default
.Greens
.push_back(206);
767 Default
.Blues
.push_back(255);
768 Default
.Reds
.push_back(255);
769 Default
.Greens
.push_back(174);
770 Default
.Blues
.push_back(185);
771 Default
.Reds
.push_back(255);
772 Default
.Greens
.push_back(187);
773 Default
.Blues
.push_back(255);
774 Default
.Reds
.push_back(135);
775 Default
.Greens
.push_back(206);
776 Default
.Blues
.push_back(255);
777 Default
.Reds
.push_back(255);
778 Default
.Greens
.push_back(174);
779 Default
.Blues
.push_back(185);
780 Default
.Reds
.push_back(255);
781 Default
.Greens
.push_back(187);
782 Default
.Blues
.push_back(255);
783 Default
.Reds
.push_back(135);
784 Default
.Greens
.push_back(206);
785 Default
.Blues
.push_back(255);
786 Default
.Reds
.push_back(255);
787 Default
.Greens
.push_back(174);
788 Default
.Blues
.push_back(185);
789 Default
.Reds
.push_back(255);
790 Default
.Greens
.push_back(187);
791 Default
.Blues
.push_back(255);
792 Default
.Reds
.push_back(135);
793 Default
.Greens
.push_back(206);
794 Default
.Blues
.push_back(255);
795 Default
.Reds
.push_back(255);
796 Default
.Greens
.push_back(174);
797 Default
.Blues
.push_back(185);
798 Default
.Reds
.push_back(255);
799 Default
.Greens
.push_back(187);
800 Default
.Blues
.push_back(255);
801 Default
.Reds
.push_back(135);
802 Default
.Greens
.push_back(206);
803 Default
.Blues
.push_back(255);
804 Default
.Reds
.push_back(255);
805 Default
.Greens
.push_back(174);
806 Default
.Blues
.push_back(185);
807 Default
.Reds
.push_back(255);
808 Default
.Greens
.push_back(187);
809 Default
.Blues
.push_back(255);
810 Default
.Reds
.push_back(135);
811 Default
.Greens
.push_back(206);
812 Default
.Blues
.push_back(255);
813 Default
.Reds
.push_back(255);
814 Default
.Greens
.push_back(174);
815 Default
.Blues
.push_back(185);
816 Default
.Reds
.push_back(255);
817 Default
.Greens
.push_back(187);
818 Default
.Blues
.push_back(255);
819 Default
.Reds
.push_back(135);
820 Default
.Greens
.push_back(206);
821 Default
.Blues
.push_back(255);
822 Default
.Reds
.push_back(255);
823 Default
.Greens
.push_back(174);
824 Default
.Blues
.push_back(185);
825 Default
.Reds
.push_back(255);
826 Default
.Greens
.push_back(187);
827 Default
.Blues
.push_back(255);
828 Default
.Reds
.push_back(135);
829 Default
.Greens
.push_back(206);
830 Default
.Blues
.push_back(255);
831 Default
.Reds
.push_back(255);
832 Default
.Greens
.push_back(174);
833 Default
.Blues
.push_back(185);
834 Default
.Reds
.push_back(255);
835 Default
.Greens
.push_back(187);
836 Default
.Blues
.push_back(255);
837 Default
.Reds
.push_back(135);
838 Default
.Greens
.push_back(206);
839 Default
.Blues
.push_back(255);
840 Default
.Reds
.push_back(255);
841 Default
.Greens
.push_back(174);
842 Default
.Blues
.push_back(185);
843 Default
.Reds
.push_back(255);
844 Default
.Greens
.push_back(187);
845 Default
.Blues
.push_back(255);
846 Default
.Reds
.push_back(135);
847 Default
.Greens
.push_back(206);
848 Default
.Blues
.push_back(255);
849 Default
.Reds
.push_back(255);
850 Default
.Greens
.push_back(174);
851 Default
.Blues
.push_back(185);
852 Default
.Reds
.push_back(255);
853 Default
.Greens
.push_back(187);
854 Default
.Blues
.push_back(255);
855 Default
.Reds
.push_back(135);
856 Default
.Greens
.push_back(206);
857 Default
.Blues
.push_back(255);
858 Default
.Reds
.push_back(0);
859 Default
.Greens
.push_back(255);
860 Default
.Blues
.push_back(0);
861 Default
.Reds
.push_back(240);
862 Default
.Greens
.push_back(240);
863 Default
.Blues
.push_back(0);
864 Default
.Reds
.push_back(255);
865 Default
.Greens
.push_back(0);
866 Default
.Blues
.push_back(0);
870 void CColourIO::XML_Escape(std::string
*Text
, bool Attribute
) {
871 // The XML "W3C Recommendation" is here: http://www.w3.org/TR/REC-xml
873 std::string
& Input
= *Text
; // Makes syntax less fiddly below
875 for(unsigned int i
= 0; i
< Text
->size(); i
++) {
876 // & and < need escaping in XML. In one rare circumstance >
877 // needs escaping too. I'll always do it, as I'm allowed to.
878 if(Input
[i
] == '&') {
879 Input
.replace(i
, 1, "&");
882 if(Input
[i
] == '<') {
883 Input
.replace(i
, 1, "<");
886 if(Input
[i
] == '>') {
887 Input
.replace(i
, 1, ">");
890 // " and ' might need escaping inside attributes, I'll do them all.
891 if(Attribute
== false)
894 if(Input
[i
] == '\'') {
895 Input
.replace(i
, 1, "'");
898 if(Input
[i
] == '"') {
899 Input
.replace(i
, 1, """);
905 // Below here handlers for the Expat XML input library
906 ////////////////////////////////////////////////////////////////////////////////////
908 void CColourIO::XML_StartElement(void *userData
, const expat::XML_Char
*name
, const expat::XML_Char
**atts
) {
909 CColourIO
*Me
= (CColourIO
*) userData
;
913 if(strcmp(name
, "palette") == 0) {
915 Me
->InputInfo
= NewInfo
;
916 Me
->InputInfo
.Mutable
= Me
->LoadMutable
;
918 if(strcmp(*atts
, "name") == 0) {
920 Me
->InputInfo
.ColourID
= *atts
;
927 if(strcmp(name
, "colour") == 0) {
929 if(strcmp(*atts
, "r") == 0) {
931 Me
->InputInfo
.Reds
.push_back(atoi(*atts
));
934 if(strcmp(*atts
, "g") == 0) {
936 Me
->InputInfo
.Greens
.push_back(atoi(*atts
));
939 if(strcmp(*atts
, "b") == 0) {
941 Me
->InputInfo
.Blues
.push_back(atoi(*atts
));
949 void CColourIO::XML_EndElement(void *userData
, const expat::XML_Char
*name
) {
950 CColourIO
*Me
= (CColourIO
*) userData
;
952 if(strcmp(name
, "palette") == 0) {
953 Me
->Colours
[Me
->InputInfo
.ColourID
] = Me
->InputInfo
;
958 void CColourIO::XML_CharacterData(void *userData
, const expat::XML_Char
*s
, int len
) {
959 // CAREFUL: s points to a string which is NOT null-terminated.
961 CColourIO
*Me
= (CColourIO
*) userData
;
963 Me
->CData
.append(s
, len
);