Add an originalDirectory setter and change the logic for parseFile
This commit is contained in:
parent
42234da650
commit
25fa15acbe
2 changed files with 15 additions and 3 deletions
|
|
@ -39,6 +39,14 @@ void Parser::parseFile(const fs::path& path)
|
||||||
if (_listener)
|
if (_listener)
|
||||||
_listener->onParseBegin();
|
_listener->onParseBegin();
|
||||||
|
|
||||||
|
if (path.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (path.is_relative())
|
||||||
|
setOriginalDirectory(originalDirectory() / path);
|
||||||
|
else
|
||||||
|
setOriginalDirectory(path.parent_path());
|
||||||
|
|
||||||
includeNewFile(path);
|
includeNewFile(path);
|
||||||
processTopLevel();
|
processTopLevel();
|
||||||
flushCurrentHeader();
|
flushCurrentHeader();
|
||||||
|
|
@ -62,14 +70,17 @@ void Parser::parseString(absl::string_view sfzView)
|
||||||
_listener->onParseEnd();
|
_listener->onParseEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Parser::setOriginalDirectory(const fs::path& originalDirectory) noexcept
|
||||||
|
{
|
||||||
|
_originalDirectory = originalDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
void Parser::includeNewFile(const fs::path& path)
|
void Parser::includeNewFile(const fs::path& path)
|
||||||
{
|
{
|
||||||
fs::path fullPath =
|
fs::path fullPath =
|
||||||
(path.empty() || path.is_absolute()) ? path : _originalDirectory / path;
|
(path.empty() || path.is_absolute()) ? path : _originalDirectory / path;
|
||||||
|
|
||||||
if (_pathsIncluded.empty())
|
if (_pathsIncluded.find(fullPath.string()) != _pathsIncluded.end()) {
|
||||||
_originalDirectory = fullPath.parent_path();
|
|
||||||
else if (_pathsIncluded.find(fullPath.string()) != _pathsIncluded.end()) {
|
|
||||||
if (_recursiveIncludeGuardEnabled)
|
if (_recursiveIncludeGuardEnabled)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ public:
|
||||||
void setMaximumIncludeDepth(size_t depth) { _maxIncludeDepth = depth; }
|
void setMaximumIncludeDepth(size_t depth) { _maxIncludeDepth = depth; }
|
||||||
|
|
||||||
const fs::path& originalDirectory() const noexcept { return _originalDirectory; }
|
const fs::path& originalDirectory() const noexcept { return _originalDirectory; }
|
||||||
|
void setOriginalDirectory(const fs::path& originalDirectory) noexcept;
|
||||||
|
|
||||||
typedef absl::flat_hash_set<std::string> IncludeFileSet;
|
typedef absl::flat_hash_set<std::string> IncludeFileSet;
|
||||||
typedef absl::flat_hash_map<std::string, std::string> DefinitionSet;
|
typedef absl::flat_hash_map<std::string, std::string> DefinitionSet;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue