public override Verb CreateVerb(string[] tokens) { Color(position, length, KeyWords); var endOfLineParser = new EndOfLineParser(); endOfLineParser.Scan(source, NextPosition); var index = endOfLineParser.Position; if (index == -1) { return(null); } if (GetBlock(source, index, true) is Some <(Block, int)> some) { (var b, var i) = some.Value; overridePosition = i; block = b; block.AutoRegister = false; return(new NullOp()); } return(null); }
public TraitParser() : base($"^ /('trait' /s+) /({REGEX_VARIABLE})") { bodyParser = new TraitBodyParser(); doesParser = new DoesParser(); endOfLineParser = new EndOfLineParser(); traits = new List <string>(); }
public override Verb CreateVerb(string[] tokens) { var sourceRecord = tokens[5]; var oneLine = tokens[2] == "("; Color(position, tokens[1].Length, Whitespaces); Color(tokens[2].Length, Structures); Color(tokens[3].Length, KeyWords); Color(tokens[4].Length, KeyWords); Color(sourceRecord.Length, Variables); var index = NextPosition; var members = new Hash <string, Thunk>(); if (oneLine) { var parser = new OneLineMemberParser(); while (index < source.Length && parser.Scan(source, index)) { members[parser.MemberName] = parser.Thunk; if (freeParser.Scan(source, parser.Position, "^ |sp| ','")) { index = freeParser.Position; continue; } if (freeParser.Scan(source, parser.Position, "^ |sp| ')'")) { overridePosition = freeParser.Position; return(new CreateRecord(members, sourceRecord)); } } } else { var endOfLineParser = new EndOfLineParser(); if (endOfLineParser.Scan(source, index)) { index = endOfLineParser.Position; } AdvanceTabs(); var parser = new MultiLineMemberParser(); while (index < source.Length && parser.Scan(source, index)) { index = parser.Position; members[parser.MemberName] = parser.Thunk; } RegressTabs(); overridePosition = index; return(new CreateRecord(members, sourceRecord)); } return(null); }
protected EndOfLineType matchEndOfLine() { if (NextPosition < source.Length) { var endOfLineParser = new EndOfLineParser(); if (endOfLineParser.Scan(source, NextPosition)) { overridePosition = endOfLineParser.Position; return(EndOfLineType.EndOfLine); } return(EndOfLineType.More); } return(EndOfLineType.EndOfSource); }
public override Verb CreateVerb(string[] tokens) { var moduleName = tokens[2]; Color(position, tokens[1].Length, KeyWords); Color(moduleName.Length, Variables); var endLineParser = new EndOfLineParser(); endLineParser.Scan(source, NextPosition); var index = endLineParser.Position; if (GetBlock(source, index, true).If(out var block, out var i)) { overridePosition = i; return(new CreateNewModule(moduleName, new NewModule(block))); } return(null); }
public MaybeParser() : base($"^ /(|tabs| 'maybe' /s*) /({REGEX_VARIABLE}) /(/s* '=' /s*)") { freeParser = new FreeParser(); endOfLineParser = new EndOfLineParser(); }