allow to use multiple directories in the PatternParser
This commit is contained in:
+130
-42
@@ -5,7 +5,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007-2021, Tomasz Sowa
|
||||
* Copyright (c) 2007-2026, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -54,66 +54,148 @@ PatternParser::PatternParser()
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PatternParser::Directory(const char * dir, const char * dir2)
|
||||
void PatternParser::AddDirectory(const char * dir)
|
||||
{
|
||||
directory.clear();
|
||||
directory2.clear();
|
||||
|
||||
if( dir )
|
||||
pt::utf8_to_wide(dir, directory);
|
||||
|
||||
if( dir2 )
|
||||
pt::utf8_to_wide(dir2, directory2);
|
||||
pt::utf8_to_wide(dir, file_name);
|
||||
directories.push_back(file_name);
|
||||
file_name.clear();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PatternParser::Directory(const std::string & dir)
|
||||
void PatternParser::AddDirectory(const wchar_t * dir)
|
||||
{
|
||||
pt::utf8_to_wide(dir, directory);
|
||||
directory2.clear();
|
||||
directories.push_back(dir);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PatternParser::Directory(const std::string & dir, const std::string & dir2)
|
||||
void PatternParser::AddDirectory(const std::string & dir)
|
||||
{
|
||||
pt::utf8_to_wide(dir, directory);
|
||||
pt::utf8_to_wide(dir2, directory2);
|
||||
pt::utf8_to_wide(dir, file_name);
|
||||
directories.push_back(file_name);
|
||||
file_name.clear();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PatternParser::Directory(const wchar_t * dir, const wchar_t * dir2)
|
||||
void PatternParser::AddDirectory(const std::wstring & dir)
|
||||
{
|
||||
directory.clear();
|
||||
directory2.clear();
|
||||
|
||||
if( dir )
|
||||
directory = dir;
|
||||
|
||||
if( dir2 )
|
||||
directory2 = dir2;
|
||||
directories.push_back(dir);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PatternParser::Directory(const std::wstring & dir)
|
||||
void PatternParser::AddDirectories(const std::vector<std::string> & dirs)
|
||||
{
|
||||
directory = dir;
|
||||
directory2.clear();
|
||||
for(const std::string & dir : dirs)
|
||||
{
|
||||
pt::utf8_to_wide(dir, file_name);
|
||||
directories.push_back(file_name);
|
||||
}
|
||||
|
||||
file_name.clear();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PatternParser::Directory(const std::wstring & dir, const std::wstring & dir2)
|
||||
void PatternParser::AddDirectories(const std::list<std::string> & dirs)
|
||||
{
|
||||
directory = dir;
|
||||
directory2 = dir2;
|
||||
for(const std::string & dir : dirs)
|
||||
{
|
||||
pt::utf8_to_wide(dir, file_name);
|
||||
directories.push_back(file_name);
|
||||
}
|
||||
|
||||
file_name.clear();
|
||||
}
|
||||
|
||||
|
||||
void PatternParser::AddDirectories(const std::vector<std::wstring> & dirs)
|
||||
{
|
||||
for(const std::wstring & dir : dirs)
|
||||
{
|
||||
directories.push_back(dir);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PatternParser::AddDirectories(const std::list<std::wstring> & dirs)
|
||||
{
|
||||
for(const std::wstring & dir : dirs)
|
||||
{
|
||||
directories.push_back(dir);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PatternParser::SetDirectory(const char * dir)
|
||||
{
|
||||
directories.clear();
|
||||
AddDirectory(dir);
|
||||
}
|
||||
|
||||
|
||||
void PatternParser::SetDirectory(const wchar_t * dir)
|
||||
{
|
||||
directories.clear();
|
||||
AddDirectory(dir);
|
||||
}
|
||||
|
||||
|
||||
void PatternParser::SetDirectory(const std::string & dir)
|
||||
{
|
||||
directories.clear();
|
||||
AddDirectory(dir);
|
||||
}
|
||||
|
||||
|
||||
void PatternParser::SetDirectory(const std::wstring & dir)
|
||||
{
|
||||
directories.clear();
|
||||
AddDirectory(dir);
|
||||
}
|
||||
|
||||
|
||||
void PatternParser::SetDirectories(const std::vector<std::string> & dirs)
|
||||
{
|
||||
directories.clear();
|
||||
|
||||
for(const std::string & dir : dirs)
|
||||
{
|
||||
AddDirectory(dir);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PatternParser::SetDirectories(const std::list<std::string> & dirs)
|
||||
{
|
||||
directories.clear();
|
||||
|
||||
for(const std::string & dir : dirs)
|
||||
{
|
||||
AddDirectory(dir);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PatternParser::SetDirectories(const std::vector<std::wstring> & dirs)
|
||||
{
|
||||
directories = dirs;
|
||||
}
|
||||
|
||||
|
||||
void PatternParser::SetDirectories(const std::list<std::wstring> & dirs)
|
||||
{
|
||||
directories.clear();
|
||||
|
||||
for(const std::wstring & dir : dirs)
|
||||
{
|
||||
directories.push_back(dir);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PatternParser::ClearDirectories()
|
||||
{
|
||||
directories.clear();
|
||||
}
|
||||
|
||||
|
||||
void PatternParser::SetBlocks(Blocks & blocks)
|
||||
{
|
||||
@@ -341,17 +423,23 @@ void PatternParser::ReadFile(const wchar_t * name, std::wstring & result)
|
||||
{
|
||||
result.clear();
|
||||
|
||||
if( !ReadFileFromDir(directory, name, result) )
|
||||
bool file_read_successfully = false;
|
||||
std::vector<std::wstring>::reverse_iterator dir = directories.rbegin();
|
||||
|
||||
for( ; dir != directories.rend() ; ++dir)
|
||||
{
|
||||
if( !ReadFileFromDir(directory2, name, result) )
|
||||
if( ReadFileFromDir(*dir, name, result) )
|
||||
{
|
||||
if( log )
|
||||
file_read_successfully = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( !file_read_successfully && log )
|
||||
{
|
||||
(*log) << pt::Log::log2 << "Ezc: can't open file: " << name << pt::Log::logend;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+22
-14
@@ -5,7 +5,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007-2021, Tomasz Sowa
|
||||
* Copyright (c) 2007-2026, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -52,16 +52,25 @@ public:
|
||||
|
||||
PatternParser();
|
||||
|
||||
// first we're trying to read a file from directory dir
|
||||
// if there is no such a file there then we try read from dir2
|
||||
// (the second dir2 can be empty - it will not be used)
|
||||
void Directory(const char * dir, const char * dir2 = 0);
|
||||
void Directory(const std::string & dir);
|
||||
void Directory(const std::string & dir, const std::string & dir2);
|
||||
void AddDirectory(const char * dir);
|
||||
void AddDirectory(const wchar_t * dir);
|
||||
void AddDirectory(const std::string & dir);
|
||||
void AddDirectory(const std::wstring & dir);
|
||||
void AddDirectories(const std::vector<std::string> & dirs);
|
||||
void AddDirectories(const std::list<std::string> & dirs);
|
||||
void AddDirectories(const std::vector<std::wstring> & dirs);
|
||||
void AddDirectories(const std::list<std::wstring> & dirs);
|
||||
|
||||
void Directory(const wchar_t * dir, const wchar_t * dir2 = 0);
|
||||
void Directory(const std::wstring & dir);
|
||||
void Directory(const std::wstring & dir, const std::wstring & dir2);
|
||||
void SetDirectory(const char * dir);
|
||||
void SetDirectory(const wchar_t * dir);
|
||||
void SetDirectory(const std::string & dir);
|
||||
void SetDirectory(const std::wstring & dir);
|
||||
void SetDirectories(const std::vector<std::string> & dirs);
|
||||
void SetDirectories(const std::list<std::string> & dirs);
|
||||
void SetDirectories(const std::vector<std::wstring> & dirs);
|
||||
void SetDirectories(const std::list<std::wstring> & dirs);
|
||||
|
||||
void ClearDirectories();
|
||||
|
||||
void ParseFile(const char * file_name, Pattern & pattern);
|
||||
void ParseFile(const std::string & file_name, Pattern & pattern);
|
||||
@@ -115,10 +124,9 @@ private:
|
||||
// default: false
|
||||
bool delete_white_text_items;
|
||||
|
||||
// first we're trying to read a file from 'directory'
|
||||
// if there is no such a file there then we try read from 'directory2'
|
||||
// we read from these directories only if they are not empty
|
||||
std::wstring directory, directory2;
|
||||
// directories for templates
|
||||
// we start looking for files from the last directory
|
||||
std::vector<std::wstring> directories;
|
||||
|
||||
|
||||
int include_level, include_level_max;
|
||||
|
||||
Reference in New Issue
Block a user