Example #1
0
        public static ElData Parse(ElTokenizer tokenizer)
        {
            while (tokenizer.Current.Kind == ElTokenizer.NewLineTokenKind)
            {
                tokenizer.MoveNext();
            }

            var rt = new ElData();

            if (tokenizer.Current.Kind == ElTokenizer.IdentifierTokenKind)
            {
                rt.Name = tokenizer.Current.Text;
                tokenizer.MoveNext();
            }

            if (tokenizer.Current.Kind == ElTokenizer.BeginChildrenTokenKind)
            {
                rt.Children = tokenizer.TakeWhile(_ => _.Kind != ElTokenizer.EndChildrenTokenKind)
                              .Select(_ => Parse(tokenizer))
                              .ToList();
                tokenizer.MoveNext(ElTokenizer.EndChildrenTokenKind);
            }
            else
            {
                rt.Values = tokenizer.StartWith(tokenizer.Current)
                            .TakeWhile(_ => _.Kind != ElTokenizer.NewLineTokenKind && _.Kind != ElTokenizer.EndChildrenTokenKind)
                            .Select(_ => _.Text)
                            .ToList();
            }

            return(rt);
        }
Example #2
0
        public static ElData Parse(ElTokenizer tokenizer)
        {
            while (tokenizer.Current.Kind == ElTokenizer.NewLineTokenKind)
                tokenizer.MoveNext();

            var rt = new ElData();

            if (tokenizer.Current.Kind == ElTokenizer.IdentifierTokenKind)
            {
                rt.Name = tokenizer.Current.Text;
                tokenizer.MoveNext();
            }

            if (tokenizer.Current.Kind == ElTokenizer.BeginChildrenTokenKind)
            {
                rt.Children = tokenizer.TakeWhile(_ => _.Kind != ElTokenizer.EndChildrenTokenKind)
                                   .Select(_ => Parse(tokenizer))
                                   .ToList();
                tokenizer.MoveNext(ElTokenizer.EndChildrenTokenKind);
            }
            else
                rt.Values = tokenizer.StartWith(tokenizer.Current)
                                     .TakeWhile(_ => _.Kind != ElTokenizer.NewLineTokenKind && _.Kind != ElTokenizer.EndChildrenTokenKind)
                                     .Select(_ => _.Text)
                                     .ToList();

            return rt;
        }