Skip to content

Commit

Permalink
Merge pull request #59 from abap34/dev
Browse files Browse the repository at this point in the history
テンプレートをユーザが指定できるようにした
  • Loading branch information
abap34 authored Mar 2, 2024
2 parents af27e03 + 6f386a9 commit e3cf508
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 5 deletions.
8 changes: 8 additions & 0 deletions src/almo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ void help(bool err) {
std::cerr << "使用法: almo <入力> [オプション]" << std::endl;
std::cerr << "オプション:" << std::endl;
std::cerr << " -o <出力> 出力ファイル名を指定します。 指定しない場合標準出力に出力されます。" << std::endl;
std::cerr << " -b <テンプレート> テンプレートファイルを指定します。 " << std::endl;
std::cerr << " -t <テーマ> テーマを指定します。デフォルトは light です。" << std::endl;
std::cerr << " -c <CSS> CSSファイルを指定します。デフォルトは テーマに付属するものが使用されます。" << std::endl;
std::cerr << " -e <テーマ> エディタのテーマを指定します。デフォルトは です。" << std::endl;
Expand All @@ -21,6 +22,7 @@ void help(bool err) {
std::cout << "使用法: almo <入力> [オプション]" << std::endl;
std::cout << "オプション:" << std::endl;
std::cout << " -o <出力> 出力ファイル名を指定します。 指定しない場合標準出力に出力されます。" << std::endl;
std::cout << " -b <テンプレート> テンプレートファイルを指定します。 " << std::endl;
std::cout << " -t <テーマ> テーマを指定します。デフォルトは light です。" << std::endl;
std::cout << " -c <CSS> CSSファイルを指定します。デフォルトは テーマに付属するものが使用されます。" << std::endl;
std::cout << " -e <テーマ> エディタのテーマを指定します。デフォルトは です。" << std::endl;
Expand All @@ -33,6 +35,7 @@ void help(bool err) {

int main(int argc, char* argv[]) {
// コマンドライン引数のデフォルト値を設定
std::string template_file = "__default__";
std::string theme = "light";
std::string css_setting = "__default__";
bool debug = false;
Expand All @@ -41,6 +44,7 @@ int main(int argc, char* argv[]) {
bool plot_graph = false;
std::string out_path = "__stdout__";


if (argc < 2) {
std::cerr << "コマンドライン引数が不足しています。" << std::endl;
help(true);
Expand All @@ -61,6 +65,9 @@ int main(int argc, char* argv[]) {
if (argv[i][1] == 'o') {
out_path = argv[i + 1];
}
else if (argv[i][1] == 'b') {
template_file = argv[i + 1];
}
else if (argv[i][1] == 't') {
theme = argv[i + 1];
}
Expand Down Expand Up @@ -122,6 +129,7 @@ int main(int argc, char* argv[]) {
auto [meta_data, ast] = almo::parse_md_file(argv[1]);

// コマンドライン引数を meta_data に追加
meta_data["template_file"] = template_file;
meta_data["theme"] = theme;
meta_data["out_path"] = out_path;
meta_data["css_setting"] = css_setting;
Expand Down
19 changes: 14 additions & 5 deletions src/render.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,29 @@ namespace almo {
;


std::string load_html_template(std::string css_setting) {
std::string load_html_template(std::string html_path, std::string css_setting) {
std::string html;

if (html_path == "__default__") {
html = TEMPLATE;
}
else {
html = join(read_file(html_path), "\n");
}

std::string result;
if (css_setting == "light") {
std::string css = "<style>" + LIGHT_THEME + "</style>";
result = std::regex_replace(TEMPLATE, std::regex("\\{\\{style\\}\\}"), css);
result = std::regex_replace(html, std::regex("\\{\\{style\\}\\}"), css);
}
else if (css_setting == "dark") {
std::string css = "<style>" + DARK_THEME + "</style>";
result = std::regex_replace(TEMPLATE, std::regex("\\{\\{style\\}\\}"), css);
result = std::regex_replace(html, std::regex("\\{\\{style\\}\\}"), css);
}
else if (css_setting.ends_with(".css")) {
std::string css = "<style>" + join(read_file(css_setting), "\n") + "</style>";

result = std::regex_replace(TEMPLATE, std::regex("\\{\\{style\\}\\}"), css);
result = std::regex_replace(html, std::regex("\\{\\{style\\}\\}"), css);
}
else {
throw InvalidCommandLineArgumentsError("不正なCSSの設定です。 `light`, `dark` もしくは `.css` で終了するファイル名を指定してください。");
Expand Down Expand Up @@ -80,7 +89,7 @@ namespace almo {

std::string render(Block ast, std::map<std::string, std::string> meta_data) {

std::string html_template = load_html_template(meta_data["css_setting"]);
std::string html_template = load_html_template(meta_data["template_file"], meta_data["css_setting"]);

std::string content = ast.render();

Expand Down

0 comments on commit e3cf508

Please sign in to comment.