aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2023-01-15 08:26:49 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2023-01-15 08:26:49 +0100
commit52c2fd4521d33616514dc2a43ad1ee432ce16275 (patch)
treeb8a59aeab25285a4547d393e58675981cc212960 /src
parentef75681956ae842cbf1b2b357374aa34e3361448 (diff)
Debug PGN parsing from a string. Add the ParseSANMoves() function. Add a new tests set
Diffstat (limited to 'src')
-rw-r--r--src/LargeFileStream.cpp3
-rw-r--r--src/PGN.cpp9
-rw-r--r--src/PGN.hpp8
3 files changed, 19 insertions, 1 deletions
diff --git a/src/LargeFileStream.cpp b/src/LargeFileStream.cpp
index 3ae1ce2..099c013 100644
--- a/src/LargeFileStream.cpp
+++ b/src/LargeFileStream.cpp
@@ -37,8 +37,9 @@ char LargeFileStream::operator[](loctype loc) {
if (use_string) {
if (loc >= content.size()) {
eof = true;
+ return ('?');
}
- return ('?');
+ return (content[loc]);
}
// Goto the right memory chuck
diff --git a/src/PGN.cpp b/src/PGN.cpp
index 96346e8..c0c80e3 100644
--- a/src/PGN.cpp
+++ b/src/PGN.cpp
@@ -410,4 +410,13 @@ loctype PGN::GotoEOL(loctype loc) {
}
}
+void ParseSANMoves(const std::string &sequence,HalfMove *moves) {
+ PGN parser;
+ // Note that PGN need a results (* at the end)
+ // Otherwise an InvalidGameResult exception is raised
+ parser.FromString(sequence+" *");
+ parser.ParseNextGame();
+ parser.GetMoves(moves);
+}
+
} // namespace pgnp \ No newline at end of file
diff --git a/src/PGN.hpp b/src/PGN.hpp
index d313f91..d7bc429 100644
--- a/src/PGN.hpp
+++ b/src/PGN.hpp
@@ -102,4 +102,12 @@ struct STRCheckFailed : public std::exception {
}
};
+/**
+ * @brief Parse a simple sequence of SAN moves
+ *
+ * @param sequence e.g: 1.e4 e5 2.Nf3
+ * @param moves Returned moves sequence
+ */
+void ParseSANMoves(const std::string &sequence,HalfMove *moves);
+
} // namespace pgnp