Corrected a bug where "overlapping" defines were incorrectly replaced

This commit is contained in:
paulfd 2019-09-09 15:14:09 +02:00
parent 15b557946e
commit 9da6fc6f78
2 changed files with 12 additions and 11 deletions

View file

@ -46,16 +46,15 @@ protected:
case hash("region"): numRegions++; break; case hash("region"): numRegions++; break;
case hash("curve"): numCurves++; break; case hash("curve"): numCurves++; break;
} }
// std::cout << "[" << header << "]" << '\t'; std::cout << "[" << header << "]" << ' ';
// for (auto& member: members) for (auto& member: members)
// { {
// std::cout << member.opcode << "=" << member.value; std::cout << member.opcode << "=" << member.value;
// if (member.parameter) if (member.parameter)
// std::cout << " (" << (int)*member.parameter << ")"; std::cout << " (" << (int)*member.parameter << ")";
// std::cout << ' '; std::cout << ' ';
}
// } std::cout << '\n';
// std::cout << '\n';
} }
private: private:
int numRegions { 0 }; int numRegions { 0 };

View file

@ -129,8 +129,9 @@ void sfz::Parser::readSfzFile(const std::filesystem::path& fileName, std::vector
while (findPos < tmpView.npos) { while (findPos < tmpView.npos) {
newString.append(tmpView, lastPos, findPos - lastPos); newString.append(tmpView, lastPos, findPos - lastPos);
const auto defineEnd = tmpView.find_first_of(" \r\t\n\f\v", findPos);
const auto candidate = tmpView.substr(findPos, defineEnd - findPos);
for (auto& definePair : defines) { for (auto& definePair : defines) {
std::string_view candidate = tmpView.substr(findPos, definePair.first.length());
if (candidate == definePair.first) { if (candidate == definePair.first) {
newString += definePair.second; newString += definePair.second;
lastPos = findPos + definePair.first.length(); lastPos = findPos + definePair.first.length();
@ -138,6 +139,7 @@ void sfz::Parser::readSfzFile(const std::filesystem::path& fileName, std::vector
} }
} }
if (lastPos <= findPos) { if (lastPos <= findPos) {
newString += sfz::config::defineCharacter; newString += sfz::config::defineCharacter;
lastPos = findPos + 1; lastPos = findPos + 1;