Files
Mementos/Unity/Alternate Genre Jam/Assets/Ink/InkLibs/InkCompiler/InkParser/InkParser_CommandLineInput.cs
2021-06-30 21:39:19 +10:00

130 lines
3.4 KiB
C#

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;
}
}