1 Commits

Author SHA1 Message Date
tomasz.sowa a3e94d0785 allow to use multiple directories in the PatternParser 2026-06-21 01:50:51 +02:00
2 changed files with 155 additions and 59 deletions
+130 -42
View File
@@ -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,65 +54,147 @@ 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,18 +423,24 @@ 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
View File
@@ -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;