public void MappingStart(string anchor, string tag) { var node = new YMapping(new YTag(tag)); CurrentNode.Add(node); nodeStack.Push(node); SetAnchor(anchor, node); }
private static void GenerateSubTypeEvents(IntPtr pNativeEmitter, YMapping node, IDictionary <YNode, string> aliases, string anchor, HashSet <YNode> visited) { const int IMPLICIT = 1; GenerateEvent(pNativeEmitter, x => CreateEventMappingStart((YamlEvent *)x, anchor, node.Tag.Value, IMPLICIT, YamlMappingStyle.YAML_ANY_MAPPING_STYLE)); foreach (var pair in node.Mapping) { GenerateNodeEvents(pNativeEmitter, pair.Key, aliases, visited); GenerateNodeEvents(pNativeEmitter, pair.Value, aliases, visited); } GenerateEvent(pNativeEmitter, x => CreateEventMappingEnd((YamlEvent *)x)); }
private static void AliasTest() { var repeatNode = new YMapping(new Dictionary <YScalar, YNode> { { "f", new YSequence(new YScalar("g"), new YScalar("h")) }, { "i", new YScalar("jk") } }); var doc = new YDocument( new YMapping(new Dictionary <YScalar, YNode> { { "x", new YSequence(new YScalar("a"), new YScalar("b"), repeatNode) }, { "y", repeatNode }, { "z", repeatNode } }) ); string yaml = Yaml.Dump(doc); Console.WriteLine(yaml); }
private YMapping GetMappingValueDependent(ITokenizer tokenizer) { switch (tokenizer.Current.Value.Kind) { case TokenKind.Indent when tokenizer.Current.Next?.Value.Kind == TokenKind.MappingKey: { var mappingNode = new YMapping(tokenizer.Current.Value.IndentLevel); var items = new YKeyValueList(); tokenizer.MoveNext(); while (tokenizer.Current.Value.Kind == TokenKind.MappingKey) { var keyValueNode = this.ParseMappingKey(tokenizer); items.AddNode(keyValueNode); } while (tokenizer.Current.Value.Kind == TokenKind.Unindent) { tokenizer.MoveNext(); } mappingNode.Add(items.ToNodes()); return(mappingNode); } case TokenKind.MappingValue: { var mappingNode = new YMapping(tokenizer.Current.Value.IndentLevel); tokenizer.MoveNext(); var value = this.GetNodeValue(tokenizer); mappingNode.Add(value); return(mappingNode); } case TokenKind.Indent when tokenizer.Current.Next?.Next?.Value.Kind == TokenKind.MappingValue: { var mappingNode = new YMapping(tokenizer.Current.Value.IndentLevel); var items = new YKeyValueList(); tokenizer.MoveNext(); // Добавлеяем элементы в список do { var keyValueNode = this.ParseMappingKey(tokenizer); items.AddNode(keyValueNode); } while (tokenizer.Current.Value.Kind != TokenKind.Unindent && tokenizer.Current.Value.Kind != TokenKind.Eof && tokenizer.Current.Value.Kind != TokenKind.Indent && tokenizer.Current.Value.IndentLevel >= mappingNode.IndentLevel); // Удаляем ненужные отступы while (tokenizer.Current.Value.Kind == TokenKind.Unindent) { tokenizer.MoveNext(); } // Проверяем уровень вложенности if (tokenizer.Current.Value.IndentLevel != 0 && tokenizer.Current.Value.Kind == TokenKind.Indent) { while (tokenizer.Current.Value.IndentLevel == mappingNode.IndentLevel && tokenizer.Current.Value.Kind != TokenKind.Eof) { if (tokenizer.Current.Value.Kind == TokenKind.Indent) { tokenizer.MoveNext(); } var keyValueNode = this.ParseMappingKey(tokenizer); items.AddNode(keyValueNode); } } mappingNode.Add(items.ToNodes()); return(mappingNode); } case TokenKind.MappingBegin: { var mappingNode = new YMapping(tokenizer.Current.Value.IndentLevel); var items = new YKeyValueList(); tokenizer.MoveNext(); do { if (tokenizer.Current.Value.Kind == TokenKind.MappingEnd) { break; } var keyValueNode = this.ParseMappingKey(tokenizer); items.AddNode(keyValueNode); } while (tokenizer.Current.Value.Kind == TokenKind.ItemDelimiter && tokenizer.MoveNext()); if (tokenizer.Current.Value.Kind != TokenKind.MappingEnd) { throw ParseException.UnexpectedToken(tokenizer, TokenKind.MappingEnd); } tokenizer.MoveNext(); mappingNode.Add(items.ToNodes()); return(mappingNode); } default: return(null); } }
private static void GenerateSubTypeEvents(IntPtr pNativeEmitter, YMapping node, IDictionary<YNode, string> aliases, string anchor, HashSet<YNode> visited) { const int IMPLICIT = 1; GenerateEvent(pNativeEmitter, x => CreateEventMappingStart((YamlEvent*)x, anchor, node.Tag.Value, IMPLICIT, YamlMappingStyle.YAML_ANY_MAPPING_STYLE)); foreach (var pair in node.Mapping) { GenerateNodeEvents(pNativeEmitter, pair.Key, aliases, visited); GenerateNodeEvents(pNativeEmitter, pair.Value, aliases, visited); } GenerateEvent(pNativeEmitter, x => CreateEventMappingEnd((YamlEvent*)x)); }