From 864c8415f221fe33007283277ec3681dc0faea0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Schr=C3=B6dl?= Date: Mon, 31 Aug 2026 12:36:59 +0200 Subject: [PATCH 1/2] Remove binarize duplication --- src/LibBGCode/binarize/meatpack.cpp | 42 +++++++++-------------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/src/LibBGCode/binarize/meatpack.cpp b/src/LibBGCode/binarize/meatpack.cpp index 31472ee..7f07f9b 100644 --- a/src/LibBGCode/binarize/meatpack.cpp +++ b/src/LibBGCode/binarize/meatpack.cpp @@ -91,39 +91,23 @@ void MPBinarizer::binarize_line(const std::string& line, std::vector& d const std::string::size_type g_idx = line.find('G'); if (g_idx != std::string::npos) { if (g_idx + 1 < line.size() && line[g_idx + 1] >= '0' && line[g_idx + 1] <= '9') { - if ((m_flags & Flag_OmitWhitespaces) != 0) { - std::string result = line; + std::string result = line; + if((m_flags & Flag_OmitWhitespaces) != 0) { std::replace(result.begin(), result.end(), 'e', 'E'); - std::replace(result.begin(), result.end(), 'x', 'X'); - std::replace(result.begin(), result.end(), 'g', 'G'); - result.erase(std::remove(result.begin(), result.end(), ' '), result.end()); - if (result.find('*') != std::string::npos) { - size_t checksum = 0; - result.erase(std::remove(result.begin(), result.end(), '*'), result.end()); - for (size_t i = 0; i < result.size(); ++i) { - checksum ^= static_cast(result[i]); - } - result += "*" + std::to_string(checksum); - } - result += '\n'; - return result; } - else { - std::string result = line; - std::replace(result.begin(), result.end(), 'x', 'X'); - std::replace(result.begin(), result.end(), 'g', 'G'); - result.erase(std::remove(result.begin(), result.end(), ' '), result.end()); - if (result.find('*') != std::string::npos) { - size_t checksum = 0; - result.erase(std::remove(result.begin(), result.end(), '*'), result.end()); - for (size_t i = 0; i < result.size(); ++i) { - checksum ^= static_cast(result[i]); - } - result += "*" + std::to_string(checksum); + std::replace(result.begin(), result.end(), 'x', 'X'); + std::replace(result.begin(), result.end(), 'g', 'G'); + result.erase(std::remove(result.begin(), result.end(), ' '), result.end()); + if (result.find('*') != std::string::npos) { + size_t checksum = 0; + result.erase(std::remove(result.begin(), result.end(), '*'), result.end()); + for (size_t i = 0; i < result.size(); ++i) { + checksum ^= static_cast(result[i]); } - result += '\n'; - return result; + result += "*" + std::to_string(checksum); } + result += '\n'; + return result; } } return line; From 6b7e912a6344b4c30637ecec9f67005b3f805da0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Schr=C3=B6dl?= Date: Mon, 31 Aug 2026 13:03:19 +0200 Subject: [PATCH 2/2] Fix new line present in odd-length lines unified_method() appended '\n' unconditionally, but callers already pass lines with the terminator included, so G-lines were encoded with a trailing "\n\n". The decoder's newline handling masked the duplicate when the packed line length was even, but odd-length lines produced a blank line in the decoded output. --- src/LibBGCode/binarize/meatpack.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/LibBGCode/binarize/meatpack.cpp b/src/LibBGCode/binarize/meatpack.cpp index 7f07f9b..bedf664 100644 --- a/src/LibBGCode/binarize/meatpack.cpp +++ b/src/LibBGCode/binarize/meatpack.cpp @@ -106,7 +106,9 @@ void MPBinarizer::binarize_line(const std::string& line, std::vector& d } result += "*" + std::to_string(checksum); } - result += '\n'; + if(result.back() != '\n') { + result += '\n'; + } return result; } }