- namespace Ink
- {
- public partial class InkParser
- {
- // Valid returned objects:
- // - "help"
- // - int: for choice number
- // - Parsed.Divert
- // - Variable declaration/assignment
- // - Epression
- // - Lookup debug source for character offset
- // - Lookup debug source for runtime path
- public CommandLineInput CommandLineUserInput()
- {
- CommandLineInput result = new CommandLineInput ();
- Whitespace ();
- if (ParseString ("help") != null) {
- result.isHelp = true;
- return result;
- }
- if (ParseString ("exit") != null || ParseString ("quit") != null) {
- result.isExit = true;
- return result;
- }
- return (CommandLineInput) OneOf (
- DebugSource,
- DebugPathLookup,
- UserChoiceNumber,
- UserImmediateModeStatement
- );
- }
- CommandLineInput DebugSource ()
- {
- Whitespace ();
- if (ParseString ("DebugSource") == null)
- return null;
- Whitespace ();
- var expectMsg = "character offset in parentheses, e.g. DebugSource(5)";
- if (Expect (String ("("), expectMsg) == null)
- return null;
- Whitespace ();
- int? characterOffset = ParseInt ();
- if (characterOffset == null) {
- Error (expectMsg);
- return null;
- }
- Whitespace ();
- Expect (String (")"), "closing parenthesis");
- var inputStruct = new CommandLineInput ();
- inputStruct.debugSource = characterOffset;
- return inputStruct;
- }
- CommandLineInput DebugPathLookup ()
- {
- Whitespace ();
- if (ParseString ("DebugPath") == null)
- return null;
- if (Whitespace () == null)
- return null;
- var pathStr = Expect (RuntimePath, "path") as string;
- var inputStruct = new CommandLineInput ();
- inputStruct.debugPathLookup = pathStr;
- return inputStruct;
- }
- string RuntimePath ()
- {
- if (_runtimePathCharacterSet == null) {
- _runtimePathCharacterSet = new CharacterSet (identifierCharSet);
- _runtimePathCharacterSet.Add ('-'); // for c-0, g-0 etc
- _runtimePathCharacterSet.Add ('.');
- }
-
- return ParseCharactersFromCharSet (_runtimePathCharacterSet);
- }
- CommandLineInput UserChoiceNumber()
- {
- Whitespace ();
- int? number = ParseInt ();
- if (number == null) {
- return null;
- }
- Whitespace ();
- if (Parse(EndOfLine) == null) {
- return null;
- }
- var inputStruct = new CommandLineInput ();
- inputStruct.choiceInput = number;
- return inputStruct;
- }
- CommandLineInput UserImmediateModeStatement()
- {
- var statement = OneOf (SingleDivert, TempDeclarationOrAssignment, Expression);
- var inputStruct = new CommandLineInput ();
- inputStruct.userImmediateModeStatement = statement;
- return inputStruct;
- }
- CharacterSet _runtimePathCharacterSet;
- }
- }