diff --git a/src/keyboard_input/input_parser.cpp b/src/keyboard_input/input_parser.cpp index 4dfe2ef..1cfce1f 100644 --- a/src/keyboard_input/input_parser.cpp +++ b/src/keyboard_input/input_parser.cpp @@ -223,3 +223,37 @@ std::vector return tokens; } + +std::vector + removeDuplicateNewSequences( const std::vector& tokens ) +{ + std::vector approvedTokens = {}; + + bool previouslyNewSequenceToken = false; + for ( const auto& token : tokens ) + { + if ( token != Token::TOKEN_NEW_SEQUENCE ) + { + previouslyNewSequenceToken = false; + } + + if ( previouslyNewSequenceToken ) + { + continue; + } + + if ( token == Token::TOKEN_NEW_SEQUENCE ) + { + previouslyNewSequenceToken = true; + } + + approvedTokens.push_back( token ); + } + + return approvedTokens; +} + +std::vector removeIncorrectTokens( const std::vector& tokens ) +{ + return removeDuplicateNewSequences( tokens ); +} diff --git a/src/keyboard_input/input_parser.h b/src/keyboard_input/input_parser.h index a27e6d4..c865127 100644 --- a/src/keyboard_input/input_parser.h +++ b/src/keyboard_input/input_parser.h @@ -88,4 +88,6 @@ enum class Token MODIFIER_SUPER, }; -std::vector ParseKeyboardInputsToTokens( std::string inputs ) noexcept; +std::vector + ParseKeyboardInputsToTokens( const std::string inputs ) noexcept; +std::vector removeIncorrectTokens( const std::vector& tokens ); diff --git a/test/keyboard_input/tst_parsertest.cpp b/test/keyboard_input/tst_parsertest.cpp index 640da4c..9372f67 100644 --- a/test/keyboard_input/tst_parsertest.cpp +++ b/test/keyboard_input/tst_parsertest.cpp @@ -36,6 +36,8 @@ private slots: void sixtyfourBackspacesBenchmarked(); void sixtyfourAsBenchmarked(); + + void removeDuplicateSpaces(); }; const std::string alphabet = "abcdefghijklmnopqrstuvxyz"; @@ -375,6 +377,22 @@ void ParserTest::sixtyfourAsBenchmarked() } } +void ParserTest::removeDuplicateSpaces() +{ + const auto e = std::vector( { Token::KEY_a, + Token::TOKEN_NEW_SEQUENCE, + Token::TOKEN_NEW_SEQUENCE, + Token::TOKEN_NEW_SEQUENCE, + Token::TOKEN_NEW_SEQUENCE, + Token::TOKEN_NEW_SEQUENCE, + Token::TOKEN_NEW_SEQUENCE, + Token::KEY_d } ); + const auto t = std::vector( + { Token::KEY_a, Token::TOKEN_NEW_SEQUENCE, Token::KEY_d } ); + + QCOMPARE( removeIncorrectTokens( e ), t ); +} + QTEST_APPLESS_MAIN( ParserTest ) #include "./release/tst_parsertest.moc"