aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2022-03-01 15:58:02 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2022-03-01 15:58:02 +0100
commitcb4f5ada5c91629e96f1daecaf85dc92bee5359d (patch)
treeed25b0652a44596f72d034ad9cbb2b7331e3fac9 /src
parent9cba705e6631216bfcb8c95940bcf097a7888da2 (diff)
Move PGN export to the right place
Diffstat (limited to 'src')
-rw-r--r--src/base_tab/gamebase/PGNGameBase.cpp56
-rw-r--r--src/base_tab/gamebase/PGNGameBase.hpp2
-rw-r--r--src/game_tab/Game.cpp13
-rw-r--r--src/game_tab/Game.hpp2
-rw-r--r--src/game_tab/HalfMove.cpp37
-rw-r--r--src/game_tab/HalfMove.hpp5
6 files changed, 61 insertions, 54 deletions
diff --git a/src/base_tab/gamebase/PGNGameBase.cpp b/src/base_tab/gamebase/PGNGameBase.cpp
index e0fe3b9..bb7955d 100644
--- a/src/base_tab/gamebase/PGNGameBase.cpp
+++ b/src/base_tab/gamebase/PGNGameBase.cpp
@@ -81,7 +81,7 @@ void PGNGameBase::Save(std::vector<std::uint32_t> to_ignore,
several = true;
}
std::shared_ptr<Game> g = GetCurrentGame();
- new_pgn.Write(g->GetPGN());
+ new_pgn.Write(GetPGN(g));
}
id++;
}
@@ -96,7 +96,7 @@ void PGNGameBase::Save(std::vector<std::uint32_t> to_ignore,
several = true;
}
std::shared_ptr<Game> g = current->GetCurrentGame();
- new_pgn.Write(g->GetPGN());
+ new_pgn.Write(GetPGN(g));
}
}
@@ -106,7 +106,7 @@ void PGNGameBase::Save(std::vector<std::uint32_t> to_ignore,
} else {
several = true;
}
- new_pgn.Write(g->GetPGN());
+ new_pgn.Write(GetPGN(g));
}
new_pgn.Close();
@@ -126,8 +126,56 @@ void PGNGameBase::Export(std::shared_ptr<GameBase> base) {
several = true;
}
std::shared_ptr<Game> g = base->GetCurrentGame();
- new_pgn.Write(g->GetPGN());
+ new_pgn.Write(GetPGN(g));
}
new_pgn.Close();
}
+
+std::string PGNGameBase::GetPGN(std::shared_ptr<Game> g) {
+ std::string pgn;
+ HalfMove *m=g->GetMoves();
+
+ for (auto const &element : g->ListTags()) {
+ pgn += '[' + element + " \"" + g->GetTag(element) + "\"]\n";
+ }
+ pgn += GetMovesPGN(m,m->IsABlackMove());
+
+ pgn += " " + g->GetResult();
+ return (pgn);
+}
+
+std::string PGNGameBase::GetMovesPGN(HalfMove *m, bool needDots) {
+ std::string part;
+ bool newNeedDots = false;
+
+ if (!m->IsABlackMove() || needDots) {
+ part += std::to_string(m->Number) + ".";
+ if (needDots) {
+ part += "..";
+ }
+ }
+ part += m->move;
+
+ if (m->GetNbLineComment() > 0) {
+ part += " {";
+ part += m->GetComment();
+ part += "}";
+ newNeedDots = true;
+ }
+
+ if (m->GetVariations().size() > 0) {
+ newNeedDots = true;
+ for (HalfMove *v : m->GetVariations()) {
+ part += " (";
+ part += GetMovesPGN(v, m->IsABlackMove());
+ part += ")";
+ }
+ }
+
+ if (m->GetMainline() != NULL) {
+ part += " " + GetMovesPGN(m->GetMainline(), !m->IsABlackMove() && newNeedDots);
+ }
+
+ return (part);
+} \ No newline at end of file
diff --git a/src/base_tab/gamebase/PGNGameBase.hpp b/src/base_tab/gamebase/PGNGameBase.hpp
index 507a29a..ee1c99b 100644
--- a/src/base_tab/gamebase/PGNGameBase.hpp
+++ b/src/base_tab/gamebase/PGNGameBase.hpp
@@ -18,4 +18,6 @@ public:
std::vector<std::shared_ptr<Game>> new_games);
void Reset();
void Export(std::shared_ptr<GameBase> base);
+ static std::string GetMovesPGN(HalfMove *m, bool needDots);
+ static std::string GetPGN(std::shared_ptr<Game> g);
}; \ No newline at end of file
diff --git a/src/game_tab/Game.cpp b/src/game_tab/Game.cpp
index 8b52ca6..1bc1e4c 100644
--- a/src/game_tab/Game.cpp
+++ b/src/game_tab/Game.cpp
@@ -99,7 +99,6 @@ bool Game::Play(std::string move) {
if (moves == NULL) {
moves = m;
}
- wxLogDebug("%s", GetPGN());
return (true);
}
return (false);
@@ -139,17 +138,7 @@ std::string Game::GetFen() {
return (current->GetFen());
}
-std::string Game::GetPGN() {
- std::string pgn;
- if (moves != NULL) {
- for (auto const &element : tags) {
- pgn += '[' + element.first + " \"" + element.second + "\"]\n";
- }
- pgn += moves->GetPGN();
- }
- pgn += " " + result;
- return (pgn);
-}
+std::string Game::GetResult() { return (result); }
void Game::SetResult(std::string result) { this->result = result; }
diff --git a/src/game_tab/Game.hpp b/src/game_tab/Game.hpp
index f0414c8..f70ebee 100644
--- a/src/game_tab/Game.hpp
+++ b/src/game_tab/Game.hpp
@@ -26,6 +26,7 @@ public:
HalfMove *GetCurrentMove();
HalfMove *GetMoves();
std::string GetFen();
+ std::string GetResult();
bool Play(std::string move);
bool IsBlackToPlay();
void Previous();
@@ -35,7 +36,6 @@ public:
void SetMoveAsMainline(HalfMove *m);
void SetCurrent(HalfMove *m);
std::vector<std::string> ListTags();
- std::string GetPGN();
void SetResult(std::string result);
/**
* @brief Build current game
diff --git a/src/game_tab/HalfMove.cpp b/src/game_tab/HalfMove.cpp
index 0aa957e..0472b7c 100644
--- a/src/game_tab/HalfMove.cpp
+++ b/src/game_tab/HalfMove.cpp
@@ -172,42 +172,9 @@ bool HalfMove::IsVariation() {
std::string HalfMove::GetFen() { return (fen); }
-std::string HalfMove::GetPGN() { return (GetPGN(IsBlack)); }
+std::vector<HalfMove *> HalfMove::GetVariations() { return (variations); }
-std::string HalfMove::GetPGN(bool needDots) {
- std::string part;
- bool newNeedDots = false;
-
- if (!IsBlack || needDots) {
- part += std::to_string(Number) + ".";
- if (needDots) {
- part += "..";
- }
- }
- part += move;
-
- if (GetNbLineComment() > 0) {
- part += " {";
- part += GetComment();
- part += "}";
- newNeedDots = true;
- }
-
- if (variations.size() > 0) {
- newNeedDots = true;
- for (HalfMove *v : variations) {
- part += " (";
- part += v->GetPGN(IsBlack);
- part += ")";
- }
- }
-
- if (mainline != NULL) {
- part += " " + mainline->GetPGN(!IsBlack && newNeedDots);
- }
-
- return (part);
-}
+bool HalfMove::IsABlackMove() { return (IsBlack); }
void HalfMove::BuildAndVerify(HalfMove *m, std::string fen) {
arbiter.Setup(fen);
diff --git a/src/game_tab/HalfMove.hpp b/src/game_tab/HalfMove.hpp
index 51b38a0..6ea0c5a 100644
--- a/src/game_tab/HalfMove.hpp
+++ b/src/game_tab/HalfMove.hpp
@@ -20,7 +20,6 @@ class HalfMove : public cgeditor::CGEHalfMove {
std::vector<HalfMove *> variations;
std::string fen;
char capture;
- std::string GetPGN(bool needDots);
void BuildAndVerify(HalfMove *m, std::string fen);
public:
@@ -47,6 +46,8 @@ public:
/// @brief Get parent of the current move
HalfMove *GetParent();
HalfMove *GetMainline();
+ std::vector<HalfMove *> GetVariations();
+
std::map<char, std::uint8_t> GetLineCaptures();
/// @brief Set parent of the current move
@@ -54,7 +55,7 @@ public:
std::string GetFen();
void SetFen(std::string fen);
void SetCapture(char c);
- std::string GetPGN();
+ bool IsABlackMove();
/**
* @brief Build current move