Break web generator to own cmake.
This commit is contained in:
parent
bd60a28eef
commit
ebd41bf4ee
14 changed files with 121 additions and 45 deletions
|
@ -29,12 +29,5 @@ target_link_libraries(sample_console PUBLIC console core network
|
||||||
set_property(TARGET sample_console PROPERTY FOLDER apps)
|
set_property(TARGET sample_console PROPERTY FOLDER apps)
|
||||||
set_property(TARGET sample_gui PROPERTY FOLDER apps)
|
set_property(TARGET sample_gui PROPERTY FOLDER apps)
|
||||||
|
|
||||||
# Website Generator
|
add_subdirectory(website-generator)
|
||||||
add_executable(website_generator website-generator.cpp)
|
|
||||||
#target_include_directories(website_generator PUBLIC
|
|
||||||
# "${PROJECT_SOURCE_DIR}/src/console"
|
|
||||||
# )
|
|
||||||
target_link_libraries(website_generator PUBLIC core web)
|
|
||||||
|
|
||||||
set_property(TARGET website_generator PROPERTY FOLDER apps)
|
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
auto command_line_args = CommandLineArgs::CreateUnique();
|
auto command_line_args = CommandLineArgs::Create();
|
||||||
command_line_args->Process(argc, argv);
|
command_line_args->process(argc, argv);
|
||||||
command_line_args->RecordLaunchPath();
|
command_line_args->recordLaunchPath();
|
||||||
|
|
||||||
// Start the main app
|
// Start the main app
|
||||||
auto main_app = MainApplication::Create();
|
auto main_app = MainApplication::Create();
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
auto args = CommandLineArgs::CreateUnique();
|
auto args = CommandLineArgs::Create();
|
||||||
args->Process(argc, argv);
|
args->process(argc, argv);
|
||||||
args->RecordLaunchPath();
|
args->recordLaunchPath();
|
||||||
|
|
||||||
// Start the main app
|
// Start the main app
|
||||||
auto main_app = MainApplication::Create();
|
auto main_app = MainApplication::Create();
|
||||||
|
|
18
apps/website-generator/CMakeLists.txt
Normal file
18
apps/website-generator/CMakeLists.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
|
||||||
|
list(APPEND website_generator_LIB_INCLUDES
|
||||||
|
ContentFile.h
|
||||||
|
ContentFile.cpp
|
||||||
|
MarkdownContentParser.h
|
||||||
|
MarkdownContentParser.cpp)
|
||||||
|
|
||||||
|
|
||||||
|
add_executable(website_generator main.cpp ${website_generator_LIB_INCLUDES})
|
||||||
|
|
||||||
|
target_include_directories(website_generator PUBLIC
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(website_generator PUBLIC core web)
|
||||||
|
|
||||||
|
set_property(TARGET website_generator PROPERTY FOLDER apps/website-generator)
|
||||||
|
|
0
apps/website-generator/ContentFile.cpp
Normal file
0
apps/website-generator/ContentFile.cpp
Normal file
0
apps/website-generator/ContentFile.h
Normal file
0
apps/website-generator/ContentFile.h
Normal file
0
apps/website-generator/MarkdownContentParser.cpp
Normal file
0
apps/website-generator/MarkdownContentParser.cpp
Normal file
0
apps/website-generator/MarkdownContentParser.h
Normal file
0
apps/website-generator/MarkdownContentParser.h
Normal file
|
@ -1,5 +1,7 @@
|
||||||
#include "CommandLineArgs.h"
|
#include "CommandLineArgs.h"
|
||||||
|
|
||||||
|
#include "Directory.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -10,11 +12,11 @@ class GeneratorConfig
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ContentPage
|
class ContentFile
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
ContentPage(const std::string& filename)
|
ContentFile(const std::string& filename)
|
||||||
: mFilename(filename)
|
: mFilename(filename)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -25,11 +27,32 @@ public:
|
||||||
return mFilename;
|
return mFilename;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
|
|
||||||
std::string mFilename;
|
std::string mFilename;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ContentPage : public ContentFile
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
ContentPage(const std::string& filename)
|
||||||
|
: ContentFile(filename)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class ContentArticle : public ContentFile
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
ContentArticle(const std::string& filename)
|
||||||
|
: ContentFile(filename)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class WebsiteGenerator
|
class WebsiteGenerator
|
||||||
{
|
{
|
||||||
|
@ -52,26 +75,16 @@ public:
|
||||||
|
|
||||||
void parseContentFiles()
|
void parseContentFiles()
|
||||||
{
|
{
|
||||||
const auto content_dir = mProjectPath / "content";
|
const auto pages_files = Directory::getFilesWithExtension(getPagesPath(), ".md");
|
||||||
if (std::filesystem::is_directory(content_dir))
|
for (const auto& path : pages_files)
|
||||||
{
|
{
|
||||||
std::cout << "checking " << content_dir << std::endl;
|
mPages.push_back(ContentPage(path));
|
||||||
const auto pages_dir = content_dir / "pages";
|
|
||||||
if (std::filesystem::is_directory(pages_dir))
|
|
||||||
{
|
|
||||||
std::cout << "checking " << pages_dir << std::endl;
|
|
||||||
for (const auto& entry : std::filesystem::directory_iterator(pages_dir))
|
|
||||||
{
|
|
||||||
if (std::filesystem::is_regular_file(entry) && entry.path().extension() == ".md")
|
|
||||||
{
|
|
||||||
mPages.push_back(ContentPage(entry.path()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
const auto article_files = Directory::getFilesWithExtension(getArticlesPath(), ".md");
|
||||||
|
for (const auto& path : article_files)
|
||||||
{
|
{
|
||||||
std::cout << "nope in " << content_dir << std::endl;
|
mArticles.push_back(ContentArticle(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
for(const auto& page : mPages)
|
for(const auto& page : mPages)
|
||||||
|
@ -79,6 +92,10 @@ public:
|
||||||
std::cout << "Got page " << page.getFilename() << std::endl;
|
std::cout << "Got page " << page.getFilename() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(const auto& article : mArticles)
|
||||||
|
{
|
||||||
|
std::cout << "Got article " << article.getFilename() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void parseTemplateFiles()
|
void parseTemplateFiles()
|
||||||
|
@ -99,9 +116,25 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
Path getContentPath() const
|
||||||
|
{
|
||||||
|
return mProjectPath / "content";
|
||||||
|
}
|
||||||
|
|
||||||
|
Path getPagesPath() const
|
||||||
|
{
|
||||||
|
return getContentPath() / "pages";
|
||||||
|
}
|
||||||
|
|
||||||
|
Path getArticlesPath() const
|
||||||
|
{
|
||||||
|
return getContentPath() / "articles";
|
||||||
|
}
|
||||||
|
|
||||||
std::filesystem::path mProjectPath;
|
std::filesystem::path mProjectPath;
|
||||||
GeneratorConfig mConfig;
|
GeneratorConfig mConfig;
|
||||||
std::vector<ContentPage> mPages;
|
std::vector<ContentPage> mPages;
|
||||||
|
std::vector<ContentArticle> mArticles;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ void GuiApplication::SetUpWidget()
|
||||||
auto tabbedPanel = TabbedPanelWidget::Create();
|
auto tabbedPanel = TabbedPanelWidget::Create();
|
||||||
|
|
||||||
auto textEditor = TextEditorView::Create();
|
auto textEditor = TextEditorView::Create();
|
||||||
auto path = mMainApplication->GetCommandLineArgs()->GetLaunchPath();
|
auto path = mMainApplication->GetCommandLineArgs()->getLaunchPath();
|
||||||
path /= "out.txt";
|
path /= "out.txt";
|
||||||
textEditor->GetController()->SetSavePath(path);
|
textEditor->GetController()->SetSavePath(path);
|
||||||
textEditor->GetController()->SetLoadPath(path);
|
textEditor->GetController()->SetLoadPath(path);
|
||||||
|
|
|
@ -36,7 +36,7 @@ void MainApplication::Initialize(CommandLineArgsUPtr commandLineArgs, std::uniqu
|
||||||
}
|
}
|
||||||
|
|
||||||
mCommandLineArgs = std::move(commandLineArgs);
|
mCommandLineArgs = std::move(commandLineArgs);
|
||||||
const auto launch_path = mCommandLineArgs->GetLaunchPath().string();
|
const auto launch_path = mCommandLineArgs->getLaunchPath().string();
|
||||||
|
|
||||||
FileLogger::GetInstance().SetWorkDirectory(launch_path);
|
FileLogger::GetInstance().SetWorkDirectory(launch_path);
|
||||||
FileLogger::GetInstance().Open();
|
FileLogger::GetInstance().Open();
|
||||||
|
@ -56,23 +56,23 @@ void MainApplication::Initialize(CommandLineArgsUPtr commandLineArgs, std::uniqu
|
||||||
void MainApplication::Run()
|
void MainApplication::Run()
|
||||||
{
|
{
|
||||||
std::string program_type;
|
std::string program_type;
|
||||||
if(mCommandLineArgs->GetNumberOfArgs() > 1)
|
if(mCommandLineArgs->getNumberOfArgs() > 1)
|
||||||
{
|
{
|
||||||
program_type = mCommandLineArgs->GetArg(1);
|
program_type = mCommandLineArgs->getArg(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string input_path;
|
std::string input_path;
|
||||||
std::string output_path;
|
std::string output_path;
|
||||||
for(unsigned idx=1; idx<mCommandLineArgs->GetNumberOfArgs(); idx++)
|
for(unsigned idx=1; idx<mCommandLineArgs->getNumberOfArgs(); idx++)
|
||||||
{
|
{
|
||||||
auto arg = mCommandLineArgs->GetArg(idx);
|
auto arg = mCommandLineArgs->getArg(idx);
|
||||||
if(arg == "-input" && mCommandLineArgs->GetNumberOfArgs() > idx+1)
|
if(arg == "-input" && mCommandLineArgs->getNumberOfArgs() > idx+1)
|
||||||
{
|
{
|
||||||
input_path = mCommandLineArgs->GetArg(idx + 1);
|
input_path = mCommandLineArgs->getArg(idx + 1);
|
||||||
}
|
}
|
||||||
else if(arg == "-output" && mCommandLineArgs->GetNumberOfArgs() > idx+1)
|
else if(arg == "-output" && mCommandLineArgs->getNumberOfArgs() > idx+1)
|
||||||
{
|
{
|
||||||
output_path = mCommandLineArgs->GetArg(idx + 1);
|
output_path = mCommandLineArgs->getArg(idx + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ list(APPEND core_HEADERS
|
||||||
Color.h
|
Color.h
|
||||||
CommandLineArgs.h
|
CommandLineArgs.h
|
||||||
loggers/FileLogger.h
|
loggers/FileLogger.h
|
||||||
|
file_utilities/Directory.h
|
||||||
file_utilities/File.h
|
file_utilities/File.h
|
||||||
file_utilities/FileFormats.h
|
file_utilities/FileFormats.h
|
||||||
StringUtils.h
|
StringUtils.h
|
||||||
|
@ -17,6 +18,7 @@ list(APPEND core_LIB_INCLUDES
|
||||||
CommandLineArgs.cpp
|
CommandLineArgs.cpp
|
||||||
data_structures/Tree.cpp
|
data_structures/Tree.cpp
|
||||||
loggers/FileLogger.cpp
|
loggers/FileLogger.cpp
|
||||||
|
file_utilities/Directory.cpp
|
||||||
file_utilities/File.cpp
|
file_utilities/File.cpp
|
||||||
file_utilities/FileFormats.cpp
|
file_utilities/FileFormats.cpp
|
||||||
memory/SharedMemory.cpp
|
memory/SharedMemory.cpp
|
||||||
|
|
17
src/core/file_utilities/Directory.cpp
Normal file
17
src/core/file_utilities/Directory.cpp
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#include "Directory.h"
|
||||||
|
|
||||||
|
std::vector<Path> Directory::getFilesWithExtension(const Path& path, const std::string& extension)
|
||||||
|
{
|
||||||
|
std::vector<Path> paths;
|
||||||
|
if (std::filesystem::is_directory(path))
|
||||||
|
{
|
||||||
|
for (const auto& entry : std::filesystem::directory_iterator(path))
|
||||||
|
{
|
||||||
|
if (std::filesystem::is_regular_file(entry) && entry.path().extension() == extension)
|
||||||
|
{
|
||||||
|
paths.push_back(entry.path());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return paths;
|
||||||
|
}
|
13
src/core/file_utilities/Directory.h
Normal file
13
src/core/file_utilities/Directory.h
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
|
using Path = std::filesystem::path;
|
||||||
|
|
||||||
|
class Directory
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
static std::vector<Path> getFilesWithExtension(const Path& path, const std::string& extension);
|
||||||
|
};
|
Loading…
Reference in a new issue