Example #1
0
        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);
        }
Example #2
0
 public TraitParser() : base($"^ /('trait' /s+) /({REGEX_VARIABLE})")
 {
     bodyParser      = new TraitBodyParser();
     doesParser      = new DoesParser();
     endOfLineParser = new EndOfLineParser();
     traits          = new List <string>();
 }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
 public MaybeParser() : base($"^ /(|tabs| 'maybe' /s*) /({REGEX_VARIABLE}) /(/s* '=' /s*)")
 {
     freeParser      = new FreeParser();
     endOfLineParser = new EndOfLineParser();
 }