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
+132 -44
View File
@@ -4,8 +4,8 @@
* Author: Tomasz Sowa <t.sowa@ttmath.org> * Author: Tomasz Sowa <t.sowa@ttmath.org>
*/ */
/* /*
* Copyright (c) 2007-2021, Tomasz Sowa * Copyright (c) 2007-2026, Tomasz Sowa
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -54,66 +54,148 @@ PatternParser::PatternParser()
} }
void PatternParser::AddDirectory(const char * dir)
void PatternParser::Directory(const char * dir, const char * dir2)
{ {
directory.clear(); pt::utf8_to_wide(dir, file_name);
directory2.clear(); directories.push_back(file_name);
file_name.clear();
if( dir )
pt::utf8_to_wide(dir, directory);
if( dir2 )
pt::utf8_to_wide(dir2, directory2);
} }
void PatternParser::AddDirectory(const wchar_t * dir)
void PatternParser::Directory(const std::string & dir)
{ {
pt::utf8_to_wide(dir, directory); directories.push_back(dir);
directory2.clear();
} }
void PatternParser::AddDirectory(const std::string & dir)
void PatternParser::Directory(const std::string & dir, const std::string & dir2)
{ {
pt::utf8_to_wide(dir, directory); pt::utf8_to_wide(dir, file_name);
pt::utf8_to_wide(dir2, directory2); directories.push_back(file_name);
file_name.clear();
} }
void PatternParser::AddDirectory(const std::wstring & dir)
void PatternParser::Directory(const wchar_t * dir, const wchar_t * dir2)
{ {
directory.clear(); directories.push_back(dir);
directory2.clear();
if( dir )
directory = dir;
if( dir2 )
directory2 = dir2;
} }
void PatternParser::AddDirectories(const std::vector<std::string> & dirs)
void PatternParser::Directory(const std::wstring & dir)
{ {
directory = dir; for(const std::string & dir : dirs)
directory2.clear(); {
pt::utf8_to_wide(dir, file_name);
directories.push_back(file_name);
}
file_name.clear();
} }
void PatternParser::AddDirectories(const std::list<std::string> & dirs)
void PatternParser::Directory(const std::wstring & dir, const std::wstring & dir2)
{ {
directory = dir; for(const std::string & dir : dirs)
directory2 = dir2; {
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) void PatternParser::SetBlocks(Blocks & blocks)
{ {
@@ -341,16 +423,22 @@ void PatternParser::ReadFile(const wchar_t * name, std::wstring & result)
{ {
result.clear(); 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;
(*log) << pt::Log::log2 << "Ezc: can't open file: " << name << pt::Log::logend;
}
} }
} }
if( !file_read_successfully && log )
{
(*log) << pt::Log::log2 << "Ezc: can't open file: " << name << pt::Log::logend;
}
} }
} }
+23 -15
View File
@@ -4,8 +4,8 @@
* Author: Tomasz Sowa <t.sowa@ttmath.org> * Author: Tomasz Sowa <t.sowa@ttmath.org>
*/ */
/* /*
* Copyright (c) 2007-2021, Tomasz Sowa * Copyright (c) 2007-2026, Tomasz Sowa
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -52,16 +52,25 @@ public:
PatternParser(); PatternParser();
// first we're trying to read a file from directory dir void AddDirectory(const char * dir);
// if there is no such a file there then we try read from dir2 void AddDirectory(const wchar_t * dir);
// (the second dir2 can be empty - it will not be used) void AddDirectory(const std::string & dir);
void Directory(const char * dir, const char * dir2 = 0); void AddDirectory(const std::wstring & dir);
void Directory(const std::string & dir); void AddDirectories(const std::vector<std::string> & dirs);
void Directory(const std::string & dir, const std::string & dir2); 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 SetDirectory(const char * dir);
void Directory(const std::wstring & dir); void SetDirectory(const wchar_t * dir);
void Directory(const std::wstring & dir, const std::wstring & dir2); 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 char * file_name, Pattern & pattern);
void ParseFile(const std::string & file_name, Pattern & pattern); void ParseFile(const std::string & file_name, Pattern & pattern);
@@ -115,10 +124,9 @@ private:
// default: false // default: false
bool delete_white_text_items; bool delete_white_text_items;
// first we're trying to read a file from 'directory' // directories for templates
// if there is no such a file there then we try read from 'directory2' // we start looking for files from the last directory
// we read from these directories only if they are not empty std::vector<std::wstring> directories;
std::wstring directory, directory2;
int include_level, include_level_max; int include_level, include_level_max;