From 9d62b328312b4ca98fca0d174b99ae623f56c879 Mon Sep 17 00:00:00 2001 From: GPayne Date: Sun, 3 Apr 2022 19:17:08 -0600 Subject: [PATCH 1/2] Fix for ASCII recording to correctly handle multi-line keybinding script --- src/interaction/sessionrecording.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/interaction/sessionrecording.cpp b/src/interaction/sessionrecording.cpp index 3d6ce56dc8..3986324c75 100644 --- a/src/interaction/sessionrecording.cpp +++ b/src/interaction/sessionrecording.cpp @@ -927,6 +927,17 @@ void SessionRecording::saveScriptKeyframeAscii(Timestamps& times, { std::stringstream keyframeLine = std::stringstream(); saveHeaderAscii(times, HeaderScriptAscii, keyframeLine); + //Erase all \r (from windows newline), and all \n from line endings and replace with + //';' so that lua will treat them as separate lines. This is done in order to treat + //a multi-line script as a single line in the file. + size_t startPos = 0; + while ((startPos = sm._script.find("\r", startPos)) != std::string::npos) { + sm._script.erase(startPos, 1); + } + startPos = 0; + while ((startPos = sm._script.find("\n", startPos)) != std::string::npos) { + sm._script.replace(startPos, 1, ";"); + } sm.write(keyframeLine); saveKeyframeToFile(keyframeLine.str(), file); } From a7411def2109799ec72e614eceb0cdd1b9b9032f Mon Sep 17 00:00:00 2001 From: GPayne Date: Fri, 8 Apr 2022 12:32:02 -0600 Subject: [PATCH 2/2] Code review fix for session recording #1905 --- src/interaction/sessionrecording.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/interaction/sessionrecording.cpp b/src/interaction/sessionrecording.cpp index 3986324c75..d69f578a5f 100644 --- a/src/interaction/sessionrecording.cpp +++ b/src/interaction/sessionrecording.cpp @@ -927,16 +927,18 @@ void SessionRecording::saveScriptKeyframeAscii(Timestamps& times, { std::stringstream keyframeLine = std::stringstream(); saveHeaderAscii(times, HeaderScriptAscii, keyframeLine); - //Erase all \r (from windows newline), and all \n from line endings and replace with - //';' so that lua will treat them as separate lines. This is done in order to treat - //a multi-line script as a single line in the file. - size_t startPos = 0; - while ((startPos = sm._script.find("\r", startPos)) != std::string::npos) { + // Erase all \r (from windows newline), and all \n from line endings and replace with + // ';' so that lua will treat them as separate lines. This is done in order to treat + // a multi-line script as a single line in the file. + size_t startPos = sm._script.find("\r", 0); + while (startPos != std::string::npos) { sm._script.erase(startPos, 1); + startPos = sm._script.find("\r", startPos); } - startPos = 0; - while ((startPos = sm._script.find("\n", startPos)) != std::string::npos) { + startPos = sm._script.find("\n", 0); + while (startPos != std::string::npos) { sm._script.replace(startPos, 1, ";"); + startPos = sm._script.find("\n", startPos); } sm.write(keyframeLine); saveKeyframeToFile(keyframeLine.str(), file);