Options.cs
上传用户:huiyue
上传日期:2022-04-08
资源大小:1429k
文件大小:6k
源码类别:

搜索引擎

开发平台:

ASP/ASPX

  1. //
  2. // Options.cs
  3. //
  4. // Author: Rafael Teixeira (rafaelteixeirabr@hotmail.com)
  5. //
  6. // (C) 2002 Rafael Teixeira
  7. //
  8. //
  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:
  16. // 
  17. // The above copyright notice and this permission notice shall be
  18. // included in all copies or substantial portions of the Software.
  19. // 
  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.
  27. //
  28. using System;
  29. using System.Collections;
  30. namespace Mono.GetOptions
  31. {
  32. public delegate void ErrorReporter (int num, string msg);
  33. public class Options
  34. {
  35. public OptionsParsingMode ParsingMode;
  36. public bool BreakSingleDashManyLettersIntoManyOptions;
  37. public bool EndOptionProcessingWithDoubleDash;
  38. public bool DontSplitOnCommas;
  39. public ErrorReporter ReportError;
  40. private OptionList optionParser;
  41. public Options() : this(null) {}
  42. public Options(string[] args) : this(args, OptionsParsingMode.Both, false, true, false, null) {}
  43. public Options(string[] args, 
  44.    OptionsParsingMode parsingMode, 
  45.    bool breakSingleDashManyLettersIntoManyOptions, 
  46.    bool endOptionProcessingWithDoubleDash,
  47.    bool dontSplitOnCommas) : 
  48. this(args, OptionsParsingMode.Both, false, true, false, null) {}
  49. public Options(string[] args, 
  50.    OptionsParsingMode parsingMode, 
  51.    bool breakSingleDashManyLettersIntoManyOptions, 
  52.    bool endOptionProcessingWithDoubleDash,
  53.    bool dontSplitOnCommas,
  54.    ErrorReporter reportError)
  55. {
  56. ParsingMode = parsingMode;
  57. BreakSingleDashManyLettersIntoManyOptions = breakSingleDashManyLettersIntoManyOptions;
  58. EndOptionProcessingWithDoubleDash = endOptionProcessingWithDoubleDash;
  59. DontSplitOnCommas = dontSplitOnCommas;
  60. if (reportError == null)
  61. ReportError = new ErrorReporter(DefaultErrorReporter);
  62. else
  63. ReportError = reportError;
  64. InitializeOtherDefaults();
  65. if (args != null)
  66. ProcessArgs(args);
  67. }
  68. protected virtual void InitializeOtherDefaults() { } // Only subclasses may need to implement something here
  69. public bool RunningOnWindows {
  70. get {
  71. // check for non-Unix platforms - see FAQ for more details
  72. // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
  73. int platform = (int) Environment.OSVersion.Platform;
  74. return ((platform != 4) && (platform != 128));
  75. }
  76. }
  77. #region non-option arguments
  78. private ArrayList arguments = new ArrayList();
  79. public string[] RemainingArguments;
  80. [ArgumentProcessor]
  81. public virtual void DefaultArgumentProcessor(string argument)
  82. {
  83. arguments.Add(argument);
  84. }
  85. public string FirstArgument  { get { return (arguments.Count > 0)?(string)arguments[0]:null; } }
  86. public string SecondArgument { get { return (arguments.Count > 1)?(string)arguments[1]:null; } }
  87. public string ThirdArgument  { get { return (arguments.Count > 2)?(string)arguments[2]:null; } }
  88. public string FourthArgument { get { return (arguments.Count > 3)?(string)arguments[3]:null; } }
  89. public string FifthArgument  { get { return (arguments.Count > 4)?(string)arguments[4]:null; } }
  90. public bool GotNoArguments { get { return arguments.Count == 0; }  }
  91. #endregion
  92. public void ProcessArgs(string[] args)
  93. {
  94. optionParser = new OptionList(this);
  95. optionParser.AdditionalBannerInfo = AdditionalBannerInfo;
  96. optionParser.ProcessArgs(args);
  97. RemainingArguments = (string[])arguments.ToArray(typeof(string));
  98. }
  99. private static void DefaultErrorReporter (int number, string message)
  100. {
  101. if (number > 0)
  102. Console.WriteLine("Error {0}: {1}", number, message);
  103. else
  104. Console.WriteLine("Error: {0}", message);
  105. }
  106. public virtual string AdditionalBannerInfo { get { return null; } }
  107. public void ShowBanner()
  108. {
  109. optionParser.ShowBanner();
  110. }
  111. [Option("Show this help list", '?', "help")]
  112. public virtual WhatToDoNext DoHelp()
  113. {
  114. return optionParser.DoHelp();
  115. }
  116. [Option("Show an additional help list", "help2")]
  117. public virtual WhatToDoNext DoHelp2()
  118. {
  119. return optionParser.DoHelp2();
  120. }
  121. [Option("Display version and licensing information", 'V', "version")]
  122. public virtual WhatToDoNext DoAbout()
  123. {
  124. return optionParser.DoAbout();
  125. }
  126. [Option("Show usage syntax and exit", "usage")]
  127. public virtual WhatToDoNext DoUsage()
  128. {
  129. return optionParser.DoUsage();
  130. }
  131. private bool verboseParsingOfOptions = false;
  132. [Option("Show verbose parsing of options", '.', "verbosegetoptions", SecondLevelHelp = true)]
  133. public bool VerboseParsingOfOptions
  134. {
  135. set { verboseParsingOfOptions = value; }
  136. get { return verboseParsingOfOptions; }
  137. }
  138. private bool debuggingOfOptions = false;
  139. [Option("Show debugging info while processing options", '~', "debugoptions", SecondLevelHelp = true)]
  140. public bool DebuggingOfOptions
  141. {
  142. set { 
  143. debuggingOfOptions = value; 
  144. if (value) {
  145. Console.WriteLine("ParsingMode = {0}", ParsingMode);
  146. Console.WriteLine("BreakSingleDashManyLettersIntoManyOptions = {0}", BreakSingleDashManyLettersIntoManyOptions);
  147. Console.WriteLine("EndOptionProcessingWithDoubleDash = {0}", EndOptionProcessingWithDoubleDash);
  148. Console.WriteLine("DontSplitOnCommas = {0}", DontSplitOnCommas);
  149. }
  150. }
  151. get { return debuggingOfOptions; }
  152. }
  153. }
  154. }