mirror of
https://github.com/Ratstail91/Mementos.git
synced 2025-11-29 10:34:27 +11:00
Committed everything
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user