/// <summary> /// Lee los datos del juego /// </summary> private SentenceBaseModel ReadGame(IEnumerator <SentenceBaseModel> sentenceEnumerator, LibraryPgnModel library) { SentenceBaseModel lastSentence = null; // Lee el juego do { GamePgnModel game = new GamePgnModel(); // Guarda la etiqueta leída como última sentencia de la partida anterior if (lastSentence != null && lastSentence is SentenceTagModel sentenceTag) { game.Headers.Add(new HeaderPgnModel(sentenceTag.Tag, sentenceTag.Content)); } // Lee las cabeceras lastSentence = ReadHeaders(sentenceEnumerator, game); // Añade los moviemientos if (lastSentence is SentenceTurnNumberModel) { // Lee los movimientos lastSentence = ReadMovements(sentenceEnumerator, lastSentence, game.Movements); // Añade el juego library.Games.Add(game); } else { lastSentence = new SentenceErrorModel("Can't find game movements"); } }while (!(lastSentence is SentenceEndModel) && !(lastSentence is SentenceErrorModel)); // Devuelve el juego creado return(lastSentence); }
/// <summary> /// Convierte los datos de una partida /// </summary> private GameModel ConvertGame(GamePgnModel gamePgn) { GameModel game = new GameModel(); // Convierte las etiquetas ConvertTags(game, gamePgn.Headers); // Añade los comentarios foreach (string comment in gamePgn.Comments) { game.Comments.Add(comment); } //// Depuración //#if DEBUG // System.Diagnostics.Debug.WriteLine(""); // System.Diagnostics.Debug.WriteLine(new string('=', 80)); // System.Diagnostics.Debug.WriteLine("Game"); // foreach (HeaderPgnModel header in gamePgn.Headers) // System.Diagnostics.Debug.WriteLine($"[{header.Tag}: {header.Content}]"); // System.Diagnostics.Debug.WriteLine(""); //#endif // Convierte los movimientos try { game.Variation.Movements.AddRange(ConvertMovements(game.Board, gamePgn.Movements)); } catch (Exception exception) { game.ParseError = $"Error when convert movements: {exception.Message}"; //#if DEBUG // System.Diagnostics.Debug.WriteLine(new string('#', 80)); // System.Diagnostics.Debug.WriteLine($"Error when convert movements: {exception.Message}"); // System.Diagnostics.Debug.WriteLine(new string('#', 80)); //#endif } // Devuelve la partida return(game); }
/// <summary> /// Lee las cabeceras /// </summary> private SentenceBaseModel ReadHeaders(IEnumerator <SentenceBaseModel> sentenceEnumerator, GamePgnModel game) { SentenceBaseModel sentence = GetNextSentence(sentenceEnumerator); // Obtiene las cabeceras do { // Trata la sentencia switch (sentence) { case SentenceTagModel sentenceTag: game.Headers.Add(new HeaderPgnModel(sentenceTag.Tag, sentenceTag.Content)); break; case SentenceCommentModel sentenceComment: game.Comments.Add(sentenceComment.Content); break; } // Pasa a la siguiente sentencia sentence = GetNextSentence(sentenceEnumerator); }while (!(sentence is SentenceEndModel) && !(sentence is SentenceErrorModel) && !(sentence is SentenceTurnNumberModel)); // Devuelve la última sentencia leída return(sentence); }