diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Framework/Console/CommandConsole.cs | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/OpenSim/Framework/Console/CommandConsole.cs b/OpenSim/Framework/Console/CommandConsole.cs index 8b63d01..3387013 100644 --- a/OpenSim/Framework/Console/CommandConsole.cs +++ b/OpenSim/Framework/Console/CommandConsole.cs | |||
@@ -26,6 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Xml; | ||
29 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
30 | using System.Diagnostics; | 31 | using System.Diagnostics; |
31 | using System.Reflection; | 32 | using System.Reflection; |
@@ -369,6 +370,155 @@ namespace OpenSim.Framework.Console | |||
369 | 370 | ||
370 | return new string[0]; | 371 | return new string[0]; |
371 | } | 372 | } |
373 | |||
374 | public XmlElement GetXml(XmlDocument doc) | ||
375 | { | ||
376 | CommandInfo help = (CommandInfo)((Dictionary<string, object>)tree["help"])[String.Empty]; | ||
377 | ((Dictionary<string, object>)tree["help"]).Remove(string.Empty); | ||
378 | if (((Dictionary<string, object>)tree["help"]).Count == 0) | ||
379 | tree.Remove("help"); | ||
380 | |||
381 | CommandInfo quit = (CommandInfo)((Dictionary<string, object>)tree["quit"])[String.Empty]; | ||
382 | ((Dictionary<string, object>)tree["quit"]).Remove(string.Empty); | ||
383 | if (((Dictionary<string, object>)tree["quit"]).Count == 0) | ||
384 | tree.Remove("quit"); | ||
385 | |||
386 | XmlElement root = doc.CreateElement("", "HelpTree", ""); | ||
387 | |||
388 | ProcessTreeLevel(tree, root, doc); | ||
389 | |||
390 | if (!tree.ContainsKey("help")) | ||
391 | tree["help"] = (object) new Dictionary<string, object>(); | ||
392 | ((Dictionary<string, object>)tree["help"])[String.Empty] = help; | ||
393 | |||
394 | if (!tree.ContainsKey("quit")) | ||
395 | tree["quit"] = (object) new Dictionary<string, object>(); | ||
396 | ((Dictionary<string, object>)tree["quit"])[String.Empty] = quit; | ||
397 | |||
398 | return root; | ||
399 | } | ||
400 | |||
401 | private void ProcessTreeLevel(Dictionary<string, object> level, XmlElement xml, XmlDocument doc) | ||
402 | { | ||
403 | foreach (KeyValuePair<string, object> kvp in level) | ||
404 | { | ||
405 | if (kvp.Value is Dictionary<string, Object>) | ||
406 | { | ||
407 | XmlElement next = doc.CreateElement("", "Level", ""); | ||
408 | next.SetAttribute("Name", kvp.Key); | ||
409 | |||
410 | xml.AppendChild(next); | ||
411 | |||
412 | ProcessTreeLevel((Dictionary<string, object>)kvp.Value, next, doc); | ||
413 | } | ||
414 | else | ||
415 | { | ||
416 | CommandInfo c = (CommandInfo)kvp.Value; | ||
417 | |||
418 | XmlElement cmd = doc.CreateElement("", "Command", ""); | ||
419 | |||
420 | XmlElement e; | ||
421 | |||
422 | e = doc.CreateElement("", "Module", ""); | ||
423 | cmd.AppendChild(e); | ||
424 | e.AppendChild(doc.CreateTextNode(c.module)); | ||
425 | |||
426 | e = doc.CreateElement("", "Shared", ""); | ||
427 | cmd.AppendChild(e); | ||
428 | e.AppendChild(doc.CreateTextNode(c.shared.ToString())); | ||
429 | |||
430 | e = doc.CreateElement("", "HelpText", ""); | ||
431 | cmd.AppendChild(e); | ||
432 | e.AppendChild(doc.CreateTextNode(c.help_text)); | ||
433 | |||
434 | e = doc.CreateElement("", "LongHelp", ""); | ||
435 | cmd.AppendChild(e); | ||
436 | e.AppendChild(doc.CreateTextNode(c.long_help)); | ||
437 | |||
438 | e = doc.CreateElement("", "Description", ""); | ||
439 | cmd.AppendChild(e); | ||
440 | e.AppendChild(doc.CreateTextNode(c.descriptive_help)); | ||
441 | |||
442 | xml.AppendChild(cmd); | ||
443 | } | ||
444 | } | ||
445 | } | ||
446 | |||
447 | public void FromXml(XmlElement root, CommandDelegate fn) | ||
448 | { | ||
449 | CommandInfo help = (CommandInfo)((Dictionary<string, object>)tree["help"])[String.Empty]; | ||
450 | ((Dictionary<string, object>)tree["help"]).Remove(string.Empty); | ||
451 | if (((Dictionary<string, object>)tree["help"]).Count == 0) | ||
452 | tree.Remove("help"); | ||
453 | |||
454 | CommandInfo quit = (CommandInfo)((Dictionary<string, object>)tree["quit"])[String.Empty]; | ||
455 | ((Dictionary<string, object>)tree["quit"]).Remove(string.Empty); | ||
456 | if (((Dictionary<string, object>)tree["quit"]).Count == 0) | ||
457 | tree.Remove("quit"); | ||
458 | |||
459 | tree.Clear(); | ||
460 | |||
461 | ReadTreeLevel(tree, root, fn); | ||
462 | |||
463 | if (!tree.ContainsKey("help")) | ||
464 | tree["help"] = (object) new Dictionary<string, object>(); | ||
465 | ((Dictionary<string, object>)tree["help"])[String.Empty] = help; | ||
466 | |||
467 | if (!tree.ContainsKey("quit")) | ||
468 | tree["quit"] = (object) new Dictionary<string, object>(); | ||
469 | ((Dictionary<string, object>)tree["quit"])[String.Empty] = quit; | ||
470 | } | ||
471 | |||
472 | private void ReadTreeLevel(Dictionary<string, object> level, XmlNode node, CommandDelegate fn) | ||
473 | { | ||
474 | Dictionary<string, object> next; | ||
475 | string name; | ||
476 | |||
477 | XmlNodeList nodeL = node.ChildNodes; | ||
478 | XmlNodeList cmdL; | ||
479 | CommandInfo c; | ||
480 | |||
481 | foreach (XmlNode part in nodeL) | ||
482 | { | ||
483 | switch (part.Name) | ||
484 | { | ||
485 | case "Level": | ||
486 | name = ((XmlElement)part).GetAttribute("Name"); | ||
487 | next = new Dictionary<string, object>(); | ||
488 | level[name] = next; | ||
489 | ReadTreeLevel(next, part, fn); | ||
490 | break; | ||
491 | case "Command": | ||
492 | cmdL = part.ChildNodes; | ||
493 | c = new CommandInfo(); | ||
494 | foreach (XmlNode cmdPart in cmdL) | ||
495 | { | ||
496 | switch (cmdPart.Name) | ||
497 | { | ||
498 | case "Module": | ||
499 | c.module = cmdPart.InnerText; | ||
500 | break; | ||
501 | case "Shared": | ||
502 | c.shared = Convert.ToBoolean(cmdPart.InnerText); | ||
503 | break; | ||
504 | case "HelpText": | ||
505 | c.help_text = cmdPart.InnerText; | ||
506 | break; | ||
507 | case "LongHelp": | ||
508 | c.long_help = cmdPart.InnerText; | ||
509 | break; | ||
510 | case "Description": | ||
511 | c.descriptive_help = cmdPart.InnerText; | ||
512 | break; | ||
513 | } | ||
514 | } | ||
515 | c.fn = new List<CommandDelegate>(); | ||
516 | c.fn.Add(fn); | ||
517 | level[String.Empty] = c; | ||
518 | break; | ||
519 | } | ||
520 | } | ||
521 | } | ||
372 | } | 522 | } |
373 | 523 | ||
374 | public class Parser | 524 | public class Parser |