Bladeren bron

cmCommandLineArgument now supports OneOrMore argument type

Robert Maynard 4 jaren geleden
bovenliggende
commit
5ab0b54482
1 gewijzigde bestanden met toevoegingen van 18 en 0 verwijderingen
  1. 18 0
      Source/cmCommandLineArgument.h

+ 18 - 0
Source/cmCommandLineArgument.h

@@ -14,6 +14,7 @@ struct cmCommandLineArgument
     One,
     Two,
     ZeroOrOne,
+    OneOrMore
   };
 
   std::string InvalidSyntaxMessage;
@@ -129,6 +130,23 @@ struct cmCommandLineArgument
             : ParseMode::Invalid;
         }
       }
+    } else if (this->Type == Values::OneOrMore) {
+      if (input.size() == this->Name.size()) {
+        auto nextValueIndex = index + 1;
+        if (nextValueIndex >= allArgs.size() || allArgs[index + 1][0] == '-') {
+          parseState = ParseMode::ValueError;
+        } else {
+          std::string buffer = allArgs[nextValueIndex++];
+          while (nextValueIndex < allArgs.size() &&
+                 allArgs[nextValueIndex][0] != '-') {
+            buffer = cmStrCat(buffer, ";", allArgs[nextValueIndex++]);
+          }
+          parseState =
+            this->StoreCall(buffer, std::forward<CallState>(state)...)
+            ? ParseMode::Valid
+            : ParseMode::Invalid;
+        }
+      }
     }
 
     if (parseState == ParseMode::SyntaxError) {