public async Task <List <INode> > ParseAsync(XmlReader reader, IParsingContext parsingContext) { var context = new BlockParentParsingContext(); await elementParser.ParseAsync(reader, parsingContext, context, Settings); if (context.Nodes.Count == 0) { parsingContext.LogError(reader, "Elemento filho era esperado."); } return(context.Nodes); }
public async Task ParseAsync(XmlReader reader, IParsingContext parsingContext, IParentParsingContext parentParsingContext) { var myContext = new BlockParentParsingContext(); await elementParser.ParseAsync(reader, parsingContext, myContext, Settings); if (myContext.Nodes.Count == 0) { parsingContext.LogError(reader, "Elemento filho era esperado."); return; } var block = parsingContext.BlockFactory.Create(myContext.Nodes, myContext.While); var node = new BlockNode(block, myContext.When); parentParsingContext.AddNode(node); }
public async Task ParseAsync(XmlReader reader, IParsingContext parsingContext, IParentParsingContext parentParsingContext) { var myContext = new BlockParentParsingContext(); await elementParser.ParseAsync(reader, parsingContext, myContext, Settings); var parsedText = myContext.ParsedText; if (parsedText is null) { return; } if (parsedText.Length == 0) { parsingContext.LogError(reader, "Era esperado o nome do personagem."); return; } if (reader.ReadState == ReadState.EndOfFile) { return; } await elementParser.ParseAsync(reader, parsingContext, myContext, AggregationSettings); if (myContext.Nodes.Count == 0) { return; } if (parsingContext.SceneContext.HasMood) { parsingContext.LogError(reader, "Foi definido humor mas não foi definida uma fala ou pensamento correspondente."); return; } myContext.Nodes.Insert(0, InitializeMoodNode); myContext.Nodes.Add(DismissMoodNode); var block = parsingContext.BlockFactory.Create(myContext.Nodes); var node = new PersonNode(parsedText, block); parentParsingContext.AddNode(node); }
public async Task ParseAsync(XmlReader reader, IParsingContext parsingContext, IParentParsingContext parentParsingContext) { var myContext = new BlockParentParsingContext(); await elementParser.ParseAsync(reader, parsingContext, myContext, Settings); if (reader.ReadState != ReadState.EndOfFile) { await elementParser.ParseAsync(reader, parsingContext, myContext, AggregationSettings); } var nonPauseNodes = new Stack <INode>(); for (var n = myContext.Nodes.Count - 1; n >= 0; n--) { var currentNode = myContext.Nodes[n]; if (currentNode is IPauseNode) { break; } nonPauseNodes.Push(currentNode); myContext.Nodes.RemoveAt(n); } if (myContext.Nodes.Count == 0) { parsingContext.LogError(reader, "Era esperado um elemento filho."); return; } var block = parsingContext.BlockFactory.Create(myContext.Nodes); var node = new BalloonNode(childParser.BalloonType, block); parentParsingContext.AddNode(node); while (nonPauseNodes.TryPop(out var nonPauseNode)) { parentParsingContext.AddNode(nonPauseNode); } return; }