/src/lib/cli/internal/clarg_or.e

http://github.com/tybor/Liberty · Specman e · 137 lines · 97 code · 17 blank · 23 comment · 5 complexity · 5c242e240d846226ffe59edb5f1aede4 MD5 · raw file

  1. -- This file is part of a Liberty Eiffel library.
  2. -- See the full copyright at the end.
  3. --
  4. class CLARG_OR
  5. inherit
  6. COMMAND_LINE_ARGUMENT
  7. redefine
  8. infix "or", infix "or else"
  9. end
  10. create {COMMAND_LINE_ARGUMENT}
  11. make
  12. feature {ANY}
  13. is_repeatable: BOOLEAN False
  14. infix "or", infix "or else" (other: COMMAND_LINE_ARGUMENT): COMMAND_LINE_ARGUMENT
  15. do
  16. args.add_last(other)
  17. Result := Current
  18. end
  19. is_set: BOOLEAN
  20. is_mandatory: BOOLEAN
  21. do
  22. Result := args.for_all(agent {COMMAND_LINE_ARGUMENT}.is_mandatory)
  23. end
  24. is_set_at (context: COMMAND_LINE_CONTEXT): BOOLEAN
  25. do
  26. Result := args.exists(agent {COMMAND_LINE_ARGUMENT}.is_set_at(context))
  27. end
  28. feature {COMMAND_LINE_ARGUMENTS, COMMAND_LINE_ARGUMENT}
  29. prepare_parse
  30. do
  31. is_set := False
  32. args.for_each(agent {COMMAND_LINE_ARGUMENT}.prepare_parse)
  33. end
  34. parse_command_line (context: COMMAND_LINE_CONTEXT): COMMAND_LINE_CONTEXT
  35. local
  36. i: INTEGER
  37. do
  38. from
  39. Result := args.first.parse_command_line(context)
  40. if Result.is_parsed then
  41. is_set := args.first.is_set
  42. else
  43. undo_parse(Result)
  44. end
  45. i := args.lower + 1
  46. until
  47. is_set or else i > args.upper
  48. loop
  49. Result := args.item(i).parse_command_line(context)
  50. if Result.is_parsed then
  51. is_set := args.item(i).is_set
  52. else
  53. undo_parse(Result)
  54. end
  55. i := i + 1
  56. end
  57. end
  58. usage_summary (stream: OUTPUT_STREAM)
  59. local
  60. i: INTEGER
  61. do
  62. stream.put_character('[')
  63. from
  64. i := args.lower
  65. until
  66. i > args.upper
  67. loop
  68. if i > args.lower then
  69. stream.put_character('|')
  70. end
  71. args.item(i).usage_summary(stream)
  72. i := i + 1
  73. end
  74. stream.put_character(']')
  75. detailed := False
  76. end
  77. usage_details (stream: OUTPUT_STREAM)
  78. do
  79. if not detailed then
  80. args.for_each(agent {COMMAND_LINE_ARGUMENT}.usage_details(stream))
  81. detailed := True
  82. end
  83. end
  84. undo_parse (context: COMMAND_LINE_CONTEXT)
  85. do
  86. args.for_each(agent {COMMAND_LINE_ARGUMENT}.undo_parse(context))
  87. end
  88. feature {}
  89. args: FAST_ARRAY[COMMAND_LINE_ARGUMENT]
  90. make (a_left, a_right: COMMAND_LINE_ARGUMENT)
  91. require
  92. a_left /= Void
  93. a_right /= Void
  94. do
  95. args := {FAST_ARRAY[COMMAND_LINE_ARGUMENT] << a_left, a_right >> }
  96. end
  97. detailed: BOOLEAN
  98. invariant
  99. args.count >= 2
  100. end -- class CLARG_OR
  101. --
  102. -- Copyright (C) 2009-2017: by all the people cited in the AUTHORS file.
  103. --
  104. -- Permission is hereby granted, free of charge, to any person obtaining a copy
  105. -- of this software and associated documentation files (the "Software"), to deal
  106. -- in the Software without restriction, including without limitation the rights
  107. -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  108. -- copies of the Software, and to permit persons to whom the Software is
  109. -- furnished to do so, subject to the following conditions:
  110. --
  111. -- The above copyright notice and this permission notice shall be included in
  112. -- all copies or substantial portions of the Software.
  113. --
  114. -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  115. -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  116. -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  117. -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  118. -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  119. -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  120. -- THE SOFTWARE.