5 // Joel Reed (joelwreed@gmail.com)
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 using System
.Collections
;
31 using System
.Collections
.Generic
;
33 using System
.Reflection
;
36 public class CommandRegistry
38 static SortedList
<string, System
.Type
> commands
= new SortedList
<string, System
.Type
>();
39 static SortedList
<string, CommandAttribute
> commandAttributes
= new SortedList
<string, CommandAttribute
>();
41 static CommandRegistry()
43 Assembly assembly
= Assembly
.GetAssembly(typeof(CommandRegistry
));
44 Type commandType
= typeof(Command
);
46 System
.Type
[] types
= assembly
.GetTypes();
47 foreach (Type t
in types
)
49 if (t
.BaseType
!= commandType
) continue;
50 CommandAttribute
[] attributes
= t
.GetCustomAttributes(typeof(CommandAttribute
), false) as CommandAttribute
[];
51 foreach (CommandAttribute attribute
in attributes
)
53 commands
.Add(attribute
.Name
, t
);
54 if (!String
.IsNullOrEmpty(attribute
.Alias
))
55 commands
.Add(attribute
.Alias
, t
);
57 commandAttributes
.Add(attribute
.Name
, attribute
);
62 static public System
.Type
GetCommandType(string name
)
64 System
.Type t
= commands
[name
];
68 static public void ShowHelp()
70 foreach (CommandAttribute attribute
in commandAttributes
.Values
)
72 Console
.Write(" " + attribute
.Name
);
73 if (!String
.IsNullOrEmpty(attribute
.Alias
)) Console
.Write(" (alias {0})", attribute
.Alias
);
76 string description
= attribute
.Description
;
79 while (x
< description
.Length
)
81 int y
= Math
.Min(x
+ 60, description
.Length
);
82 int z
= description
.IndexOf(' ', y
) + 1;
83 if (z
== 0) z
= description
.Length
;
85 Console
.WriteLine(" " + description
.Substring(x
, z
- x
));