417 {
418 array<ref CfgParam> param_parent = new array<ref CfgParam>;
419
421
422 array<int> a = new array<int>;
423 array<int> b = new array<int>;
424
425 int pos_a = 0;
426 int pos_b = 0;
427 int element = 0;
428 int value_start = 0;
429 int value_end = 0;
430
431 while ( pos_a > -1 || pos_b > -1 )
432 {
434 if ( pos_a > -1 )
435 {
436 a.Insert(pos_a);
437 pos_a++;
438 }
439
441 if ( pos_b > -1 )
442 {
443 b.Insert(pos_b);
444 pos_b++;
445 }
446 }
447
448 pos_a = 0;
449 pos_b = 0;
450
451 for ( pos_a = 0; pos_a < a.Count(); ++pos_a )
452 {
453 if ( a.Get(pos_a) > b.Get(pos_b) )
454 {
455 element--;
456
457 if ( element <= 1 )
458 {
459 value_end = b.Get(pos_b) - value_start + 1;
460
461
462
463 strings.Insert( param_value.
Substring(value_start, value_end) );
464
465 value_start = b.Get(pos_b) + 1;
466 }
467
468 pos_a--;
469 pos_b++;
470 }
471 else if ( a.Get(pos_a) < b.Get(pos_b) )
472 {
473 if ( pos_a == a.Count() - 1 && pos_b < b.Count() - 1 )
474 {
475 element--;
476
477 if ( element == 0 )
478 {
479 value_end = b.Get(pos_b) - value_start;
480
481
482
483 strings.Insert( param_value.
Substring(value_start + 1, value_end) );
484
485 value_start = b.Get(pos_b) + 1;
486 }
487
488 pos_a--;
489 pos_b++;
490 }
491 else
492 {
493 element++;
494
495 if ( element == 2 )
496 {
497 value_start = a.Get(pos_a);
498 }
499 }
500 }
501 }
502
503
504
505 if ( strings.Count() == 0 )
506 {
507
508
509 string param_value_content = param_value.
Substring(1, param_value.
Length() - 2);
510
511
512
513 param_value_content.
Split(
",", strings);
514 }
515
516 for ( int i = 0; i < strings.Count(); ++i )
517 {
518 string str = strings.Get(i);
519
520
521
523
524 param_parent.Insert(param);
525 }
526
527 return param_parent;
528 }
CfgParam ParseText(string text)
class array< Class T > TStringArray
proto native int Length()
Returns length of string.
void Split(string sample, out array< string > output)
Splits string into array of strings separated by 'sample'.
proto string Substring(int start, int len)
Substring of 'str' from 'start' position 'len' number of characters.
proto native int IndexOfFrom(int start, string sample)
Finds 'sample' in 'str' from 'start' position. Returns -1 when not found.