Compare commits
2 commits
3e56c1e557
...
6dbedc5eb6
Author | SHA1 | Date | |
---|---|---|---|
|
6dbedc5eb6 | ||
|
5928661d90 |
|
@ -1,15 +1,25 @@
|
||||||
use serde::Deserialize;
|
use serde::{Deserialize,Serialize};
|
||||||
use std::fs::read_to_string;
|
use std::fs::read_to_string;
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize,Serialize,Debug)]
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
pub output_dir: String,
|
pub output_dir: String,
|
||||||
pub src_dir: String,
|
pub src_dir: String,
|
||||||
pub templates_dir: String,
|
pub templates_dir: String,
|
||||||
pub emoji_web_directory: Option<String>,
|
pub emoji_config: Option<EmojiConfig>,
|
||||||
pub emoji_local_directory: Option<String>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize,Serialize,Debug)]
|
||||||
|
pub struct EmojiConfig {
|
||||||
|
pub emoji_web_directory: String,
|
||||||
|
pub emoji_local_directory: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for Config {
|
||||||
|
fn default() -> Self {
|
||||||
|
Config { output_dir: "output".to_string() , src_dir: "md_src".to_string(), templates_dir: "templates".to_string(), emoji_config: None }
|
||||||
|
}
|
||||||
|
}
|
||||||
pub fn read_config() -> Config {
|
pub fn read_config() -> Config {
|
||||||
let config_string = read_to_string("mlem.toml").expect("mlem.toml config not found");
|
let config_string = read_to_string("mlem.toml").expect("mlem.toml config not found");
|
||||||
toml::from_str(&config_string).unwrap()
|
toml::from_str(&config_string).unwrap()
|
||||||
|
|
12
src/emoji.rs
12
src/emoji.rs
|
@ -1,25 +1,27 @@
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use std::{ffi::OsString, fs::read_dir};
|
use std::{ffi::OsString, fs::read_dir};
|
||||||
|
|
||||||
|
use crate::config;
|
||||||
pub fn emoji_pass(
|
pub fn emoji_pass(
|
||||||
markdown: &str,
|
markdown: &str,
|
||||||
emoji_web_directory: &Option<String>,
|
emoji_config: &Option<config::EmojiConfig>,
|
||||||
emoji_local_directory: &Option<String>,
|
|
||||||
) -> String {
|
) -> String {
|
||||||
if emoji_web_directory.is_none() | emoji_local_directory.is_none() {
|
if emoji_config.is_none() {
|
||||||
return markdown.to_string();
|
return markdown.to_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut markdown = markdown.to_owned();
|
let mut markdown = markdown.to_owned();
|
||||||
let re_emojis = Regex::new(r":\w+:").unwrap();
|
let re_emojis = Regex::new(r":\w+:").unwrap();
|
||||||
|
|
||||||
for emoji in re_emojis.find_iter(&markdown.clone()) {
|
for emoji in re_emojis.find_iter(&markdown.clone()) {
|
||||||
let emoji_file_name =
|
let emoji_file_name =
|
||||||
get_emoji_file_name(&get_emoji_name(emoji.as_str()), &emoji_local_directory.as_ref().unwrap());
|
get_emoji_file_name(&get_emoji_name(emoji.as_str()), &emoji_config.as_ref().unwrap().emoji_local_directory);
|
||||||
if emoji_file_name.is_none() {
|
if emoji_file_name.is_none() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let html_string = format!(
|
let html_string = format!(
|
||||||
"<img class=\"emoji\" src=\"{}/{}\"><img>",
|
"<img class=\"emoji\" src=\"{}/{}\"><img>",
|
||||||
emoji_web_directory.as_ref().unwrap(),
|
emoji_config.as_ref().unwrap().emoji_web_directory,
|
||||||
emoji_file_name.unwrap().to_str().unwrap()
|
emoji_file_name.unwrap().to_str().unwrap()
|
||||||
);
|
);
|
||||||
markdown = markdown.replacen(emoji.as_str(), &html_string, 1);
|
markdown = markdown.replacen(emoji.as_str(), &html_string, 1);
|
||||||
|
|
30
src/main.rs
30
src/main.rs
|
@ -3,8 +3,22 @@ pub mod config;
|
||||||
pub mod emoji;
|
pub mod emoji;
|
||||||
pub mod index;
|
pub mod index;
|
||||||
use mlem::*;
|
use mlem::*;
|
||||||
|
use std::env;
|
||||||
|
|
||||||
fn main() {
|
fn main(){
|
||||||
|
let args: Vec<String> = env::args().collect();
|
||||||
|
|
||||||
|
if args.len() == 1 {
|
||||||
|
generate();
|
||||||
|
} else if args[1] == "create" {
|
||||||
|
create_default_env()
|
||||||
|
} else {
|
||||||
|
eprintln!("Option not recognized");
|
||||||
|
std::process::exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn generate() {
|
||||||
let config = config::read_config();
|
let config = config::read_config();
|
||||||
let raw_files = read_src_files(&config.src_dir);
|
let raw_files = read_src_files(&config.src_dir);
|
||||||
let mut post_index: Vec<index::BlogPost> = Vec::new();
|
let mut post_index: Vec<index::BlogPost> = Vec::new();
|
||||||
|
@ -13,8 +27,7 @@ fn main() {
|
||||||
let mut markdown = read_to_string(file.path).expect("File does not exist");
|
let mut markdown = read_to_string(file.path).expect("File does not exist");
|
||||||
markdown = emoji::emoji_pass(
|
markdown = emoji::emoji_pass(
|
||||||
&markdown,
|
&markdown,
|
||||||
&config.emoji_web_directory,
|
&config.emoji_config,
|
||||||
&config.emoji_local_directory,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let (html, index_content) = generate_blog_entry(markdown, &config.templates_dir);
|
let (html, index_content) = generate_blog_entry(markdown, &config.templates_dir);
|
||||||
|
@ -37,3 +50,14 @@ fn main() {
|
||||||
std::fs::write(format!("{}/index.html", config.output_dir), index)
|
std::fs::write(format!("{}/index.html", config.output_dir), index)
|
||||||
.unwrap_or_else(|_| panic!("Error writing index"));
|
.unwrap_or_else(|_| panic!("Error writing index"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn create_default_env() {
|
||||||
|
println!("Writing a default mlem.toml");
|
||||||
|
let config = config::Config::default();
|
||||||
|
let toml_config = toml::to_string(&config).unwrap();
|
||||||
|
std::fs::write("mlem.toml", toml_config).unwrap();
|
||||||
|
println!("Creating default directorys");
|
||||||
|
std::fs::create_dir(config.output_dir).unwrap();
|
||||||
|
std::fs::create_dir(config.src_dir).unwrap();
|
||||||
|
std::fs::create_dir(config.templates_dir).unwrap();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue