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,112 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Ink
|
||||
{
|
||||
public partial class InkParser
|
||||
{
|
||||
// Handles both newline and endOfFile
|
||||
protected object EndOfLine()
|
||||
{
|
||||
return OneOf(Newline, EndOfFile);
|
||||
}
|
||||
|
||||
// Allow whitespace before the actual newline
|
||||
protected object Newline()
|
||||
{
|
||||
Whitespace();
|
||||
|
||||
bool gotNewline = ParseNewline () != null;
|
||||
|
||||
// Optional \r, definite \n to support Windows (\r\n) and Mac/Unix (\n)
|
||||
|
||||
if( !gotNewline ) {
|
||||
return null;
|
||||
} else {
|
||||
return ParseSuccess;
|
||||
}
|
||||
}
|
||||
|
||||
protected object EndOfFile()
|
||||
{
|
||||
Whitespace();
|
||||
|
||||
if (!endOfInput)
|
||||
return null;
|
||||
|
||||
return ParseSuccess;
|
||||
}
|
||||
|
||||
|
||||
// General purpose space, returns N-count newlines (fails if no newlines)
|
||||
protected object MultilineWhitespace()
|
||||
{
|
||||
List<object> newlines = OneOrMore(Newline);
|
||||
if (newlines == null)
|
||||
return null;
|
||||
|
||||
// Use content field of Token to say how many newlines there were
|
||||
// (in most circumstances it's unimportant)
|
||||
int numNewlines = newlines.Count;
|
||||
if (numNewlines >= 1) {
|
||||
return ParseSuccess;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
protected object Whitespace()
|
||||
{
|
||||
if( ParseCharactersFromCharSet(_inlineWhitespaceChars) != null ) {
|
||||
return ParseSuccess;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected ParseRule Spaced(ParseRule rule)
|
||||
{
|
||||
return () => {
|
||||
|
||||
Whitespace ();
|
||||
|
||||
var result = ParseObject(rule);
|
||||
if (result == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Whitespace ();
|
||||
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
||||
protected object AnyWhitespace ()
|
||||
{
|
||||
bool anyWhitespace = false;
|
||||
while (OneOf (Whitespace, MultilineWhitespace) != null) {
|
||||
anyWhitespace = true;
|
||||
}
|
||||
return anyWhitespace ? ParseSuccess : null;
|
||||
}
|
||||
|
||||
protected ParseRule MultiSpaced (ParseRule rule)
|
||||
{
|
||||
return () => {
|
||||
|
||||
AnyWhitespace ();
|
||||
|
||||
var result = ParseObject (rule);
|
||||
if (result == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
AnyWhitespace ();
|
||||
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
||||
private CharacterSet _inlineWhitespaceChars = new CharacterSet(" \t");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user