public CommandLineInputResult HandleInput(CommandLineInput inputResult) { var result = new CommandLineInputResult(); // Request for debug source line number if (inputResult.debugSource != null) { var offset = (int)inputResult.debugSource; var dm = DebugMetadataForContentAtOffset(offset); if (dm != null) { result.output = "DebugSource: " + dm.ToString(); } else { result.output = "DebugSource: Unknown source"; } } // Request for runtime path lookup (to line number) else if (inputResult.debugPathLookup != null) { var pathStr = inputResult.debugPathLookup; var contentResult = _runtimeStory.ContentAtPath(new Runtime.Path(pathStr)); var dm = contentResult.obj.debugMetadata; if (dm != null) { result.output = "DebugSource: " + dm.ToString(); } else { result.output = "DebugSource: Unknown source"; } } // User entered some ink else if (inputResult.userImmediateModeStatement != null) { var parsedObj = inputResult.userImmediateModeStatement as Parsed.Object; return(ExecuteImmediateStatement(parsedObj)); } else { return(null); } return(result); }
CommandLineInputResult ExecuteImmediateStatement(Parsed.Object parsedObj) { var result = new CommandLineInputResult(); // Variable assignment: create in Parsed.Story as well as the Runtime.Story // so that we don't get an error message during reference resolution if (parsedObj is Parsed.VariableAssignment) { var varAssign = (Parsed.VariableAssignment)parsedObj; if (varAssign.isNewTemporaryDeclaration) { _parsedStory.TryAddNewVariableDeclaration(varAssign); } } parsedObj.parent = _parsedStory; var runtimeObj = parsedObj.runtimeObject; parsedObj.ResolveReferences(_parsedStory); if (!_parsedStory.hadError) { // Divert if (parsedObj is Parsed.Divert) { var parsedDivert = parsedObj as Parsed.Divert; result.divertedPath = parsedDivert.runtimeDivert.targetPath.ToString(); } // Expression or variable assignment else if (parsedObj is Parsed.Expression || parsedObj is Parsed.VariableAssignment) { var evalResult = _runtimeStory.EvaluateExpression((Runtime.Container)runtimeObj); if (evalResult != null) { result.output = evalResult.ToString(); } } } else { _parsedStory.ResetError(); } return(result); }
public CommandLineInputResult ReadCommandLineInput(string userInput) { var inputParser = new InkParser(userInput); var inputResult = inputParser.CommandLineUserInput(); var result = new CommandLineInputResult(); // Choice if (inputResult.choiceInput != null) { result.choiceIdx = ((int)inputResult.choiceInput) - 1; } // Help else if (inputResult.isHelp) { result.output = "Type a choice number, a divert (e.g. '-> myKnot'), an expression, or a variable assignment (e.g. 'x = 5')"; } // Quit else if (inputResult.isExit) { result.requestsExit = true; } // Request for debug source line number else if (inputResult.debugSource != null) { var offset = (int)inputResult.debugSource; var dm = DebugMetadataForContentAtOffset(offset); if (dm != null) { result.output = "DebugSource: " + dm.ToString(); } else { result.output = "DebugSource: Unknown source"; } } // Request for runtime path lookup (to line number) else if (inputResult.debugPathLookup != null) { var pathStr = inputResult.debugPathLookup; var contentResult = _runtimeStory.ContentAtPath(new Runtime.Path(pathStr)); var dm = contentResult.obj.debugMetadata; if (dm != null) { result.output = "DebugSource: " + dm.ToString(); } else { result.output = "DebugSource: Unknown source"; } } // User entered some ink else if (inputResult.userImmediateModeStatement != null) { var parsedObj = inputResult.userImmediateModeStatement as Parsed.Object; // Variable assignment: create in Parsed.Story as well as the Runtime.Story // so that we don't get an error message during reference resolution if (parsedObj is Parsed.VariableAssignment) { var varAssign = (Parsed.VariableAssignment)parsedObj; if (varAssign.isNewTemporaryDeclaration) { _parsedStory.TryAddNewVariableDeclaration(varAssign); } } parsedObj.parent = _parsedStory; var runtimeObj = parsedObj.runtimeObject; parsedObj.ResolveReferences(_parsedStory); if (!_parsedStory.hadError) { // Divert if (parsedObj is Parsed.Divert) { var parsedDivert = parsedObj as Parsed.Divert; result.divertedPath = parsedDivert.runtimeDivert.targetPath.ToString(); } // Expression or variable assignment else if (parsedObj is Parsed.Expression || parsedObj is Parsed.VariableAssignment) { var evalResult = _runtimeStory.EvaluateExpression((Runtime.Container)runtimeObj); if (evalResult != null) { result.output = evalResult.ToString(); } } } else { _parsedStory.ResetError(); } } else { result.output = "Unexpected input. Type 'help' or a choice number."; } return(result); }