예제 #1
0
        private static TomlTable CreateStandardTable(TomlTable.RootTable root, StandardTableNode table, IHasComments comments)
        {
            var      keySegments = table.Key.SyntaxNode().GetSegments();
            KeyChain chain       = KeyChain.FromSegments(keySegments);

            if (chain.IsEmpty)
            {
                throw new InvalidOperationException("Empty TOML key is not allowed.");
            }

            TomlTable  owner    = FindOrCreateOwnerTableForTable(root, chain, out TomlKey last);
            TomlObject existing = owner.TryGetValue(last);

            if (existing != null)
            {
                throw new InvalidOperationException($"Cannot define table with key '{chain}' as the owner already " +
                                                    $"contains a row for key '{last}' of type '{existing.ReadableTypeName}'.");
            }
            else
            {
                TomlTable newTable = new TomlTable(root);
                owner.AddRow(last, newTable);
                newTable.AddComments(comments);
                return(newTable);
            }
        }
예제 #2
0
파일: TomlObject.cs 프로젝트: zanedp/Nett
 internal TomlObject AddComments(IHasComments n)
 {
     this.AddPreComments(n);
     this.AddAppComment(n);
     return(this);
 }
예제 #3
0
        private static TomlTable CreateTableArray(TomlTable.RootTable root, TableArrayNode tableArray, IHasComments comments)
        {
            System.Collections.Generic.IEnumerable <TerminalNode> keySegments = tableArray.Key.SyntaxNode().GetSegments();
            KeyChain chain = KeyChain.FromSegments(keySegments);

            if (chain.IsEmpty)
            {
                throw new InvalidOperationException("Empty TOML key is not allowed.");
            }

            TomlTable  owner    = FindOrCreateOwnerTableForTableArray(root, chain, out TomlKey last);
            TomlObject existing = owner.TryGetValue(last);

            if (existing != null && existing is TomlTableArray existingArray)
            {
                TomlTable newTable = new TomlTable(root);
                existingArray.Add(newTable);
                newTable.AddComments(comments);
                return(newTable);
            }
            else if (existing == null)
            {
                TomlTableArray newTableArray = new TomlTableArray(root);
                owner.AddRow(last, newTableArray);
                TomlTable newTable = new TomlTable(root);
                newTable.AddComments(comments);
                newTableArray.Add(newTable);
                return(newTable);
            }
            else
            {
                throw new InvalidOperationException($"Cannot define table array '{last}' as an object of type "
                                                    + $"'{existing.ReadableTypeName}' exists already.");
            }
        }