private static IEnumerable <KeyValueSyntax> GetAllKeys(this TableSyntaxBase table)
        {
            foreach (var item in table.Items)
            {
                yield return(item);
            }

            foreach (var sub in table.Items.OfType <TableSyntax>().SelectMany(GetAllKeys))
            {
                yield return(sub);
            }
        }
        public KeyValueSyntax GetOrCreateConfig([NotNull] TableSyntaxBase t, [NotNull] string key)
        {
            var kvs = GetConfig(t, key);

            if (kvs != null)
            {
                return(kvs);
            }

            kvs = new KeyValueSyntax(key, new BareKeySyntax());
            t.Items.Add(kvs);

            return(kvs);
        }
        public DocumentSyntax Run()
        {
            var doc = new DocumentSyntax();

            _diagnostics = doc.Diagnostics;

            _currentTable = null;
            _hideNewLine  = true;
            NextToken();
            while (TryParseTableEntry(out var itemEntry))
            {
                if (itemEntry == null)
                {
                    continue;
                }

                if (itemEntry is TableSyntaxBase table)
                {
                    _currentTable = table;
                    AddToListAndUpdateSpan(doc.Tables, table);
                }
                else if (_currentTable == null)
                {
                    AddToListAndUpdateSpan(doc.KeyValues, (KeyValueSyntax)itemEntry);
                }
                else
                {
                    // Otherwise, we know that we can only have a key-value
                    AddToListAndUpdateSpan(_currentTable.Items, (KeyValueSyntax)itemEntry);
                }
            }

            if (_currentTable != null)
            {
                Close(_currentTable);
                _currentTable = null;
            }
            Close(doc);

            if (_lexer.HasErrors)
            {
                foreach (var lexerError in _lexer.Errors)
                {
                    Log(lexerError);
                }
            }

            return(doc);
        }
Exemple #4
0
 private static IEnumerable <InsertOperation> MapToInsertOperations(TableSyntaxBase tableSyntax)
 => tableSyntax switch
 {
 public KeyValueSyntax GetConfig([NotNull] TableSyntaxBase table, [NotNull] string key)
 => table.Items
 .FirstOrDefault(kv => kv.Key.Key.ToString().Trim() == key);