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); } }
internal TomlObject AddComments(IHasComments n) { this.AddPreComments(n); this.AddAppComment(n); return(this); }
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."); } }