diff --git a/ChangeLog b/ChangeLog index 5289e0a1..8d8e8499 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ 2020-02-19 Markus Gans * Some small code improvements + * SGRoptimizer improved 2020-02-16 Markus Gans * Printing a FStyle object allows you to change video attributes diff --git a/src/sgr_optimizer.cpp b/src/sgr_optimizer.cpp index fa8b2506..8df8ea67 100644 --- a/src/sgr_optimizer.cpp +++ b/src/sgr_optimizer.cpp @@ -21,7 +21,7 @@ ***********************************************************************/ #include - +#include #include "final/fc.h" #include "final/sgr_optimizer.h" @@ -86,6 +86,10 @@ void SGRoptimizer::findParameter() start = NOT_SET; } + // Other content + if ( ! csi_parameter.empty() && i > csi_parameter.back().end + 2 ) + break; + if ( esc && seq[i] == '[' ) // Esc [ csi = true; diff --git a/test/foptiattr-test.cpp b/test/foptiattr-test.cpp index 5e338b78..7e3bfcdd 100644 --- a/test/foptiattr-test.cpp +++ b/test/foptiattr-test.cpp @@ -269,11 +269,22 @@ void FOptiAttrTest::sgrOptimizerTest() sgr_optimizer.optimize(); CPPUNIT_ASSERT_CSTRING ( buffer, C_STR(CSI "0;38;5;20;48;5;229m") ); - - std::strcpy(buffer, CSI "m" CSI "38;5;20m" XXXX<<< CSI "48;5;229m"); + std::strcpy(buffer, CSI "m" CSI "38;5;20m" CSI "11;16H"); sgr_optimizer.optimize(); - CPPUNIT_ASSERT_CSTRING ( buffer, C_STR(CSI "0;38;5;20;48;5;229m") ); + CPPUNIT_ASSERT_CSTRING ( buffer, C_STR(CSI "0;38;5;20m" CSI "11;16H") ); + std::strcpy(buffer, CSI "1;1H" CSI "m" CSI "38;5;35m"); + sgr_optimizer.optimize(); + CPPUNIT_ASSERT_CSTRING ( buffer, C_STR(CSI "1;1H" CSI "0;38;5;35m") ); + + std::strcpy(buffer, CSI "m" CSI "38;5;20m" CSI "11;16H" CSI "48;5;229m"); + sgr_optimizer.optimize(); + CPPUNIT_ASSERT_CSTRING ( buffer, C_STR(CSI "0;38;5;20m" CSI "11;16H" CSI "48;5;229m") ); + + std::strcpy(buffer, CSI "m" CSI "38;5;20m" "ABC" CSI "48;5;229m"); + sgr_optimizer.optimize(); + CPPUNIT_ASSERT_CSTRING ( buffer, C_STR(CSI "0;38;5;20mABC" CSI "48;5;229m") ); + std::strcpy(buffer, CSI "m" CSI "1m" CSI "2m" CSI "3m" CSI "4m" CSI "5m" CSI "7m" CSI "8m" CSI "9m");