/// <summary> /// Lee los juegos del archivo /// </summary> public LibraryPgnModel Read(string fileName, System.Text.Encoding encoding = null) { LibraryPgnModel library = new LibraryPgnModel(); // Abre el archivo Open(fileName, encoding); // Recoge la lista de juegos using (IEnumerator <SentenceBaseModel> sentenceEnumerator = Reader.Read().GetEnumerator()) { SentenceBaseModel lastSentence = null; // Lee los juegos do { lastSentence = ReadGame(sentenceEnumerator, library); }while (!(lastSentence is SentenceEndModel) && !(lastSentence is SentenceErrorModel)); // Añade el error a la librería if (lastSentence != null && lastSentence is SentenceErrorModel error) { library.Errors.Add(error.Content); } } // Cierra el archivo Close(); // Ajusta las jugadas foreach (GamePgnModel game in library.Games) { AdjustTurnPlay(game.Movements); } // Devuelve la librería return(library); }
/// <summary> /// Convierte la librería de jugadas /// </summary> public LibraryModel Convert(LibraryPgnModel libraryPgn) { LibraryModel library = new LibraryModel(); // Convierte los juegos foreach (GamePgnModel gamePgn in libraryPgn.Games) { library.Games.Add(ConvertGame(gamePgn)); } // Devuelve la librería convertida return(library); }
/// <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); }