diff --git a/src/sfizz/Regexes.h b/src/sfizz/Regexes.h index de323bb5..950ef3b3 100644 --- a/src/sfizz/Regexes.h +++ b/src/sfizz/Regexes.h @@ -5,7 +5,7 @@ namespace sfz namespace Regexes { static std::regex includes { R"V(#include\s*"(.*?)".*$)V", std::regex::optimize }; - static std::regex defines { R"(#define\s*(\$[a-zA-Z0-9]+)\s+([a-zA-Z0-9]+)(?=\s|$))", std::regex::optimize }; + static std::regex defines { R"(#define\s*(\$[a-zA-Z0-9_]+)\s+([a-zA-Z0-9-]+)(?=\s|$))", std::regex::optimize }; static std::regex headers { R"(<(.*?)>(.*?)(?=<|$))", std::regex::optimize }; static std::regex members { R"(([a-zA-Z0-9_]+)=([a-zA-Z0-9-_#.&\/\s\\\(\),\*]+)(?![a-zA-Z0-9_]*=))", std::regex::optimize }; static std::regex opcodeParameters { R"(([a-zA-Z0-9_]+?)([0-9]+)$)", std::regex::optimize }; diff --git a/tests/FilesT.cpp b/tests/FilesT.cpp index 59a4522e..1a0e3179 100644 --- a/tests/FilesT.cpp +++ b/tests/FilesT.cpp @@ -127,10 +127,11 @@ TEST_CASE("[Files] Define test") { sfz::Synth synth; synth.loadSfzFile(fs::current_path() / "tests/TestFiles/defines.sfz"); - REQUIRE(synth.getNumRegions() == 3); + REQUIRE(synth.getNumRegions() == 4); REQUIRE(synth.getRegionView(0)->keyRange == sfz::Range(36, 36)); REQUIRE(synth.getRegionView(1)->keyRange == sfz::Range(38, 38)); REQUIRE(synth.getRegionView(2)->keyRange == sfz::Range(42, 42)); + REQUIRE(synth.getRegionView(3)->volume == -12.0f); } TEST_CASE("[Files] Group from AVL") diff --git a/tests/RegexT.cpp b/tests/RegexT.cpp index 836c7637..d8dcaabd 100644 --- a/tests/RegexT.cpp +++ b/tests/RegexT.cpp @@ -22,6 +22,7 @@ // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "Regexes.h" +#include #include "catch2/catch.hpp" using namespace Catch::literals; @@ -29,6 +30,8 @@ void includeTest(const std::string& line, const std::string& fileName) { std::smatch includeMatch; auto found = std::regex_search(line, includeMatch, sfz::Regexes::includes); + if (!found) + std::cerr << "Define test failed: " << line << '\n'; REQUIRE(found); REQUIRE(includeMatch[1] == fileName); } @@ -70,6 +73,9 @@ TEST_CASE("[Regex] #define") defineTest("#define $alphanum asr1t44", "$alphanum", "asr1t44"); defineTest("#define $whitespace asr1t44 ", "$whitespace", "asr1t44"); defineTest("#define $lazyMatching matched bfasd ", "$lazyMatching", "matched"); + defineTest("#define $stircut -12", "$stircut", "-12"); + defineTest("#define $_ht_under_score_ 3fd", "$_ht_under_score_", "3fd"); + defineTest("#define $ht_under_score 3fd", "$ht_under_score", "3fd"); defineFail("#define $symbols# 1"); defineFail("#define $symbolsAgain $1"); defineFail("#define $trailingSymbols 1$"); diff --git a/tests/TestFiles/defines.sfz b/tests/TestFiles/defines.sfz index 81e5aa56..b1fb159f 100644 --- a/tests/TestFiles/defines.sfz +++ b/tests/TestFiles/defines.sfz @@ -2,7 +2,9 @@ #define $KICKKEY 36 #define $SNAREKEY 38 #define $HATKEY 42 +#define $vol_db -12 key=$KICKKEY sample=kick.wav key=$SNAREKEY sample=snare.wav -key=$HATKEY sample=closedhat.wav \ No newline at end of file +key=$HATKEY sample=closedhat.wav +volume=$vol_db sample=*sine \ No newline at end of file