allow to use multiple directories in the PatternParser
This commit is contained in:
+132
-44
@@ -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
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user